Orginal Beitrag “Power Query Enter Data Explained” von Nolock
Es gibt viele Dinge, die Sie oft tun, ohne zu wissen, wie sie funktionieren. Sie funktionieren einfach und das ist genug. Aber nicht heute. In diesem Beitrag möchte wir auf eine Power Query-Abfrage eingehen, die beim Erstellen einer neuen Tabelle über die Schaltfläche Daten eingeben automatisch generiert wird.
Der Code in Power Query sieht wie folgt aus.
Die Schönheit des Codes kommt zum Vorschein, wenn man ihn richtig formatiert.
let
Quelle =
Table.FromRows(
Json.Document(
Binary.Decompress(
Binary.FromText(
“i45WikrNyUnVNdQ1VNKBs42Q2MZKsTowVUZIqoyQVBmBVMUCAA==”,
BinaryEncoding.Base64
),
Compression.Deflate
)
),
let
_t = ((type text) meta [Serialized.Text = true])
in
type table [Spalte1 = _t, Spate2 = _t, Spalte3 = _t]
),
#”Geänderter Typ” = Table.TransformColumnTypes(Quelle,
{{“Spalte1”, type text},
{“Spate2”, type text},
{“Spalte3”, type text}})
in
#”Geänderter Typ”
Lassen Sie uns den Code so umschreiben, dass er nur einen Ausdruck pro Schritt enthält.
let
Base64EncodedBinary = “i45WikrNyUnVNdQ1VNKBs42Q2MZKsTowVUZIqoyQVBmBVMUCAA==”,
BinaryFromText = Binary.FromText (Base64EncodedBinary, BinaryEncoding.Base64),
DecompressBinary = Binary.Decompress (BinaryFromText, Compression.Deflate),
JsonDocument = Json.Document (DecompressBinary),
TableFromRows =
Table.FromRows (
JsonDocument,
let
_t = ((type text) meta [Serialized.Text = true])
in
type table [Spalte1 = _t, Spate2 = _t, Spalte3 = _t]
),
#”Geänderter Typ” = Table.TransformColumnTypes(TableFromRows,
{{“Spalte1”, type text},
{“Spate2”, type text},
{“Spalte3”, type text}})
in
#”Geänderter Typ”
Im ersten Schritt haben wir einen Base64-codierten String. Ist er in eine für den Menschen lesbare Zeichenfolge umwandelbar? Nicht wirklich – wie Sie im folgenden Screenshot sehen können. Es sind Binärdaten, die Base64-codiert sind.
Im nächsten Schritt wird aus dieser codierten Zeichenfolge eine Binärdatei erstellt. Die dann mit der Funktion Binary.Decompress dekomprimiert wird. Die Funktion benötigt einen Binärwert und einen Komprimierungstyp. In diesem Fall wird der Komprimierungstyp Deflate verwendet.
Bevor wir fortfahren, möchten wir die dekomprimierten Daten betrachten. Mit der Funktion Text.FromBinary können wir die Daten in einen Text konvertieren.
Das Ergebnis ist eine Liste von Listen, wobei die innere Liste eine Zeile der zukünftigen Tabelle ist. Sie können sie mit dem ersten Screenshot vergleichen. Wichtig ist, dass keine Spaltennamen enthalten sind. Die folgen in einem späteren Schritt.
Der nächste Schritt ist die Funktion Json.Document. Sie konvertiert die dekomprimierten Binärdaten in eine Liste von Listen. Das gleiche, was wir bereits mit Text.FromBinary gesehen haben, aber dieses Mal ist es eine reguläre Liste, nicht nur Text.
Wir sind fast fertig. Der letzte Schritt ist die Funktion Table.FromRows. In der Definition heißt es: “Erstellt eine Tabelle aus der Liste Zeilen, wobei jedes Element der Liste eine innere Liste ist, die die Spaltenwerte für eine einzelne Zeile enthält.” Die Funktion hat einen optionalen Parameter, mit dem eine Liste von Spaltennamen angegeben werden kann.
Dies erfolgt im generierten Code, über diese 4 Zeilen.
let
_t = ((type text) meta [Serialized.Text = true])
in
type table [Spalte1 = _t, Spate2 = _t, Spalte3 = _t]
In der vierten Zeile haben wir eine Tabelle mit 3 Spalten mit den Namen Spalte1, Spalte2 und Spalte3. Alle Spalten haben den gleichen Datentyp _t. _t ist vom Datentyp Text und hat auch den Wert Serialized.Text = true zugeordnet. Leider ist die Verwendung dieser Metadaten nicht dokumentiert.
Quelle: https://community.powerbi.com/t5/Community-Blog/Power-Query-Enter-Data-Explained/ba-p/796102