M-Code teilen in PowerBI und Power Query
Original-Post von The BIccountant Imke Feldmann
Einer der Vorteile von M-Code ist, dass man ihn in Textform teilen kann und er sofort auf jedem anderen Computer läuft – ohne, dass man eine Datei verschicken muss. Vorausgesetzt, man schickt die Daten mit dem Code mit, wie in diesem Beispiel auf dem BIccountant-Blog. Es wäre jedoch etwas mühsam, die Daten manuell einzutippen – lassen wir es also M automatisch für uns machen:
1) Automatisch eine Liste in Textform übertragen um den M-Code zu teilen
let
qList= {"This", "is", "a", "pretty", "short", "list"},
Source = qList,
CoreString = Text.Combine(List.Transform(Source, each Text.From(_)), """, """),
FullString = "= {"""& CoreString &"""}"
in
FullString
2) Automatisch eine Tabelle in Textform übertragen um den M-Code zu teilen
let
qTable= Table.PromoteHeaders(Table.FromColumns({ {"Column1" ,"This" ,"an" ,"shorter"}, {"Column2" ,"is" ,"even" ,"table"} })),
Source = qTable,
DemoteHeaders = Table.DemoteHeaders(Source),
ListOfColumns = Table.ToColumns(DemoteHeaders),
ConvertToTable = Table.FromList(ListOfColumns, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
CoreString = Table.AddColumn(ConvertToTable, "Custom", each Text.Combine(List.Transform([Column1], each Text.From(_)),""" ,""")),
FullString = "= Table.PromoteHeaders(Table.FromColumns({ {"""& Text.Combine(CoreString[Custom], """}, {""")&"""} })),"
in
FullString
Die Methoden, die man dafür benutzt, sind ziemlich einfach (und sehr ähnlich wie die, die ich im Expression.Evaluate-Post erwähnt habe): Überführen Sie Ihren „echten” Inhalt in eine Liste oder eine Liste mit Listen (für die Tabelle). Dann kombinieren Sie die Elemente mit Trennzeichen und erhalten dadurch den gewünschten Textausdruck:
“, “
als Separatoren für Text, und
“}, {“
als Separatoren für Listen und Spalten.
So bekommen Sie folgendes als Textausdruck zurück:
Im letzten Schritt bauen wir noch eine Klammer, die die äußeren Elemente des Ausdrucks liefert:
Für die Liste ist das ziemlich einfach: {“
Weil Anführungszeichen aber auch als Markierung für Text benutzt werden, brauchen wir drei davon, damit eins dann in der Ausgabe tatsächlich stehen bleibt.
Die Tabelle ist eine etwas aufwändigere: Hier kehren wir praktisch die Schritte um, die die Tabelle in Text umgewandelt haben:
Table.DemoteHeaders -> Table.PromoteHeaders
Table.ToColumns -> Table.FromColumns
Der Rest ist ähnlich zur Liste – wir müssen nur zusätzlich noch die Spalten mit “}, {“
trennen.
Was noch beachtet werden sollte: Wenn Ihr Datensatz etwas größer ist, ist es vermutlich besser einen Filter einzubauen bevor Sie transformieren, aber davon abgesehen: Los geht’s!
Geschrieben von Imke Feldmann