Die Berechnung der Anzahl eindeutiger Werte in DAX mit DISTINCTCOUNT, kann je nach Daten zu Performanceeinbußen führen. Hier kann die alternative Berechnung über SUMX und VALUES einen massiven Leistungsschub geben.
Im aktuellen Guy in a Cube Youtube-Video „Debugging a slow Power BI report with Phil Seamark„, wird eine DISTINCTCOUNT Alternative mit SUMX und VALUES gezeigt. Im Video wird wie bereits im Beitrag „Eine umfassende Anleitung zur Leistungsoptimierung in Power BI“ beschrieben, mit dem Power BI Performance Analyser und DAX Studio, die Optimierung der Modellberechnungen analysiert.
Als Problem wird die hohe Anzahl an Abfragen, auf die Storage Engine (SE) identifiziert, die durch die Verwendung der DISTINCTCOUNT Funktion hervorgerufen wird.
DISTINCTCOUNT(Sales[CustomerKey])
Die Statistische DAX Funktion DISTINCTCOUNT zählt die Anzahl eindeutiger Werte in einer Spalte.
Phil Seamark schlägt hier einen alternative Berechnung mit SUMX und VALUES vor.
SUMX(VALUES(Sales[CustomerKey]),1)
Die DAX Funktion VALUES gibt eine einspaltige Tabelle zurück, die die eindeutigen Werte aus der angegebenen Spalte enthält. Anschließend iteriert die Funktion SUMX über die Ergebnistabelle und Summiert für jede Zeile den Wert 1.
In diesem Fall reduziert sich die Anzahl der Storage Engine Abfragen auf ca. 1/8 und die Abfragezeit auf ca. 1/10.
Das Resultat hängt immer von den Daten ab und ist kein Allheilmittel, dennoch wird auf diesem Blog https://jlsql.blog/2018/02/06/sumx-vs-distinct-count/ von einem ähnlichen Fall berichtet, mit einer Verbesserung der Abfragezeit von 1 Minute 24 Sekunden auf 6 Sekunden.
Quellen:
Marco Russo analysiert in seinem aktuellen Artikel „Analyzing DISTINCTCOUNT performance in DAX“ dieses Verhalten sehr detailliert.
https://www.sqlbi.com/articles/analyzing-distinctcount-performance-in-dax/