of 120 /120
HTW Dresden Fakultät Informatik/Mathematik Prof. Dr.-Ing. A. Toll Handbuch MDX Arbeitsmaterial zur Lehrveranstaltung Business Intelligence 3. überarbeitete Fassung, Dezember 2015

HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

  • Upload
    others

  • View
    15

  • Download
    0

Embed Size (px)

Citation preview

Page 1: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

HTW DresdenFakultät Informatik/MathematikProf. Dr.-Ing. A. Toll

Handbuch MDXArbeitsmaterial zur Lehrveranstaltung

Business Intelligence

3. überarbeitete Fassung, Dezember 2015

Page 2: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

Impressum

Titel

Handbuch MDX – Arbeitsmaterial zur Lehrveranstaltung Business Intelligence

Herausgeber

Prof. Dr.-Ing. Axel TollHochschule für Technik und Wirtschaft DresdenFakultät Informatik/MathematikFriedrich-List-Platz 1D-01069 Dresden

AutorInnen

1. Fassung, Februar 2008 : Alexander Börner, Frank Eichholz, René Hegewald,Kerstin Leibling, Thomas Mattick, René Perske und Antje Richter unter derLeitung von Prof. Dr.-Ing. Axel Toll

2. überarbeitete Fassung, April 2010 : Alexander Börner, Prof. Dr.-Ing. Axel Toll

3. überarbeitete Fassung, Dezember 2015 : Dr. Annett Mölle, Prof. Dr.-Ing. Axel Toll

Dieses Handbuch richtet sich an

die Studiengänge Wirtschaftinformatik (Bachelor und Diplom) im 4. Semester undden Masterstudiengang Angewandte Informationstechnologien im 3. Semester derHTW Dresden.

Bild- und Textnachweis

Die Beispiele wurden erstellt mit MS SQL Server 2012 Analysis Services unterVerwendung der Multidimensional Expressions (MDX) - Referenz Link:https://msdn.microsoft.com/de-DE/library/ms145506(v=sql.120).aspx

Page 3: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

Inhaltsverzeichnis

Tabellenverzeichnis VII

Abbildungsverzeichnis IX

1 Einführung in die Datenbanksprache MDX 11.1 Was ist MDX . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Das Cube-Konzept . . . . . . . . . . . . . . . . . . . . . . . . 21.3 Der Beispiel-Cube Umsatz . . . . . . . . . . . . . . . . . . . . 31.4 MDX-Abfragen . . . . . . . . . . . . . . . . . . . . . . . . . . 51.5 Achseneinteilung . . . . . . . . . . . . . . . . . . . . . . . . . 61.6 Schreibweise in MDX-Abfragen . . . . . . . . . . . . . . . . . 7

2 Grundlagen 92.1 MDX Syntaxelemente . . . . . . . . . . . . . . . . . . . . . . 9

2.1.1 Eckige Klammern [ ] – Dimensions- und Membernamen 92.1.2 Punkte . – Trennzeichen . . . . . . . . . . . . . . . . . 92.1.3 Komma , - Trennzeichen . . . . . . . . . . . . . . . . . 102.1.4 Doppelpunkt : - Bereich . . . . . . . . . . . . . . . . . 102.1.5 Runde Klammern ( ) – Tupel . . . . . . . . . . . . . . 112.1.6 Geschwungene Klammern {} – Mengen / Sets . . . . . 13

2.2 MDX - Operatoren . . . . . . . . . . . . . . . . . . . . . . . . 13

3 Funktionen 173.1 Elementfunktionen . . . . . . . . . . . . . . . . . . . . . . . . 17

3.1.1 Ancestor . . . . . . . . . . . . . . . . . . . . . . . . . . 173.1.2 ClosingPeriod . . . . . . . . . . . . . . . . . . . . . . . 183.1.3 Cousin . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.1.4 CurrentMember . . . . . . . . . . . . . . . . . . . . . 203.1.5 DataMember . . . . . . . . . . . . . . . . . . . . . . . 20

I

Page 4: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

II Inhaltsverzeichnis

3.1.6 DefaultMember . . . . . . . . . . . . . . . . . . . . . . 213.1.7 FirstChild . . . . . . . . . . . . . . . . . . . . . . . . . 213.1.8 FirstSibling . . . . . . . . . . . . . . . . . . . . . . . . 223.1.9 Item . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233.1.10 Lag . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233.1.11 LastChild . . . . . . . . . . . . . . . . . . . . . . . . . 243.1.12 LastSibling . . . . . . . . . . . . . . . . . . . . . . . . 253.1.13 Lead . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.1.14 LinkMember . . . . . . . . . . . . . . . . . . . . . . . 263.1.15 Members . . . . . . . . . . . . . . . . . . . . . . . . . 273.1.16 NextMember . . . . . . . . . . . . . . . . . . . . . . . 273.1.17 OpeningPeriod . . . . . . . . . . . . . . . . . . . . . . 283.1.18 ParallelPeriod . . . . . . . . . . . . . . . . . . . . . . . 283.1.19 Parent . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.1.20 PrevMember . . . . . . . . . . . . . . . . . . . . . . . 293.1.21 StrToMember . . . . . . . . . . . . . . . . . . . . . . . 303.1.22 UnknownMember . . . . . . . . . . . . . . . . . . . . . 31

3.2 Numerische Funktion . . . . . . . . . . . . . . . . . . . . . . . 313.2.1 Aggregate . . . . . . . . . . . . . . . . . . . . . . . . . 313.2.2 Avg . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.2.3 Correlation . . . . . . . . . . . . . . . . . . . . . . . . 343.2.4 Count . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.2.5 Covariance . . . . . . . . . . . . . . . . . . . . . . . . 373.2.6 CovarianceN . . . . . . . . . . . . . . . . . . . . . . . 383.2.7 DistinctCount . . . . . . . . . . . . . . . . . . . . . . . 383.2.8 LinRegIntercept . . . . . . . . . . . . . . . . . . . . . 393.2.9 LinRegPoint . . . . . . . . . . . . . . . . . . . . . . . 403.2.10 LinRegR2 . . . . . . . . . . . . . . . . . . . . . . . . . 413.2.11 LinRegSlope . . . . . . . . . . . . . . . . . . . . . . . 413.2.12 LinRegVariance . . . . . . . . . . . . . . . . . . . . . . 423.2.13 Max . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433.2.14 Median . . . . . . . . . . . . . . . . . . . . . . . . . . 443.2.15 Min . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443.2.16 Ordinal . . . . . . . . . . . . . . . . . . . . . . . . . . 45

Page 5: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

Inhaltsverzeichnis III

3.2.17 Rank . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453.2.18 Stdev / Stddev . . . . . . . . . . . . . . . . . . . . . . 463.2.19 StdevP / StddevP . . . . . . . . . . . . . . . . . . . . 473.2.20 Sum . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473.2.21 Value . . . . . . . . . . . . . . . . . . . . . . . . . . . 483.2.22 Var / Variance . . . . . . . . . . . . . . . . . . . . . . 493.2.23 VarP / VarianceP . . . . . . . . . . . . . . . . . . . . 49

3.3 Mengenfunktion . . . . . . . . . . . . . . . . . . . . . . . . . . 503.3.1 AllMembers . . . . . . . . . . . . . . . . . . . . . . . . 503.3.2 Ancestors . . . . . . . . . . . . . . . . . . . . . . . . . 513.3.3 Ascendants . . . . . . . . . . . . . . . . . . . . . . . . 523.3.4 Axis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533.3.5 BottomCount . . . . . . . . . . . . . . . . . . . . . . . 543.3.6 BottomPercent . . . . . . . . . . . . . . . . . . . . . . 543.3.7 BottomSum . . . . . . . . . . . . . . . . . . . . . . . . 553.3.8 Children . . . . . . . . . . . . . . . . . . . . . . . . . . 563.3.9 Crossjoin . . . . . . . . . . . . . . . . . . . . . . . . . 563.3.10 Descendants . . . . . . . . . . . . . . . . . . . . . . . . 583.3.11 Distinct . . . . . . . . . . . . . . . . . . . . . . . . . . 613.3.12 DrilldownMember . . . . . . . . . . . . . . . . . . . . 623.3.13 DrilldownMemberBottom . . . . . . . . . . . . . . . . 633.3.14 DrilldownMemberTop . . . . . . . . . . . . . . . . . . 643.3.15 DrillupLevel . . . . . . . . . . . . . . . . . . . . . . . . 653.3.16 Except . . . . . . . . . . . . . . . . . . . . . . . . . . . 653.3.17 Exists . . . . . . . . . . . . . . . . . . . . . . . . . . . 663.3.18 Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . 673.3.19 Head . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683.3.20 Hierarchize . . . . . . . . . . . . . . . . . . . . . . . . 683.3.21 LastPeriods . . . . . . . . . . . . . . . . . . . . . . . . 693.3.22 Members . . . . . . . . . . . . . . . . . . . . . . . . . 713.3.23 NameToSet . . . . . . . . . . . . . . . . . . . . . . . . 723.3.24 Order . . . . . . . . . . . . . . . . . . . . . . . . . . . 723.3.25 PeriodsToDate . . . . . . . . . . . . . . . . . . . . . . 733.3.26 Siblings . . . . . . . . . . . . . . . . . . . . . . . . . . 73

Page 6: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

IV Inhaltsverzeichnis

3.3.27 StripCalculatedMembers . . . . . . . . . . . . . . . . . 743.3.28 StrToSet . . . . . . . . . . . . . . . . . . . . . . . . . . 743.3.29 Subset . . . . . . . . . . . . . . . . . . . . . . . . . . . 753.3.30 Tail . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763.3.31 TopCount . . . . . . . . . . . . . . . . . . . . . . . . . 763.3.32 TopPercent . . . . . . . . . . . . . . . . . . . . . . . . 773.3.33 TopSum . . . . . . . . . . . . . . . . . . . . . . . . . . 783.3.34 Union . . . . . . . . . . . . . . . . . . . . . . . . . . . 783.3.35 VisualTotals . . . . . . . . . . . . . . . . . . . . . . . 79

3.4 Logische Funktionen . . . . . . . . . . . . . . . . . . . . . . . 803.4.1 IsAncestor . . . . . . . . . . . . . . . . . . . . . . . . . 803.4.2 IsGeneration . . . . . . . . . . . . . . . . . . . . . . . 813.4.3 IsLeaf . . . . . . . . . . . . . . . . . . . . . . . . . . . 813.4.4 IsSibling . . . . . . . . . . . . . . . . . . . . . . . . . . 82

3.5 Hierarchiefunktionen . . . . . . . . . . . . . . . . . . . . . . . 823.5.1 Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . 823.5.2 Dimension . . . . . . . . . . . . . . . . . . . . . . . . . 833.5.3 Dimensions . . . . . . . . . . . . . . . . . . . . . . . . 84

3.6 Zeichenfolgefunktionen . . . . . . . . . . . . . . . . . . . . . . 843.6.1 IIF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843.6.2 LookupCube . . . . . . . . . . . . . . . . . . . . . . . 853.6.3 MemberToStr . . . . . . . . . . . . . . . . . . . . . . . 863.6.4 Name . . . . . . . . . . . . . . . . . . . . . . . . . . . 863.6.5 Properties . . . . . . . . . . . . . . . . . . . . . . . . . 873.6.6 UniqueName . . . . . . . . . . . . . . . . . . . . . . . 873.6.7 UserName . . . . . . . . . . . . . . . . . . . . . . . . . 88

4 Definitionsanweisungen 894.1 Definition berechneter Elemente . . . . . . . . . . . . . . . . 89

4.1.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . 894.1.2 Befehle zur Definition berechneter Elemente . . . . . . 894.1.3 Definieren mit WITH-Sektion in Abfragen . . . . . . . 894.1.4 Definition mittels CREATE MEMBER . . . . . . . . 91

Page 7: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

Inhaltsverzeichnis V

5 Häufige Berechnungen und Select-Befehle 935.1 Filter- und Sortierfunktionen . . . . . . . . . . . . . . . . . . 935.2 Berechnung des prozentualen Anteils . . . . . . . . . . . . . . 945.3 Berechnung des einfachen Durchschnitts . . . . . . . . . . . . 965.4 Zeitbezug und Zeitraumberechnung . . . . . . . . . . . . . . . 97

5.4.1 Periode-zu-Periode Referenzierungen und Berechnungen 975.4.2 Laufender Durchschnitt und „52-Wochen-Hoch / -Tief“ 97

Literaturhinweise 101

Sachregister 103

Page 8: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel
Page 9: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

Tabellenverzeichnis

1.1 Achsen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.1 Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.1 Aggregations-Operatoren . . . . . . . . . . . . . . . . . . . . 323.2 Argumente für Descendants-Flag . . . . . . . . . . . . . . . . 61

4.1 Properties zum Definieren von berechneten Elementen . . . . 90

VII

Page 10: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel
Page 11: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

Abbildungsverzeichnis

1.1 Aufbau des Beispiel-Cubes Umsatz . . . . . . . . . . . . . . 31.2 Dimensionshierarchien des Cubes Umsatz . . . . . . . . . . . 41.3 Erste MDX-Abfrage . . . . . . . . . . . . . . . . . . . . . . . 51.4 Eine MDX-Abfrage . . . . . . . . . . . . . . . . . . . . . . . 7

2.1 Bereich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.2 Tupel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.3 Menge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.1 Ancestor() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.2 ClosingPeriod() . . . . . . . . . . . . . . . . . . . . . . . . . 193.3 Cousin() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.4 CurrentMember() . . . . . . . . . . . . . . . . . . . . . . . . 203.5 DataMember() . . . . . . . . . . . . . . . . . . . . . . . . . . 213.6 DefaultMember() . . . . . . . . . . . . . . . . . . . . . . . . 213.7 FirstChild() . . . . . . . . . . . . . . . . . . . . . . . . . . . 223.8 FirstSibling() . . . . . . . . . . . . . . . . . . . . . . . . . . 223.9 Item() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233.10 Lag() positiv . . . . . . . . . . . . . . . . . . . . . . . . . . . 243.11 Lag() negativ . . . . . . . . . . . . . . . . . . . . . . . . . . 243.12 LastChild() . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.13 LastSibling() . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.14 Lead() mit positivem Index . . . . . . . . . . . . . . . . . . 263.15 Lead() mit negativem Index . . . . . . . . . . . . . . . . . . 263.16 LinkMember() . . . . . . . . . . . . . . . . . . . . . . . . . . 273.17 Members() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.18 NextMember() . . . . . . . . . . . . . . . . . . . . . . . . . . 283.19 OpeningPeriod() . . . . . . . . . . . . . . . . . . . . . . . . . 28

IX

Page 12: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

X Abbildungsverzeichnis

3.20 ParallelPeriod() . . . . . . . . . . . . . . . . . . . . . . . . . 293.21 Parent() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.22 PrevMember() . . . . . . . . . . . . . . . . . . . . . . . . . . 303.23 StrToMember() . . . . . . . . . . . . . . . . . . . . . . . . . 303.24 UnknownMember() . . . . . . . . . . . . . . . . . . . . . . . 313.25 Aggregate() . . . . . . . . . . . . . . . . . . . . . . . . . . . 323.26 Avg() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343.27 Correlation() . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.28 Count() Dimension . . . . . . . . . . . . . . . . . . . . . . . 353.29 Count() Hierarchieebenen . . . . . . . . . . . . . . . . . . . 363.30 Count() Menge . . . . . . . . . . . . . . . . . . . . . . . . . 363.31 Count() Tupel . . . . . . . . . . . . . . . . . . . . . . . . . . 373.32 Covariance() . . . . . . . . . . . . . . . . . . . . . . . . . . . 373.33 CovarianceN() . . . . . . . . . . . . . . . . . . . . . . . . . . 383.34 DistinctCount() . . . . . . . . . . . . . . . . . . . . . . . . . 393.35 LinRegIntercept() . . . . . . . . . . . . . . . . . . . . . . . . 403.36 LinRegPoint() . . . . . . . . . . . . . . . . . . . . . . . . . . 403.37 LinRegR2() . . . . . . . . . . . . . . . . . . . . . . . . . . . 413.38 LinRegSlope() . . . . . . . . . . . . . . . . . . . . . . . . . . 423.39 LinRegVariance() . . . . . . . . . . . . . . . . . . . . . . . . 433.40 Max() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433.41 Median() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443.42 Min() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453.43 Ordinal() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453.44 Rank() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463.45 Stdev() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473.46 StdevP() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473.47 Sum() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483.48 Value() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493.49 Var() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493.50 VarP() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503.51 AllMembers() Hierarchie . . . . . . . . . . . . . . . . . . . . 513.52 Ancestors() . . . . . . . . . . . . . . . . . . . . . . . . . . . 523.53 Ascendants() . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

Page 13: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

Abbildungsverzeichnis XI

3.54 Axis() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533.55 BottomCount() . . . . . . . . . . . . . . . . . . . . . . . . . 543.56 BottomPercent() . . . . . . . . . . . . . . . . . . . . . . . . 553.57 BottomSum() . . . . . . . . . . . . . . . . . . . . . . . . . . 553.58 Children() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563.59 Crossjoin() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573.60 Descendants() mit Ebene und Abstand . . . . . . . . . . . . 583.61 Descendants() mit Element und Ebene . . . . . . . . . . . . 593.62 Descendants() mit BEFORE . . . . . . . . . . . . . . . . . . 603.63 Descendants() mit SELF_AND_BEFORE . . . . . . . . . . 603.64 Distinct() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623.65 DrilldownMember() nicht rekursiv . . . . . . . . . . . . . . . 633.66 DrilldownMember() rekursiv . . . . . . . . . . . . . . . . . . 633.67 DrilldownMemberBottom() . . . . . . . . . . . . . . . . . . . 643.68 DrilldownMemberTop() . . . . . . . . . . . . . . . . . . . . . 653.69 DrillupLevel() . . . . . . . . . . . . . . . . . . . . . . . . . . 653.70 Except() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663.71 Exists() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673.72 Filter() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673.73 Head() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683.74 Hierarchize() ohne POST . . . . . . . . . . . . . . . . . . . . 693.75 Hierarchize() mit POST . . . . . . . . . . . . . . . . . . . . 703.76 LastPeriods() . . . . . . . . . . . . . . . . . . . . . . . . . . 703.77 Members() Ebene . . . . . . . . . . . . . . . . . . . . . . . . 713.78 NameToSet() . . . . . . . . . . . . . . . . . . . . . . . . . . 723.79 Order() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733.80 PeriodsToDate() . . . . . . . . . . . . . . . . . . . . . . . . . 733.81 Siblings() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 743.82 StripCalculatedMembers() . . . . . . . . . . . . . . . . . . . 743.83 StrToSet() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753.84 Subset() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763.85 Tail() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763.86 TopCount() . . . . . . . . . . . . . . . . . . . . . . . . . . . 773.87 TopPercent() . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

Page 14: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

XII Abbildungsverzeichnis

3.88 TopSum() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 783.89 Union() ohne doppelte Werte . . . . . . . . . . . . . . . . . 793.90 Union() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793.91 VisualTotals() . . . . . . . . . . . . . . . . . . . . . . . . . . 803.92 IsAncestor() . . . . . . . . . . . . . . . . . . . . . . . . . . . 803.93 IsGeneration() . . . . . . . . . . . . . . . . . . . . . . . . . . 813.94 IsLeaf() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823.95 IsSibling() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823.96 Hierarchy() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833.97 Dimension() . . . . . . . . . . . . . . . . . . . . . . . . . . . 833.98 Dimensions() . . . . . . . . . . . . . . . . . . . . . . . . . . . 843.99 IIF() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853.100 LookupCube() . . . . . . . . . . . . . . . . . . . . . . . . . . 853.101 MemberToStr() . . . . . . . . . . . . . . . . . . . . . . . . . 863.102 Name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 873.103 Properties() . . . . . . . . . . . . . . . . . . . . . . . . . . . 873.104 UniqueName() . . . . . . . . . . . . . . . . . . . . . . . . . . 883.105 Username() . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

4.1 Definieren berechneter Elemente mit WITH . . . . . . . . . 91

5.1 TopCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945.2 Prozentualer Anteil einer Kategorie am Gesamtumsatz . . . 955.3 Prozentualer Umsatzanteil einer Subkategorie an der Kategorie 955.4 Durchschnitt . . . . . . . . . . . . . . . . . . . . . . . . . . . 965.5 Umsatzmengenänderung zum folgenden Quartal . . . . . . . 975.6 Laufender Durchschnitt 6 Perioden . . . . . . . . . . . . . . 985.7 Laufender Durchschnitt 6 Perioden . . . . . . . . . . . . . . 99

Page 15: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

1 Einführung in dieDatenbanksprache MDX

1.1 Was ist MDX

MDX steht für Multidimensional Expressions (dt. Multidimensionale Aus-drücke) und ist eine weit verbreitete dimensionale Sprache, die bei Abfragenauf dimensionale Data Warehouses und Data Marts zugreift. Werkzeuge fürMDX sind z. B. die Microsoft SQL Server 2012 Analysis Services1, HyperionSystem 9 BI+ Analytic Services sowie Produkte von Applix, Microstrategy,MIS AG.

Ein Vergleich zwischen SQL und MDX liegt nahe. Beide Sprachen wurdenentwickelt, um spezielle Anfragen an Datenstrukturen zu richten. Jedochgleichen sich beide Sprachen nur darin, dass sie beide das AbfrageschemaSELECT . . . FROM . . . WHERE nutzen und ähnliche Basisoperatoren und –funktio-nen besitzen. Ein signifikanter Unterschied besteht darin, dass SQL ein ANSI-und ISO-Standard ist, wohingegen MDX eine Entwicklung von Microsoft istund erst noch in einen Industriestandard etabliert werden muss. Darüberhinaus besitzt MDX die Fähigkeit, Ausdrücke wie Hierarchien, Vorgänger,Nachfolger, Cousin usw. zu verstehen. Ebenfalls kann es Eigenschaften vonElementen und Zellen auslesen und definieren. Des Weiteren ist man mit MDXin der Lage, zwei- bis n-dimensionale Ergebnisse (Tabellen oder Cubes) zuerzeugen.

1Siehe Literaturhinweise S. 101

1

Page 16: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

2 Kapitel 1 Einführung in die Datenbanksprache MDX

1.2 Das Cube-Konzept

Der Cube (dt. Datenwürfel2) ist eine Metapher zur Veranschaulichung desmultidimensionalen Datenraums, den ein Anwender zur Datenanalyse und-extraktion per MDX-Abfragen benutzt. Für die im Handbuch vorgestelltenAbfragen wird der Cube namens Umsatz verwendet, mit dem der Leser ausder Lehrveranstaltung Business Intelligence3 vertraut ist. Dieser Cube enthältgesammelte Informationen zu den Umsätzen eines Einzelhandelsunternehmens.

Generell besteht ein Cube aus mindestens zwei Dimensionen und mindes-tens einer Art von Measures (dt. Kennzahlen, Fakten). Jede Dimension ent-spricht einer unabhängigen Auswerterichtung im Analyseraum. Diese könnenspezifische Interessensbereiche des Unternehmens (z. B. Produkt, Mitarbeiter)abbilden oder allgemeingültige Inhalte betreffen (z. B. Dimension Zeit). JedeDimension besitzt Attribute. Attribute sind entweder voneinander unabhän-gig zu betrachtende Merkmale der Dimension oder werden in Hierarchienzusammengefasst. Bezogen auf die Dimension Produkt sind z. B. die AttributeName und Preis voneinander unabhängige Merkmale, während eine Attribut-Hierarchie namens Sortiment mit drei Ebenen – respektive Level – aus denAttributen Kategorie, Subkategorie und Name gebildet werden kann. Optionalexistiert die zusätzliche Ebene All, die alle Werte der untergeordneten Levelaggregiert.

Ein Elemente einer Hierarchie oder Ebene wird als Member bezeichnet.Brot, Hamburger und Joghurt sind z. B. Member der Ebene Subkategorie inder Dimension Produkt.

Eine besondere Dimension sind die sog. Measures, die eine Sammlung vonKennzahlen bzw. Fakten darstellen. Measures sind benannte, quantitativeAusdrücke, die durch Berechnen des Ausdrucks aufgelöst werden. Als Ergebniswird ein Wert in einem tabellarischen Modell zurückgeben.

2Der Cube spricht englisch und das hat sich auch für sein gesamtes Begriffe-Universumdurchgesetzt: Kennzahlen sind Measures, Ebenen sind Level, ...

3Siehe Literaturhinweise S. 101, Prof. A. Toll, Lehrveranstaltung Business Intelligence

Page 17: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

1.3 Der Beispiel-Cube Umsatz 3

1.3 Der Beispiel-Cube UmsatzDieser Abschnitt soll die Struktur des Cubes Umsatz (Abb. 1.1) aus der Lehr-veranstaltung Business Intelligence4 detaillierter veranschaulichen. Der Cubewird in allen nachfolgenden Beispielen verwendet. Er weist die DimensionenProdukt, Mitarbeiter, Geografie und Zeit auf. Diese erlauben es, die Dateneines Einzelhandelsunternehmen hinsichtlich Produktpalette und organisa-torischer Struktur des Unternehmens sowie unter regionalen und zeitlichenAspekten zu analysieren. Jede Dimension besitzt Attribute, die sich in dreiHierarchieebenen anordnen lassen (Abb. 1.2). Die Dimension Produkt mit derHierarchie Sortiment enthält Angaben bis zur Ebene Produkt. Die DimensionMitarbeiter mit der Hierarchie Management enthält Angaben bis zur EbeneMitarbeiter. Die Dimension Geografie mit der Hierarchie Unternehmen enthältAngaben bis zur Ebene Bundesland. Die Dimension Zeit mit der HierarchieKalender enthält Angaben bis zur Ebene Monat.

Abbildung 1.1: Aufbau des Beispiel-Cubes Umsatz ohne die DimensionMitarbeiter. Auf den Kanten sind die Dimensionen Geo-grafie, Produkt und Zeit mit den jeweils drei Hierarchie-ebenen dargestellt. Die farbigen Teilwürfel symbolisierendie zugehörigen Kennzahlen (Measures).

4siehe Literaturhinweise S. 101

Page 18: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

4 Kapitel 1 Einführung in die Datenbanksprache MDX

Abbildung 1.2: Die Dimensionen mit Hierarchien im Beispiel-Cube Um-satz. Die Datenanreicherung wurde mit Microsoft VisualStudio durchgeführt (vgl. Literaturhinweise auf S. 101)

Page 19: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

1.4 MDX-Abfragen 5

1.4 MDX-Abfragen

Eine MDX-Abfrage ist eine in sich geschlossene Ausführung. Sie wird von vielenWerkzeugen, wie den hier verwendeten Microsoft SQL Server 2012 AnalysisServices5 automatisiert im Hintergrund ausgeführt, z. B. um OLAP Cubes ineiner grafischen Benutzeroberfläche darzustellen oder um Abfragen an einenCube zu stellen. Der Benutzer sitzt dabei an seinem Client und betrachtetDaten, welche als Säulen-, Linien- oder Kuchendiagramm dargestellt sind.Wenn er diese Daten dann genauer anzeigen will oder selektiert, generiert dasWerkzeug eine MDX-Abfrage und sendet diese an den Cube. Dieser stellt dieentsprechende Antwort zur Verfügung. Auch Excel vollzieht diese Aufgabe,wenn man eine Pivot-Tabelle benutzt, um Daten aus einem Würfel zu beziehen.

Stellen wir uns einen einfachen Cube mit dem Namen Umsatz vor, der dieDimension Zeit, Geografie, Produkt, Mitarbeiter und Measures (Kennzahlen)beinhaltet. Nun sind wir daran interessiert zu erfahren, wie hoch der Um-satzbetrag und die Umsatzmenge der ersten beiden Quartale des Jahres 2014waren. Hierfür dient uns die folgende Abfrage.

// Umsatzbetr äge und -mengen in den Quartalen 01/2014// und 02/2014 in SachsenSELECT

{[ Measures ].[ Umsatzbetrag ],[ Measures ].[ Umsatzmenge ]} ON COLUMNS ,

{[Zeit].[ Quartal ].&[201401],[Zeit].[ Quartal ].&[201402]} ON ROWS

FROM [ Umsatz ]WHERE {[ Geografie ].[ Sachsen ]}

Das Ergebnis wird als Pivot-Tabelle ausgegeben.

Abbildung 1.3: Erste MDX-Abfrage

Wie in dieser Abfrage ersichtlich ist benutzen wir SELECT, FROM und WHERE.Mithilfe der SELECT-Anweisung werden die Achsendimensionen beschrieben.

5vgl. Literaturhinweise S. 101

Page 20: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

6 Kapitel 1 Einführung in die Datenbanksprache MDX

Diese beschreibt den Ergebnisraum, wobei jeder Dimension eine Rolle in Spal-ten (ON ROWS), Zeilen (ON COLUMNS) oder weiteren Achsen zugewiesen wird. Inunserem Fall werden die ersten beiden Quartale des Jahres 2014mit ON ROWS

den Zeilen zugeordnet und Umsatzbetrag sowie Umsatzmenge mit ON COLUMNS

den Spalten. Darüber hinaus werden innerhalb der SELECT–Anweisung eineMenge von Klassifikationsknoten (Member) ausgewählt, welche aus verschie-denen Hierarchien stammen können. Bei uns wurden dazu die Member Um-satzbetrag und Umsatzmenge aus der Dimension Measures ausgewählt, sowiedie beiden Quartale aus der Dimension Zeit. Durch die FROM–Anweisung wirdder Cube Umsatz bekannt gegeben, aus welchem die Daten stammen bzw.zu finden sind. Die WHERE–Klausel ist nur optional und kann genutzt werden,um den Ergebnisraum des zugrunde liegenden Cubes einzugrenzen. Hier kön-nen Dimensionen und deren Member, aber auch Measures eingesetzt werden.Mittels der WHERE–Anweisung findet in MDX echtes Slicing statt. Bei unsererAbfrage haben wir das Ergebnis auf die Region Sachsen eingegrenzt.

1.5 AchseneinteilungDie Achseneinteilung in MDX ist mit festgelegten Synonymen wie z. B. ON

ROWS oder ON COLUMNS möglich. In Tabelle 1.1 sind die Synonyme für die fünfam häufigsten benutzten Achsen aufgeführt.

Tabelle 1.1: Achsen und deren Synonyme in MXD.

Achse Synonym

0 On Columns1 On Rows2 On Pages3 On Chapter4 On Section

Theoretisch können mit MDX bis zu 128 Achsen eingeteilt werden. Diesgeschieht mit dem Ausdruck ON AXIS(n). Natürlich können auch Achsen, fürwelche Synonyme hinterlegt sind, mit ON AXIS(n) angesprochen werden. EineVermischung der Achsenbezeichnungen ist ebenfalls möglich. Zu beachtenist, dass Abfrageachsen nicht übersprungen werden dürfen. So muss eine

Page 21: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

1.6 Schreibweise in MDX-Abfragen 7

MDX-Abfrage, welche die Achsennummerierung ON AXIS(1) benutzt, aucheine entsprechende Achse ON AXIS(0) bzw. das Alias ON COLUMNS benutzen.Auch eine SELECT-Klausel ohne Achsen, d. h. ein leerer SELECT-Ausdruck,ist zulässig. In diesem Fall erfolgt ein Slicing in allen Dimensionen und dieMDX-Abfrage wählt eine Zelle aus.

1.6 Schreibweise in MDX-Abfragen

Zum Abschluss der Einführung sollte noch erwähnt werden das MDX nichtcase-sensitiv ist. Auch das Layout einer Abfrage spielt keine Rolle. EineMDX-Abfrage ist standardmäßig so aufgestellt:

SELECT <Achsenspezifikation > ON COLUMNS ,<Achsenspezifikation > ON ROWS

FROM <cube_name >WHERE <slicing - Spezifikation >

Beispiel

SELECT{ ([ Geografie ].[ Bundesland ].[ Sachsen ]),

([ Geografie ].[ Bundesland ].[Thü ringen ])} ON COLUMNS ,{ ([Zeit].[ Kalender ].[ Quartal ]. AllMembers )} ON ROWSFROM [ Umsatz ]WHERE ([Zeit].[Jahr].&[2013], [ Measures ].[ Umsatzbetrag ]);

Abbildung 1.4: Eine MDX-Abfrage

Die SELECT-Anweisung wählt zum einen die Member Sachsen und Thüringendes Levels Bundesland der Achsendimension Geografie, zum anderen alleMember des Levels Quartal der Dimension Zeit. Bei der FROM-Klausel wird

Page 22: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

8 Kapitel 1 Einführung in die Datenbanksprache MDX

der Cube Umsatz selektiert, aus dem die Daten bezogen werden. Die WHERE-Anweisung schränkt schließlich den Ergebnisraum auf den Verkaufsumsatz(Kennzahl Umsatzbetrag) ein, der im Jahr 2013 erwirtschaftet wurde.

Page 23: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

2 Grundlagen

2.1 MDX Syntaxelemente

2.1.1 Eckige Klammern [ ] – Dimensions- undMembernamen

Die eckigen Klammern werden für alle Bezeichner und Werte (Member) genutztwie z. B. Dimensionen, Level (Ebene), Attribute, Measures (Kennzahlen,Fakten) usw. Bei allen Bezeichnungen, bei denen Zahlen, Leerzeichen, anderespezielle Zeichen oder Schlüsselwörter enthalten sind, sind eckige Klammernobligatorisch. Soll das Jahr 2013 als Member des Levels Jahr der DimensionZeit in einer MDX-Abfrage enthalten sein, muss es zwingend in eckige Klammereingefasst werden [2013], da der MDX-Parser diese Jahresangabe sonst nichtals Member, sondern als gewöhnliche Integer-Zahl interpretiert.

Beispiele für Bezeichner- und Wertangaben im Cube Umsatz

// Dimension :[Zeit]// Attribut :[ Quartal ]// Member[2013]// Wert ( immer mit "&" davor )&[201301]

2.1.2 Punkte . – Trennzeichen

Punkte werden eingesetzt, um eine Sammlung von Membern verschiedenerDimensionen in einem Abfrage-Tupel voneinander zu trennen. Ein Tupel istdie Kreuzung eines oder mehrerer Member, von denen jedes aus einer anderenDimension stammt. Ein einfaches Tupel ist zum Beispiel

9

Page 24: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

10 Kapitel 2 Grundlagen

([ Produkt ].[ Subkategorie ].[ Bagels ])

oder auch

[ Measures ].[ Umsatzbetrag ]

2.1.3 Komma , - Trennzeichen

Tupel können Referenzen auf verschiedene Member beinhalten. Dabei wirdein Komma benötigt, um die Member voneinander zu trennen. Ein Beispiel

([ Produkt ].[ Subkategorie ].[ Bagels ],[ Geografie ].[ Staat ].[ Schweiz ])

2.1.4 Doppelpunkt : - Bereich

In jedem Level einer Dimension gibt es Member, die in einer speziellen Weisesortiert sind. Wenn es hier Sinn macht, kann man sich einen festgelegtenBereich von Membern ausgeben lassen. Dies ist mit dem SyntaxelementDoppelpunkt möglich. Dabei definieren der Anfangs-Member und der End-Member eines Levels den Bereich, getrennt durch einen Doppelpunkt.

SELECT{([Zeit].[ Kalender ].[ Quartal ].[1. Quartal ]) :

([Zeit].[ Kalender ].[ Quartal ].[4. Quartal ])} ON COLUMNS ,{([ Geografie ].[ Bundesland ].[ Sachsen ]),

([ Geografie ].[ Bundesland ].[Thü ringen ])} ON ROWSFROM [ Umsatz ]WHERE ([ Measures ].[ Umsatzbetrag ],[Zeit].[Jahr].&[2013]);

Abbildung 2.1: Bereich

Im Analysis Service ist es dabei irrelevant, in welcher Reihenfolge dasAnfangs- und das End-Member mit dem Bereichsoperator aufgeführt werden.Die Ergebnismenge legt die entsprechenden Member in der Reihenfolge dar,in der sie in der Datenbank abgelegt sind.

Page 25: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

2.1 MDX Syntaxelemente 11

2.1.5 Runde Klammern ( ) – Tupel

Runde Klammern werden benutzt, um Tupel einzuschließen. Ein Tupel ist eineKombination aus Membern einer oder mehrerer Dimensionen. Ein einzelnerMember ist ein Tupel, wie z. B.[ Produkt ].[ Backwaren ]

Wenn ein Tupel aus mehr als einer Dimension besteht, darf es auch nureinen Member aus jeder Dimension besitzen. Um ein Tupel mit mehr als einerDimension zusammenzusetzen, müssen die Member mit runden Klammernumschlossen sein:([Zeit].[Jahr].[2013], [ Measures ].[ Umsatzbetrag ])

Ein Tupel stellt einen Schnitt (Slice) auf den Cube dar, wobei der Würfeldurch jedes einzelne Member des Tupels geschnitten wird. Ein Tupel kannnatürlich auch direkt in eine Abfrage auf den Cube eingebaut werden.SELECT

{([Zeit].[Jahr].[2013], [ Measures ].[ Umsatzbetrag ]),([Zeit].[Jahr].[2013], [ Measures ].[ Umsatzplan ])

} ON COLUMNS ,{([ Sortiment ].[ Produkt ]. Members )} ON ROWS

FROM [ Umsatz ]

Man hat somit die Möglichkeit der Feinkontrolle über die Kombinationvon Member und Ergebniszellen, die letztlich von der Abfrage zurückgegebenwerden.

Ein einzelner Member kann, muss aber nicht, in Klammern eingeschlossenwerden.

Es ist nicht möglich ein leeres Tupel zu erzeugen, da „()“ kein gültigesTupel ist. Hierfür gibt es beim Analysis Services 2012 die Möglichkeit, einNull-Member zu spezifizieren. Dieser wird mit (null) definiert.

Zusätzlich zur Möglichkeit, Tupel explizit mittels MDX-Code zu erzeugen,gibt es eine Reihe von Funktionen, welche Tupel als Rückgabewerte erzeugen.Die Dimensionalität eines Tupels hängt dabei stark von der Menge an Dimen-sionen ab, deren Member das Tupel zusammensetzen. Auch die Reihenfolge,in der die Dimensionen in einem Tupel erscheinen, spielt eine wichtige Rollefür die Dimensionalität des Tupels. Member aller Dimensionen können Teil

Page 26: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

12 Kapitel 2 Grundlagen

Abbildung 2.2: Tupel

eines Tupels sein, d. h. auch Member der Measures-Dimension. Innerhalbeines Tupels kann aber kein weiteres Tupel genutzt werden.

// Ein Tupel kann das folgende Erscheinungsbild haben :(

[Zeit].[Jahr].[2013],{

[ Geografie ].[ Staat ].[ Deutschland ],[ Geografie ].[ Staat ].[ Schweiz ]

})// Die Schachtelung von Tupeln ist jedoch nicht zulässig;(

[Zeit].[Jahr].[2013],(

[ Geografie ].[ Staat ].[ Deutschland ],[ Geografie ].[ Staat ].[ Schweiz ]

))

Page 27: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

2.2 MDX - Operatoren 13

2.1.6 Geschwungene Klammern {} – Mengen / Sets

Mithilfe von geschwungenen Klammern werden Mengen dargestellt. EineMenge ist eine Sammlung von Tupeln mit gleicher Dimensionalität. Die Mengedarf aus keinem, einem oder mehreren Tupeln bestehen. Eine Menge mit nullTupeln entspricht einer leeren Menge. In MDX darf eine Menge ein Tupelmehrfach enthalten. Darüber hinaus spielt die Reihenfolge eine signifikanteRolle. Ein Beispiel:

SELECT{([Zeit].[Jahr].[2013]), ([Zeit].[Jahr].[2014])}ON COLUMNS ,{[ Produkt ].[ Produktname ].[Danone - Vollmilch ],[ Produkt ].[ Produktname ].[Danone -Schoko - Milch ],[ Produkt ].[ Produktname ].[Danone - haltbare Milch ],[ Produkt ].[ Produktname ].[Danone - fettarme Milch ]}ON ROWS

FROM [ Umsatz ]

Abbildung 2.3: Menge

2.2 MDX - OperatorenIn MDX werden arithmetische, logische, Vergleichs-, Mengen-, Zeichenfolgen-und unäre Operatoren unterstützt. In Tabelle 2.1 sind die unterstütztenOperatoren beschrieben.

Page 28: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

14 Kapitel 2 Grundlagen

Tabelle 2.1: MDX-Operatoren

Operator Funktion

I. Numerische Operatoren

+ Führt eine arithmetische Operation aus, die zwei Zahlen addiert.

– Führt eine arithmetische Operation aus, die eine Zahl von eineranderen subtrahiert.

* Führt eine arithmetische Operation aus, die zwei Zahlen multipli-ziert.

/ Führt eine arithmetische Operation aus, die zwei Zahlen dividiert.

% Dividiert den Wert des Kindes zum akkumulierten Wert und multi-pliziert das Ergebnis mit 100

^ Führt einen arithmetischen Vorgang aus, bei dem eine Zahl miteiner anderen Zahl potenziert wird.

II. Vergleichsoperatoren

< Führt eine Vergleichsoperation aus, die bestimmt, ob der Wert einesMDX-Ausdrucks kleiner als der Wert eines anderen MDX-Ausdrucksist.

<= Führt eine Vergleichsoperation aus, die bestimmt, ob der Werteines MDX-Ausdrucks kleiner oder gleich dem Wert eines anderenMDX-Ausdrucks ist.

<> Führt eine Vergleichsoperation aus, die bestimmt, ob der Wert einesMDX-Ausdrucks ungleich dem Wert eines anderen MDX-Ausdrucksist.

= Führt eine Vergleichsoperation aus, die bestimmt, ob der Wert einesMDX-Ausdrucks gleich dem Wert eines anderen MDX-Ausdrucksist.

> Führt eine Vergleichsoperation aus, die bestimmt, ob der Wert einesMDX-Ausdrucks größer als der Wert eines anderen MDX-Ausdrucksist.

>= Führt eine Vergleichsoperation aus, die bestimmt, ob der Werteines MDX-Ausdrucks größer oder gleich dem Wert eines anderenMDX-Ausdrucks ist.

III. Logische Operatoren

AND Führt eine logische Konjunktion zweier numerischer Ausdrücke aus.

[Fortsetzung auf nächster Seite. . . ]

Page 29: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

2.2 MDX - Operatoren 15

Tabelle 2.1: . . . Fortsetzung

Operator Funktion

IS Führt einen logischen Vergleich zweier Objektausdrücke aus.

NOT Führt eine logische Negation eines numerischen Ausdrucks aus.

OR Führt eine logische Disjunktion zweier numerischer Ausdrücke aus.

XOR Führt eine logische Exklusion zweier numerischer Ausdrücke aus.

IV. Unäre Operatoren

– Führt eine unäre Operation aus, die den negativen Wert einesnumerischen Ausdrucks zurück gibt.

+ Führt eine unäre Operation aus, die den positiven Wert eines nu-merischen Ausdrucks zurück gibt.

V. Zeichenfolge-Operatoren

- - Zeigt vom Benutzer bereitgestellten Kommentartext an.

+ Führt eine Zeichenfolgenoperation aus, die mindestens zwei Zeichen-folgen, Tupel oder eine Kombination von Zeichenfolgen und Tupelnverkettet.

// Zeigt vom Benutzer eingegebenen Text an.

/*. . . */ Zeigt vom Benutzer bereitgestellten Kommentartext an.

VI. Mengenoperatoren

+ Führt eine Mengenoperation aus, die eine Vereinigungsmenge zweierMengen zurückgibt. Dabei werden doppelte Elemente entfernt.

* Führt eine Mengenoperation aus, die das Kreuzprodukt zweierMengen zurückgibt.

: Führt eine Mengenoperation aus, die eine natürlich geordnete Mengezurückgibt, wobei die beiden angegebenen Elemente als Endpunktedienen und alle Elemente zwischen den beiden angegebenen Ele-menten als Elemente der Menge eingeschlossen werden.

– Führt eine Mengenoperation aus, die die Differenzmenge zweierMengen zurückgibt. Dabei werden doppelte Elemente entfernt.

Page 30: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel
Page 31: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3 Funktionen

3.1 Elementfunktionen

3.1.1 Ancestor()

Die Funktion Ancestor gibt den Vorgänger des angegebenen Elements aufeiner angegebenen Ebene oder in einem angegebenen Abstand vom Elementzurückgibt.

Ancestor()-Syntax

// Level :Ancestor ( Member_Expression , Level_Expression )// Numeric :Ancestor ( Member_Expression , Distance )

Beispiel mit Levelangabe

SELECT {[ Geografie ].[ Bundesland ].&[13]} ON COLUMNS ,Ancestor ([ Produkt ].[ Sortiment ].[ Produkt ].

[ Friedrichs - Pumpernickel Brot],[ Produkt ].[ Sortiment ].[ Subkategorie ]) ON ROWS

FROM [ Umsatz ]

Als Ergebnis wird das Element Brot ausgegeben, da es in der Ebene Subka-tegorie liegt und das Vorgängerelement von Friedrichs–Pumpernickel Brot ist(Abb. 3.1a).

Beispiel mit Distanzangabe

SELECT {[ Geografie ].[ Bundesland ].&[13]} ON COLUMNS ,Ancestor ([ Produkt ].[ Sortiment ].[ Produkt ].

[ Friedrichs - Pumpernickel Brot], 2) ON ROWSFROM [ Umsatz ]

17

Page 32: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

18 Kapitel 3 Funktionen

Beim Beispiel mit Distanzangabe erhält man als Ergebnis das ElementBackwaren, da es zwei Ebenen über Friedrichs - Pumpernickel Brot liegt unddessen Vorgänger Element ist (Abb. 3.1b).

Abbildung 3.1: Ancestor() mit Level- (links) und Distanzangabe (rechts)

3.1.2 ClosingPeriod()

Die Funktion ClosingPeriod gibt das letzte gleichgeordnete Element unterden nachfolgenden Werten eines angegebenen Elements auf einer angegebenenEbene zurück. ClosingPeriod ist hauptsächlich zur Verwendung mit einerDimension des Typ Zeit gedacht, es kann jedoch auch mit beliebigen anderenDimensionen verwendet werden.

ClosingPeriod()-Syntax

ClosingPeriod ([ Level_Expression [, Member_Expression ] ])

Wenn nur ein Ebenenausdruck verwendet wird, gibt die ClosingPeri-

od-Funktion den Standardwert des letzten gleichgeordneten Elements derangegeben Ebene zurück. Wenn ein Ebenenausdruck sowie ein Elementaus-druck angegeben werden, gibt die ClosingPeriod-Funktion den Standard-wert des letzten gleichgeordneten Elements unter den nachfolgenden Wertendes angegeben Elements auf der angegeben Ebene zurück. Wenn weder einEbenenausdruck noch ein Elementausdruck angegeben ist, verwendet dieClosingPeriod-Funktion Standardebene und -element der Dimension vomTyp Zeit (sofern vorhanden) im Cube.

Beispiel mit Ebenenausdruck und Elementausdruck

SELECT ClosingPeriod ([Zeit].[ Kalender ].[ Monat ],[Zeit].[ Kalender ].[Jahr].&[2013]) ON COLUMNS

FROM [ Umsatz ]

Im Beispiel mit Ebenen- und Elementausdruck (Abb. 3.2a) wird der Stan-dardmeasure des Monats Dezember für das Jahr 2013 ausgegeben, da dieserdas letzte gleichgeordnet Element in der Ebene Monat ist.

Page 33: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.1 Elementfunktionen 19

Beispiel mit Ebenenausdruck

SELECT ClosingPeriod ([Zeit].[ Kalender ].[ Quartal ]) ON COLUMNSFROM [ Umsatz ]

Im Beispiel mit Ebenenausdruck (Abb. 3.51b) wird der Standardmeasuredes letzten Elements der Ebene Quartal ausgegeben, d.h. das 4. Quartal 2014,da es das letzte gleichgeordnet Element in der Ebene Quartal ist.

Abbildung 3.2: ClosingPeriod() mit Ebenenausdruck und Elementaus-druck (links) bzw. Ebenenausdruck allein (rechts)

3.1.3 Cousin()

Die Funktion Cousin gibt das untergeordnete Element mit derselben relati-ven Position unter seinem übergeordneten Element an, wie das angegebeneuntergeordnete Element zu seinem übergeordneten Element.

Cousin()-Syntax

Cousin ( Member_Expression , Ancestor_Member_Expression )

Beispiel

SELECT Cousin ([ Produkt ].[ Sortiment ].[ Produkt ].[ Golden Toast - Bagels ],

[ Produkt ].[ Sortiment ].[ Subkategorie ].[Brot]) ON COLUMNS ,{[ Measures ].[ Umsatzbetrag ]} ON ROWS

FROM [ Umsatz ]

Bei diesem Beispiel wird das Element Colonial – Roggenbrot ausgegeben.Dies geschieht, weil es die selbe relative Position unter seinem Elternelementbesitzt wie das Element Golden Toast - Bagels.

Abbildung 3.3: Cousin()

Page 34: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

20 Kapitel 3 Funktionen

3.1.4 CurrentMember()

Die Funktion CurrentMember gibt das aktuelle Element entlang einer angege-benen Hierarchie während einer Iteration zurück.

CurrentMember()-Syntax

Hierarchy_Expression . CurrentMember

Beispiel

WITH MEMBER [ Measures ].[ Current Produkt ] AS[ Produkt ].[ Sortiment ]. CurrentMember .Name

SELECT[ Measures ].[ Currentprodukt ] ON COLUMNS ,[ Produkt ].[ Sortiment ].[ Subkategorie ]. Members ON ROWS

FROM [ Umsatz ]

Abbildung 3.4: CurrentMember()

3.1.5 DataMember()

Die Funktion DataMember gibt das systemgenerierte Datenelement zurück,das einem Nicht-Blattelement einer Dimension zugeordnet ist.

Page 35: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.1 Elementfunktionen 21

DataMember()-Syntax

Member_Expression . DataMember

Beispiel

SELECT [ Produkt ].[ Preis ].&[3.94]. DataMember ON COLUMNSFROM [ Umsatz ]

Abbildung 3.5: DataMember()

3.1.6 DefaultMember()

Wenn man DefaultMember verwendet wird das Standardelement einer Hier-archie zurückgegeben.

DefaultMember()-Syntax

Hierarchy_Expression . DefaultMember

Beispiel

SELECT [Zeit].[ Quartal ]. DefaultMember ON COLUMNSFROM [ Umsatz ]

Abbildung 3.6: DefaultMember()

3.1.7 FirstChild()

Die Funktion FirstChild gibt das erste untergeordnete Element der angege-benen Ebene zurück. Die Reihenfolge der Elemente entspricht der Datenablageim Cube.

FirstChild()-Syntax

Member_Expression . FirstChild

Page 36: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

22 Kapitel 3 Funktionen

Beispiel

SELECT{[ Geografie ].[ Region ].&[ Deutschland Ost]} ON COLUMNS ,{[ Produkt ].[ Sortiment ].[ Subkategorie ].[ Feinkostfleisch ].FirstChild } ON ROWS

FROM [ Umsatz ]

Als Ergebnis dieser Abfrage erhalten wir das Element American – geschnit-tenes Hühnchen, da es das erste Element in der Subkategorie Feinkostfleischist.

Abbildung 3.7: FirstChild()

3.1.8 FirstSibling()

Bei FirstSibling wird das erste untergeordnete Element für das übergeord-nete Element eines Elements zurückgegeben.

FirstSibling()-Syntax

Member_Expression . FirstSibling

Beispiel

SELECT{[ Geografie ].[ Region ].&[ Deutschland Ost]} ON COLUMNS ,{[Zeit].[Jahr].&[2014]. FirstSibling } ON ROWS

FROM [ Umsatz ]

Es wird das Jahr 2013 zurückgegeben, da es das erste untergeordneteElement der Ebene Jahr ist.

Abbildung 3.8: FirstSibling()

Page 37: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.1 Elementfunktionen 23

3.1.9 Item()

Die Funktion Item gibt ein ausgewähltes Element aus dem angegebenen Tupelzurück. Die Zählweise beginnt wie bei einem Array mit 0.

Item()-Syntax

Tuple_Expression .Item( Index )

Beispiel

SELECT [ Measures ].[ Umsatzbetrag ] ON COLUMNS ,([ Geografie ].[ Bundesland ].&[01],

[ Produkt ].[ Sortiment ].[ Subkategorie ].&[001]. Children ).Item (2) ON ROWS

FROM Umsatz

Es wird hier das dritte Element des Tupels ausgegeben.

Abbildung 3.9: Item()

3.1.10 Lag()

Die Funktion Lag gibt das Element zurück, welches die angegebene Anzahlvon Positionen vor dem angegebenen Element auf der Ebene liegt. Wenn derangegebene Abstand 0 beträgt, gibt die Lag-Funktion das angegebene Elementselbst zurück. Wenn der angegebene Abstand negativ ist, gibt die Lag-Funktionein nachfolgendes Element zurück. Lag(1) entspricht derPrevMember-Funktion(Abschnitt 3.1.20) und Lag(-1) entspricht der NextMember-Funktion (Abschnitt3.1.16).

Lag()-Syntax

Member_Expression .Lag( Index )

Beispiel mit positivem Index

SELECT ([ Measures ].[ Umsatzbetrag ]) ON COLUMNS ,[ Produkt ].[ Sortiment ].[ Subkategorie ].&[005].Lag (2) ON ROWSFROM Umsatz

Page 38: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

24 Kapitel 3 Funktionen

Es wird hier das Element Feinkostfleisch zurückgegeben, weil es zwei Stellenvor dem ausgewählten Element steht.

Abbildung 3.10: Lag() positiv

Beispiel mit negativem Index

SELECT [ Measures ].[ Umsatzbetrag ] ON COLUMNS ,[ Produkt ].[ Sortiment ].[ Subkategorie ].&[005].Lag ( -1) ON ROWSFROM Umsatz

Es wird hier das Element Hamburger zurückgegeben, weil es eine Stellennach dem ausgewählten Element steht.

Abbildung 3.11: Lag() negativ

3.1.11 LastChild()

Die Funktion LastChild gibt das letzte untergeordnete Element der angege-benen Ebene zurück. Die Reihenfolge der Elemente ist, sowie sie im Cubeangelegt wurden.

LastChild()-Syntax

Member_Expression . LastChild

Beispiel

SELECT{[ Geografie ].[ Region ].&[ Deutschland Ost]} ON COLUMNS ,{[ Produkt ].[ Sortiment ].[ Subkategorie ].[ Feinkostfleisch ].LastChild } ON ROWS

FROM [ Umsatz ]

Als Ergebnis erhält man bei dieser Abfrage das Element Meica – geschnitte-nes Hühnchen, da dies das letzte Element in der Subkategorie Feinkostfleischist.

Page 39: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.1 Elementfunktionen 25

Abbildung 3.12: LastChild()

3.1.12 LastSibling()

Die Funktion LastSibling gibt das letzte untergeordnete Element des über-geordneten Elements eines angegebenen Elements zurück.

LastSibling()-Syntax

Member_Expression . LastSibling

Beispiel

SELECT{[ Geografie ].[ Region ].&[ Deutschland Ost]} ON COLUMNS ,{[Zeit].[Jahr].&[2013]. LastSibling } ON ROWS

FROM [ Umsatz ]

Es wird das Jahr 2014 zurückgegeben, da es das letzte untergeordneteElement des Elements Jahr ist.

Abbildung 3.13: LastSibling()

3.1.13 Lead()

Die Lead-Funktion gibt das Element zurück, welches die angegebene Anzahlvon Positionen hinter dem angegebenen Element entlang der Ebene steht.

Lead()-Syntax

Member_Expression .Lead( Index )

Beispiel mit positivem Index

SELECT [ Measures ].[ Umsatzbetrag ] ON COLUMNS ,[ Produkt ].[ Sortiment ].[ Subkategorie ].&[005].Lead (2) ON ROWSFROM Umsatz

Page 40: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

26 Kapitel 3 Funktionen

Es wird hier das Element Hot Dogs zurückgegeben, weil es zwei Stellenhinter dem ausgewählten Element steht.

Abbildung 3.14: Lead() mit positivem Index

Beispiel mit negativem Index

SELECT [ Measures ].[ Umsatzbetrag ] ON COLUMNS , [ Produkt ].[ Sortiment ].[ Subkategorie ].&[005].Lead ( -2) ON ROWS

FROM Umsatz

Es wird hier das Element Feinkostfleisch zurückgegeben, weil es zwei Stellenvor dem ausgewählten Element steht.

Abbildung 3.15: Lead() mit negativem Index

3.1.14 LinkMember()

Die Funktion LinkMember gibt das Element zurück, das in einer angegebenenHierarchie gleichbedeutend mit dem angegebenen Element ist.

LinkMember()-Syntax

LinkMember ( Member_Expression , Hierarchy_Expression )

Beispiel

SELECT Ascendants ( LinkMember ([ Produkt ].[ Produkt ].[Colonial - Bagels ], [ Produkt ].[ Sortiment ])) ON COLUMNS ,{[ Measures ].[ Umsatzbetrag ]} ON ROWS

FROM Umsatz

Die Funktion LinkMember gibt in diesem Beispiel den Schlüsselwert desElements Colonial – Bagels aus der Hierachie Sortiment an die FunktionAscendants. Die Ascendants-Funktion ist für die hier gezeigte Ausgabe ver-antwortlich. Informationen zu Ascendants sind in Abschnitt 3.3.3 auf Seite52 zu finden.

Page 41: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.1 Elementfunktionen 27

Abbildung 3.16: LinkMember()

3.1.15 Members()

Die Funktion Members gibt einen durch eine Zeichenfolgeausdruck angegebenesElement zurück.

Members()-Syntax

Members ( Member_Name )

Beispiel

SELECT{[ Geografie ].[ Region ].&[ Deutschland Ost]} ON COLUMNS ,Members (" Bagels ") ON ROWS

FROM [ Umsatz ]

Die Funktion Members sucht in diesem Beispiel im gesamten Cube nachdem String Bagels und gibt ihn aus.

Abbildung 3.17: Members()

3.1.16 NextMember()

Bei NextMember wird das nächste Element in der Ebene zurückgegeben.

NextMember()-Syntax

Member_Expression . NextMember

Beispiel

SELECT {[ Geografie ].[ Bundesland ].&[01]} ON COLUMNS ,{([Zeit].[Jahr].[2013],[Zeit].[ Quartal ].[1. Quartal ]. NextMember )} ON ROWS

FROM [ Umsatz ]

Page 42: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

28 Kapitel 3 Funktionen

Es wird in diesem Beispiel das 2. Quartal 2013 ausgegeben, da es dasnachfolge Element des 1. Quartals ist.

Abbildung 3.18: NextMember()

3.1.17 OpeningPeriod()

Die OpeningPeriod-Funktion gibt das erste gleichgeordnete Element unterden nachfolgenden Werten auf einer angegebenen Ebene zurück, optional fürein angegebenes Element.

OpeningPeriod()-Syntax

OpeningPeriod ([ Level_Expression [, Member_Expression ] ])

Beispiel

SELECT OpeningPeriod ([Zeit].[ Kalender ].[ Monat ],[Zeit].[ Kalender ].[ Quartal ].&[201403]) ON COLUMNS

FROM [ Umsatz ]

Das Element Juli wird angezeigt, da es das erste gleichgeordnet Element inder Hierarchie Monat unter dem 3. Quartal von 2014 ist.

Abbildung 3.19: OpeningPeriod()

3.1.18 ParallelPeriod()

Diese Funktion gibt ein Element aus einer früheren Periode in derselbenrelativen Position wie das angegebene Element zurück.

ParallelPeriod()-Syntax

ParallelPeriod ([ Level_Expression [, Index [,Member_Expression ] ] ])

Page 43: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.1 Elementfunktionen 29

Beispiel

SELECT ParallelPeriod ([Zeit].[ Kalender ].[ Quartal ], 2,[Zeit].[ Kalender ].[ Monat ].&[201309]) ON COLUMNS

FROM [ Umsatz ]

In diesem Beispiel wird basierend auf der Quartalebene die parallele Periodefür den Monat September 2013 zurückgegeben, die zwei Perioden zurückliegt,d. h. März 2013.

Abbildung 3.20: ParallelPeriod()

3.1.19 Parent()

Mit Parent wird das übergeordnete Element eines Elements zurück gegeben.

Parent()-Syntax

Member_Expression . Parent

Beispiel

SELECT{[ Geografie ].[ Region ].&[ Deutschland Ost]} ON COLUMNS ,{[Zeit].[ Kalender ].[ Quartal ].[1. Quartal ]. Parent } ON ROWS

FROM [ Umsatz ]

Es wird das Element Jahr 2013 ausgeben da es das übergeordnete Elementdes Elements 1. Quartal ist.

Abbildung 3.21: Parent()

3.1.20 PrevMember()

Die Funktion PrevMember gibt das vorherige Element in der Ebene zurück,die das angegebene Element enthält.

Page 44: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

30 Kapitel 3 Funktionen

PrevMember()-Syntax

Member_Expression . PrevMember

Beispiel

SELECT {[ Geografie ].[ Bundesland ].&[01]} ON COLUMNS ,{([Zeit].[Jahr].[2013], [Zeit].[ Quartal ].[2. Quartal ]. PrevMember )} ON ROWS

FROM [ Umsatz ]

Es wird in diesem Beispiel das 1. Quartal des Jahres 2013 ausgegeben, dadieses das Vorgänger-Element des 2. Quartals 2013 ist.

Abbildung 3.22: PrevMember()

3.1.21 StrToMember()

Diese String-Funktion gibt das durch eine Zeichenfolge im MDX-Formatangegebene Element zurück.

StrToMember()-Syntax

StrToMember ( Member_Name [, CONSTRAINED ])

Beispiel

SELECT StrToMember ("Ost") ON COLUMNS ,{([Zeit].[Jahr].[2013], [Zeit].[ Quartal ].[2. Quartal ])}ON ROWS

FROM [ Umsatz ]

Die Funktion StrToMember nimmt das erste Element im Cube, welches aufden String passt und gibt dieses aus.

Abbildung 3.23: StrToMember()

Page 45: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.2 Numerische Funktion 31

3.1.22 UnkownMember()

Die UnkownMember-Funktion gibt das einer Ebene oder eines Element zuge-ordnete unbekannte Element zurück.

UnknownMember()-Syntax

// Element :Member_Expression . UnknownMember// Hierarchie :Hierarchy_Expression . UnknownMember

Beispiel mit Hierarchie

SELECT[ Produkt ].[ Sortiment ].[All]. UnknownMember ON COLUMNS ,{([Zeit].[Jahr].[2013], [Zeit].[ Quartal ].[2. Quartal ])}ON ROWS

FROM [ Umsatz ]

Es wird das unbekannte Element der Produkt-Hierarchie Sortiment ausge-ben.

Abbildung 3.24: UnknownMember()

3.2 Numerische Funktion

3.2.1 Aggregate()

Die Funktion Aggregate gibt eine Zahl zurück, die durch Aggregieren überdie vom Mengenausdruck zurückgegebenen Zellen berechnet wird. Wenn keinnumerischer Ausdruck angegeben wird, aggregiert die Funktion jedes Measureim aktuellen Abfragekontext mit dem für jedes Measure definierten Standard-aggregationsoperator. Wenn ein numerischer Ausdruck angegeben wird, wertetdie Funktion zuerst den numerischen Ausdruck für jede Zelle in der angegebe-nen Menge aus und summiert dann die Werte. Die Aggregationsoperatorensind in Tabelle 3.1 erläutert.

Page 46: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

32 Kapitel 3 Funktionen

Aggregate()-Syntax

Aggregate ( Set_Expression [, Numeric_Expression ])

Beispiel

WITH MEMBER [ Geografie ].[ Bundesland ].[ Aggregate ] ASAggregate ({[ Geografie ].[ Bundesland ].&[15],

[ Geografie ].[ Bundesland ].&[16]})SELECT

[Zeit].[ Kalender ].[ Quartal ].&[201303] ON COLUMNS ,{[ Produkt ].[ Subkategorie ].[ Bagels ] :[ Produkt ].[ Subkategorie ].[ Feinkostfleisch ]} ON ROWS

FROM [ Umsatz ]WHERE [ Geografie ].[ Bundesland ].[ Aggregate ]

Abbildung 3.25: Aggregate()

Tabelle 3.1: Aggregations-Operatoren

Operator Ergebnis

Sum Gibt die Summe der Werte über die Menge zurück.

Count Gibt die Anzahl der Werte über die Menge zurück.

Max Gibt den Maximalwert über die Menge zurück.

Min Gibt den Minimalwert über die Menge zurück.

SemiadditiveAgg.-Fkt.

Gibt die Berechnung von semiadditivem Verhalten über dieMenge nach dem Projizieren der Form auf die Zeitachse zu-rück.

[Fortsetzung auf nächster Seite. . . ]

Page 47: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.2 Numerische Funktion 33

Tabelle 3.1: . . . Fortsetzung

Operator Ergebnis

Distinct Count Aggregiert über die zum Teilcube beitragenden Faktendaten,wenn die Slicerachse eine Menge enthält. Gibt ein DistinctCount-Measure für jedes Element der Menge zurück. DasErgebnis hängt von der Sicherheit der aggregieren Zellen undnicht von der Sicherheit der Zellen, die für die Berechnung er-forderlich sind, ab. Die Zellensicherheit für die Menge generierteinen Fehler. Die Zellensicherheit unterhalb der Granularitätder angegebenen Menge wird ignoriert. Berechnungen auf derMenge generieren einen Fehler. Berechnungen unterhalb derGranularität der Menge werden ignoriert. Ein Distinct Countüber eine Menge, die ein Element und mindestens ein unterge-ordnetes Element enthält, gibt den Distinct Count über zumuntergeordneten Element beitragende Fakten zurück.

Nicht aggregier-bare Attribute

Gibt die Summe der Werte zurück.

Gemischte Agg.-Fkt.

Nicht unterstützt, lösen einen Fehler aus.

Unäre Operato-ren

Nicht berücksichtigt. Die Werte werden durch Summierenaggregiert.

BerechneteMeasures

Festgelegte Lösungsreihenfolge, um sicherzustellen, dass dasberechnete Measure gilt.

Berechnete Ele-mente

Die üblichen Regeln gelten, d. h., die letzte Lösungsreihenfolgehat Vorrang.

Zuweisungen Zuweisungen werden entsprechend der Aggregationsfunktiondes Measures aggregiert. Ist die Aggregationsfunktion desMeasures Distinct Count, werden die Zuweisungen summiert.

3.2.2 Avg()

Die Funktion Avg wertet eine Menge aus und gibt den Durchschnitt der nichtleeren Werte in der Menge zurück, gemittelt über die Measures in der Mengeoder über ein angegebenes Measure. Wird eine Menge von leeren Tupeln odereine leere Menge angegeben, gibt die Avg-Funktion einen leeren Wert zurück.

Page 48: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

34 Kapitel 3 Funktionen

Avg()-Syntax

Avg( Set_Expression [, Numeric_Expression ])

Beispiel

WITH MEMBER Measures .[Avg Umsatzbetrag ] ASAvg(

{([ Produkt ].[ Sortiment ].[ Subkategorie ].[ Milch ]),([ Produkt ].[ Sortiment ].[ Subkategorie ].

[ frisches Schweinefleisch ]),([ Produkt ].[ Sortiment ].[ Subkategorie ].[ Bagels ])},([ Measures ].[ Umsatzbetrag ]))

SELECT Measures .[Avg Umsatzbetrag ] ON COLUMNS ,{([Zeit].[ Kalender ].[Jahr].[2014])} ON ROWS

FROM [ Umsatz ]

Abbildung 3.26: Avg()

3.2.3 Correlation()

Correlation gibt den Korrelationskoeffizienten des X-Y-Wertepaares zurück,die von einer Menge ausgewertet wurden.

Correlation()-Syntax

Correlation ( Set_Expression , Numeric_Expression_y [,Numeric_Expression_x ])

Beispiel

WITH MEMBER Measures .[ Correlation ] ASCorrelation (

[ Produkt ].[ Sortiment ].[ Subkategorie ].[ Bagels ].Children ,[ Measures ].[ Umsatzbetrag ],[ Measures ].[ Umsatzplan ])

SELECT Measures .[ Correlation ] ON COLUMNS ,{[ Geografie ].[ Staat ].&[ Deutschland ],[ Geografie ].[ Staat ].&[Ö sterreich ],[ Geografie ].[ Staat ].&[ Schweiz ]} ON ROWS

FROM [ Umsatz ]

Page 49: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.2 Numerische Funktion 35

Man erhält bei diesem Beispiel den Korrelationskoeffizenten der drei LänderDeutschland, Österreich und Schweiz.

Abbildung 3.27: Correlation()

3.2.4 Count()

Mit der Funktion Count kann man die Anzahl der Hierarchien in einem Cube,die Anzahl der Ebenen in der Hierarchie, die Anzahl der Zellen in einer Mengeoder die Anzahl der Dimensionen in einem Tupel ermitteln.

Count()-Syntax

// Dimension :Dimensions . Count

// Hierarchie :Hierarchy_Expression . Levels . Count

// Menge :Set_Expression . Count

// oderCount ( Set_Expression [, ( EXCLUDEEMPTY | INCLUDEEMPTY ) ])

// Tupel :Tuple_Expression . Count

Mit der folgenden Abfrage wird die Anzahl der Dimensionen ermittelt.

Beispiel mit Dimension

WITH MEMBER [ Measures ].[ Count_dim ] AS Dimensions . countSELECT [ Measures ].[ Count_dim ] ON COLUMNSFROM [ Umsatz ]

Abbildung 3.28: Count() mit Dimension

Page 50: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

36 Kapitel 3 Funktionen

Als Ergebnis der nächsten Abfrage wird die Anzahl der Hierarchieebenenzurückgegeben.

Beispiel mit Hierarchieebenen

WITH MEMBER [ Measures ].[ Count_hier ] AS[ Produkt ].[ Sortiment ]. Levels . count

SELECT [ Measures ].[ Count_hier ] ON COLUMNSFROM [ Umsatz ]

Abbildung 3.29: Count() mit Hierarchieebenen

Die folgende Abfrage ermittelt die Anzahl der Kind-Elemente der MengeMilch.

Beispiel mit Menge

WITH MEMBER Measures .[ Anzahl ] AS[ Produkt ].[ Sortiment ].[ Subkategorie ].[ Milch ].Children . Count

SELECT Measures .[ Anzahl ] ON COLUMNSFROM [ Umsatz ]

Abbildung 3.30: Count() mit Menge

Beispiel mit Tupel

WITH MEMBER Measures .[ Anzahl ] AS([Zeit].[ Monat ].&[201304], [ Produkt ].[ Sortiment ].[ Subkategorie ].[Brot]. Children ). Count

SELECT Measures .[ Anzahl ] ON COLUMNSFROM [ Umsatz ]

Diese Abfrage ermittelt die Anzahl der Elemente des Tupels

([Zeit].[ Monat ].&[201304],[ Produkt ].[ Sortiment ].[ Subkategorie ].[Brot]. Children )

Page 51: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.2 Numerische Funktion 37

Abbildung 3.31: Count() Tupel

3.2.5 Covariance()

Die Funktion Covariance gibt die Auffüllungskovarianz von X-Y-Wertepaarenzurück, die über einer Menge mithilfe der Formel für die unausgewogeneAuffüllung (geteilt durch die Anzahl der X-Y-Paare) berechnet wurden.

Covariance()-Syntax

Covariance ( Set_Expression , Numeric_Expression_y [,Numeric_Expression_x ])

Beispiel

WITH MEMBER Measures .[ Covariance ] ASCovariance (

[ Produkt ].[ Sortiment ].[ Subkategorie ].[ Bagels ].Children ,[ Measures ].[ Umsatzbetrag ],[ Measures ].[ Umsatzplan ])

SELECTMeasures .[ Covariance ] ON COLUMNS ,{[ Geografie ].[ Staat ].&[ Deutschland ],[ Geografie ].[ Staat ].&[Ö sterreich ],[ Geografie ].[ Staat ].&[ Schweiz ]} ON ROWS

FROM [ Umsatz ]

Man erhält die Auffüllungskovarianz der X-Y-Wertepaare der Länder Deutsch-land, Österreich und Schweiz.

Abbildung 3.32: Covariance()

Page 52: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

38 Kapitel 3 Funktionen

3.2.6 CovarianceN()

Die Funktion CovarianceN gibt die Stichprobenkovarianz eines X-Y-Wertepaareszurück, die über einer Menge mithilfe der Formel für die ausgewogene Auffül-lung (geteilt durch die Anzahl der X-Y-Paare) berechnet wurde.

CovarianceN()-Syntax

CovarianceN ( Set_Expression , Numeric_Expression_y [,Numeric_Expression_x ])

Beispiel

WITH MEMBER Measures .[ Covariance ] ASCovarianceN (

[ Produkt ].[ Sortiment ].[ Subkategorie ].[ Bagels ].Children ,[ Measures ].[ Umsatzbetrag ],[ Measures ].[ Umsatzplan ])

SELECTMeasures .[ Covariance ] ON COLUMNS ,{[ Geografie ].[ Staat ].&[ Deutschland ],[ Geografie ].[ Staat ].&[Ö sterreich ],[ Geografie ].[ Staat ].&[ Schweiz ]} ON ROWS

FROM [ Umsatz ]

In diesem Beispiel wird die Stichprobenkovarianz der X-Y-Wertepaare vonDeutschland, Österreich und der Schweiz zurückgegeben.

Abbildung 3.33: CovarianceN()

3.2.7 DistinctCount()

Diese Funktion gibt die Anzahl der unterschiedlichen nicht leeren Tupel ineiner Menge zurück.

DistinctCount()-Syntax

DistinctCount ( Set_Expression )

Page 53: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.2 Numerische Funktion 39

Beispiel

WITH MEMBER Measures .[ Anzahl ] AS DistinctCount ([ Measures ].[ Umsatzbetrag ] * [ Produkt ].[ Sortiment ].[ Subkategorie ].[ Sauerrahm ]. Children )

SELECT { Measures .[ Anzahl ]} ON COLUMNS ,{[ Geografie ].[ Staat ].&[ Deutschland ],[ Geografie ].[ Staat ].&[Ö sterreich ],[ Geografie ].[ Staat ].&[ Schweiz ]} ON ROWS

FROM [ Umsatz ]

In diesem Beispiel erhält man als Ergebnis die Anzahl der Tupel, die Werteenthalten.

Abbildung 3.34: DistinctCount()

3.2.8 LinRegIntercept()

Die Funktion LinRegIntercept berechnet die lineare Regression einer Mengeund gibt den Wert des x-Achsen-Abschnittes (Konstante b) in der Regressi-onsgleichung y = a * x + b zurück.

LinRegIntercept()-Syntax

LinRegIntercept ( Set_Expression , Numeric_Expression_y [,Numeric_Expression_x ])

Beispiel

WITH MEMBER Measures .[ LinRegIntercept ] AS LinRegIntercept ([ Produkt ].[ Sortiment ].[ Subkategorie ].[ Bagels ].Children ,[ Measures ].[ Umsatzbetrag ],[ Measures ].[ Umsatzplan ])

SELECT Measures .[ LinRegIntercept ] ON COLUMNS ,{[ Geografie ].[ Staat ].&[ Deutschland ],[ Geografie ].[ Staat ].&[Ö sterreich ],[ Geografie ].[ Staat ].&[ Schweiz ]} ON ROWS

FROM [ Umsatz ]

Page 54: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

40 Kapitel 3 Funktionen

Abbildung 3.35: LinRegIntercept()

3.2.9 LinRegPoint()

Diese Funktion berechnet die lineare Regression einer Menge und gibt denWert von y in der Regressionsgleichung y = a * x + b für einen bestimmtenWert von x zurück.

LinRegPoint()-Syntax

LinRegPoint ( Slice_Expression_x , Set_Expression ,Numeric_Expression_y [, Numeric_Expression_x ])

Beispiel

WITH MEMBER Measures .[ LinRegPoint ] ASLinRegPoint (

[ Measures ].[ Umsatzbetrag ],[ Produkt ].[ Sortiment ].[ Subkategorie ].[ Bagels ].Children ,[ Measures ].[ Umsatzbetrag ],[ Measures ].[ Umsatzplan ])

SELECT Measures .[ LinRegPoint ] ON COLUMNS ,{[ Geografie ].[ Staat ].&[ Deutschland ],[ Geografie ].[ Staat ].&[Ö sterreich ],[ Geografie ].[ Staat ].&[ Schweiz ]} ON ROWS

FROM [ Umsatz ]

Abbildung 3.36: LinRegPoint()

Page 55: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.2 Numerische Funktion 41

3.2.10 LinRegR2()

Diese Funktion berechnet die lineare Regression einer Menge und gibt denBestimmungskoeffizienten, R2, zurück. D.h. nach dem Erhalten der Punk-temenge gibt die LinRegR2-Funktion das statistische R2 zurück, das dieÜbereinstimmung der linearen Gleichung mit den Punkten beschreibt.

LinRegR2()-Syntax

LinRegR2 ( Set_Expression , Numeric_Expression_y [,Numeric_Expression_x ])

Beispiel

WITH MEMBER Measures .[ LinRegR2 ] ASLinRegR2 (

[ Produkt ].[ Sortiment ].[ Subkategorie ].[ Bagels ].Children ,[ Measures ].[ Umsatzbetrag ],[ Measures ].[ Umsatzplan ])

SELECT Measures .[ LinRegR2 ] ON COLUMNS ,{[ Geografie ].[ Staat ].&[ Deutschland ],[ Geografie ].[ Staat ].&[Ö sterreich ],[ Geografie ].[ Staat ].&[ Schweiz ]} ON ROWS

FROM [ Umsatz ]

Abbildung 3.37: LinRegR2()

3.2.11 LinRegSlope()

Die LinRegSlope-Funktion berechnet die lineare Regression einer Menge undgibt den Wert des Regressionskoeffizienten a in der Regressionsgleichung y =a * x + b zurück.

LinRegSlope()-Syntax

LinRegSlope ( Set_Expression , Numeric_Expression_y [,Numeric_Expression_x ])

Page 56: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

42 Kapitel 3 Funktionen

Beispiel

WITH MEMBER Measures .[ LinRegSlope ] ASLinRegSlope (

[ Produkt ].[ Sortiment ].[ Subkategorie ].[ Bagels ].Children ,[ Measures ].[ Umsatzbetrag ],[ Measures ].[ Umsatzplan ])

SELECT Measures .[ LinRegSlope ] ON COLUMNS ,{[ Geografie ].[ Staat ].&[ Deutschland ],[ Geografie ].[ Staat ].&[Ö sterreich ],[ Geografie ].[ Staat ].&[ Schweiz ]} ON ROWS

FROM [ Umsatz ]

Abbildung 3.38: LinRegSlope()

3.2.12 LinRegVariance()

Diese Funktion berechnet die lineare Regression einer Menge und gibt dieVarianz zurück, die der Regressionsgleichung y = a * x + b zugeordnet ist.Nach dem Erhalten der Punktemenge gibt die LinRegVariance-Funktion diestatistische Varianz zurück, die die Übereinstimmung der linearen Gleichungmit den Punkten beschreibt.

LinRegVariance()-Syntax

LinRegVariance ( Set_Expression , Numeric_Expression_y [,Numeric_Expression_x ] ])

Beispiel

WITH MEMBER Measures .[ LinRegVariance ] ASLinRegVariance (

[ Produkt ].[ Sortiment ].[ Subkategorie ].[ Bagels ].Children ,[ Measures ].[ Umsatzbetrag ],[ Measures ].[ Umsatzplan ])

SELECT Measures .[ LinRegVariance ] ON COLUMNS ,{[ Geografie ].[ Staat ].&[ Deutschland ],

Page 57: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.2 Numerische Funktion 43

[ Geografie ].[ Staat ].&[Ö sterreich ],[ Geografie ].[ Staat ].&[ Schweiz ]} ON ROWS

FROM [ Umsatz ]

Abbildung 3.39: LinRegVariance()

3.2.13 Max()

Die Funktion Max ermittelt den Maximalwert eines numerischen Ausdrucks,der über eine Menge ausgewertet wird.

Max()-Syntax

Max( Set_Expression [, Numeric_Expression ])

Beispiel

WITH MEMBER Measures .[Max] ASMax([ Produkt ].[ Sortiment ].[ Subkategorie ].[ Bagels ].Children ,

[ Measures ].[ Umsatzbetrag ])SELECT Measures .[Max] ON COLUMNS ,

{[ Geografie ].[ Staat ].&[ Deutschland ],[ Geografie ].[ Staat ].&[Ö sterreich ],[ Geografie ].[ Staat ].&[ Schweiz ]} ON ROWS

FROM [ Umsatz ]

Abbildung 3.40: Max()

Page 58: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

44 Kapitel 3 Funktionen

3.2.14 Median()

Diese Funktion gibt den Median eines numerischen Ausdrucks zurück, derüber eine Menge ermittelt wird.

Median()-Syntax

Median ( Set_Expression [, Numeric_Expression ])

Beispiel

WITH MEMBER Measures .[ Median ] ASMedian (

[ Produkt ].[ Sortiment ].[ Subkategorie ].[ Bagels ].Children ,[ Measures ].[ Umsatzbetrag ])

SELECT Measures .[ Median ] ON COLUMNS ,{[ Geografie ].[ Staat ].&[ Deutschland ],[ Geografie ].[ Staat ].&[Ö sterreich ],[ Geografie ].[ Staat ].&[ Schweiz ]} ON ROWS

FROM [ Umsatz ]

Abbildung 3.41: Median()

3.2.15 Min()

Die Funktion Min ermittelt den Minimalwert eines numerischen Ausdrucks,der von einer Menge ausgewertet wird.

Min()-Syntax

Min( Set_Expression [, Numeric_Expression ])

Beispiel

WITH MEMBER Measures .[Min] ASMin([ Produkt ].[ Sortiment ].[ Subkategorie ].[ Bagels ].Children ,

[ Measures ].[ Umsatzbetrag ])SELECT Measures .[Min] ON COLUMNS ,

Page 59: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.2 Numerische Funktion 45

{[ Geografie ].[ Staat ].&[ Deutschland ],[ Geografie ].[ Staat ].&[Ö sterreich ],[ Geografie ].[ Staat ].&[ Schweiz ]} ON ROWS

FROM [ Umsatz ]

Abbildung 3.42: Min()

3.2.16 Ordinal()

Die Ordinal-Funktion gibt den nullbasierten Ordinalwert, der einer Ebenezugeordnet ist, zurück.

Ordinal()-Syntax

Level_Expression . Ordinal

Beispiel

WITH MEMBER Measures .[ Ordinal ] AS[Zeit].[ Kalender ].[ Quartal ]. Ordinal

SELECT Measures .[ Ordinal ] ON COLUMNSFROM [ Umsatz ]

Abbildung 3.43: Ordinal()

3.2.17 Rank()

Mit Rank wird der einsbasierten Rang eines angegebenen Tupels in einerangegebenen Menge ermittelt.

Rank()-Syntax

Rank( Tuple_Expression , Set_Expression [, Numeric Expression ])

Page 60: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

46 Kapitel 3 Funktionen

Beispiel

WITH SET OrderedStaat AS Order([ Geografie ].[ Staat ].[ Staat ].Members ,[ Measures ].[ Umsatzbetrag ], BDESC )

MEMBER [ Measures ].[ Staat Rank] ASRank([ Geografie ].[ Staat ]. CurrentMember , OrderedStaat )

SELECT {[ Measures ].[ Staat Rank],[ Measures ].[ Umsatzbetrag ]} ON COLUMNS ,Order ([ Geografie ].[ Staat ].[ Staat ].Members ,[ Staat Rank], ASC) ON ROWS

FROM [ Umsatz ]

Abbildung 3.44: Rank()

3.2.18 Stdev() / Stddev()

Die Funktion ermittelt die Stichproben-Standardabweichung eines von ei-ner Menge ausgewerteten numerischen Ausdrucks. Die Standardabweichungwird mithilfe der Formel für die ausgewogene Auffüllung (geteilt durch n-1)berechnet.

Stdev()-Syntax

Stdev ( Set_Expression [, Numeric_Expression ])

Beispiel

WITH MEMBER Measures .[ Stdev ] ASStdev (

[ Produkt ].[ Sortiment ].[ Subkategorie ].[ Bagels ].Children ,[ Measures ].[ Umsatzbetrag ])

SELECT Measures .[ Stdev ] ON COLUMNS ,{[ Geografie ].[ Staat ].&[ Deutschland ],[ Geografie ].[ Staat ].&[Ö sterreich ],[ Geografie ].[ Staat ].&[ Schweiz ]} ON ROWS

FROM [ Umsatz ]

Page 61: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.2 Numerische Funktion 47

Abbildung 3.45: Stdev()

3.2.19 StdevP() / StddevP()

Die Funktion StdevP gibt die Standardabweichung eines von einer Mengeausgewerteten numerischen Ausdrucks bezüglich der Auffüllung zurück. DieserWert wird mithilfe der Formel (Maximum Likelihood Schätzung) für dieunausgewogene Auffüllung (geteilt durch n) berechnet.

StdevP()-Syntax

StdevP ( Set_Expression [, Numeric_Expression ])

Beispiel

WITH MEMBER Measures .[ StdevP ] ASStdevP (

[ Produkt ].[ Sortiment ].[ Subkategorie ].[ Bagels ].Children ,[ Measures ].[ Umsatzbetrag ])

SELECT Measures .[ StdevP ] ON COLUMNS ,{[ Geografie ].[ Staat ].&[ Deutschland ],[ Geografie ].[ Staat ].&[Ö sterreich ],[ Geografie ].[ Staat ].&[ Schweiz ]} ON ROWS

FROM [ Umsatz ]

Abbildung 3.46: StdevP()

3.2.20 Sum()

Die Funktion Sum ermittelt die Summe eines numerischen Ausdrucks, der übereiner Menge ausgewertet wird.

Page 62: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

48 Kapitel 3 Funktionen

Sum()-Syntax

Sum( Set_Expression [, Numeric_Expression ])

Beispiel

WITH MEMBER Measures .[Sum] ASSum([ Measures ].[ Umsatzbetrag ] *

[ Produkt ].[ Sortiment ].[ Subkategorie ].[ Bagels ]. Children )SELECT Measures .[Sum] ON COLUMNS ,

{[ Geografie ].[ Staat ].&[ Deutschland ],[ Geografie ].[ Staat ].&[Ö sterreich ],[ Geografie ].[ Staat ].&[ Schweiz ]} ON ROWS

FROM [ Umsatz ]

Abbildung 3.47: Sum()

3.2.21 Value()

Die Funktion Value gibt den Wert des aktuellen Elements der Measure-Dimension zurück, der sich mit dem aktuellen Element der Attributhierarchienim Kontext der Abfrage überschneidet.

Value()-Syntax

Member_Expression [. Value ]

Beispiel

WITH MEMBER [ Measures ].[ Value ] AS[ Measures ].[ Umsatzbetrag ]. ValueSELECT [ Measures ].[ Value ] ON COLUMNS ,

([ Produkt ].[ Kategorie ].&[01],[Zeit].[Jahr].&[2013]) ON ROWS

FROM [ Umsatz ]

Page 63: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.2 Numerische Funktion 49

Abbildung 3.48: Value()

3.2.22 Var() / Variance()

Die Var-Funktion ermittelt die Stichprobenvarianz eines von einer Mengeausgewerteten numerischen Ausdrucks. Die Stichprobenvarianz wird mithilfeder Formel (Varianz für die Menge) für die ausgewogene Auffüllung (geteiltdurch n) berechnet.

Variance()-Syntax

Var( Set_Expression [, Numeric_Expression ])

Beispiel

WITH MEMBER Measures .[Var] ASVar([ Produkt ].[ Sortiment ].[ Subkategorie ].[ Bagels ].Children ,

[ Measures ].[ Umsatzbetrag ])SELECT Measures .[Var] ON COLUMNS ,

{[ Geografie ].[ Staat ].&[ Deutschland ],[ Geografie ].[ Staat ].&[Ö sterreich ],[ Geografie ].[ Staat ].&[ Schweiz ]} ON ROWS

FROM [ Umsatz ]

Abbildung 3.49: Var()

3.2.23 VarP() / VarianceP()

Die Funktion VarP gibt die Auffüllungsvarianz eines von einer Menge ausge-werteten numerischen Ausdrucks zurück. Die Auffüllungsvarianz wird mithilfeder Formel (Varianz für die Menge) für die unausgewogene Auffüllung (geteiltdurch n-1) berechnet.

Page 64: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

50 Kapitel 3 Funktionen

VarianceP()-Syntax

VarP( Set_Expression [, Numeric_Expression ])

Beispiel

WITH MEMBER Measures .[VarP] ASVarP(

[ Produkt ].[ Sortiment ].[ Subkategorie ].[ Bagels ].Children ,[ Measures ].[ Umsatzbetrag ])

SELECT Measures .[VarP] ON COLUMNS ,{[ Geografie ].[ Staat ].&[ Deutschland ],[ Geografie ].[ Staat ].&[Ö sterreich ],[ Geografie ].[ Staat ].&[ Schweiz ]} ON ROWS

FROM [ Umsatz ]

Abbildung 3.50: VarP()

3.3 Mengenfunktion

3.3.1 AllMembers()

Die Funktion AllMembers wertet entweder einen Hierarchieausdruck odereinen Ebenenausdruck aus. Es wird eine Menge zurück gegeben, die alleElemente der angegebenen Hierarchie oder Ebene enthält. Hierzu zählen alleberechneten Elemente der Hierarchie oder Ebene.

AllMembers()-Syntax

// Hierarchie :Hierarchy_Expression . AllMembers// Ebene :Level_Expression . AllMembers

Page 65: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.3 Mengenfunktion 51

Beispiel mit Hierarchie

SELECT [Zeit].[Jahr].[2013] ON COLUMNS ,[ Sortiment ]. AllMembers ON ROWS

FROM [ Umsatz ]

Beispiel mit Ebene

SELECT [Zeit].[Jahr].[2013] ON COLUMNS ,[ Produkt ].[ Sortiment ].[ Subkategorie ]. AllMembers ON ROWS

FROM [ Umsatz ]

Abbildung 3.51: AllMembers() mit Hierarchie-Ausdruck (oben) und Ebe-nenausdruck (unten)

3.3.2 Ancestors()

Ancestors ist eine Funktion, die die Menge aller Vorgänger eines angegebenenElements in einer angegebenen Ebene oder in einem angegebenen Abstandvom Element zurückgibt. In Microsoft SQL Server Analysis Services 2012enthält die zurückgegebene Menge stets ein einzelnes Element. Die Rückgabemehrerer übergeordnete Elemente zu einem einzelnen Element werden vonAnalysis Services nicht unterstützt.

Page 66: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

52 Kapitel 3 Funktionen

Ancestors()-Syntax

// Ebene :Ancestors ( Member_Expression , Level_Expression )// Numeric :Ancestors ( Member_Expression , Distance )

Beispiel mit Ebene

SELECT {[ Measures ].[ Umsatzbetrag ]} ON COLUMNS ,Ancestors ([ Produkt ].[ Sortiment ].[ Produkt ].[Herta - extra magerer Hamburger ],[ Produkt ].[ Sortiment ].[ Subkategorie ]) ON ROWS

FROM [ Umsatz ]

Beispiel mit Abstand

SELECT {[ Measures ].[ Umsatzbetrag ]} ON COLUMNS ,Ancestors ([ Produkt ].[ Sortiment ].[ Produkt ].&[1002], 2)ON ROWS

FROM [ Umsatz ]

Abbildung 3.52: Ancestors() mit Ebenenangabe (links) und Abstandsan-gabe (rechts)

3.3.3 Ascendants()

Ascendants gibt eine Menge der vorausgehenden Elemente zu einem angege-benen Element zurück, einschließlich des Elements selbst.

Ascendants()-Syntax

Ascendants ( Member_Expression )

Beispiel

SELECT {[ Measures ].[ Umsatzbetrag ]} ON COLUMNS ,Ascendants ([ Produkt ].[ Sortiment ].[ Produkt ].&[2012])ON ROWS

FROM [ Umsatz ]

Page 67: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.3 Mengenfunktion 53

Mit dieser Abfragen wird das Element selbst und die darüber liegendenEbenen ausgegeben.

Abbildung 3.53: Ascendants()

3.3.4 Axis()

Die Funktion Axis gibt die Menge der Tupel auf der angegebenen Achsezurück.

Axis()-Syntax

Axis( Axis_Number )

Beispiel

WITH MEMBER Measures . AXISDEMO AS SetToValue (Axis (1))SELECT Measures . AXISDEMO ON 0,

[Zeit].[ Quartal ]. members ON 1FROM [ Umsatz ]

Abbildung 3.54: Axis()

Page 68: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

54 Kapitel 3 Funktionen

3.3.5 BottomCount()

Die Funktion BottomCount sortiert eine Menge in aufsteigender Reihenfolgeund gibt die angegebene Anzahl von Tupeln in der angegebenen Menge mitden niedrigsten Werten zurück.

BottomCount()-Syntax

BottomCount ( Set_Expression , Count [, Numeric_Expression ])

Beispiel

SELECT {[ Measures ].[ Umsatzbetrag ]} ON COLUMNS ,BottomCount (

[ Produkt ].[ Sortiment ].[ Subkategorie ].&[006].Children ,8, [ Measures ].[ Umsatzbetrag ]) ON ROWS

FROM [ Umsatz ]

Abbildung 3.55: BottomCount()

3.3.6 BottomPercent()

Die Funktion BottomPercent sortiert eine Menge in aufsteigender Reihenfolgeund gibt eine Menge von Tupeln mit den niedrigsten Werten zurück, derenkumulativer Gesamtwert größer oder gleich einem angegebenen Prozentsatzist.

BottomPercent()-Syntax

BottomPercent ( Set_Expression , Percentage ,Numeric_Expression )

Page 69: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.3 Mengenfunktion 55

Beispiel

SELECT {[ Measures ].[ Umsatzbetrag ]} ON COLUMNS ,BottomPercent (

[ Produkt ].[ Sortiment ].[ Subkategorie ].&[006].Children ,18, ([ Measures ].[ Umsatzbetrag ])) ON ROWS

FROM [ Umsatz ]

Als Ergebnis der Abfrage erhält man die Elemente deren Gesamtwert über18% des Wertes ihres übergeordneten Elements kommen.

Abbildung 3.56: BottomPercent()

3.3.7 BottomSum()

Die BottomSum-Funktion sortiert eine angegebene Menge in aufsteigenderReihenfolge und gibt eine Menge von Tupeln mit den niedrigsten Wertenzurück, deren Summe kleiner oder gleich einem angegebenen Wert ist.

BottomSum()-Syntax

BottomSum ( Set_Expression , Value , Numeric_Expression )

Beispiel

SELECT {[ Measures ].[ Umsatzbetrag ]} ON COLUMNS ,BottomSum (

[ Produkt ].[ Sortiment ].[ Subkategorie ].&[006].Children ,50000 , ([ Measures ].[ Umsatzbetrag ])) ON ROWS

FROM [ Umsatz ]

Abbildung 3.57: BottomSum()

Page 70: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

56 Kapitel 3 Funktionen

3.3.8 Children()

Die Funktion Children gibt die Menge der untergeordneten Elemente einesangegebenen Elements zurück.

Children()-Syntax

Member_Expression . Children

Beispiel

SELECT{[ Geografie ].[ Region ].&[ Deutschland Ost]} ON COLUMNS ,{[ Produkt ].[ Subkategorie ]. Children } ON ROWS

FROM [ Umsatz ]

Abbildung 3.58: Children()

3.3.9 Crossjoin()

Crossjoin gibt das Kreuzprodukt mindestens einer Menge zurück.

Crossjoin()-Syntax

// Standard :Crossjoin ( Set_Expression1 , Set_Expression2 [, ...n])

Page 71: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.3 Mengenfunktion 57

// Alternativ :Set_Expression1 * Set_Expression2 [* ...n]

Beispiele

// Standardsyntax :SELECT

{[ Geografie ].[ Region ].&[ Deutschland Ost]} ON COLUMNS ,Crossjoin ([ Produkt ].[ Subkategorie ].Children , [ Geografie ].

[ Unternehmen ].[ Region ].&[ Deutschland Ost]. Children )ON ROWS

FROM [ Umsatz ]// alternative Syntax :SELECT

{[ Geografie ].[ Region ].&[ Deutschland Ost]} ON COLUMNS ,([ Produkt ].[ Subkategorie ]. Children * [ Geografie ].

[ Unternehmen ].[ Region ].&[ Deutschland Ost]. Children )ON ROWSFROM [ Umsatz ]

Das Abfrageergebnis ist in Abbildung 3.59 auf Seite 57 dargestellt.

Abbildung 3.59: Crossjoin()

Page 72: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

58 Kapitel 3 Funktionen

3.3.10 Descendants()

Descendants gibt eine Menge von nachfolgenden Werten des Elements auf derangegebenen Ebene oder in dem angegebenen Abstand zurück. Das ArgumentDesc_Flag ist ein gültiger Zeichenfolgenausdruck der ein Beschreibungs-Flagzur Unterscheidung möglicher Mengen von nachfolgenden Werten angibt.Optional können weite Werte anderer Ebenen ein- oder ausgeschlossen werden(siehe Tab. 3.2, S. 61).

Descendants()-Syntax

// Element mit Verwendung eines Ebenenausdrucks :Descendants ( Member_Expression [, Level_Expression [,

Desc_Flag ] ])// Element mit Verwendung eines numerischen Ausdrucks :Descendants ( Member_Expression [, Distance [, Desc_Flag ] ])// Menge mit Verwendung eines Ebenenausdrucks :Descendants ( Set_Expression [, Level_Expression [,

Desc_Flag ] ])// Menge mit Verwendung eines numerischen Ausdrucks :Descendants ( Set_Expression [, Distance [, Desc_Flag ] ])

Beispiel mit Ebene und Abstand

SELECT[ Geografie ].[ Region ].&[ Deutschland Ost] ON COLUMNS ,Descendants (

[ Produkt ].[ Sortiment ].[ Kategorie ].[ Fleisch ], 1) ON ROWSFROM [ Umsatz ]

Es werden alle Elemente der Hierarchieebene Subkategorie angezeigt, welcheunter dem Element Fleisch liegen bzw. diesem zugeordnet sind, da diese denAbstand = 1 zum angegeben Element besitzen.

Abbildung 3.60: Descendants() mit Ebene und Abstand

Page 73: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.3 Mengenfunktion 59

Beispiel mit Element und Ebene

SELECT[ Geografie ].[ Region ].&[ Deutschland Ost] ON COLUMNS ,Descendants ([ Produkt ].[ Sortiment ].[ Kategorie ].[ Fleisch ],

[ Produkt ].[ Sortiment ].[ Produkt ]) ON ROWSFROM [ Umsatz ]

Es werden alle Elemente der Hierarchieebene Produkt angezeigt, welcheunter dem Element Fleisch liegen bzw. diesem zugeordnet sind.

Abbildung 3.61: Descendants() mit Element und Ebene

Beispiel mit BEFORE

SELECT[ Geografie ].[ Region ].&[ Deutschland Ost] ON COLUMNS ,Descendants ([ Produkt ].[ Sortiment ].[ Kategorie ].[ Fleisch ],

[ Produkt ].[ Sortiment ].[ Produkt ],Before ) ON ROWSFROM [ Umsatz ]

Beispiel mit SELF_AND_BEFORE

SELECT[ Geografie ].[ Region ].&[ Deutschland Ost] ON COLUMNS ,Descendants ([ Produkt ].[ Sortiment ].[ Kategorie ].[ Fleisch ],

[ Produkt ].[ Sortiment ].[ Produkt ], SELF_AND_BEFORE )ON ROWS

FROM [ Umsatz ]

Page 74: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

60 Kapitel 3 Funktionen

Abbildung 3.62: Descendants() mit BEFORE

Abbildung 3.63: Descendants() mit SELF_AND_BEFORE

Page 75: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.3 Mengenfunktion 61

Tabelle 3.2: Argumente für Descendants-Flag (DESC_FLAG)

Flag Beschreibung

SELF Gibt nur die nachfolgenden Elemente auf der angegebenenEbene oder Abstand zurück. Die Funktion schließt das ange-gebene Element ein, wenn es sich bei der angegebenen Ebeneoder Abstand um die Ebene des angegebenen Elements han-delt.

AFTER Gibt alle nachfolgenden Elemente zurück, die der angegebenenEbene oder Abstand untergeordnet sind.

BEFORE Gibt die Elemente aus allen Ebenen zwischen dem angege-benen Element und der angegebenen Ebene oder Abstandzurück. Das angegebene Element wird ebenfalls angezeigt,jedoch nicht die Elemente der angegebenen Ebene oder desAbstands.

BEFORE_AND_AFTER

Gibt alle Elemente aus allen Ebenen zurück, die der Ebene desangegebenen Elements untergeordnet sind, sowie das angege-bene Element. Jedoch werden die Elemente in der angegebenenEbene oder Abstand nicht angezeigt.

SELF_AND_AFTER

Gibt die nachfolgende Elemente aus der angegebenen Ebeneoder Abstand sowie alle Ebenen, die der angegebenen Ebeneoder dem angegebenen Abstand untergeordnet sind, zurück.

SELF_AND_BEFORE

Gibt alle nachfolgenden Elemente aus der angegebenen Ebeneoder Abstand sowie die Elemente aus allen Ebenen zwischendem angegebenen Element und der angegebenen Ebene oderAbstand, einschließlich des angegebenen Elements, zurück.

SELF_BEFORE_AFTER

Gibt die nachfolgende Elemente aus allen Ebenen zurück,die der Ebene des angegebenen Elements untergeordnet sind,sowie das angegebene Element selbst.

LEAVES Gibt die nachfolgende Blattelemente zwischen dem angege-benen Element und der angegebenen Ebene oder Abstandzurück.

3.3.11 Distinct()

Die Distinct-Funktion wertet eine angegebene Menge aus, entfernt dabeidoppelte Tupel aus der Menge und gibt die resultierende Menge zurück.

Page 76: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

62 Kapitel 3 Funktionen

Distinct()-Syntax

Distinct ( Set_Expression )

Beispiel

SELECT {[Zeit].[Jahr].&[2013]} ON COLUMNS ,Distinct (

{[ Geografie ].[ Unternehmen ].[ Staat ].&[ Deutschland ],[ Geografie ].[ Unternehmen ].[ Staat ].&[ Deutschland ],[ Geografie ].[ Unternehmen ].[ Staat ].&[ Schweiz ]}) ON ROWS

FROM [ Umsatz ]

Abbildung 3.64: Distinct()

3.3.12 DrilldownMember()

Die Funktion DrilldownMember führt einen Drilldown für Elemente in einerangegebenen Menge aus, die in einer angegebenen zweiten Menge vorhandensind. Alternativ führt die Funktion einen Drilldown für eine Menge von Tupelnunter Verwendung der ersten Tupelhierarchie oder der optional angegebenenHierarchie aus.

DrilldownMember()-Syntax

DrillDownMember ( Set_Expression1 , Set_Expression2 [,[ Target_Hierarchy ]] [, [ RECURSIVE ] [, INCLUDE_CALC_MEMBERS ] ] )

Beispiel ohne RECURSIVE

SELECTDrilldownMember ([ Geografie ].[ Unternehmen ].Children ,

{[ Geografie ].[ Unternehmen ].[ Staat ].[ Deutschland ],[ Geografie ].[ Unternehmen ].[ Region ].&[ Deutschland Ost]})

ON COLUMNSFROM [ Umsatz ]

Es wird ein Drilldown für das Element Deutschland der ersten Mengeausgeführt, welches auch in der zweiten Menge vorkommt.

Page 77: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.3 Mengenfunktion 63

Abbildung 3.65: DrilldownMember() ohne RECURSIVE

Beispiel mit RECURSIVE

SELECTDrilldownMember ([ Geografie ].[ Unternehmen ].Children ,

{[ Geografie ].[ Unternehmen ].[ Staat ].[ Deutschland ],[ Geografie ].[ Unternehmen ].[ Region ].&[ Deutschland Ost]},RECURSIVE ) ON COLUMNS

FROM [ Umsatz ]

In diesem Beispiel wird ein Drilldown für das Element Deutschland der erstenMenge, das auch in der zweiten Menge enthalten ist, ausgeführt. Da diesmaljedoch das RECURSIVE-Argument angegeben wurde, vergleicht die Funktionweiterhin rekursiv die Elemente der Ergebnismenge (Elemente der EbeneRegion) mit der zweiten Menge. Dabei werden die untergeordneten Elementefür jedes Element in der Ergebnismenge (Elemente der Ebene Bundesland)abgerufen, das auch in der zweiten Menge vorhanden ist, bis keine weiterenElemente aus der Ergebnismenge in der zweiten Menge gefunden werden.

Abbildung 3.66: DrilldownMember() mit RECURSIVE

3.3.13 DrilldownMemberBottom()

Die Funktion DrilldownMemberBottom führt einen Drilldown bei Elementenin einer angegebenen Menge aus, die in einer angegebenen zweiten Mengevorhanden sind, wobei die Ergebnismenge auf eine angegebene Anzahl vonElementen beschränkt wird. Wie DrillDownMember (vgl. Abschnitt 3.3.12)kann die Funktion einen Drilldown auf eine eine Menge von Tupeln ausführen.

DrilldownMemberBottom()-Syntax

DrilldownMemberBottom ( Set_Expression1 , Set_Expression2 ,Count [, [ Numeric_Expression ][, RECURSIVE ] ])

Page 78: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

64 Kapitel 3 Funktionen

Beispiel

SELECTDrilldownMemberBottom (

{[ Produkt ].[ Sortiment ].[ Subkategorie ].&[001],[ Produkt ].[ Sortiment ].[ Subkategorie ].&[010]},[ Produkt ].[ Sortiment ].[ Subkategorie ].&[001], 3,[ Measures ].[ Umsatzmenge ]) ON COLUMNS

FROM [ Umsatz ]WHERE [ Measures ].[ Umsatzmenge ]

In diesem Beispiel werden neben den Umsatzmengen von Bagels und Brotdie drei Elemente mit den niedrigsten Umsatzmengen aus der SubkategorieBagels angezeigt.

Abbildung 3.67: DrilldownMemberBottom()

3.3.14 DrilldownMemberTop()

Diese Funktion führt einen Drilldown bei Elementen in einer angegebenenMenge aus, die in einer angegebenen zweiten Menge vorhanden sind, wo-bei das Resultset auf eine angegebene Anzahl von Elementen beschränktwird. Alternative ist hier die Verwendung von Tupeln möglich (vgl. vorherigeAbschnitte).

DrilldownMemberTop()-Syntax

DrilldownMemberBottom ( Set_Expression1 , Set_Expression2 ,Count [, [ Numeric_Expression ][, RECURSIVE ] ])

Beispiel

SELECTDrilldownMemberTop (

{[ Produkt ].[ Sortiment ].[ Subkategorie ].&[001],[ Produkt ].[ Sortiment ].[ Subkategorie ].&[010]},[ Produkt ].[ Sortiment ].[ Subkategorie ].&[001], 3,[ Measures ].[ Umsatzmenge ]) ON COLUMNS

FROM [ Umsatz ]

Page 79: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.3 Mengenfunktion 65

In diesem Beispiel werden neben den Umsatzmengen von Bagels und Brotdie drei Elemente mit den höchsten Umsatzmenge der Subkategorie Bageslangezeigt.

Abbildung 3.68: DrilldownMemberTop()

3.3.15 DrillupLevel()

Die Funktion DrillupLevel führt einen Drillup der Elemente einer Mengeaus, die sich in und oberhalb der angegebenen Ebene befinden.

DrillupLevel()-Syntax

DrillupLevel ( Set_Expression [, Level_Expression ])

Beispiel

SELECTDrillupLevel ({[ Produkt ].[ Sortiment ].[ Kategorie ],[ Produkt ].[ Sortiment ].[ Subkategorie ].&[001],[ Produkt ].[ Sortiment ].[ Subkategorie ].&[010],[ Produkt ].[ Sortiment ].[ Produkt ].&[1203]},[ Produkt ].[ Sortiment ].[ Subkategorie ]) ON COLUMNS

FROM [ Umsatz ]WHERE [ Measures ].[ Umsatzmenge ]

Bei dieser Abfrage werden nur die angegeben Elemente der Ebene Sub-kategorien und die Elemente der höheren Ebene angezeigt. Somit wird dasangegebene Element der Ebene Produkt nicht angezeigt.

Abbildung 3.69: DrillupLevel()

3.3.16 Except()

Die Funktion Except wertet zwei Mengen aus und entfernt diejenigen Tupelder ersten Menge, die auch in der zweiten Menge vorhanden sind. Optional

Page 80: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

66 Kapitel 3 Funktionen

können mit dem Parameter ALL auch doppelte Werte beibehalten werden.

Except()-Syntax

Except ( Set_Expression1 , Set_Expression2 [, ALL ])

Beispiel

SELECT [ Geografie ].[ Unternehmen ].[ Region ].&[ Deutschland Ost]. Children ON COLUMNS ,

Except ([ Produkt ].[ Sortiment ].[ Kategorie ].[ Backwaren ].Children ,[ Produkt ].[ Sortiment ].[ Subkategorie ].[ Muffins ])

ON ROWSFROM [ Umsatz ]

In diesem Beispiel wird das Tupel Muffins nicht angezeigt da es sowohl inder ersten als auch in der zweiten Menge vorkommt.

Abbildung 3.70: Except()

3.3.17 Exists()

Die Funktion Exists gibt die Menge der Tupel zurück, die in der erstenangegeben Menge, sowie in der zweiten angegeben Menge vorkommen. Wirdder optionale Parameter MeasureGroupName angegeben, gibt die FunktionTupel zurück, die zusammen mit einem oder mehreren Tupeln der zweitenMenge vorhanden sind, sowie Tupel mit verknüpften Zeilen in der Faktentabelleder angegebenen Measuregruppe.

Exists()-Syntax

Exists ( Set_Expression1 , Set_Expression2 [,MeasureGroupName ])

Beispiel

SELECT [ Geografie ].[ Unternehmen ].[ Region ].

Page 81: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.3 Mengenfunktion 67

&[ Deutschland Ost]. Children ON COLUMNS ,Exists ([ Produkt ].[ Sortiment ].[ Kategorie ].&[01].Children ,

[ Produkt ].[ Sortiment ].[ Subkategorie ].&[009]) ON ROWSFROM [ Umsatz ]

Bei diesem Beispiel gibt die Funktion das Tupel Muffin zurück, da dieses inder ersten und zweiten Menge vorhanden ist.

Abbildung 3.71: Exists()

3.3.18 Filter()

Die Funktion Filter untersucht eine angegebene Menge basierend auf einerSuchbedingung und gibt dann die gültige Ergebnismenge zurück.

Filter()-Syntax

Filter ( Set_Expression , Logical_Expression )

Beispiel

SELECT [ Measures ].[ Umsatzmenge ] ON COLUMNS ,Filter (

{[ Produkt ].[ Sortiment ].[ Kategorie ].&[01]. Children },[ Measures ].[ Umsatzmenge ] > 150000) ON ROWS

FROM [ Umsatz ]

Das Tupel Muffin wird nicht angezeigt weil die Umsatzmenge nur 133707Stück beträgt und damit der Bedingung nicht genügt.

Abbildung 3.72: Filter()

Page 82: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

68 Kapitel 3 Funktionen

3.3.19 Head()

Die Funktion Head gibt die Anzahl der angegeben Elementen aus einer Mengezurück, wobei die Reihenfolge der Elemente so zurückgeben wird wie sie imCube stehen. Doppelte Werte werden bei dieser Funktion beibehalten.

Head()-Syntax

Head( Set_Expression [, Count ])

Beispiel

SELECT [ Measures ].[ Umsatzbetrag ] ON COLUMNS ,Head([ Produkt ].[ Sortiment ].[ Subkategorie ].[Brot].

Children , 5) ON ROWSFROM Umsatz

Abbildung 3.73: Head()

3.3.20 Hierarchize()

Mit Hierarchize werden die Elemente einer Menge hierarchisch angeordnet.Doppelte Werte werden immer beibehalten.

Hierarchize()-Syntax

Hierarchize ( Set_Expression [, POST ])

Beispiel ohne POST

SELECT [ Measures ].[ Umsatzbetrag ] ON COLUMNS ,Hierarchize ({[ Produkt ].[ Sortiment ].[ Kategorie ],

[ Produkt ].[ Sortiment ].[ Subkategorie ]}) ON ROWSFROM Umsatz

Page 83: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.3 Mengenfunktion 69

Abbildung 3.74: Hierarchize() ohne POST

Es werden die die Elemente der unteren Ebene unter den Elementen deroben Ebene angezeigt (Abb. 3.74).

Beispiel mit POST

SELECT [ Measures ].[ Umsatzbetrag ] ON COLUMNS ,Hierarchize ({[ Produkt ].[ Sortiment ].[ Kategorie ],

[ Produkt ].[ Sortiment ].[ Subkategorie ]}, POST) ON ROWSFROM Umsatz

Wenn der Parameter POST gesetzt ist, werden die Elemente der unterge-ordneten Ebene vor den Elementen der oberen Ebene angezeigt (Abb. 3.75,S. 70).

3.3.21 LastPeriods()

Mit LastPeriods wird eine Menge von Elementen bis einschließlich des ange-gebenen Elements zurückgegeben.

Page 84: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

70 Kapitel 3 Funktionen

Abbildung 3.75: Hierarchize() mit POST

LastPeriods()-Syntax

LastPeriods ( Index [, Member_Expression ])

Beispiel

SELECT [ Measures ].[ Umsatzbetrag ] ON COLUMNS ,LastPeriods (3, [Zeit].[ Kalender ].[ Quartal ].&[201304])ON ROWS

FROM Umsatz

Abbildung 3.76: LastPeriods()

Page 85: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.3 Mengenfunktion 71

3.3.22 Members()

Die Funktion Members gibt die Menge der Elemente in einer Dimension, Ebeneoder Hierarchie zurück.

Members()-Syntax

// Hierarchie :Hierarchy_Expression . Members// Ebene :Level_Expression . Members

Beispiel mit Ebene

SELECT [ Measures ].[ Umsatzbetrag ] ON COLUMNS ,[Zeit].[Jahr].[Jahr]. Members ON ROWS

FROM Umsatz

Beispiel mit Hierarchie

SELECT[ Measures ].[ Umsatzbetrag ] ON COLUMNS ,[Zeit].[ Kalender ]. Members ON ROWS

FROM Umsatz

Abbildung 3.77: Members() mit Ebenenausdruck (links) und Hierarchie-ausdruck (rechts)

Page 86: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

72 Kapitel 3 Funktionen

3.3.23 NameToSet()

Die Funktion NameToSet gibt eine Menge zurück, die das durch eine Zeichen-folge im MDX-Format angegebene Element enthält.

NameToSet()-Syntax

NameToSet ( Member_Name )

Beispiel

SELECT [ Measures ].[ Umsatzbetrag ] ON COLUMNS ,NameToSet ("[ Bagels ]") ON ROWS

FROM Umsatz

Abbildung 3.78: NameToSet()

3.3.24 Order()

Die Funktion Order ordnet die Elemente einer angegebenen Menge an, wobeidie Hierarchie optional beibehalten wird oder nicht.

Order()-Syntax

// Nummerische Syntax :Order ( Set_Expression , Numeric_Expression [,

{ASC | DESC | BASC | BDESC } ])// String - Syntax :Order ( Set_Expression , String_Expression [,

{ASC | DESC | BASC | BDESC } ])

Beispiel

SELECT Order (([ Produkt ].[ Sortiment ].[ Kategorie ].[ Fleisch ].Children ,

[ Measures ].[ Umsatzbetrag ]), BDESC ) ON COLUMNSFROM Umsatz

Page 87: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.3 Mengenfunktion 73

Abbildung 3.79: Order()

3.3.25 PeriodsToDate()

Die Funktion PeriodsToDate gibt eine Menge von gleich geordneten Elemen-ten zurück, die derselben Ebene angehören wie ein angegebenes Element. DieMenge beginnt mit dem ersten gleich geordneten Element und endet mit demangegebenen Element, entsprechend der Einschränkung durch eine angegebeneEbene in der Dimension Zeit.

PeriodsToDate()-Syntax

PeriodsToDate ([ Level_Expression [, Member_Expression ] ])

Beispiel

SELECT PeriodsToDate ([Zeit].[ Kalender ].[Jahr],[Zeit].[ Kalender ].[ Monat ].&[201308]) ON COLUMNS

FROM Umsatz

Abbildung 3.80: PeriodsToDate()

3.3.26 Siblings()

Siblings gibt alle gleichgeordneten Elemente des angegebenen Elements unddas angegebene Element selbst zurück.

Siblings()-Syntax

Member_Expression . Siblings

Beispiel

SELECT {[ Measures ].[ Umsatzbetrag ]} ON COLUMNS ,{([Zeit].[Jahr].[2013], [Zeit].[ Quartal ].[1. Quartal ].

Siblings )} ON ROWSFROM [ Umsatz ]

Page 88: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

74 Kapitel 3 Funktionen

Abbildung 3.81: Siblings()

3.3.27 StripCalculatedMembers()

Die StripCalculatedMembers-Funktion gibt eine Menge zurück, die durchEntfernen berechneter Elemente aus einer angegebenen Menge entsteht.

StripCalculatedMembers()-Syntax

StripCalculatedMembers ( Set_Expression )

Beispiel

WITH MEMBER [ Measures ].[ Differenz zum Plan] AS"([ Measures ].[ Umsatzplan ]-[ Measures ].[ Umsatzbetrag ])* -1"

SELECTStripCalculatedMembers ({[ Measures ].[ Differenz zum Plan],

[ Measures ].[ Umsatzbetrag ]}) ON COLUMNS ,{([Zeit].[Jahr].[2013], [Zeit].[ Quartal ].[1. Quartal ].

Siblings )} ON ROWSFROM [ Umsatz ]

Abbildung 3.82: StripCalculatedMembers()

3.3.28 StrToSet()

Die Funktion StrToSet liefert eine Menge, die durch eine Zeichenfolge imMDX-Format angegeben wurde.

Page 89: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.3 Mengenfunktion 75

StrToSet()-Syntax

StrToSet ( Set_Specification [, CONSTRAINED ])

Beispiel

SELECT StrToSet ("[ kumulierter Umsatz ]") ON COLUMNS ,{([Zeit].[Jahr].[2013], [Zeit].[ Quartal ].[1. Quartal ].

Siblings )} ON ROWSFROM [ Umsatz ]

Abbildung 3.83: StrToSet()

3.3.29 Subset()

Die Funktion Subset liefert ausgehend von einer angegebenen Startpositioneine Teilmenge von Tupeln aus einer angegeben Menge zurück. Die Startpo-sition basiert auf einem nullbasierten Index, d. h., 0 entspricht dem erstenTupel in der Menge, 1 entspricht dem zweiten Tupel usw. Wenn Count nichtangegeben wird, gibt die Funktion alle Tupel von Start bis zum Ende derMenge zurück.

Subset()-Syntax

Subset ( Set_Expression , Start [, Count ])

Beispiel

SELECTSubset ([ Produkt ].[ Sortiment ].[ Subkategorie ].[ Bagels ].

Children , 1, 2) ON COLUMNS ,{([Zeit].[Jahr].[2013], [Zeit].[ Quartal ].[1. Quartal ].

Siblings )} ON ROWSFROM [ Umsatz ]

Page 90: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

76 Kapitel 3 Funktionen

Abbildung 3.84: Subset()

3.3.30 Tail()

Die Funktion Tail gibt eine Teilmenge vom Ende der angegeben Menge aus.

Tail()-Syntax

Tail( Set_Expression [, Count ])

Beispiel

SELECT Tail([ Produkt ].[ Sortiment ].[ Subkategorie ].&[001].Children , 3) ON COLUMNS ,

{([Zeit].[Jahr].[2013], [Zeit].[ Quartal ].[1. Quartal ].Siblings )} ON ROWS

FROM [ Umsatz ]

Ohne die Angabe des Wertes für den Parameter Count würde nur das letzteElemente der Menge zurückgegeben werden.

Abbildung 3.85: Tail()

3.3.31 TopCount()

TopCount sortiert eine Menge in absteigender Reihenfolge und gibt die ange-gebene Anzahl von Elementen mit dem höchsten Wert zurück.

Page 91: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.3 Mengenfunktion 77

TopCount()-Syntax

TopCount ( Set_Expression , Count [, Numeric_Expression ])

Beispiel

SELECT TopCount ([ Geografie ].[ Unternehmen ].[ Region ].&[ Deutschland Nord].Children , 3,

[ Measures ].[ Umsatzbetrag ]) ON COLUMNS ,[ Measures ].[ Umsatzbetrag ] ON ROWS

FROM [ Umsatz ]

Abbildung 3.86: TopCount()

3.3.32 TopPercent()

Die Funktion TopPercent sortiert eine Menge in absteigender Reihenfolgeund gibt eine Menge von Tupeln mit den höchsten Werten zurück, derenkumulativer Gesamtwert größer oder gleich einem angegebenen Prozentsatzist.

TopPercent()-Syntax

TopPercent ( Set_Expression , Percentage , Numeric_Expression )

Beispiel

SELECT TopPercent ([ Geografie ].[ Unternehmen ].[ Region ].&[ Deutschland Nord].Children , 50,

[ Measures ].[ Umsatzbetrag ]) ON COLUMNS ,[ Measures ].[ Umsatzbetrag ] ON ROWS

FROM [ Umsatz ]

Als Ergebnis werden die Bundesländer Schleswig-Holstein und Bremenzurückgegeben, da diese beiden zusammen mindestens 50 Prozent des Um-satzbetrages der Region Deutschland Nord ausmachen.

Page 92: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

78 Kapitel 3 Funktionen

Abbildung 3.87: TopPercent()

3.3.33 TopSum()

TopSum sortiert eine Menge und gibt die obersten Elemente zurück, derenkumulative Summe mindestens einem angegebenen Wert entspricht.

TopSum()-Syntax

TopSum ( Set_Expression , Value , Numeric_Expression )

Beispiel

SELECT TopSum ([ Geografie ].[ Unternehmen ].[ Region ].&[ Deutschland Nord].Children , 900000 ,

[ Measures ].[ Umsatzbetrag ]) ON COLUMNS ,[ Measures ].[ Umsatzbetrag ] ON ROWS

FROM [ Umsatz ]

Abbildung 3.88: TopSum()

3.3.34 Union()

Die Funktion Union gibt die Vereinigungsmenge zweier Mengen zurück, wobeioptional doppelte Elemente beibehalten werden. Bei Verwendung der Stan-dardsyntax werden doppelte Werte standardmäßig gelöscht. Hierbei werdendoppelte Werte vom Ende her gelöscht. Durch Einbezug des Parameters ALLbleiben doppelte Werte in der vereinigten Menge erhalten.

Union()-Syntax

Union ( Set_Expression1 , Set_Expression2 [, ...n ][, ALL ])

Page 93: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.3 Mengenfunktion 79

Beispiel mit Löschen doppelter Werte

SELECT Union ([Zeit].[ Kalender ].[Jahr].Members ,[Zeit].[ Kalender ].[Jahr].&[2013],

[Zeit].[ Kalender ].[Jahr].&[2013]) ON COLUMNS ,[ Measures ].[ Umsatzbetrag ] ON ROWS

FROM [ Umsatz ]

Abbildung 3.89: Union() ohne doppelte Werte

Beispiel ohne Löschen doppelter Werte

SELECT Union ([Zeit].[ Kalender ].[Jahr].Members ,[Zeit].[ Kalender ].[Jahr].&[2013],

[Zeit].[ Kalender ].[Jahr].&[2013], All) ON COLUMNS ,[ Measures ].[ Umsatzbetrag ] ON ROWS

FROM [ Umsatz ]

Abbildung 3.90: Union()

3.3.35 VisualTotals()

Die Funktion VisualsTotals gibt eine Menge zurück, welche durch eine dyna-mische Gesamtwertbildung der untergeordneten Elemente einer angegebenenMenge generiert wird. Optional kann in der Ergebnismenge ein Muster fürden Namen des übergeordneten Elements verwendet werden.

VisualTotals()-Syntax

VisualTotals ( Set_Expression [, Pattern ])

Beispiel

SELECTVisualTotals ({[ Produkt ].[ Kategorie ],

Page 94: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

80 Kapitel 3 Funktionen

[ Produkt ].[ Kategorie ].&[01],[ Produkt ].[ Kategorie ].&[02]},"* - Visual Totals ") ON COLUMNS ,

[ Measures ].[ Umsatzplan ] ON ROWSFROM [ Umsatz ]

Abbildung 3.91: VisualTotals()

3.4 Logische Funktionen

3.4.1 IsAncestor()

Mit IsAncestor wird überprüft, ob das erste angegebene Element der Vor-gänger des zweiten angegebenen Elements ist.

IsAncestor()-Syntax

IsAncestor ( Member_Expression1 , Member_Expression2 )

Beispiel

WITH MEMBER Measures . Vorgaenger ASIsAncestor ([ Produkt ].[ Sortiment ].[ Kategorie ].[ Backwaren ],

[ Produkt ].[ Sortiment ].[ Subkategorie ].[Brot])SELECT Measures . Vorgaenger ON COLUMNSFROM Umsatz

Es wird bei dieser Abfrage geprüft, ob das Element Backwaren der Vorgängerdes Elements Brot ist.

Abbildung 3.92: IsAncestor()

Page 95: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.4 Logische Funktionen 81

3.4.2 IsGeneration()

Die Funktion IsGeneration prüft, ob ein angegebenes Element sich in derangegeben Generation befindet. Falls das der Fall ist, gibt die Funktion denWert true zurück. Die Generation wird als numerischer Wert angegeben, wobei1 für die Ebene All steht.

IsGeneration()-Syntax

IsGeneration ( Member_Expression , Generation_Number )

Beispiel

WITH MEMBER Measures . Generation AS IsGeneration ([ Produkt ].[ Sortiment ].[ Kategorie ].[ Milchprodukte ], 2)

SELECT Measures . Generation ON COLUMNSFROM Umsatz

Abbildung 3.93: IsGeneration()

3.4.3 IsLeaf()

Die Funktion IsLeaf gibt an ob es sich bei dem angegeben Element um einBlattelement handelt. Die Funktion gibt true zurück, wenn das angegebeneElement ein Blattelement ist. Andernfalls gibt die Funktion false zurück.

IsLeaf()-Syntax

IsLeaf ( Member_Expression )

Beispiel

WITH MEMBER Measures . Blatt AS IsLeaf ([ Produkt ].[ Sortiment ].[ Produkt ].[Colonial - Bagels ])

SELECT Measures . Blatt ON COLUMNSFROM Umsatz

Page 96: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

82 Kapitel 3 Funktionen

Abbildung 3.94: IsLeaf()

3.4.4 IsSibling()

Mit IsSibling wird ermittelt, ob ein angegebenes Element ein gleichgeordne-tes Element des anderen angegebenen Elements ist, d. h. ob die Elemente inder gleichen Hierarchieebene liegen. Die Funktion gibt true zurück, wenn dasangegebene Element ein Blattelement ist. Andernfalls gibt die Funktion falsezurück.

IsSibling()-Syntax

IsSibling ( Member_Expression1 , Member_Expression2 )

Beispiel

WITH MEMBER Measures . Gleichgeorndet ASIsSibling (

[ Produkt ].[ Produkt ].[ Sachsen Milch - Buttermilch ],[ Produkt ].[ Produkt ].[Harry - Bagels ])

SELECT Measures . Gleichgeorndet ON COLUMNSFROM Umsatz

Abbildung 3.95: IsSibling()

3.5 Hierarchiefunktionen

3.5.1 Hierarchy()

Die Funktion Hierarchy gibt die Hierarchie eines angegeben Elements odereiner angegeben Ebene zurück.

Hierarchy()-Syntax

// Elementausdruck :

Page 97: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.5 Hierarchiefunktionen 83

Member_Expression . Hierarchy// Ebenenausdruck :Level_Expression . Hierarchy

Beispiel

WITH MEMBER Measures .[ Hierarchie ] AS[Zeit].[ Kalender ].[ Quartal ]. Hierarchy .Name

SELECT Measures .[ Hierarchie ] ON COLUMNSFROM [ Umsatz ]

Abbildung 3.96: Hierarchy()

3.5.2 Dimension()

Die Funktion Dimension gibt die Hierarchie zurück, die ein angegebenesElement, Ebene oder Hierarchie enthält.

Dimension()-Syntax

// Hierarchie :Hierarchy_Expression . Dimension// EbeneLevel_Expression . Dimension// Element :Member_Expression . Dimension

Beispiel

WITH MEMBER Measures .[ Dimension ] AS[Zeit].[ Kalender ].[Jahr]. Dimension .Name

SELECT Measures .[ Dimension ] ON COLUMNSFROM [ Umsatz ]

Abbildung 3.97: Dimension()

Page 98: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

84 Kapitel 3 Funktionen

3.5.3 Dimensions()

Die Funktion Dimensions gibt die Hierarchie zurück, die durch einen numeri-schen Ausdruck oder einen Zeichenfolgenausdruck angegeben ist.

Dimensions()-Syntax

// Numerische Syntax :Dimensions ( Hierarchy_Number )// String - SyntaxDimensions ( Hierarchy_Name )

Beispiel

WITH MEMBER Measures .[ Dimensions ] ASDimensions ("[ Produkt ].[ Produkt ]"). Name

SELECTMeasures .[ Dimensions ] ON COLUMNS

FROM [ Umsatz ]

Abbildung 3.98: Dimensions()

3.6 Zeichenfolgefunktionen

3.6.1 IIF()

Die Funktion IIF gibt in Abhängigkeit von einem logischen Test einen vonzwei Werten zurück (ähnlich If-else Bedingung anderer Programmiersprachen).Die vom logischen Ausdruck angegebene Bedingung ergibt dann false, wennder Wert dieses Ausdrucks 0 ist. Jeder andere Wert wird zu true ausgewertet.Wenn die Bedingung true ist, gibt die Funktion den ersten Ausdruck zurück,andernfalls den zweiten. Die angegebene Ausdrücke können Werte oder MDX-Objekte zurückgeben. Ferner muss der Typ der angegebenen Ausdrücke nichtübereinstimmen.

IIF()-Syntax

IIf( Logical_Expression , Expression1 , Expression2 )

Page 99: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.6 Zeichenfolgefunktionen 85

Beispiel

WITH MEMBER Measures . IIFTest ASIIF([ Measures ].[ Umsatzmenge ] > 1400000 ,

" Umsatzmenge hoch", " Umsatzmenge niedrig ")SELECT

{[ Measures ].[ Umsatzmenge ],Measures . IIFTest } ON COLUMNS ,[ Produkt ].[ Kategorie ].[ Kategorie ]. Members ON ROWS

FROM Umsatz

Abbildung 3.99: IIF()

3.6.2 LookupCube()

LookupCube gibt den Wert eines MDX–Ausdrucks zurück, der über einenanderen angegebenen Cube in derselben Datenbank ausgewertet wird.

LookupCube()-Syntax

// Numerische Syntax :LookupCube (Cube_Name , Numeric_Expression )// String - Syntax :LookupCube (Cube_Name , String_Expression )

Beispiel

WITH MEMBER Measures .[ LookUpCube Demo] ASLookUpCube (" Umsatz ", "[ Measures ].[ Um" + " satzmenge ]")SELECT Measures .[ LookUpCube Demo] ON COLUMNSFROM [ Umsatz ]

Abbildung 3.100: LookupCube()

Page 100: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

86 Kapitel 3 Funktionen

3.6.3 MemberToStr()

Die Funktion MemberToStr gibt die Zeichenfolge des gesuchten Elementszurück.

MemberToStr()-Syntax

MemberToStr ( Member_Expression )

Beispiel

WITH MEMBER Measures .x AS MemberToStr ( Deutschland )SELECT Measures .x ON COLUMNSFROM Umsatz

Abbildung 3.101: MemberToStr()

3.6.4 Name()

Diese Funktion gibt den Namen einer Hierarchie, Dimension, Ebene oder einesElements zurück.

Syntax

// Dimension :Dimension_Expression .Name// Hierarchie :Hierarchy_Expression .Name// Ebene :Level_Expression .Name// Element :Member_Expression .Name

Beispiel

WITH MEMBER Measures . Dimensionname AS [ Geografie ].NameMEMBER Measures . Hierarchiename AS [ Geografie ].

[ Unternehmen ].[ Bundesland ].&[08]. Hierarchy .NameMEMBER Measures . Levelname AS

[ Geografie ].[ Unternehmen ].[ Bundesland ].&[08]. Level .Name

Page 101: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

3.6 Zeichenfolgefunktionen 87

SELECT { Measures . Dimensionname , Measures . Hierarchiename ,Measures . Levelname } ON COLUMNS

FROM Umsatz

Abbildung 3.102: Name()

3.6.5 Properties()

Die Funktion Properties gibt den Wert oder die Zeichenfolge einer Elemen-teigenschaft zurück. Standardmäßig muss der Wert zwingend eine Zeichenfolgesein. Wenn TYPED angegeben wird, ist der Rückgabewert stark typisiert.

Properties()-Syntax

Member_Expression . Properties ( Property_Name [, TYPED ])

Beispiel

WITH MEMBER Measures . MemberID AS [ Geografie ].[ Unternehmen ].[ Bundesland ].&[08]. Properties ("ID")

SELECT { Measures . MemberID } ON COLUMNSFROM Umsatz

Abbildung 3.103: Properties()

3.6.6 UniqueName()

Die Funktion UniqueName ermittelt den eindeutigen Namen einer angegebenenDimension, Hierarchie, Ebene oder Elements. Der zurückgegebene Nameenthält nicht den Namen des Cubes.

UniqueName()-Syntax

// Dimension :

Page 102: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

88 Kapitel 3 Funktionen

Dimension_Expression . UniqueName// Hierarchie :Hierarchy_Expression . UniqueName// Ebene :Level_Expression . UniqueName// Element :Member_Expression . UniqueName

Beispiel

WITH MEMBER Measures . GenauerName AS[ Staat ].[ Deutschland ]. UniqueName

SELECT { Measures . GenauerName } ON COLUMNSFROM Umsatz

Abbildung 3.104: UniqueName()

3.6.7 UserName()

Die Funktion UserName gibt den Domänenname und Benutzernamen deraktuellen Verbindung zurück.

UserName()-Syntax

UserName [ ( ) ]

Beispiel

WITH MEMBER Measures . Anwendername AS UsernameSELECT { Measures . Anwendername } ON COLUMNSFROM Umsatz

Abbildung 3.105: UserName()

Page 103: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

4 Definitionsanweisungen

4.1 Definition berechneter Elemente

4.1.1 Einführung

Ein berechnetes Element in MDX, ein sog. Measure ist ein Element, welcheseinen Namen besitzt und eine Berechnungsformel enthält. Das bietet in MDXdie Möglichkeit, komplexe Berechnungen von der eigentlichen Abfrage ab-zugrenzen. Die Berechnungsvorschrift wird vor der Abfrage als berechnetesElement festgelegt und kann dann während der Abfrage einfach als Elementaufgerufen werden.

4.1.2 Befehle zur Definition berechneter Elemente

Das berechnete Element wird durch einen Befehl definiert und mit einerMDX-Formel verbunden. Ein berechnetes Element darf keine Kind-Elementebesitzen. Für die Definition von berechneten Elementen existieren die Befehle

WITH MEMBERCREATE MEMBER

Die Formel, die zu dem berechneten Element gehört, kann nur mit Löschenund Neuerstellen des Elements geändert werden.

4.1.3 Definition mittels der WITH-Sektion in Abfragen

Wenn ein berechnetes Element nur für eine einzelne MDX-Abfrage benötigtwird, kann es mit dem WITH-Schlüsselwort definiert werden. Die WITH-Sektionkommt vor dem Schlüsselwort SELECT und bezieht sich nur auf diese Abfrage.Nur berechnete Elemente, benannte Mengen, Zellenberechnungen und zuladende „Cached Data“ können in der WITH-Sektion stehen. Die allgemeine

89

Page 104: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

90 Kapitel 4 Definitionsanweisungen

Syntax für das Definieren eines berechneten Elements innerhalb einer Abfragelautet wie folgt:

WITH MEMBER member .name AS ’expression ’ [,optional - property ...]

Tabelle 4.1 gibt einen Überblick zu möglichen optionalen Properties.

Tabelle 4.1: Properties zum Definieren von berechneten Elementen inner-halb einer Abfrage.

Property Bedeutung

SOLVE_ORDER Gibt die Reihenfolge an, in der das berechnete Element inFällen gelöst wird, in denen ein berechnetes Element auf einanderes berechnetes Element verweist (also in Fällen, in denenberechnete Elemente sich überschneiden). Dies tritt zum Bei-spiel auf, wenn benannte Elemente in der Spalte und Zeile auf-treten. Die Berechnung mit der höchsten „SOLVE_ORDER“wird angezeigt.

FORMAT_STRING

Gibt eine Formatzeichenfolge im Microsoft Office-Stil an, diedie Clientanwendung für das Anzeigen von Zellwerten verwen-den kann.

LANGUAGE Sollte der „LCID“ (Language code ID) entsprechen.

VISIBLE Bestimmt, ob das berechnete Element in einem Schemarow-set sichtbar ist. Sichtbare berechnete Elemente können einerMenge mit der AddCalculatedBenannte Mengen-Funktionhinzugefügt werden. Ein Wert ungleich 0 zeigt an, dass dasberechnete Element sichtbar ist. Der Standardwert dieserEigenschaft ist Visible. Berechnete Elemente, die nicht sicht-bar sind (für die dieser Wert auf 0 festgelegt ist), werdenüblicherweise als Zwischenschritte in komplexeren berechne-ten Elementen verwendet. Auf diese berechneten Elementekönnen auch andere Arten von Elementen (z. "B. Measures)verweisen.

NON-EMPTY_BEHAVIOUR

Gibt das Measure oder die Menge an, mit dem oder der beimAuflösen leerer Zellen das Verhalten berechneter Elementebestimmt wird.

Page 105: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

4.1 Definition berechneter Elemente 91

Folgendes Beispiel soll verdeutlichen, wie man mit WITH ein berechnetesElement anlegt und wann die SOLVE_ORDER-Property notwendig ist. ImON COLUMNS-Anweisungsteil wird in der letzten Spalte der durchschnittlicheVerkaufspreis berechnet. Im ON ROWS-Anweisungsteil wird in der letzten Zeileberechnet, wie die Veränderung vom 1. Quartal zum 2. Quartal im Jahr 2014war.

Beispiel mit SOLVE_ORDER

WITH MEMBER [ Measures ].[ Durchschn . Verkaufspreis ] AS"[ Measures ].[ kumulierter Umsatz ]/[ Measures ].

[ Umsatzmenge ]", SOLVE_ORDER = 0MEMBER [Zeit].[ Quartal ].[Q1 zu Q2 Wachstum ] AS "[Zeit ].

[ Quartal ].&[201402] - [Zeit ].[ Quartal ].&[201401]",SOLVE_ORDER =1

SELECT {[ Measures ].[ kumulierter Umsatz ], [ Measures ].[ Umsatzmenge ], [ Measures ].[ Durchschn . Verkaufspreis ]}

ON COLUMNS ,{[Zeit].[ Quartal ].&[201401], [Zeit].[ Quartal ].&[201402],

[Zeit].[ Quartal ].[Q1 zu Q2 Wachstum ]} ON ROWSFROM [ Umsatz ]

Abbildung 4.1: Definieren berechneter Elemente mit WITH

4.1.4 Definition mittels CREATE MEMBER

Mit CREATE MEMBER können berechnete Elemente server- oder clientseitig fürdie Sitzung erstellt werden. Diese berechneten Elemente sind während dergesamten Sitzung verfügbar sind und somit in mehreren Abfragen im Verlaufder Sitzung wieder verwendbar. Notwendig sind dabei der Name des Cubesund die Namen der Dimensionen. Die allgemeine Syntax lautet

CREATE MEMBER cube. member .name AS " expression " [,optional - property ...]

Page 106: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

92 Kapitel 4 Definitionsanweisungen

Die Properties, die man in der Anweisung angeben kann, sind dieselben wiebei der Definition mittels WITH in Tabelle 4.1.

Erstellen des berechneten Elements

Das berechnete Element [Abweichung Plan_Ist] wird für den Cube Umsatzerzeugt. Es ist nur in diesem Cube sichtbar und für jede Abfrage während dergesamten Sitzungsdauer nutzbar.

Beispiel

CREATE MEMBER [ Umsatz ].[ Measures ].[ Abweichung Plan_Ist ] AS"[ Measures ].[ Umsatzbetrag ] - [ Measures ].[ Umsatzplan ]",

SOLVE_ORDER = 1, FORMAT_STRING = "#.##"

Löschen eines berechneten Elements

Da man die Formel eines berechneten Elements nicht nachträglich ändernkann, muss das Element erst gelöscht und mit der neuen Formel wieder erstelltwerden. Die allgemeine Syntax für das Löschen eines berechneten Elementslautet

DROP MEMBER cube. member .name [, cube. member .name ...]

Im folgenden Beispiel wird die berechnete Differenz zwischen Ist- undPlanumsatz gelöscht.

DROP MEMBER [ Umsatz ].[ Measures ].[ Abweichung Plan_Ist ]

Page 107: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

5 Häufige Berechnungen undSelect-Anweisungen in MDX

MDX kann unter anderem für folgende Analysen genutzt werden:

• Trends in der Qualität der Herstellung,

• Trends bei Versicherungsansprüchen,

• Prognose und Analyse Kaufverhalten,

• Affiliateprodukte, . . .

Doch wie werden häufige Berechnungen und Abfragen in MDX ausgedrückt?Dieses Kapitel stellt Lösungsansätze für gewisse Sachverhalte vor. Die Lösungs-vorschläge in dem dargestellten Kapitel hängen natürlich stark vom Aufbaudes Cubes ab. Daher müssen die Berechnungen teilweise anders formuliertwerden.

5.1 Filter- und Sortierfunktionen

Mit Filter- und Sortierfunktionen lässt sich die Darstellungsqualität der Anfra-geergebnisse deutlich verbessern. Die Sortierfunktion TopCount (vgl. Abschnitt3.3.31) bietet z. B. die Möglichkeit, die Werte der Ergebnismenge absteigendzu sortieren, um so Produkte mit dem höchsten Verkaufsumsatz schneller undbesser identifizieren zu können.

Beispiel

SELECT TopCount ({[ Produkt ].[ Sortiment ].[ Kategorie ].[ Fleisch ]. Children

* [Zeit].[Jahr].&[2014]}, 3, [ Measures ].[ Umsatzbetrag ])

93

Page 108: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

94 Kapitel 5 Häufige Berechnungen und Select-Befehle

ON COLUMNS ,[ Geografie ].[ Unternehmen ].[ Staat ]. Members ON ROWS

FROM [ Umsatz ]

Mit dieser Abfrage werden die besten drei Verkaufsumsätze der Produkt-subkategorien in der Kategorie Fleisch in allen Staaten dargestellt.

Abbildung 5.1: TopCount()

Analog lassen sich mit der Funktion BottomCount (vgl. Abschnitt 3.3.5) dieumsatzschwächsten Produkte filtern. Weitere wichtige Funktionen in diesemZusammenhang sind die Funktionen Filter (Abschnitt 3.3.18), TopPercent

(Abschnitt 3.3.32) sowieTopSum (Abschnitt 3.3.33).

5.2 Berechnung des prozentualen Anteils nachSchema X / Y

Exemplarisch wird im folgenden Beispiel die Berechnung der prozentualenAnteile der Umsatzbeträge für die Kategorien Backwaren, Fleisch und Milch-produkte am Gesamtumsatz gezeigt (Abb. 5.2, S. 95).

Prozentualer Anteil einer Kategorie am Gesamtumsatz

WITH MEMBER [ Measures ].[ Anteil Kategorie am Gesamtumsatz ]AS "([ Measures ].[ Umsatzbetrag ]) / ([ Measures ].

[ Umsatzbetrag ], [ Produkt ].[ Kategorie ].[ All ])"SELECT {[ Measures ].[ Anteil Kategorie am Gesamtumsatz ],

[ Measures ].[ Umsatzbetrag ]} ON COLUMNS ,{ NONEMPTY ([ Produkt ].[ Kategorie ]. Members )} ON ROWS

FROM [ Umsatz ]

Im Folgenden sind Abfrage und Ergebnis für die Berechnung der prozen-tualen Anteile der Umsatzbeträge in den Subkategorien bezogen auf dieentsprechenden Kategorien gezeigt (Abb. 5.3, S. 95).

Page 109: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

5.2 Berechnung des prozentualen Anteils 95

Abbildung 5.2: Prozentualer Anteil einer Kategorie am Gesamtumsatz

Prozentualer Anteil einer Subkategorie am Umsatz der Kategorie

WITH MEMBER [ Measures ].[ Umsatzanteil der Subkategorie an Kategorie ] AS

"([ Measures ].[ Umsatzbetrag ] * 100) / ([ Measures ].[ Umsatzbetrag ], [ Produkt ].[ Kategorie ])",FORMAT_STRING =" ###.00\% "

SELECT{[ Measures ].[ Umsatzanteil der Subkategorie an Kategorie ],

[ Measures ].[ Umsatzbetrag ]} ON COLUMNS ,{ NONEMPTY ([ Produkt ].[ Kategorie ]. Children *

[ Produkt ].[ Subkategorie ]. Children )} ON ROWSFROM [ Umsatz ]

Abbildung 5.3: Prozentualer Umsatzanteil einer Subkategorie an der Ka-tegorie

Page 110: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

96 Kapitel 5 Häufige Berechnungen und Select-Befehle

5.3 Berechnung des einfachen Durchschnitts

Den einfachen Durchschnitt kann man entweder über einer Formel, wie

[ Measures ].[ Sales Sum] / [ Measures ].[Item Count ]

oder auch mit der expliziten bzw. impliziten Funktion Avg (Abschnitt 3.2.2) bil-den. Mit der folgenden MDX-Anweisung wird der durchschnittliche Stückpreisfür die jeweiligen Kategorien in den Dimensionen Staat und Zeit berechnet.

Beispiel

WITH MEMBER [ Measures ].[Avg Stü ckpreis ] AS"[ Measures ].[ Umsatzbetrag ]/[ Measures ].[ Umsatzmenge ]"

SELECT {[Zeit].[Jahr]. Children } ON COLUMNS ,{ NONEMPTY ([ Geografie ].[ Staat ]. Children *

[ Produkt ].[ Kategorie ]. Children ) } ON ROWSFROM [ Umsatz ]WHERE [ Measures ].[Avg Stü ckpreis ]

Abbildung 5.4: Einfacher Durchschnitt

Page 111: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

5.4 Zeitbezug und Zeitraumberechnung 97

5.4 Zeitbezogenen Referenzierungen undZeitraumberechnungen

5.4.1 Periode-zu-Periode Referenzierungen undBerechnungen

Um auf die Daten eines vorhergehenden Zeitraumes zuzugreifen, wird dieFunktion PrevMember (siehe Abschnitt 3.1.20) genutzt. Um Daten des nach-folgenden Zeitraumes zu verwenden, wird die Funktion NextMember (sieheAbschnitt 3.1.16) verwendet.

Die folgende Anweisung gibt quartalsweise die Umsatzmengen aus, sowiedie Differenzen zum vorangegangenen Quartal.

WITH MEMBER [ Measures ].[Ä nderung zur Vorperiode ] AS"[ Measures ].[ Umsatzmenge ] - ([ Measures ].[ Umsatzmenge ],

[Zeit ].[ Quartal ]. CurrentMember . PrevMember )"SELECT {[Zeit].[ Quartal ]. Children } ON COLUMNS ,

{[ Measures ].[ Umsatzmenge ], [ Measures ].[Ä nderung zur Vorperiode ]} ON ROWS

FROM [ Umsatz ]

Abbildung 5.5: Umsatzmengenänderung zum folgenden Quartal

5.4.2 Laufender Durchschnitt und „52-Wochen-Hoch /-Tief“

Solche berechneten Werte gehören zur Klasse der sich bewegenden Aggrega-tionen. Dabei wird ein Measure über ein sich bewegendes Fenster aggregiert.Die Endpunkte der Zeitspanne werden dabei immer relativ zum aktuellenElement angegeben.

Um auf Elemente relativ zum aktuellen Element zuzugreifen, kann man eineReihe von Operatoren und Funktionen verwenden, wie den Bereichsoperator(„:“, Abschnitt 2.1.4) oder eine der Funktionen Lag (Abschnitt 3.1.10), Lead

Page 112: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

98 Kapitel 5 Häufige Berechnungen und Select-Befehle

(Abschnitt 3.1.13), PrevMember (Abschnitt 3.1.20), NextMember (Abschnitt3.1.16), Cousin (Abschnitt 3.1.3), ParallelPeriod (Abschnitt 3.1.18) etc.

Im den folgenden beiden Varianten mit Lag und LastPeriods wird sich beider Abfrage der Umsatzmenge in der Kategorie Backwaren um sechs Perioden(hier Quartale) zurück bewegt (Abb. 5.6).// Variante 1:WITH MEMBER Measures .[Avg Zeit] AS

Avg (([Zeit].[ Quartal ].&[201404].Lag (5) : [Zeit].[Zeit].[ Quartal ].&[201404]), Measures .[ Umsatzmenge ])

SELECT Measures .[Avg Zeit] ON COLUMNS ,{[ Produkt ].[ Kategorie ].[ Backwaren ]} ON ROWS

FROM [ Umsatz ]// Variante 2:WITH MEMBER Measures .[Avg Zeit] AS

Avg( LastPeriods (6, [Zeit].[ Quartal ].&[201404]),Measures .[ Umsatzmenge ])

SELECT Measures .[Avg Zeit] ON COLUMNS ,{[ Produkt ].[ Kategorie ].[ Backwaren ]} ON ROWS

FROM [ Umsatz ]

Abbildung 5.6: Laufender Durchschnitt über 6 Perioden

Die nachfolgenden MDX-Abfragen ermitteln den Durchschnitt über denaktuellen und vorherigen Zeitraum unter Verwendung des Bereichsoperators„:“ mit den Funktionen PrevMember bzw. Lag (Abb. 5.7, S. 99). Die Zeiträumehängen vom verwendeten Ebenenausdruck ab.// Variante mit Lag ()- FunktionWITH MEMBER Measures .[Avg Zeit] AS Avg ({[Zeit].[ Monat ].

&[201409].Lag (1) : [Zeit].[ Monat ].&[201409]},[ Measures ].[ Umsatzbetrag ])

SELECT Measures .[Avg Zeit] ON COLUMNS ,{[ Produkt ].[ Kategorie ].[ Backwaren ]} ON ROWS

FROM [ Umsatz ]// Variante mit PrevMember ()- FunktionWITH MEMBER Measures .[Avg Zeit] AS Avg ({[Zeit].[ Monat ].

&[201409]. PrevMember : [Zeit].[ Monat ].&[201409]},[ Measures ].[ Umsatzbetrag ])

Page 113: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

5.4 Zeitbezug und Zeitraumberechnung 99

SELECT Measures .[Avg Zeit] ON COLUMNS ,{[ Produkt ].[ Kategorie ].[ Backwaren ]} ON ROWS

FROM [ Umsatz ]

Abbildung 5.7: Laufender Durchschnitt über zwei Perioden

Über das folgende Codefragment können Quartale zu Halbjahren zusammen-gefasst werden.

Avg( ParallelPeriod ( [Zeit].[ Quartal ], 2,[Zeit]. CurrentMember : [Zeit]. CurrentMember ),

Measures .[ Umsatzmenge ])

Die unten aufgeführten Anweisungen ermitteln das „52-Wochen-Hoch“ („52-Week High“-Wert). Dabei ist darauf zu achten, dass man sich auf der Wo-chenebene bewegt.

Max ({[Zeit].Lag (51) : [Zeit]}, [ Measures ].[ Share Price ])Max (( LastPeriods (52 , [Zeit])), [ Measures ].[ Share Price ])

Page 114: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel
Page 115: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

Literaturhinweise

Dieses Handbuch kann den kompletten Umfang der mächtigen MDX-Sprachenicht darstellen, sondern fasst wesentliche Grundlagen zusammen und veran-schaulicht diese anhand von Abfragebeispielen auf den in der BI-Lehrveran-staltung genutzten Cube. Daher sind folgend Quellen zum vertieften Einstiegin MDX aufgeführt.

Lehre

• Prof. Dr.-Ing. Axel Toll. Lehrveranstaltung „Business Intelligence“,Diplom- und Bachelor-Studiengänge Wirtschaftsinformatik an der HTWDresden, 4. Semester. Homepage: http://www2.htw-dresden.de/~toll/

(abgerufen am 4. November 2015).

OLAP-Werkzeuge

• Die im Handbuch dargestellten Abfragen wurden mit den MicrosoftSQL Server 2012 Analysis Services auf Basis der MDX-Referenz vonMicrosoft (s. u., Internetquellen) erstellt.

• Zur Aufbereitung und Anreicherung der Data Warehouse-Daten (insb.Anlegen des Cubes mit Dimensionen, Measures etc.) wurde MicrosoftVisual Studio 2010 mit der Business Intelligence-Vorlage erstellt.

Bücher

• M. Whitehorn, R. Zare, M. Pasumansky. Fast Track to MDX. Sprin-ger. 2. Auflage 2006. ISBN 978-1846281747. Das schlanke Einstiegswerk

101

Page 116: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

102 Literaturhinweise

befasst sich mit Grundlagen von MDX-Abfragen und erläutert häufigverwendete Funktionen.

• S. Harinath et al. Professional Microsoft SQL Server 2012 Ana-lysis Services with MDX and DAX. Wiley & Sons, 1. Auflage 2012.ISBN 978-1118101100. Das umfangreiche Handbuch für MS SQL ServerAnalysis Services.

Internetquellen• Multidimensional Expressions (MDX) - Referenz von Microsoft. Adresse:

https://msdn.microsoft.com/en-us/library/ms145506.aspx. DieseSeite enthält sowohl eine Beschreibung der Syntaxelemente für MDX-Ausdrücke, -Anweisungen und -Skripte als auch die MDX-Sprachreferenzmit Erläuterungen zu Anweisungen, Operatoren und Funktionen derMDX-Sprache (abgerufen am 4. November 2015).

• MDX-Tutorial und -Blog auf Deutsch. Adresse: http://www.mdx-hilfe.

de/mdx-tutorial/. Ein anschaulich gestalteter Einstieg in die Arbeitmit OLAP-Cubes und Grundlagen von MDX (abgerufen am 4. November2015).

• MDX-Dokumentation und Tutorial auf Englisch: http://www.iccube.

com/support/documentation/mdx/index.php. Eine umfangreiche An-leitung mit zahlreichen Beispielen (abgerufen am 4. November 2015).

Page 117: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

Sachregister

Aggregate, 31AllMembers, 50Ancestor, 17Ancestors, 51Ascendants, 52Attribut, 2, 9Avg, 33Axis, 53

BottomCount, 54BottomPercent, 54BottomSum, 55

Children, 56ClosingPeriod, 18Correlation, 34Count, 35Cousin, 19Covariance, 37CovarianceN, 38Crossjoin, 56Cube, 2CurrentMember, 20

DataMember, 20DefaultMember, 21

Descendants, 58Dimension, 2, 9, 83Dimensions, 84Distinct, 61DistinctCount, 38DrilldownMember, 62DrilldownMemberBottom, 63DrilldownMemberTop, 64DrillupLevel, 65

Ebene, 2Element, 2Except, 65Exists, 66

Fakt, 2Filter, 67FirstChild, 21FirstSibling, 22

Head, 68Hierarchie, 2Hierarchize, 68Hierarchy, 82

IIF, 84IsAncestor, 80

103

Page 118: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

104 Sachregister

IsGeneration, 81IsLeaf, 81IsSibling, 82Item, 23

Kennzahl, 2

Lag, 23LastChild, 24LastPeriods, 69LastSibling, 25Lead, 25Level, 2, 9LinkMember, 26LinRegIntercept, 39LinRegPoint, 40LinRegR2, 41LinRegSlope, 41LinRegVariance, 42LookupCube, 85

Max, 43MDX, 1Measure, 89Measures, 2, 9Median, 44Members, 2, 9, 27, 71MemberToStr, 86Menge, 13Min, 44

Name, 86NameToSet, 72NextMember, 27

OpeningPeriod, 28

Order, 72Ordinal, 45

ParallelPeriod, 28Parent, 29PeriodsToDate, 73PrevMember, 29Properties, 87

Rank, 45

Set, 13Siblings, 73Slice, 11Stddev, 46StddevP, 47Stdev, 46StdevP, 47StripCalculatedMembers, 74StrToMember, 30StrToSet, 74Subset, 75Sum, 47

Tail, 76TopCount, 76TopPercent, 77TopSum, 78Tupel, 11

Union, 78UniqueName, 87UnknownMember, 31UserName, 88

Value, 48

Page 119: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel

Sachregister 105

Var, 49Variance, 49VarianceP, 49VarP, 49VisualTotals, 79

Page 120: HandbuchMDXtoll/HandbuchMDX.pdf · MDX-Abfrage,welchedieAchsennummerierungON AXIS(1) benutzt,auch eineentsprechendeAchseON AXIS(0) bzw.dasAliasON COLUMNS benutzen. Auch eine SELECT-Klausel