Zum Hauptinhalt springen

Dieser Artikel ist eine Fortsetzung der letzten Woche. Ich empfehle, dass Sie zurückgehen und den Artikel zuerst lesen, wenn Sie ihn verpasst haben. Kurz gesagt, ich möchte eine Kennzahl (keine berechnete Spalte) schreiben, die den Median der Produktverkäufe ohne Produkte mit Leerzeichen (keine Verkäufe) zurückgibt. Wie ich letzte Woche gezeigt habe, ist dies mit einer berechneten Spalte relativ einfach. Hier ist es wieder. Denken Sie daran, dass das Schreiben der berechneten Spalten eine gute Möglichkeit ist, das zu lösende Problem zu visualisieren. Es ist kein guter Weg, um die meisten Probleme zu lösen (einige ja, die meisten nein).

Beispieldaten: Adventure Works Vereinfachtes Sternschema

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

Dieses Modell verfügt über eine Produkttabelle und eine Verkaufstabelle, es sind jedoch keine Informationen gespeichert, die den Gesamtumsatz für jedes Produkt angeben.

Berechnen Sie den Median mit einer berechneten Spalte

Die Berechnung des Medians ist mit einer berechneten Spalte ziemlich einfach. Ich habe zuerst eine berechnete Spalte in der Adventure Works-Produkttabelle erstellt, wie unten gezeigt, und mich nur auf die Kennzahl [Gesamtumsatz] in der neuen Spalte bezogen.

Ich habe diese Spalte als Karte zu meinem Bericht hinzugefügt und die Aggregation auf MITTEL gesetzt. Das habe ich bekommen.

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

Es stellt sich heraus, dass die automatische visuelle Darstellung die BLANKS für Sie filtert, wenn Sie eine Spalte auf einer Karte in Power BI verwenden und den Mittelwert ermitteln, unabhängig davon, ob Sie dies möchten oder nicht. Ich konnte keine Möglichkeit sehen, dieses Verhalten zu ändern.

So beheben Sie dieses Problem mit Measure und DAX Studio

Das Timing dieses Artikels war perfekt, da DAX Studio kürzlich über die Symbolleiste für externe Tools in Power BI Desktop integriert wurde. Ich habe in der Vergangenheit viele Beispiele gegeben, wie Sie Wert aus DAX Studio ziehen können, und dies ist ein weiterer ähnlicher Artikel.

Letzte Woche wurde mir klar, dass ich ein paar Dinge tun müsste, um dieses Problem in einer Maßnahme zu lösen. Ich müsste

  • Erstellen Sie eine virtuelle Tabelle
  • Generieren Sie die Verkaufsspalte
  • Filtern Sie die Leerzeichen
  • Dann machen Sie die Berechnung.

Auf den ersten Blick mag dies überwältigend erscheinen, aber wenn Sie einen Schritt zurücktreten und jeden Schritt Schritt für Schritt ausführen, können Sie dies tun. So habe ich es gemacht.

Öffnen Sie DAX Studio

Ich habe DAX Studio aktiviert, indem ich in der externen Symbolleiste von dort aus gestartet habe (Informationen zur Installation von DAX Studio finden Sie im Artikel der letzten Woche). Einer der Hauptunterschiede zwischen der Verwendung von DAX Studio und dem Schreiben von DAX-Kennzahlen besteht darin, dass DAX Studio eine Tabelle und eine Kennzahl einen einzelnen Skalarwert zurückgeben MUSS. Dies ist der genaue Grund, warum ich DAX Studio verwende, um dieses Problem zu lösen. Die obigen Schritte 1, 2 und 3 sind alle Schritte in der Tabellenfunktion. Ich möchte SEHEN, was ich tue, DANN gehe ich zurück und gehe zur endgültigen Berechnung. Der Versuch, dies konzeptionell zu tun (zumindest zu Beginn), ist nahezu unmöglich. Tun Sie sich selbst einen Gefallen und aktivieren Sie DAX Studio, um das Problem zu beheben.

Ich habe meine erste DAX-Abfrage im oberen Bereich (1 unten) geschrieben und auf Ausführen geklickt. Die Ergebnisse sind unten gezeigt (2). Beachten Sie, dass die Ergebnisse eine Tabelle sind.

Jede DAX-Abfrage muss bei Verwendung von DAX Studio mit der Anweisung EVALUATE beginnen. Dies ist nicht der Fall, wenn Sie die Schaltfläche Neue Tabelle in DAX verwenden oder die DAX-Abfrage in eine DAX-Kennzahl einbetten. Wenn Sie mehr über DAX-Abfragen erfahren möchten, habe ich eine Reihe von 4 Artikeln, die hier beginnen.

Wie Sie in 2 oben sehen können, hat diese Abfrage die gesamte Tabelle zurückgegeben. Jetzt versuche ich für diese Übung, eine Tabelle zu erhalten, die den Gesamtumsatz für jedes Produkt enthält, das einen Umsatz hat. Ein Prinzip beim Schreiben solcher Abfragen besteht darin, keine Daten zurückzugeben, die Sie nicht benötigen. Die Produkttabelle ist eine Dimensionstabelle. Dies bedeutet, dass die ProductKey-Spalte ein Primärschlüssel ist. Ich kann das gleiche Endergebnis erzielen, indem ich ProductKey anstelle der gesamten Produkttabelle verwende. Ich habe die Abfrage geändert und erneut ausgeführt. Das habe ich bekommen. Eine einzelne Spalte, die alle Produktschlüssel enthält.

Fügen Sie eine "berechnete Spalte" hinzu

Im Artikel der letzten Woche habe ich Ihnen gezeigt, wie Sie zuerst eine berechnete Spalte erstellen, damit Sie sehen können, was Sie getan haben, und dann mit einer Kennzahl fortfahren können. Wenn Sie DAX-Abfragen schreiben, verwenden Sie einen etwas anderen Ansatz. Es gibt eine spezielle Funktion namens ADDCOLUMNS, mit der einer Tabelle eine neue Spalte hinzugefügt werden kann.

Wie Sie oben sehen können, habe ich die ursprüngliche Abfrage (Zeile 3) in eine ADDCOLUMNS-Funktion eingeschlossen. In Zeile 4 wurde der Name der neuen Spalte sowie der Wert angegeben, der der Spalte hinzugefügt werden soll. Sehen Sie die Ähnlichkeiten zwischen dem Schreiben einer berechneten Spalte und der Funktion ADDCOLUMNS?

Filtern Sie die Leerzeichen

Sehen Sie, wie viel einfacher es ist, dies zu tun, wenn Sie können SEHEN Was ist los? Ich kann all diese Lücken sehen und ich weiß, dass ich sie loswerden muss. Hier ist DAX als Abfragesprache wirklich mächtig. Der obige Code in den Zeilen 2 bis 5 gibt eine TABELLE zurück. Diese Tabelle kann wie folgt als erster Parameter einer FILTER-Funktion verwendet werden.

Beachten Sie, dass die obige FILTER-Funktion eine Tabelle als ersten Parameter (Zeilen 3-6) verwendet und dann der zweite Parameter (Zeile 7) die Nullen herausfiltert. Nullen, Leerzeichen, Nullen, für DAX ist alles gleich. Beachten Sie auch hier, dass Zeile 7 auf die in Zeile 5 erstellte Spalte verweist. Wenn Sie nun mit den Best Practices vertraut sind, wissen Sie, dass es nicht empfehlenswert ist, auf eine Spalte zu verweisen, es sei denn, Sie geben die Tabelle an, dh Tabelle [Spalte ]. Wenn Sie jedoch eine Spalte mit ADDCOLUMNS in einer DAX-Abfrage erstellen, können Sie nicht auf den Tabellennamen verweisen (da die Tabelle keinen Namen hat). Aus diesem Grund sieht es so aus, als würde Zeile 7 nach der Kennzahl [Vertrieb] filtern, aber es ist tatsächlich die Spalte [Vertrieb].

Die Tabelle im obigen Ergebnisfenster enthält nun den Gesamtumsatz für jedes Produkt mit einem Umsatz> 0.

Nehmen Sie das durchschnittliche Ergebnis

Wenn ich jetzt versuche, die obige Tabelle in ein MEDIANX zu wickeln, bekomme ich Folgendes.


Bitte beachten Sie, dass ich Fehler erhalte. Warum? Erinnerst du dich, was ich am Anfang gesagt habe? DAX Studio MUSS eine Tabelle zurückgeben. MEDIANX gibt einen Wert zurück, sodass Sie ihn in DAX Studio nicht auf diese Weise verwenden können.

Lockige Hosenträger zur Rettung! {}

Wie ich letzte Woche erwähnt habe, können Sie geschweifte Klammern verwenden, um einen Wert in eine Tabelle umzuwandeln. Also habe ich das geschrieben.

Und DAX Studio hat eine einspaltige, einzeilige Tabelle zurückgegeben, die die Medianantwort enthält, nach der ich suche. Sie mussten lediglich die Formel (Zeilen 2-11) kopieren und in eine Kennzahl in Power BI einfügen. Hier ist die letzte Maßnahme

Produktverkaufsmedian = MEDIANX (FILTER (ADDCOLUMNS (ALL (Produkte [ProductKey]), "Verkäufe", [Gesamtverkäufe]), [Verkäufe]> 0), [Verkäufe])

Das ist mein Punkt. Versuchen Sie, die obige Formel in den ersten zwei Jahren, in denen Sie DAX geschrieben haben, ohne DAX Studio zu schreiben. Ich sage nicht, dass es keine Übermenschen gibt, die das können, ich bin mir sicher, dass es solche gibt. Aber tu dir einen Gefallen. Brechen Sie das Problem in Teile und visualisieren Sie jeden Schritt auf der Reise, damit Sie es auch können.