MDX, DAX, SQL – Die richtige Sprache für jedes Datenmodell

Nachdem ich letztes Mal die technischen Grundlagen von multidimensionalen und tabellarischen Datenmodellen vorgestellt habe, möchte ich heute stärker auf die Unterschieden auf Benutzerseite eingehen. Dazu schauen wir uns die Unterschiede zwischen klassischem SQL, MDX und DAX an.

Um Auswertungen und Analysen zu fahren, wurden für die unterschiedlichen Modelle verschiedene Sprachen entwickelt, die dem jeweiligen Modell Rechnung tragen. So gibt es für relationale Datenbanken SQL, für multidimensionale Datenbanken MDX und für Daten, die im Tabular Model organisiert sind, DAX. Diese Sprachen habe alle ihre Eigenheiten und die dazugehörigen Konzepte sind – je nach persönlichem Hintergrund – leichter oder schwerer zu verstehen.

MDX – MultiDimensional eXpressions

Daten Cube

Die Sprache MDX (MultiDimensional eXpressions Language) wurde mit dem multidimensionalen Modell bereits im Jahr 1997 eingeführt. Sie ähnelt SQL, unterscheidet sich aber dadurch, dass sie Mengen im n-dimensionalen Raum in Betracht zieht. Die Spezifikationen der MDX Sprache sind also aus dem multidimensionalen Modell abgeleitet. Bei Abfragen werden die Daten nicht aus Tabellen, sondern aus mehrdimensionalen Objekten, den sogenannten Cubes (Würfeln), abgefragt.

Die Voraussetzung für das Verständnis von MDX ist das Wissen über mehrdimensionale Modelle und den Bestandteilen wie Dimensionen, Fakten, Zeilen, Hierarchien, Aggregationen, Ebenen, Tupeln und Sets.

Wir haben es zwar schon im letzten Teil erwähnt, aber noch mal zu Erinnerung: Bei der Datenanalyse sind Fakten und Dimensionen die zwei wichtigsten Entitäten. Fakten sind Zahlen wie beispielsweise Umsatz, Menge, EBIT usw. Dimensionen dagegen sind Attribute, die Fakten beschreiben. Die bekannteste Dimension ist die Zeit, weitere Dimensionen sind zum Beispiel Geographie (Land, Stadt …), Personen usw.

Beim multidimensionalem Modell sind Daten in sogenannten Tupeln organisiert. Tupeln sind Adressen im Würfel und identifizieren damit Daten-Scheiben (Slices) in einem Cube. Ein Set ist die Kollektion von Tupeln.

Beispiel:

AusdruckBedeutung
Date.Calendar.[Calendar Year].&[2016]Tupel, Jahr 2016
Date.Calendar.[Calendar Year].&[2017]Tupel, Jahr 2017
(Date.Calendar.[Calendar Year].&[2016], [Country].&[Germany])Tupel, Jahr 2016 in Deutschland
({Date.Calendar.[Calendar Year].&[2016], Date.Calendar.[Calendar Year].&[2017]}, [Country].&[Germany])Set, Jahr 2016 und 2017 in Deutschland

Wenn das Tupel aus verschiedenen Dimensionen besteht, wird also die Klammer „()“ benutzt. Ein Set wird hingegen durch die Klammer „{}“ markiert.
Ein Set ist z.B. die Bezeichnung {Jahr 2016 und Jahr 2017}, weil mehrere Attribute der gleichen Dimension abgefragt werden – nämlich die Jahre 2016 und 2017. Entsprechend besteht dieses Set aus zwei Tupeln.

Schauen wir uns ein praktisches Beispiel an. Die folgende MDX-Abfrage liefert Umsätze pro Kategorie und dem dazugehörigen Datum.

Beispiel einer MDX-Abfrage

 

Bei der MDX-Abfragen ist es nicht notwendig, die Aggregierungsfunktion oder Gruppierung zu benutzen. Die MDX-Abfrage liefert automatisch ein Aggregat (Summe) aus der Abfrage.
Im multidimensionalen Modell lässt es sich sehr gut mit Hierarchien arbeiten. Hierarchien sind ein Bestandteil eines Würfels und werden bei den Abfragen sehr gut unterstützt.

Im Folgenden sehen wir ein Beispiel für eine Hierarchie:

Hierarchie im multidimensionalen Datenmodell

Im Multidimensionalen Modell wäre [Cube].[Country].[All].[Germany].[München] entsprechend ein Tupel, der nur Daten aus München liefert.

Als Fazit zu MDX-Abfragen können wir festhalten, dass sie sehr effektiv arbeiten. Allerdings werden sie Nutzern, die an das relationale SQL gewöhnt sind oder vorwiegend mit tabellarischen Strukturen wie in Excel vertraut sind, erstmal fremd vorkommen.

DAX – Data Analysis eXpressions

Die Sprache DAX (Data Analysis eXpressions) funktioniert ähnlich wie SQL. DAX ist primär keine Abfragesprache wie SQL oder MDX, sondern eher eine Analysesprache – daher auch der Name Data Analysis eXpressions. Es ist aber möglich die Daten aus tabellarischen Modellen abzurufen. Ebenso ist es möglich, die „Measures“ als Teil der Abfrage zu integrieren.

Ein DAX Query liefert Daten in Tabellenform und wird als Analysesprache im Tabular Model, Power Pivot und Power BI verwendet.

Für die SQL-Kenner ein Beispiel der SQL-Sprache:

SQL Abfrage

 

Zur WHERE-Klausel in SQL ist bei DAX die Funktion FILTER() äquivalent. GROUP BY wird in DAX durch die Funktion SUMMARIZE() unterstützt.

DAX hat einen großen Umfang an Funktionen, die alle gut dokumentiert auf den Seiten von Microsoft zu finden sind. Es sind Datums-, Zeit-, Kalender-, Filter-, logische, mathematische und trigonometrische, hierarchische, statistische und Textfunktionen.

DAX-Formeln sind den Formeln von Excel nachempfunden. Versierte Excel-Nutzer sollten sich also leicht in DAX zurechtfinden.

Ein Beispiel mit DAX im Vergleich mit oben genanntem MDX-Statement. Auch diese Abfrage liefert Umsätze pro Kategorie:

DAX Abfrage

 

MDX ist hauptsächlich am multidimensionalen Modell Microsofts SSAS ausgerichtet. Es ist für OLAP- und Data-Spezialisten gedacht, jedoch nicht für Endanwender. Es ist eine mächtige Abfragesprache, die gute Kenntnisse des multidimensionalen Modells erfordert.

Die Sprache DAX hingegen ist primär beim tabellarischen Modell als Analysesprache gedacht und auch für Endanwender im „Self-Service BI“ geeignet. Dazu gehören Nutzer, die mit Power-BI, Excel und Power Pivot arbeiten. Sie ist prinzipiell zwar komplizierter als MDX, bietet aber eine große Menge an Möglichkeiten und gleichzeitig einen guten Support sowie viele eingebaute Funktionen. Daher ist diese Sprache prädestiniert, in der Datenanalyse in Zukunft eine wichtige Rolle zu spielen.