Power BI DAX Spalte vs. Power Query “M” Spalte

Im vorliegenden Blog untersuche ich den Umstand, wie sich eine Tabellenspalte auswirkt im Vergleich zu einer Spalte die mittels Query „M“ Language erstellt wurde. Die Ausgangslage ist die Frage ob Query Language „M“ die bessere Vorgehensweise ggü. DAX-Formeln ist.

Im letzten Blog https://blog.ppedv.de/post/Kalender-Dimension-mit-Query-Language-M-vs-DAX-erstellen habe ich DAX und „M“ auf Basis einer Tabelle verglichen, herausgekommen ist, dass die DAX Tabelle deutlich größer gewesen ist als mittels Query „M“ erstellt. Das kann u.U. verhängnisvoll sein, wenn das Dataset ohnehin groß ist und ggf. überschreitet es die von Microsoft vorgegebenen Grenzwerte. Diese sind bei der Lizensierung Power BI Pro 1 GB pro Dataset. Also Speicher zu sparen ist grundsätzlich sehr angebracht.

Im vorliegenden Beispiel wird deutlich, dass die Erstellung von Spalten sogar in Bezug auf den Speicherverbrauch noch erheblicher ist.

Per DAX Formel und Query „M“ wird im Grunde die gleiche berechnete Spalte erstellt.

Die Formel per DAX schaut wie folgt aus:

PreisbereichDAX = Switch(TRUE();[UnitPrice] <=10;"niedrig";[UnitPrice] <=20; "mittel";"hoch")

Mit Query „M“ wurde das Gleiche erstellt, lediglich mit dem Unterschied, dass hier die Funktion „IF“ Verwendung fand, da Query „M“ die Funktion Switch nicht kennt.

Die Spalte wird nun in Power Query mittels „M“ erstellt:

clip_image002

Die zwei neuen Spalten werden nun im DAX Studio unter die Lupe genommen:

clip_image004

Fazit: Was bei diesem Beispiel sehr deutlich wird ist, dass eine DAX-Formel für eine Spalte erheblich mehr Kosten hinsichtlich Speicher verursacht als „M“. Wie auf dem Screenshot zu sehen ist, belegt die erstellte Spalte mit DAX (PreisbereichDAX) über 1 MB, dagegen die Spalte mit „M“ (Preisbereich) 17 KB.

Berechnete Spalten sind mit DAX Formeln demnach sehr viel teurer was den Speicherverbrauch angeht. Das ist sicher bei kleinen Datasets nicht wirklich ein Problem jedoch bei großen Datenmengen schon. 

Kommentare sind geschlossen