Zum Hauptinhalt springen

Ich wollte diesen Blog betiteln "MEDIANX and X Features", aber es klang zu sehr nach einer Band aus den 2030er JahrenDeshalb habe ich mich für MEDIANX-Retouren im DAX entschieden. Der Artikel behandelt jedoch mehr als nur MEDIANX und das leere „Problem“. Aber zuerst einige Hintergrundinformationen.

Hat einem Kunden diese Woche bei einem seltsamen Problem geholfen - eine Maßnahme gab BLANK zurück, wenn sie intuitiv einen Wert hätte zurückgeben sollen. Es gab viele bewegliche Teile des eigentlichen Problems und wie ich es gelöst habe, und ich werde nicht auf all diese Details eingehen. Ich werde jedoch meine Erfahrungen und das, was ich diese Woche gelernt habe, nutzen, um einige Ideen für Sie in diesem Artikel zu teilen:

  • Was macht eine X-Funktion?
  • Erstellen und Verwenden von Testtabellen in DAX
  • MEDIANX gegen AVERAGEX
  • Die milde Art und Weise, wie DAX die Definition von BLANK bewertet

Wenn Ihre Augen jetzt nicht glasig sind, lesen Sie weiter.

Was macht eine X-Funktion?

Eine X-Funktion ist eine Klasse von Funktionen in DAX, die auch als "Iteratoren" bezeichnet werden (beachten Sie, dass es auch andere iterative Funktionen gibt, wie z. B. FILTER, aber ich spreche hier nur von X-Funktionen). Es ist ein großartiges Thema für sich und dieser Artikel wird nicht die endgültige Anleitung für X-Funktionen sein. Aber ich werde Ihnen ein paar Ideen geben.

Ich habe in den letzten 6 Jahren viel darüber gelernt, wie man Menschen DAX beibringt, und meine Lehrmethoden haben sich in dieser Zeit weiterentwickelt. Ich erinnere mich, dass ich auf dem Microsoft Data Insights Summit mit Will Thompson gern über das Thema "DAX 50 - DAX für den Rest von uns" gesprochen habe. Will sagte mir: "Erwähne das Wort 'Iterator' nicht, da es zu verwirrend ist." Ich war damals nicht mit Will einverstanden, aber sein Kommentar blieb bei mir. Im Laufe der Zeit habe ich die Art und Weise, wie ich DAX unterrichte, geändert. Heutzutage zeige ich Leuten, wie man einer Tabelle eine berechnete Spalte hinzufügt (jeder kann das, es ist so einfach). Dann erkläre ich, dass eine X-Funktion genau dasselbe tut, nur dass Sie die Zwischenergebnisse nicht vor ihren Augen sehen können.

Schauen wir uns zur Verdeutlichung ein Beispiel an.

Beispiel

Für dieses Beispiel verwende ich mein einfaches Standard-Sternschema von Adventure Works.

Aw

Angenommen, ich möchte eine Kennzahl schreiben, die den Medianbetrag für alle Kunden zurückgibt. Das Problem ist, dass ich nicht den Gesamtumsatz für jeden Kunden in meinem Datenmodell habe. Ich habe eine Kundentabelle und eine Verkaufstabelle, aber nirgends sind die Gesamtverkäufe für jeden Kunden.

Jetzt konnte ich den Median des Umsatzes aller Kunden berechnen, indem ich zuerst den Gesamtumsatz jedes Kunden in einer berechneten Spalte in der Kundentabelle berechnete und dann meinem Bericht ein Bild hinzufügte, um den Median wie unten gezeigt zu berechnen.

Maßnahme: Gesamtumsatz = SUMME (Umsatz [ExtendedAmount])
Ich habe eine berechnete Spalte in der Kundentabelle erstellt: Benutzerdefinierte Verkäufe = [Gesamtverkäufe]

Säule

Wie Sie oben sehen können, kann ich jetzt den Gesamtumsatz für jeden Kunden sehen.

Dann mussten Sie nur noch ein Bild zum Berichtsbereich hinzufügen (1 unten), die berechnete Spalte (2) hinzufügen und die Aggregation auf MITTEL (3) setzen.

Messen

Wie Sie im Bild oben sehen können, lautet die Antwort 270,27. Das Problem bei diesem Ansatz ist, dass ich eine berechnete Spalte schreiben musste, um die Antwort zu erhalten. Während es eine Zeit und einen Ort für eine berechnete Spalte gibt, müssen Sie keine berechnete Spalte erstellen, um diese Antwort zu erhalten. Der Punkt, den ich versuche, ist, dass die oben berechnete Spalte für jedermann konzeptionell leicht zu verstehen ist. Es ist einfach zu schreiben, Sie können das Problem Schritt für Schritt lösen, Sie können die Zwischenergebnisse sehen und jeder, der Erfahrung mit Excel hat, kann dies mit sehr wenig Verständnis von DAX tun. Das Verständnis der MEDIANX-Funktion ist viel schwieriger. schwieriger, bis Sie feststellen, dass MEDIANX genau das Gleiche tut wie diese berechnete Spalte.

Hier ist die MEDIANX-Formel.

Medianmaß für Kundenverkäufe = MEDIANX.(Kunden, [Gesamtumsatz])

In der obigen Formel

  • Das X (blau) ist der Indikator dafür, dass es sich um eine X-Funktion handelt. Dies ist der Hinweis darauf, dass dies eine der Funktionen ist, die sich wie eine berechnete Spalte verhält.
  • Die Tabelle (grün) ist die Tabelle, in die Sie Ihre berechnete Spalte geschrieben hätten, wenn Sie dies auf diese Weise getan hätten.
  • Das Maß (orange) ist die Formel in der berechneten Spalte, die Sie geschrieben hätten, wenn Sie es so gemacht hätten.
  • MITTEL (rot) passiert mit den Zahlen am Ende.

Hier ist die Lektion: Eine X-Funktion entspricht genau einer berechneten Spalte. Die einzigen Unterschiede sind, dass 1) Sie nicht können SEHEN Was passiert und 2) speichert die Zeile nach Ergebnissen nirgendwo dauerhaft. Der Berechnungsprozess ist jedoch identisch.

Die Wahrheit ist, dass unter der Haube viel los ist, um dieses Ergebnis zu erzielen. Es ist eine implizite CALCULATE-Funktion verborgen, es gibt einen Zeilenkontext und einen Kontextübergang, aber der Punkt ist, dass es nicht unbedingt erforderlich ist, dass Sie all diese technischen Dinge verstehen, um ein wenig mehr über die Verwendung und das Verständnis von DAX zu lernen. Die Art und Weise, wie ich DAX heutzutage unterrichte, besteht darin, den Leuten zu zeigen, wie man eine berechnete Spalte erstellt, und dann den Leuten zu zeigen, dass das Gleiche (in diesem Fall) mit einem Maß und einer X-Funktion getan werden kann. Die Moral hier ist, wenn Sie es versuchen Um eine Kennzahl zu schreiben, bleiben Sie stecken und wissen, wie man sie als berechnete Spalte ausführt. Erstellen Sie dann zuerst die Spalte und finden Sie dann heraus, wie Sie sie nach dem von mir demonstrierten Prinzip von dort zu einer Kennzahl migrieren können.

Erstellen und Verwenden von Testtabellen in DAX

Kommen wir nun zum Client-Problem zurück: Warum hat MEDIANX ein Leerzeichen zurückgegeben? Mir fiel auf, dass der einfachste Weg, das Geschehen zu visualisieren, darin bestand, eine Tabelle mit Laufzeitwerten mit den Operatoren {} Klammern zu erstellen. Ich habe gelernt, wie nützlich diese Technik ist, wenn ich mir Demos und Posts von zwei wirklich intelligenten DAX-Leuten (Phil Seamark und Owen Auger) ansehe.

Testmaß = MEDIANX.({1,2,3,6,9},[Wert])

Diese Kennzahl funktioniert so, dass das Bit in Klammern (grün) eine Laufzeittabelle generiert. Mit dem orangefarbenen Teil [Wert] kann ich auf die Werte in der einzelnen Spalte der soeben erstellten Tabelle zugreifen. Die roten und blauen Bits sind die gleichen wie zuvor.

Die obige Funktion gab 3 zurück

Also habe ich mich für AVERAGEX entschieden

Für die Aufzeichnung gibt AVERAGEX den Durchschnittswert (Summe geteilt durch die Anzahl) zurück, während MEDIANX den Durchschnittswert zurückgibt. Falls es einen Gleichstand für den Mittelwert gibt (dh eine gerade Anzahl von Werten), ist dies der Mittelwert der 2 Mittelwerte.

Dann habe ich die folgende Testmaßnahme geschrieben.

Dann das

Und dann fiel der Penny auf mich herein. Was ist, wenn ich das geschrieben habe?

Diese Testmessungen haben mir wirklich geholfen zu verstehen, was unter der Haube geschah, und ich hoffe, es hat Ihnen auch geholfen.

Die DAX-Sprache ist sehr verzeihend.

DAX ist eine sehr verzeihende Sprache. In vielen (den meisten) anderen Sprachen ergibt ein Leerzeichen oder eine Null nicht das gleiche Ergebnis wie 0. In der DAX-Sprache wird ein Leerzeichen oder eine Null mit 0 ausgewertet, es sei denn, Sie geben ausdrücklich an, dass dies nicht der Fall ist, indem Sie das neue == verwenden (doppeltes Gleichheitszeichen). Mit anderen Worten, 0 = BLANK () ist TRUE, während 0 == BLANK () falsch ist. Ich nenne das doppelte Gleichheitszeichen "wirklich gleich", aber der offizielle Name ist "streng gleich".

Testmaß = MEDIANX ({BLANK (), BLANK (), BLANK (), 6,9}, [Wert])

In diesem Sinne besteht die oben wiederholte Testmaßnahme darin, die Leerzeichen bei der Medianbewertung so zu bewerten, als wären sie numerisch 0, und am Ende schließlich das native BLANK () zurückzugeben. Der Unterschied zwischen dem Durchschnitt und dem Median besteht natürlich darin, dass der Median die Zahl vom Mittelpunkt zurückgibt. In diesem Fall ist der Mittelpunkt ein Leerzeichen, und daher ist dies das Ergebnis, das zurückgegeben wurde.

Wenn Sie nicht möchten, dass die Leerzeichen als 0 behandelt werden, müssen Sie sie herausfiltern, bevor Sie den Median berechnen.

BLANKS () auf einem MEDIANX ignorieren

Dies stellte sich als etwas komplizierter heraus, als ich dachte. Zuerst brauchte ich eine neue Probe zum Testen. Ich habe eine weitere berechnete Spalte erstellt, diesmal in der Tabelle "Produkte". Ich wusste aus früheren Erfahrungen, dass nicht alle Produkte Verkäufe haben, so dass dies einige Leerzeichen zurückgeben würde. Siehe unten.

Als ich diese Spalte als Karte zu meinem Bericht hinzufügte und die Aggregation auf MITTEL setzte, bekam ich Folgendes.

Als ich die äquivalente Testmaßnahme mit MEDIANX schrieb, bekam ich Folgendes

Ich muss also sagen, dass ich sehr überrascht war, dass meine berechnete Spalte und Messung zu einem anderen Ergebnis geführt haben. Nach ein wenig mehr Tests und Recherchen stellt sich heraus, dass das Bild automatisch die BLANKS herausfiltert, wenn Sie eine Spalte auf einer Karte in Power BI verwenden und den Medianwert ermitteln, ob Sie möchten oder nicht. Ich konnte keine Möglichkeit sehen, dieses Verhalten zu ändern.

Teil 2 nächste Woche

Das Problem von MEDIANX als Maßnahme zu lösen ist etwas schwieriger als mit einer Spalte. Das Problem ist, dass die Spalte nicht vorhanden ist, wenn Sie sie als Kennzahl eingeben. Sie müssen jedoch die Leerzeichen filtern, bevor Sie die Berechnung durchführen. Sie könnten versuchen, eine solche Maßnahme zu schreiben ...

Testmaßnahme 1 = MEDIANX (Produkte, wenn ([Gesamtumsatz] = 0, BLANK (), [Gesamtumsatz]))

Sie erhalten jedoch das gleiche Ergebnis, da eines der Ergebnisse der IF-Anweisung nur noch einmal BLANK () hinzufügt.

Das Schreiben einer Maßnahme hierfür ist an sich schon ein großartiges Thema, und ich werde in meinem nächsten Beitrag nächste Woche erklären, wie Sie DAX Studio (Schritt für Schritt) verwenden können, um ein solches Problem zu lösen.