Jede:r Power BI Entwickler:in kennt das Problem: Anforderungen werden überarbeitet und komplexer, die zusätzlichen Berechnungsschritte führen dazu, dass einzelne Berechnungen lange laden und damit die Anwender:innen beeinträchtigt werden. Welche Tipps sollten bei der Erweiterung des Datenmodells mittels DAX-Code beachtet werden?
Welche Auswirkungen nicht performant designte DAX-Abfragen haben, sehen wir am Beispiel der Vermeidung von Iteratoren. Wir verwenden zur Veranschaulichung das AdventureWorks Power BI Dataset.
Wir erzeugen zwei Measures mit derselben Funktion.
Sales_fast = SUM(Sales[Sales Amount])
Sales_Slow =
SUMX(
Sales,
CALCULATE(
SUM(Sales[Sales Amount]),
FILTER(
ALL(Sales),
Sales[SalesOrderLineKey] = EARLIER(Sales[SalesOrderLineKey])
)
)
)
Das Ergebnis dieser Measures ist ident:

Wenn wir mittels der Leistungsanalyse die Ergebnisse berechnen lassen, sehen wir aber deutliche Unterschiede:

Beim Einfügen der Abfragen im empfehlenswerten 3rd Party Tool DAX Studio, Aktivierung der Server Timings

und anschließendem Ausführen der Abfragen, sehen wir, dass sowohl die FormelEngine (FE) als auch die Storage Engine (SE) beim Auswerten des Measures “Sales Slow” sehr lange brauchen, um einen Query Plan zu erstellen und die Berechnung durchzuführen.

Das Ergebnis der Abfrage “Sales_Fast” wiederum ist praktisch augenblicklich vorhanden.

Bei Performanceproblemen von Measures, die Iteratoren verwenden, kann also ein Umwandeln des Measures zu massiven Performanceverbesserungen führen.
These Related Stories