🏠 » Business Intelligence » MDX Tutorial » MDX Syntaxelemente

MDX Syntaxelemente

Die Syntax von MDX-Abfragen ist im Ansatz vergleichbar mit der von SQL-Abfragen. Jeder erkennt sofort bekannte Syntaxelemente, wie zum Beispiel SELECT-, FROM und WHERE, und erinnert sich sofort an die SQL Syntax.

Der entscheidende Unterschied ist aber, dass MDX-Statements von mathematischen Regeln, wie Tupeln, Mengen und Sets, geprägt sind.

Jeder der MDX-Abfragen schreiben muss oder darf, wird feststellen, dass beim Schreiben ein Umdenken stattfinden muss. Es darf nicht mehr relational, sondern es multidimensional gedacht werden.

Das kann am Anfang etwas schwierig sein, nimmt aber mit der Zeit ab, da man sich ausgiebig mit Eckigen Klammern, Punkten, Kommata, Doppelpunkte, runden und geschwungenen Klammern in MDX auseinandersetzen muss.

Eckige Klammern [ ] in einer MDX-Abfrage – Membernamen

Die eckigen Klammern werden in einer MDX-Abfrage für alle Bezeichner und Werte (Member) in einem OLAP Cube genutzt, wie z. B. Dimensionen, Ebene, Attribute und Kennzahlen.

Bei allen Bezeichnungen, bei denen Zahlen, Leerzeichen, andere Sonderzeichen oder Schlüsselwörter enthalten sind, sind eckige Klammern ein absolutes Muss, da sonst der MDX-Interpreter die Bezeichnungen nicht interpretieren kann.

//Dimension:
[Date]
//Attribut:
[Quarter]
//Member
[2016]
//Wert(immer mit "&" davor)
&[20160101]

Kleines Beispiel: Soll zum Beispiel das Jahr 2016 als Member des Levels Jahr der Dimension Zeit in einer MDX-Abfrage enthalten sein, muss es zwingend in eckige Klammer eingefasst werden [2016], da der MDX-Parser diese Jahresangabe sonst nicht als Member, sondern als gewöhnliche Integer-Zahl interpretiert.

Punkte . in einer MDX-Abfrage – Trennzeichen

Punkte werden in einem MDX-Statement eingesetzt, um eine Ansammlung von Membern verschiedener Dimensionen in einem Abfrage-Tupel voneinander zu trennen.

Ein Tupel ist die Kreuzung eines oder mehrerer Member, von denen jedes aus einer anderen Dimension stammt. Ein Tupel kann folgendermaßen aufgebaut sein:

//Tupel
[Product].[Product Categories].[Subcategory].&[Helmets]
//Tuepel
[Measures].[Internet Sales Amount]

Komma , in einer MDX-Abfrage – Trennzeichen

Tupel in einer MDX-Abfrage können Referenzen auf verschiedene Member beinhalten. Dabei wird ein Komma benötigt, um die Member voneinander zu trennen. Ein Tupel mit Kommasetzung kann folgendermaßen aufgebaut sein

([Product].[Subcategory].&[Helmets],
[Geography].[Country].&[Germany])

Doppelpunkt : in einer MDX-Abfrage – Bereich

In jedem Level einer Dimension gibt es eine bestimmte Anzahl von Membern, die in einer speziellen Weise sortiert sind. Ein Doppelpunkt wird dann eingesetzt, wenn man einen festgelegten Bereich von Membern ausgeben lassen will. Dabei definieren der Anfangs-Member und der End Member eines Levels den Bereich, getrennt durch einen Doppelpunkt. Ein MDX-Statement mit Doppelpunkt kann folgendermaßen aufgebaut sein:

SELECT {([Date].[Calendar Quarter of Year].&[CY Q1]) :
	([Date].[Calendar Quarter of Year].&[CY Q4])} ON COLUMNS,
       {([Geography].[Country].&[Germany]),
	([Geography].[Country].&[France])} ON ROWS
FROM [Adventure Works]
WHERE ([Measures].[Internet Sales Amount],[Date].[Calendar Year].&[2014]);

Interessant ist, dass die Reihenfolge irrelevant ist, in welcher Reihenfolge das Anfangs- und das End-Member mit dem Bereichsoperator aufgeführt werden. Die Ergebnismenge gibt die entsprechenden Member in der Reihenfolge zurück, in der sie in der OLAP-Datenbank abgelegt sind.

Runde Klammern ( ) in einer MDX-Abfrage – Tupel

Runde Klammern werden in einem MDX-Statement benutzt, um Tupel einzuschließen. Ein Tupel ist eine Kombination aus Membern einer oder mehrerer Dimensionen. Ein einzelner Member ist ein Tupel. Ein Tupel kann folgendermaßen aufgebaut werden:

[Measures].[Internet Sales Amount]

Wenn ein Tupel aus mehr als einer Dimension besteht, darf es auch nur einen Member aus jeder Dimension besitzen. Damit  ein Tupel mit mehr als einer Dimension zusammenzusetzen, müssen die Member mit runden Klammern umschlossen sein:

SELECT {([Date].[Calendar Year].&[2013], [Measures].[Sales Amount]),
        ([Date].[Calendar Year].&[2013], [Measures].[Standard Product Cost])}
        ON COLUMNS ,
{([Product].[Model Name].Members)} ON ROWS
FROM [Adventure Works]

Es ist nicht möglich ein leeres Tupel zu erzeugen, da „()“ kein gültiges Tupel ist. Es können aber sogenannte Null-Member definiert werden. Dieser wird dann mit (null) definiert.

Geschwungene Klammern {} in einer MDX-Abfrage – Mengen / Sets

Mittels geschwungener Klammern in einer MDX-Abfrage werden Mengen dargestellt. Eine Menge ist eine Sammlung von Tupeln mit gleicher Dimensionalität.

Die Menge kann aus keinem, einem oder mehreren Tupeln bestehen. Eine Menge mit null Tupeln entspricht einer leeren Menge. In MDX darf eine Menge ein Tupel mehrfach enthalten. Darüber hinaus spielt die Reihenfolge eine signifikante Rolle. Ein MDX-Statement mit geschwungenen Klammern kann folgendermaßen aufgebaut sein:

SELECT {([Date].[Calendar Year].&[2013]), 
	([Date].[Calendar Year].&[2014])} ON COLUMNS,
       {[Product].[Model Name].[Chain], 
        [Product].[Model Name].[Cable Lock]} ON ROWS
FROM [Adventure Works]

Weiterführende Artikel