M-Code teilen in PowerBI und Power Query

M-Code bestehende Tabelle in Textform umwandeln

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:

M-Code CoreString Liste und Tabelle

Textausdrucke um M-Code zu teilen

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