Kapitel 9: Operationen auf dem Cube Multidimensional Expressions (MDX) Was ist MDX? Microsoft Terminologie im OLAP Bereich MDX Basiskonstrukte MDX weiterführende Konstrukte Fazit Was ist MDX? Ist SQL für OLAP genügend? Nicht bequem genug, unterstützt nicht die multidimensionale Sicht. Bisher hieß es, ein wichtiges Ziel seien intuitive Mechanismen für die Datenanalyse. Wieso brauchen wir jetzt eine komplexe Querysprache? Nicht jede Sicht läßt sich zusammenklicken, wie wir sehen werden. Man möchte Anwender vielleicht nicht immer mit generischem Interface belasten, sondern das Arbeiten durch Einschränkung auf spezielle anwendungsspezifische Interaktionsmöglichkeiten erleichtern. MDX ist kurz für Multidimensional Expressions, DDL und DML für multidimensionale Daten ( Definieren, Ändern und Abfragen ), MDX Microsoft-Entwicklung, Andere Hersteller von DBMSen/Data Warehouses (Oracle, SAP) bieten vergleichbare Anfragesprachen. Data Warehousing und Mining: MDX. 1 Data Warehousing und Mining: MDX. 2 MDX Queryinterface und API Konzepte - Microsoft Terminologie Query-Interface, mit dem im folgenden gearbeitet wird, illustriert nur das Querying. Query-Interface illustriert nicht den Zugriff über die Programmierschnittstelle, das Definieren von Hilfsstrukturen und das Wiederverwenden von Definitionen. Cubes Grundkonzept in OLAP multidimensionale Strukturen [maximal 64 Dimensionen] Dimensions Menge von Attributen, die Dimension sein können; sie können nicht Measures sein, Selektion über diese Attribute ist möglich, genau wie beim Microsoft OLAP-Browser, Dimension ist hierarchisch aufgebaut, private oder shared ( shared Dimension wurde für mehrere Cubes definiert) Data Warehousing und Mining: MDX. 3 Data Warehousing und Mining: MDX. 4
Konzepte - Microsoft Terminologie Hierarchien in einer Dimension - Erläuterung Measures Menge von Attributen, die nur Measures sein können (bis auf Spezialfälle), Measure ist eine spezielle Dimension in der MDX- Vorstellungswelt, flache Hierarchie Members Knoten der Hierarchie einer Dimension, vorgegeben vs. calculated, Beispiel: Halbjahr. Typ-Perspektive: Store Store Country Store State Store City Instanzen-Perspektive: Canada USA Mexico...... CA WA......... Store Name Data Warehousing und Mining: MDX. 5 Data Warehousing und Mining: MDX. 6 Data Warehousing und Mining: MDX. 7 Data Warehousing und Mining: MDX. 8
Sonderrolle der Measures in MDX Illustration für unsere erste MDX-Query Im allgemeinen hat man Vektor von Measures: SALES TIME Year 1996 1997 Month Jan Feb Jan Feb CATEGORY Part City (Cost, Sale) PC Montreal (5,6) (5,7) (4,6) (4,8) Toronto (5,7) (5,8) (4,8) (4,9) Inkjet Montreal (7,8) (7,9) (6,9) (6,8) New York (6,9) (6,9) (5,8) (5,9) Location ( Store ) Location ( Store ) MDX behandelt Gesamtheit der möglichen Measures wie eine Dimension. CATEGORY Store Type Store Type Unit Sales Measure Sales Avg. Measure Cost Sale MEASURES TIME Data Warehousing und Mining: MDX. 9 Data Warehousing und Mining: MDX. 10 Beispiele, die Aufbau von MDX-Queries illustrieren Query, die Ausschnitt des Data Cubes mit _herkömmlichen_ Dimensionen definiert: SELECT {[Store Type].[Store Type].MEMBERS} ON COLUMNS, {[Store].[Store State].MEMBERS} ON ROWS WHERE (Measures.[Sales Average]) Measures ist spezielle Dimension im MDX-Kontext. Erläuterungen zum Aufbau der Ausdrücke in der SELECT-Klausel (vor ON COLUMNS bzw. ON ROWS ): Dimensionsname, gefolgt von Hierarchiebezeichnungen auf der Typebene (von oben nach unten), Hierarchiebezeichnungen auf der Typebene können ausgelassen werden (wenn eindeutig), Wiederholung des Dimensionsnamen, wenn keine richtige Hierarchie, Mengenklammern können hier weggelassen werden; werden gebraucht, wenn Ausschnitt in einer Dimension durch mehrere Ausdrücke definiert ist, eckige Klammern werden nur gebraucht, wenn Dimensionsname oder Hierarchiebezeichnung Leerzeichen enthält. Beispiel-Query von eben: SELECT {[Store Type].[Store Type].MEMBERS} ON COLUMNS, {[Store].[Store State].MEMBERS} ON ROWS WHERE (Measures.[Sales Average]) Erläuterungen: Query, die Ausschnitt des Data Cubes mit _herkömmlichen_ Dimensionen definiert (s. b. Abbildung links auf vorangegangener Folie), Auswahl des Measures erfolgt durch die WHERE-Klausel, mehrere Measures sind NICHT zulässig, d. h. MDX-Interpreter generiert keine integrierte Tabelle, Einschränkungen der Dimensionen sind möglich (Definitionsmöglichkeiten hierzu, die im folgenden vorgestellt werden, sind sehr mächtig), WHERE-Klausel kann weggelassen werden Default-Measure wird verwendet nicht empfehlenswert, wird im folgenden wegen Übersichtlichkeit trotzdem oft gemacht. Data Warehousing und Mining: MDX. 11 Data Warehousing und Mining: MDX. 12
Data Warehousing und Mining: MDX. 13 Data Warehousing und Mining: MDX. 14 Query, die verdeutlicht, daß Measures eine Dimension ist/ vorhin angesprochener Spezialfall : SELECT Measures.MEMBERS ON COLUMNS, [Store].MEMBERS ON ROWS Erläuterungen: Angenommen, man würde die folgende WHERE-Klausel dazunehmen: WHERE (Measures.[Unit Sales]) Fehler, da WHERE-Klausel und Achsenspezifikation unabhängig sein müssen. Dieser Zusatz macht die Query außerdem sinnlos. Die folgende WHERE-Klausel WHERE ([Time].[Year].[1997]) ist dagegen OK. Weiterer Aspekt: Dimension ohne Hierarchie-Spezifikation führt dazu, daß alle Members angezeigt werden, unabhängig von der Position in der Hierarchie. Data Warehousing und Mining: MDX. 15 Data Warehousing und Mining: MDX. 16
Measures als gesonderte Dimension Von herkömmlicher Dimension kann man abstrahieren, z. B. 'über alle Stores aufsummieren'. Macht hier keinen Sinn. 'Default Measure' hat keine Entsprechung bei herkömmlichen Dimensionen. Wenn bei herkömmlicher Dimension keine Einschränkung, wird sie als Ganzes betrachtet. Default Measure wird bei Definition des Cubes festgelegt. Data Warehousing und Mining: MDX. 17 Data Warehousing und Mining: MDX. 18 Slicing vs. Filtering Filtering Auswahl der Axis Members, d. h. Achse ist schon vorgegeben. Slicing definiert das Maß bzw. schränkt Ausschnitt des Raums ein. (Begriffe für Konzepte, die z. T. schon illustriert wurden.) Illustration des Begriffs Slicing anhand der folgenden Query: SELECT {[Store Type].[Store Type].MEMBERS} ON COLUMNS, {[Store].[Store State].MEMBERS} ON ROWS WHERE (Product.[Drink]) Store ( Location ) Store Type Drink Food Product Was bedeuten diese Zahlen? Data Warehousing und Mining: MDX. 19 Data Warehousing und Mining: MDX. 20
Slicing Fortsetzung Slicing auch in mehreren Dimensionen möglich. Beispiele: SELECT {[Store Type].[Store Type].MEMBERS} ON COLUMNS, {[Store].[Store State].MEMBERS} ON ROWS WHERE ([Product].Drink, Measures.[Unit Sales]) Dimensionen: Product, Store (Ortsangabe), Time, Bildungsniveau (z. B. Fachabitur, Abitur), Measure (z. B. Umsatz, Gewinn) Tabelle mit Dimensionen Store und Zeit, die Gewinn mit Beer enthält. SELECT {[Store Type].[Store Type].MEMBERS} ON COLUMNS, {[Store].[Store State].MEMBERS} ON ROWS WHERE ([Product].Drink, Measures.[Unit Sales], [Time].[Year].[1997]) Was bedeutet es, diesen Teil der Anfrage wegzulassen? Was bedeutet es, diesen Teil der Anfrage wegzulassen? Data Warehousing und Mining: MDX. 21 Data Warehousing und Mining: MDX. 22 MDX Struktur der Abfragen Aufbau einer MDX-Query mit allen obligatorischen Bestandteilen: SELECT axis_specification ON COLUMNS, axis_specification ON ROWS FROM cube_name WHERE slicer_specification Erläuterungen: axis_specification = Selektieren der Dimensionen und Members für die Achse, Weitere Achsen sind möglich: ON COLUMNS ROWS PAGES CHAPTERS SECTIONS ON AXIS(0)... AXIS(63) Query-Tool gibt Fehlermeldung aus bei mehr als zwei Achsen. slicer_specification = Definition möglicher Projektionen des Data Cubes. Konstrukte für den Zugriff auf Members Beispiel-Query: SELECT Measures.MEMBERS ON COLUMNS, {[Store].[Store State].[CA].CHILDREN, [Store].[WA].CHILDREN} ON ROWS Erläuterungen (teilweise Wiederholung): MEMBERS - alle Elemente der Dimension, mit/ohne Beschränkung auf bestimmte Ebene der Hierarchie, CHILDREN alle Elemente in der entsprechenden Position, in diesem Fall Städte in CA und WA, [Store].[Store State].[WA] ist kein fully qualified name, wie bereits zuvor erwähnt (nicht alle Stufen der Hierarchie, Store Country wird übersprungen), ist aber OK wegen Uniqueness, WHERE Slicer-Spezifizierung weglassen = Standard-Measure wird angezeigt, Mehrere Member-Spezifikationen für eine Achse der Tabelle möglich. State kann man zusätzlich ausgeben. Data Warehousing und Mining: MDX. 23 Data Warehousing und Mining: MDX. 24
Konstrukte für den Zugriff auf Members (2) Ziel: Mehrere Levels einer Dimension in einer Tabelle, aber im Gegensatz zu MEMBERS wird Kontrolle über die Levels gewünscht. Konstrukt DESCENDANTS löst dieses Problem - Syntax: DESCENDANTS (member, level[, flag]) Flexibilität kommt über das Flag. Beispiel-Query: SELECT Measures.MEMBERS ON COLUMNS, {[Store].[Store State].[CA], DESCENDANTS([Store].[Store State].[CA], [Store City])} ON ROWS Online-Hilfe erläutert gut weitere Parameter, z. B. SELF, SELF_AND_AFTER. Data Warehousing und Mining: MDX. 25 Data Warehousing und Mining: MDX. 26 Data Warehousing und Mining: MDX. 27 Data Warehousing und Mining: MDX. 28 z
Weiterführende Konstrukte Calculated Members und Named Sets Definition neuer Members, z. B. abgeleitete Measures (Beispiel: Rendite als Funktion von eingesetztem Kapital und Profit), Hierarchisches Navigieren Verknüpfung von Zellen an unterschiedlichen Positionen der Hierarchie (Beispiel: Umsatz in CA als Anteil des U.S.A.-Umsatzes) Zeitserien Vergleich von zeitbezogenen Werten mit Werten aus Vergleichszeitraum (Beispiel: Vergleichsmonat Vorjahreszeitraum) Tuples und CROSSJOIN mehr als zwei Dimensionen pro Tabelle, Filtern und Sortieren Top und Bottom Analysen, z. B. Top-N Queries Numerische und bedingte Abfragen, z. B. COUNT, SUM bzw. frei definierte Bedingungen (COUNT z. B. Anzahl der Tupel mit einer bestimmten Eigenschaft) Named Sets Motivation: Explizit benamte Mengen schaffen Übersichtlichkeit und erhöhen Wiederverwendbarkeit und Fehlertoleranz. Wir definieren hier Named Sets von Members. Beispiel: WITH SET bigcitystates AS '{Store.CA, Store.WA}' SET nobigcitystates AS 'EXCEPT(DESCENDANTS(Store,[Store State]), bigcitystates)' SELECT nobigcitystates ON ROWS, Time.MEMBERS ON COLUMNS Erläuterung: EXCEPT ist DIFF-Operator. Data Warehousing und Mining: MDX. 29 Data Warehousing und Mining: MDX. 30 Cross-Dimensional Operations Folie aus vergangenem Kapitel Verknüpfungen von Werten aus unterschiedlichen Dimensionen Beispiel für single-dimensional Berechnung: Anzahl der Angestellten = Belegschaft - Anzahl Arbeiter Allen Werten entspricht die gleiche Position im DataCube. Beispiel für cross-dimensional Berechnung: Bereinigter projizierter Gewinn = Projizierter Gewinn, verrechnet mit Währungsrisiko des jeweiligen Landes. Bildungsgrad Studium Abitur Hauptschule 07.01. 08.01. Hessen Bayern Saarland Ort Datum Data Warehousing und Mining: MDX. 31 Data Warehousing und Mining: MDX. 32
Calculated Members (1) Ziel: Definition neuer Members, in Abhängigkeit bereits existierender Members, sowohl für Dimensionen als auch für Measures, Beispiele: Abgeleitete Measures, z. B. Profit, wenn Umsatz und Kosten bekannt, Profit = (Umsatz Kosten)/Kosten, Diese Definition ist unabhängig davon, welche Position des Cubes man betrachtet. Neuaufteilung der Dimensionen, z. B. Quartalseinteilung des Jahres, basierend auf Monaten. Calculated Members (2) Beispiel in MDX: WITH MEMBER Measures.ProfitPercent AS '(Measures.[Store Sales] - Measures.[Store Cost]) / (Measures.[Store Cost])', FORMAT_STRING = '#.00%' SELECT {Measures.ProfitPercent} ON COLUMNS, Store.MEMBERS ON ROWS definiert Dimension und Position in Hierarchie Name des Calculated Members Aufbau des Calculated Members -Statements: WITH MEMBER parent.name AS 'expression' Data Warehousing und Mining: MDX. 33 Data Warehousing und Mining: MDX. 34 Calculated Members (3) Weiteres Beispiel: SELECT {[Store Type].[Store Type].MEMBERS} ON COLUMNS, {[Store].[Store State].MEMBERS} ON ROWS WHERE ([Product].Drink, Measures.[Unit Sales]) WITH MEMBER MEASURES.DrinkSales AS '([Product].Drink, Measures.[Unit Sales])' SELECT {[Store Type].[Store Type].MEMBERS} ON COLUMNS, {[Store].[Store State].MEMBERS} ON ROWS WHERE (Measures.[DrinkSales]) WITH MEMBER MEASURES.DrinkSales AS '([Product].Drink, Measures.[Unit Sales])' SELECT {MEASURES.DrinkSales, Measures.[Unit Sales]} ON COLUMNS, {[Store].[Store State].MEMBERS} ON ROWS Beispiel illustriert, daß abgeleitete Measures Einschränkung entlang anderer Dimensionen vornehmen können. äquivalent Data Warehousing und Mining: MDX. 35 Calculated Members (4) Beispiel für Calculated Member-Definition für Dimension, die nicht Measures ist: WITH MEMBER [Time].[First Half 97] AS '[Time].[1997].[Q1] + [Time].[1997].[Q2]' MEMBER [Time].[Second Half 97] AS '[Time].[1997].[Q3] + [Time].[1997].[Q4]' Man beachte: Summe ist hartkodiert. Definition ist wiederum unabhängig von konkreten Werten anderer Dimensionen. Calculated Members müssen unter der Wurzel der Hierarchie eingehängt werden. Beispiel, das nicht funktioniert: WITH MEMBER Measures.ProfitPercent AS '(Measures.[Store Sales] - Measures.[Store Cost]) / (Measures.[Store Cost])', FORMAT_STRING = '#.00%' MEMBER [Time].[Year].[H1] AS '[Time].[Year].[Q1] + [Time].[Year].[Q2] MEMBER [Time].[Year].[H2] AS '[Time].[Year].[Q3] + [Time].[Year].[Q4] SELECT {[Time].[Year].[H1], [Time].[Year].[H2]} ON COLUMNS, {[Store].[Store Name].MEMBERS} ON ROWS WHERE (Measures.ProfitPercent) Data Warehousing und Mining: MDX. 36
Solve_order (1) Beispiel Halbjahresprofit, verwendet beide abgeleiteten Members von eben. Erster Versuch, nicht ausreichend: WITH MEMBER Measures.ProfitPercent AS '(Measures.[Store Sales] - Measures.[Store Cost]) / (Measures.[Store Cost])', FORMAT_STRING = '#.00%' MEMBER [Time].[First Half 97] AS '[Time].[1997].[Q1] + [Time].[1997].[Q2]' MEMBER [Time].[Second Half 97] AS '[Time].[1997].[Q3] + [Time].[1997].[Q4]' SELECT {[Time].[First Half 97], [Time].[Second Half 97], [Time].[1997].CHILDREN} ON COLUMNS, {[Store].[Store Name].MEMBERS} ON ROWS WHERE (Measures.ProfitPercent) Solve_order (2) Beispiel Fortsetzung: Q1 Q2 Q3 Q4 Sales 30 40 50 40 Cost 10 15 30 20 WITH MEMBER Measures.ProfitPercent AS '(Measures.[Store Sales] - Measures.[Store Cost]) / (Measures.[Store Cost])' Q1 Q2 Q3 Q4 5 2 Profit 2 1 3 3 WITH MEMBER [Time].[H1] AS '[Time].[1997].[Q1] + [Time].[1997].[Q2]' MEMBER [Time].[H2] AS '[Time].[1997].[Q3] + [Time].[1997].[Q4]' H1 H2 Sales 70 90 Cost 25 50 Profit H1 H2 9 4 5 5 Data Warehousing und Mining: MDX. 37 Man muß explizit angeben, in welcher Reihenfolge Ableitungen zur Anwendung kommen sollen. Data Warehousing und Mining: MDX. 38 Solve_order (3) Cross-Dimensional Operations Folie aus vergangenem Kapitel Beispiel: WITH MEMBER Measures.ProfitPercent AS '(Measures.[Store Sales] - Measures.[Store Cost]) / (Measures.[Store Cost])', FORMAT_STRING = '#.00%', SOLVE_ORDER = 1 MEMBER [Time].[First Half 97] AS '[Time].[1997].[Q1] + [Time].[1997].[Q2]' MEMBER [Time].[Second Half 97] AS '[Time].[1997].[Q3] + [Time].[1997].[Q4]' SELECT {[Time].[First Half 97], [Time].[Second Half 97], [Time].[1997].CHILDREN} ON COLUMNS, {[Store].[Store Name].MEMBERS} ON ROWS WHERE (Measures.ProfitPercent) Größerer SOLVE_ORDER-Wert bedeutet, daß MDX zuerst versucht, diesen Ausdruck aufzulösen. Verknüpfungen von Werten aus unterschiedlichen Dimensionen Beispiel für single-dimensional Berechnung: Anzahl der Angestellten = Belegschaft - Anzahl Arbeiter Allen Werten entspricht die gleiche Position im DataCube. Beispiel für cross-dimensional Berechnung: Bereinigter projizierter Gewinn = Projizierter Gewinn, verrechnet mit Währungsrisiko des jeweiligen Landes. Bildungsgrad Studium Abitur Hauptschule 07.01. 08.01. Hessen Bayern Saarland Ort Datum Data Warehousing und Mining: MDX. 39 Data Warehousing und Mining: MDX. 40
Beziehungen zwischen Hierarchie-Elementen (1) Motivation: Verknüpfung von Werten, die unterschiedlichen Members in der Hierarchie entsprechen, Beispiel: Anteil des Umsatzes mit Bier am Gesamtumsatz Getränke Data Warehousing und Mining: MDX. 41 Data Warehousing und Mining: MDX. 42 Beziehungen zwischen Hierarchie-Elementen (2) Beispiel MDX-Statement: WITH MEMBER MEASURES.PercentageSales AS '([Product].CURRENTMEMBER, Measures.[Unit Sales]) / ([Product].CURRENTMEMBER.PARENT, Measures.[Unit Sales])', FORMAT_STRING = '#.00%' SELECT {MEASURES.[Unit Sales], MEASURES.PercentageSales} ON COLUMNS, [Product].[Brand Name].MEMBERS ON ROWS Erläuterung: Tupel mit mehreren Komponenten in der Member- Definition, z. B. ([Product].CURRENTMEMBER, Measures.[Unit Sales]), ist Einschränkung über mehrere Dimensionen. Was passiert, wenn ROW-Achse nicht über Product? Data Warehousing und Mining: MDX. 43 Data Warehousing und Mining: MDX. 44
Beziehungen zwischen Hierarchie-Elementen Fortsetzung Konstrukt ANCESTOR anstelle von PARENT.PARENT... Übersichtlicher, Einfacher zu programmieren, Änderungsfreundlicher Beispiel: WITH MEMBER MEASURES.PercentageSales AS '([Product].CURRENTMEMBER, Measures.[Unit Sales]) / (ANCESTOR([Product].CURRENTMEMBER, [Product Category]), MEASURES.[Unit Sales])' Query von eben mit Konstrukt ANCESTOR? Data Warehousing und Mining: MDX. 45 Data Warehousing und Mining: MDX. 46 Generieren Sie mit MDX die folgende Tabelle: x-achse ist Zeit, genauer gesagt, die Jahre und die Quartale. y-achse ist Dimension 'Promotions'. Measure ist 'Unit Sale'. GENERATE (1) Motivation: Anwendung eines Templates auf alle Elemente einer Menge, Beispiel: Wir wollen alle Store Cities in NoBigCityStates. Mit unserem jetzigen Wissen müßten wir die NoBigCityStates einzeln aufzählen, für jede Ableitung von Store Cities einzeln. Konstrukt GENERATE löst das Problem Beispiel: 'GENERATE(NoBigCityStates, Store.CURRENTMEMBER.CHILDREN) Menge Template spezieller Platzhalter Data Warehousing und Mining: MDX. 47 Data Warehousing und Mining: MDX. 48
GENERATE (2) Beispiel: SELECT {GENERATE([Time].[Year].MEMBERS, {[Time].CURRENTMEMBER, [Time].CURRENTMEMBER.CHILDREN})} ON COLUMNS, [Promotions].[All Promotions].CHILDREN ON ROWS WHERE (Measures.[Unit Sales]) Man braucht das CURRENTMEMBER, um sicherzustellen, daß die Jahre und genau die Quartale aus dem Jahr zusammen aufgeführt werden. SELECT {[Time].[Year].MEMBERS, [Time].[Year].CHILDREN} löst das Problem nicht. Data Warehousing und Mining: MDX. 49 Data Warehousing und Mining: MDX. 50 Zeitserien (1) Zeitserien (2) Motivation: Vergleich von Werten mit Werten aus Vergleichszeitraum, z. B. gleicher Wert im Vorjahr. Parameter: Member der Dimension Time, Beispiel für vollständiges MDX-Statement: WITH MEMBER Measures.[Profit Growth] AS '(Measures.[Profit]) (Measures.[Profit], PARALLELPERIOD([Time].[Quarter]))', FORMAT_STRING = '###,###.00' SELECT {Measures.[Profit], Measures.[Profit Growth]} ON COLUMNS, {DESCENDANTS([Time].[1997], [Month])} ON ROWS Default: Vorgängerperiode. Hier im Beispiel wird Monat des Vorgängerquartals genommen. Data Warehousing und Mining: MDX. 51 Data Warehousing und Mining: MDX. 52
Zeitserien konkrete Konstrukte PARALLELPERIOD = Element an gleicher Stelle in vorheriger Periode (z. B. gleiches Quartal im vorherigen Jahr) Parameter: Members der Dimension Time, (Es existiert auch allgemeinere Funktion COUSIN.) OPENINGPERIOD = Element an erster Stelle in der Periode (z. B. erstes Quartal im Jahr) CLOSINGPERIOD = Element an letzter Stelle in der Periode (z. B. letztes Quartal im Jahr) PERIODSTODATE = alle Elemente bis an eine spezifizierte Stelle (z. B. alle Quartale bis heute) YTD QTD MTD WTD Abkürzungen für Ausdrücke mit PERIODSTODATE Tuples und CROSSJOIN Motivation: Dimension mit mehr als einem Attribut, Tuples = Kombination von Elementen verschiedener Dimensionen (in der Demo Werte entlang der Achse) Beispiele für Tupel: (Supermarket, CA), (Supermarket, DF),... (Deli, CA),... Wie erzeugt man Tupel automatisch? CROSSJOIN = Kreuzprodukt zweier Elementmengen Beispiel: CROSSJOIN([Customers].[City].MEMBERS, [Time].[Quarter].MEMBERS) Data Warehousing und Mining: MDX. 53 Data Warehousing und Mining: MDX. 54 Data Warehousing und Mining: MDX. 55 Data Warehousing und Mining: MDX. 56
Filtern und Sortieren FILTER, ORDER, TOPCOUNT etc., die im folgenden besprochen werden, haben alle den gleichen Aufbau: Operator(Member-Expression, Bedingung/Sortierkriterium etc.) Data Warehousing und Mining: MDX. 57 Data Warehousing und Mining: MDX. 58 Data Warehousing und Mining: MDX. 59 Data Warehousing und Mining: MDX. 60
Filtern Motivation: Einschränkung der Elemente einer Achse, man will mehr können als nur die relevanten Members explizit hinzuschreiben. Beispiel: spezielle Filterbedingung SELECT NON EMPTY {[Store Type].[Store Type].MEMBERS} ON COLUMNS, FILTER({[Store].[Store City].MEMBERS}, (Measures.[Unit Sales], [Time].[1997])>25000) ON ROWS Bedingung WHERE (Measures.[Profit], [Time].[Year].[1997]) Erläuterung: NON EMPTY stellt sicher, daß mindestens eine Zelle der Tabelle nicht leer ist. Sortieren Sortieren Aufbau des Sortier-Operators ist wie der einer Filtering Expression: angewendet auf Liste (heißt hier Menge ), liefert ORDER-Operator Liste zurück, Aufbau: ORDER(set, expression[, ASC DESC...]) Sortierkriterium Menge, auf die Filter angewendet wird Data Warehousing und Mining: MDX. 61 Data Warehousing und Mining: MDX. 62 Sortieren Beispiel Side Issue : Spezifikation von Ranges ist möglich: SELECT Measures.MEMBERS ON COLUMNS, {[Store].[Store City].[Beverly Hills]:[Spokane]} ON ROWS Dieselbe Anfrage, dieses Mal mit Sortierung: SELECT Measures.MEMBERS ON COLUMNS, ORDER({[Store].[Store City].[Beverly Hills]:[Spokane]}, [Store].CURRENTMEMBER.Name, BASC) ON ROWS Präfix B bedeutet, daß die Hierarchie für die Sortierung aufgebrochen wird. Data Warehousing und Mining: MDX. 63 Data Warehousing und Mining: MDX. 64
Data Warehousing und Mining: MDX. 65 Data Warehousing und Mining: MDX. 66 v Aggregationsfunktionen SUM, COUNT, AVG, MAX Nützlich für die Definition abgeleiteter Measures. Beispiele: SUM(BigCityStates, Measures.[Unit Sales]) WITH MEMBER Measures.[Customer Count] AS 'COUNT(CROSSJOIN({Measures.[Unit Sales]}, [Customers].[Name].MEMBERS), EXCLUDEEMPTY)' SELECT {Measures.[Unit Sales], Measures.[Customer Count]} ON COLUMNS, [Product].[Product Category].MEMBERS ON ROWS Äquivalente Query, allerdings etwas langsamer in der Ausführung: WITH MEMBER Measures.[Customer Count] AS 'COUNT(FILTER((Measures.[Unit Sales], [Customers].[Name].MEMBERS)>0)) SELECT {Measures.[Unit Sales], Measures.[Customer Count]} ON COLUMNS, [Product].[Product Category].MEMBERS ON ROWS Top-N Queries Konstrukte: HEAD = die ersten n Elemente in einem Set TAIL = die letzten n Elemente in einem Set TOPCOUNT TOPPERCENT TOPSUM = die n besten Elemente in einem Set BOTTOMCOUNT BOTTOMPERCENT BOTTOMSUM = die n schlechtesten Elemente in einem Set Beispiel: SELECT Measures.MEMBERS ON COLUMNS, TOPCOUNT({[Store].[Store City].MEMBERS}, 12, Measures.[Sales Count]) ON ROWS Data Warehousing und Mining: MDX. 67 Data Warehousing und Mining: MDX. 68
Data Warehousing und Mining: MDX. 69 Data Warehousing und Mining: MDX. 70 Fazit Mögliche Prüfungsfragen Zusammenfassung: MDX ist für IT-Entwickler ein relativ angenehmes und leistungsfähiges Werkzeug. MDX ist für IT-Anwender hingegen kompliziert und schwierig erlernbar. Zielsetzung dieser Sprache: Einbettung von MDX-Queries in Anwendungen, die dem Entscheider vordefinierte Analysen zur Verfügung stellen. Insbesondere der zweite Teil hat verdeutlicht, daß man mit MDX mehr erreichen kann als mit Slice&Dice Interaktionsmechanismen. Vertauschung von Dimensionen und Measures wie im zuvor betrachteten Modell ist hier nicht möglich, außerdem weitere Unschönheiten. <Anfragen mit MDX formulieren können.> Was bedeutet weitere Unschönheiten auf vorangegangener Folie? Data Warehousing und Mining: MDX. 71 Data Warehousing und Mining: MDX. 72