DAX Tupel verstehen - Teil 1 - Einführung, CROSSJOIN- & SUMMARIZECOLUMNS-Funktion

DAX Tupel verstehen - Teil 1 - Einführung, CROSSJOIN- & SUMMARIZECOLUMNS-Funktion

DAX Tupel verstehen - Teil 1 - Einführung, CROSSJOIN- & SUMMARIZECOLUMNS-Funktion

Der erste Artikel dieser Serie führt in die Thematik ein, DAX auf andere Konzepte zu übertragen („Projektion“). Damit sind Mengen-Konzepte, aber auch SQL und Objekt-orientierte Konzepte gemeint.

Der Sinn ist es, hiermit die grundsätzlichen und komplexen Verhaltensweisen von DAX aus der Sicht eines anderen Konzepts transparent zu machen.

Auf einem SQLPASS Event zur Einführung von Power BI und DAX hörte ich vom vortragendem MVP einen Hinweis, dass MDX als Sprache für den Cube von den Anwendern als so schwierig eingestuft wird, dass Microsoft sich entschlossen habe, MDX mit DAX zu ersetzen. In meiner Wahrnehmung ist allerdings DAX nicht unbedingt "einfacher" als MDX, auch nach langjähriger Beschäftigung mit DAX würde ich eher das Gegenteil behaupten.

Tatsache ist: es gibt eine große Anfangshürde bei MDX, die man kaum im Selbststudium überwindet. Hat man diese Hürde aber überwunden, ist die Sprache äußerst plausibel und effektiv anzuwenden. Dagegen scheint DAX schon bei den ersten Versuchen leichter verständlich, aber die Schwierigkeiten werden nach und nach sichtbar. Am Schluss scheint es, als ob man auch bei DAX schwer im Selbststudium zum Ziel kommt.

Gerade BI-Spezialisten erscheint die Sprache DAX inkonsequent, intransparent und es ist gerade für diese professionelle Zielgruppe nicht klar ersichtlich, auf welchem grundlegenden Konzepten DAX beruht. Die Sprache scheint eher aus einem großen Haufen von Regeln zu bestehen und es ist schwierig, die Funktionalität von einem Punkt aus zu betrachten.

Die Erfahrung beim Unterrichten zeigt, dass das Thema DAX im Unterricht schleifenartig vermittelt werden muss, so, wie es auch das Handbuch "The Definitive Guide To DAX" macht. D.h. man kommt immer wieder zu den gleichen Themen zurück, aber bei jeder Runde wird der Stoff weiter vertieft. Dies erweckt bei den Teilnehmern gern den Eindruck, dem Dozenten fehle für den DAX-Stoff ein geeigneter roter Faden "vom Leichten zum Schweren"

Die typische Zielgruppe der PowerUser wie z.B. Finanz-Analysten ist primär an schnellen Ergebnissen interessiert, nicht an den Grundlagen der Sprache. Tatsächlich genügen dieser Zielgruppe häufig einfache Erklärungen, ein Tag Einführung oder YouTube-Videos für die Erstellung einfacher KPIs. Wenn es bei den einfachen Fällen bleibt oder wenn das Layout der Berichte, für die diese KPIs erstellt wurden, nicht verändert wird, sind schnell erworbene Grundlagenkenntnisse tatsächlich der effektive Weg, um schnell KPIs zu entwickeln. Für diese Zielgruppe ist es sinnvoll, nicht den Overhead der Sprach-Grundlagen zu erlernen, um am Schluss nur einfache Fälle zu lösen.

Die Schwierigkeiten beginnen dort, wo die Umstände sich ändern:

  1. Der Anwender nutzt die interaktiven Möglichkeiten eines PowerBI-Berichts, um andere Elemente zu verwenden oder den KPI woanders zu platzieren. Plötzlich zeigt der KPI falsche Werte an.
  2. Die Zielrichtung eines KPIs ändert sich "geringfügig". Beispielswiese möchte der Kunde statt des Vormonat-Vergleichs gern den Vorwochen-Vergleich sehen. Der resultierende DAX-Code kann jetzt alles andere als trivial sein. Ev. kommen jetzt auch Schwächen im Datenmodell zum Vorschein.

Es existieren zwei Annahmen, die durch meine eigenen Erfahrungen mehr als deutlich widerlegt wurden:

  1. Durch Trial und Error kommt man zum Ziel
  2. Man fängt mit einfachen Beispielen an und arbeitet sich allmählich zu dem schwierigen Fällen durch.
Aus meiner jetzigen Perspektive gibt es keine einfachen DAX-Expressions bzw. einfachen DAX-Abfragen. Auch eine einfache DAX-Query muss vollständig in ihrer ganzen Komplexität verstanden sein, damit KPIs unter allen Umständen das erwartete Ergebnis zeigen. Die Funktion "CALCULATE" verbirgt - mehr oder weniger - das ganze Konzept der Sprache DAX. Oder anders ausgedrückt: wer "CALCULATE" verstanden hat, kann DAX-Code entwickeln.

Meine Serie soll dabei helfen, die Grundlagen der Sprache zu verstehen. Dabei greife ich auf verschiedene andere Konzepte zurück, um DAX verständlich zu machen („Projektion“):

  • Mengen-Konzepte. Objekte wie Sets, Tupels, Member und die Operationen auf Sets wie CROSSJOIN, INTERSECT, EXCEPT etc.
  • SQL
  • OOP Pseudo-Code

Bei den Mengen-Konzepten handelt es sich dabei genau um die Konzepte, auf der die Sprache MDX beruht und das Microsoft dem Anwender offensichtlich ersparen möchte. Vermutlich aus diesem Grund werden Sie in der MSDN Online-Hilfe keine Hinweise darauf finden.

Wenn man sich vor Augen hält, dass MDX und DAX auf dem gleichen Backend, der Vertipaq-Engine, arbeiten, so ist klar, dass die Parallelen zu Mengen-Konzepten nicht nur theoretischer Art sind: MDX mit seinen Sets, Tupels und Membern ist quasi die native Sprache für den Cube, sei es in der multidimensionalen oder in der tabularen Ausprägung. DAX dagegen ist eine Sprache, die in MDX übersetzt wird.

Die Serie richtet sich an Anwender, die bereits die ersten Erfahrungen in DAX gesammelt haben und mit den Konzepten "Filter", "Context Transition" und "Filter Propagation" (s. Marco Russo) etwas anfangen können. Vorteilhaft sind darüber hinaus auch fundierte Kenntnisse in SQL und / oder einer Objekt-orientierten Sprache wie z.B. C#. Leser, die Konzepte aus anderen Bereichen als DAX nicht kennen, können die jeweiligen Abschnitte auch überspringen.

Grundoperation CROSSJOIN in der Funktion CROSSJOIN

Der Gedanke des CROSSJOINs besteht darin, jedes Element von Menge 1 mit jedem Element aus Menge 2 zu verknüpfen. Das Beispiel zeigt den CROSSJOIN für zwei 1-dimensionale Sets – ein Entwickler würde sagen „Arrays“ – mit Elementen aus verschiedenen Dimensionen. set1 enthält Buchstaben, set2 enthält Zahlen. Das Ergebnis der Verknüpfung ist ein 2-dimensionales Tupelset. Ein Set wird hier syntaktisch mit „{}“ dargestellt und ein Tupel mit „()“.

set1 = { A, B }
set2 = { 1, 2, 3 }
set3 = set1 CROSSJOIN set2
Inhalt von set3: { (A, 1 ), (A, 2), (A, 3), (B, 1), (B, 2), (B, 3) }

Abbildung 1 - DAX-Beispiel: CROSSJOIN Funktion
Abbildung 1 - DAX-Beispiel: CROSSJOIN Funktion

Die CROSSJOIN-Funktion verhält sich wie in der Theorie erwartet, sie bildet das vollständige kartesische Produkt aus Region und City.

Grundoperation CROSSJOIN in der Funktion SUMMARIZECOLUMNS

Die Syntax von SUMMARIZECOLUMNS lautet:

SUMMARIZECOLUMNS (
- <groupBy_columnName> [, < groupBy_columnName >]…,
- [<filterTable>]…
- [, <name>, <expression>]…)

Nur der erste Argument-Typ ist verpflichtend: Es müssen eine oder mehrere Gruppierungsspalten angegeben werden. Das nächste Beispiel zeigt den Einsatz von SUMMARIZECOLUMNS mit den entsprechenden Beispiel-Daten von oben. Es wird nur der erste verpflichtende Argument-Typ verwendet.

DAX-Beispiel / SUMMARIZECOLUMNS auf einem Snowflake-Schema.

Abbildung 2 - DAX-Beispiel: SUMMARIZECOLUMNS auf einem Snowflake-Schema.
Abbildung 2 - DAX-Beispiel: SUMMARIZECOLUMNS auf einem Snowflake-Schema.
Das Beispiel belegt, dass die Hauptoperation von SUMMARIZECOLUMNS tatsächlich ein CROSSJOIN über die Gruppierungsspalten ist. Im Beispiel ist das Datenmodell hinter der DAX-Abfrage ein Snowflake-Schema. Die Entitäten „City“ und „Region“ sind dabei in separaten Tabellen abgelegt und über Beziehungen verbunden:

Abbildung 3 - Snowflake Schema
Abbildung 3 - Snowflake Schema
DAX-Beispiel / SUMMARIZECOLUMNS auf einem Star-Schema.

Das nächste Beispiel zeigt wieder eine Abfrage mit SUMMARIZECOLUMNS und den gleichen Daten. Jedoch sind die Entitäten Region und City in denormalisierter Form bereitgestellt. Das Modell ist ein Star-Schema.

Abbildung 4 - Star Schema
Abbildung 4 - Star Schema

Die DAX-Abfrage führt jetzt zu einem anderen Ergebnis:

Abbildung 5 - Cross Matrix mit Filter
Abbildung 5 - Cross Matrix mit Filter
Es wurde jetzt nicht mehr die vollständige Kreuz-Matrix gebildet; „Berlin“ beispielsweise tritt nur noch zusammen mit der Region „North“ auf.
Regel:
Bei CROSSJOIN wird – unabhängig vom Datenmodell – die vollständige Kreuz-Matrix gebildet
Bei SUMMARIZECOLUMNS wird optional die vollständige Kreuz-Matrix über Tabellen eingeschränkt, in der sich die Spalten befinden
Ablauf-Logik von SUMMARIZECOLUMNS:
  1. Bilden der vollständigen Kreuz-Matrix
  2. Optional: Einschränken der Menge über Tabellen

SQL-Beispiel / Projektion von SUMMARIZECOLUMNS

Die beiden nachfolgenden Beispiele zeigen die Set-Operationen, wie man sie sich in SQL vorstellen kann.

SQL-Beispiel / Rückgabe einer vollständigen Kreuz-Matrix ohne Filter.

Die Spalten-Werte stammen aus zwei verschiedenen Tabellen:

Abbildung 6 - SUMMARIZECOLUMNS /SQL-Projektion
Abbildung 6 - SUMMARIZECOLUMNS /SQL-Projektion
SQL-Beispiel / Rückgabe einer vollständigen Kreuz-Matrix mit Filter.

Beachten Sie folgenden Unterschied zum vorausgegangenen Beispiel: Die Werte für „Region“ und „City“ stammen jetzt beide aus derselben Tabelle, nämlich "dimPerson1". Nachdem die vollständige Kreuzmatrix gebildet wurde, wird die Tabelle „dimPerson1“ benutzt, um nur die Tupels zurückgeben, die auch tatsächlich existieren.

Abbildung 7 - SUMMARIZECOLUMNS / SQL-Projektion: Einschränken der vollständigen Kreuz-Matrix über eine Filter-Tabelle
Abbildung 7 - SUMMARIZECOLUMNS / SQL-Projektion: Einschränken der vollständigen Kreuz-Matrix über eine Filter-Tabelle
Die allgemeine Erkenntnis aus dem zweiten Beispiel ist, dass Tabellen eineListe gültigen Tupels vorgeben, die zum Filtern anderer Sets verwendet werden können.
Artikel und Copyright von Lukas Hillesheim (https://blog.n-dimensions.de)

Wenn Sie weitere Informationen wünschen, empfehlen wir:

Ihr Kommentar zum Artikel

"DAX Tupel verstehen - Teil 1 - Einführung, CROSSJOIN- & SUMMARIZECOLUMNS-Funktion"

Wir freuen uns über Ihren Kommentar und antworten so schnell es geht!

Das Angebot von "HECKER CONSULTING" richtet sich ausschließlich an Unternehmen und Behörden (iSv § 14 BGB). Verbraucher (§ 13 BGB) sind vom Vertragsschluss ausgeschlossen. Mit Absendung der Anfrage bestätigt der Anfragende, dass er nicht als Verbraucher, sondern in gewerblicher Tätigkeit handelt. § 312i Abs. 1 S. 1 Nr. 1-3 und S. 2 BGB (Pflichten im elektronischen Geschäftsverkehr) finden keine Anwendung.

Vielen Dank, Ihr Kommentar wurde empfangen!
Beim Absenden des Formulars ist etwas schief gelaufen.
Unsere Beratungs-Leistungen für Das Thema

SQL Server

Wir erweitern ständig unser Beratungsportfolio. Über 300 Beratungsleistungen haben wir für Sie im Programm. Selbstverständlich lassen sich die einzelnen Themen kombinieren. So erhalten Sie genau die Beratung, die Sie wünschen und brauchen

Mehr IT-, Online-, Digital-Beratungsleistungen anzeigen >>
Mehr IT-, Online-, Digital-Beratungsleistungen anzeigen >>

Kontaktanfrage

Das Angebot von "HECKER CONSULTING" richtet sich ausschließlich an Unternehmen und Behörden (iSv § 14 BGB). Verbraucher (§ 13 BGB) sind vom Vertragsschluss ausgeschlossen. Mit Absendung der Anfrage bestätigt der Anfragende, dass er nicht als Verbraucher, sondern in gewerblicher Tätigkeit handelt. § 312i Abs. 1 S. 1 Nr. 1-3 und S. 2 BGB (Pflichten im elektronischen Geschäftsverkehr) finden keine Anwendung.

Vielen Dank, Ihre Nachricht wurde empfangen!
Beim Absenden des Formulars ist etwas schief gelaufen.
WEITERE INFORMATIONEN AUS UNSEREM BLOG ZUM THEMA

SQL Server

Aktuelle und interessante Themen und Beiträge für Sie zusammengetragen und aufbereitet.

No items found.
Mehr IT-, Online-, Digital-Neuigkeiten anzeigen >>
Nach oben