5 MDX OLAP 2010 4p

Télécharger au format pptx, pdf ou txt
Télécharger au format pptx, pdf ou txt
Vous êtes sur la page 1sur 17

Entrepts de donnes : Introduction au langage MDX

(Multi-Dimensional eXtensions) pour l!OLAP


2009 Bernard ESPINASSE
Professeur l'Universit d'Aix-Marseille

Plan
1. 2. 3. Schma XML d!une BD multidimensionnelle
Rappels de modlisation multidimensionnelle Schma en XML sous Mondrian

Introduction a MDX
Origine de MDX MDX versus SQL

Syntaxe de base de MDX


Structure gnrale d!une requte MDX MDX Spcification de Membres, Tuples et Sets dans MDX Spcification d!un axe dans MDX (simple et en numration) Spcification de filtres (Slicers) dans MDX : clause WHERE

Schma XML d!une BD multidimensionnelle Introduction MDX Syntaxe de base de MDX Membres et tuples dans MDX Fonctions sur les membres et les ensembles (Sets) de MDX Expressions avances de MDX

4. 5.

Membres et tuples dans MDX


Emboitement (Nest) de tuples dans MDX Membres calculs dans MDX, Membres NULL et Cellules EMPTY

Fonctions sur les membres et ensembles (Sets) de MDX


Fonctions sur les membres et les dimensions Oprations sur les ensembles (Sets) dans MDX Fonctions sur les Sets (Head, Tail, Subset, Topcount, Order, Filter) et (CrossJoin)

6.

Expressions avances de MDX


Analyse comparative : fonction ParallelPeriod Calcul cumulatif : fonction Descendants Expressions conditionnelles : IFF

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

1 Schma XML d!une BD multidimensionnelle


Rappels de modlisation multidimensionnelle Schma d!une BD multidimensionnelle en XML (Mondrian)

Rappel de modlisation multidimensionnelle (1)


On considre un cube Sales pour l!analyse de ventes d!une compagnie hypothtique : Ce cube contient plusieurs dimensions : le temps la gographie (magasin (Store), ) les produits, les clients Exemple de cube Sales :

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

Rappel de modlisation multidimensionnelle


un cube est compos de dimensions une dimension peut contenir une ou plusieurs hirarchies : la dimension "Time" contient 2 hirarchies : "Year, Quarter, Month" et "Year, Week, Day"

Modlisation multidimensionnelle : hirarchies des dimensions


Soit les hirarchies de dimensions suivantes :

Hirarchie Time

Hirarchie Store ou Regions

Hirarchie Product

Une hirarchie est compose de niveaux ("levels") correspondant un des attributs de la base de donnes : hirarchie "Time" est compose des niveaux "Year", "Quarter" et "Month" hirarchie "Store" est compose des niveaux "Country", "State", "City", "Store_Name" Un niveau est compos de membres qui sont les valeurs d'un niveau dtectes par le moteur OLAP et stockes dans les mtadonnes : les membres du niveau "Country" sont "France", "Canada" et "USA" les membres du niveau "City" sont "Marseille", "Lyon" et "Paris". Une mesure est une quantit intressante que l!on souhaite observer, par exemple : montant des ventes quantit de produit vendus 5
Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

Schma d!une BD multidimensionnelle


Un schma = modle logique dfinissant une BD multidimensionnelle ainsi que les structures associes : cubes, dimensions, hirarchies, niveaux et membres Il donne aussi la source des donnes reprsentes dans le modle logique Il est en gnral en toile, se traduit par un ensemble de tables relationnelles Composants majeurs d!un schma : cube = collection de dimensions et de mesures dans un domaine particulier. dimension = attribut, ou ensemble d'attributs, travers lesquels sont observes les mesures mesure = quantit intressante, qu!on souhaite observer (Ex : montant des ventes, ) Exemple : on peut vouloir observer la vente des produits selon leurs couleurs, le sexe du client et le magasin o sont vendus ces produits la couleur du produit, le sexe du client et le magasin de vente sont des dimensions.

Exemple de schma XML sous Mondrian (1)


Un schma peut tre spcifi par un document XML : Exemple de schma XML sous Mondrian (moteur OLAP) :
<Schema> <Cube name="Sales"> <Table name="sales_fact_1997"/> <Dimension name="Gender" foreignKey="customer_id"> <Hierarchy hasAll="true" allMemberName="All Genders" primaryKey="customer_id"> <Table name="customer"/> <Level name="Gender" column="gender" uniqueMembers="true"/> </Hierarchy> </Dimension> <Dimension name="Time" foreignKey="time_id"> <Hierarchy hasAll="false" primaryKey="time_id"> <Table name="time_by_day"/> <Level name="Year" column="the_year" type="Numeric" uniqueMembers="true"/> <Level name="Quarter" column="quarter" uniqueMembers="false"/> <Level name="Month" column="month_of_year" type="Numeric" uniqueMembers="false"/> </Hierarchy> </Dimension> <Measure name="Unit Sales" column="unit_sales" aggregator="sum" formatString="#,###"/> <Measure name="Store Sales" column="store_sales" aggregator="sum" formatString="#,###.##"/> <Measure name="Store Cost" column="store_cost" aggregator="sum" formatString="#,###.00"/> <CalculatedMember name="Profit" dimension="Measures" formula="[Measures].[Store Sales]-[Measures].[Store Cost]"> <CalculatedMemberProperty name="FORMAT_STRING" value="$#,##0.00"/> </CalculatedMember> </Cube> </Schema>
Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

Exemple de schma XML sous Mondrian (2)


Ce schma contient un seul cube de ventes, appel "Sales" : <Cube name="Sales"> dans ce cube les ventes sont observes sur : 2 dimensions Time et Gender , et 4 mesures Unit Sales , Store Sales , Store cost et Profit

Exemple de schma XML sous Mondrian (3)


Exemple : une reprsentation XML de la dimension "Gender" : <Dimension name="Gender" foreignKey="customer_id"> <Hierarchy hasAll="true" primaryKey="customer_id"> <Table name="customer"/> <Level name="Gender" column="gender" uniqueMembers="true"/> </Hierarchy> </Dimension> la dimension "Gender" donne le sexe du client cette dimension a 1 seule hirarchie et 1 seul niveau elle prend ses valeurs partir de la colonne "gender" de la table "customer" la colonne "gender" a 2 valeurs 'F' et 'M' la dimension "Gender" a ainsi 2 membres "[Gender].[F]" et "[Gender].[M]"

la table de faits (ici "sales_fact_1997") contient les colonnes partir desquelles les mesures sont calcules et les rfrences vers les tables des dimensions chaque mesure a un nom, une colonne de correspondance dans la table de faits, un oprateur d'agrgation l'oprateur d'agrgation est souvent "sum", mais aussi "count", "min", "max", "avg" et "distinct-count" peuvent tre utiliss ici la mesure (<Measure>) Profit est calcule partir des mesures Store Sales et Store cost

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

10

Exemple de schma XML sous Mondrian (4)


Hirarchie multiple : une dimension peut contenir plusieurs hirarchies
Ex : la dimension "Time" contient 2 hirarchies : "Year, Quarter, Month" et "Year, Week, Day" : <Dimension name="Time" foreignKey="time_id"> <Hierarchy hasAll="false" primaryKey="time_id"> <Table name="time_by_day"/> <Level name="Year" column="the_year" type="Numeric" uniqueMembers="true"/> <Level name="Quarter" column="quarter" uniqueMembers="false"/> <Level name="Month" column="month_of_year" type="Numeric" uniqueMembers="false"/> </Hierarchy> <Hierarchy name="Time Weekly" hasAll="false" primaryKey="time_id"> <Table name="time_by_week"/> <Level name="Year" column="the_year" type="Numeric" uniqueMembers="true"/> <Level name="Week" column="week" uniqueMembers="false"/> <Level name="Day" column="day_of_week" type="String" uniqueMembers="false"/> </Hierarchy> </Dimension>

Exemple de schma XML sous Mondrian (6)


Mapping des dimensions et des hirarchies avec les tables :
une dimension est jointe avec un cube l'aide de 2 colonnes : une dans la table de faits et une dans la table de dimensions l'lment <Dimension> a une cl trangre (l'attribut foreignKey), qui est le mme dans la table de faits l'lment <Hierarchy> a une cl primaire (l'attribut primaryKey) si une hirarchie est organise selon plusieurs tables, on peut utiliser l'attribut primaryKeyTable pour lever toute ambigut :
<Cube name="Sales"> ... <Dimension name="Product" foreignKey="product_id"> <Hierarchy hasAll="true" primaryKey="product_id" primaryKeyTable="product"> <Join leftKey="product_class_key" rightAlias="product_class" rightKey="product_class_id"> <Table name="product"/> <Join leftKey="product_type_id" rightKey="product_type_id"> <Table name="product_class"/> <Table name="product_type"/> </Join> </Join> <!-- Level declarations ... -> </Hierarchy> </Dimension> </Cube>
Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

11

12

2 Introduction MDX
Origine de MDX MDX versus SQL

Origine de MDX
MDX est l!acronyme de Multi Dimensional eXpression
est un langage de requtes OLAP pour les bases de donnes multidimensionnelles a t invent par Mosha Pasumansky au sein de Microsoft a t prsent pour la premire fois en 1997 comme un volet de la spcification OLE DB for OLAP (ODBO) version commerciale Microsoft OLAP Services 7.0, Microsoft Analysis Services en1998 dernire version de la spcification OLE DB for OLAP (ODBO) en 1999 MDX peut tre prsent comme une extension de SQL : structures de requtes et mots cls similaires, mais avec de grandes diffrences. Bibliographie et sources du cours :

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

13

MDX for Everyone , M. Pasumansky, avril 1998. Fast track to MDX , M. Whithehorn, R. Zare, M. Pasumansky, Springer, 2006. Introduction to Multidimensionnal Expressions (MDX) , auteur inconnu. Cours de Kamel Aouiche, ERIC, Universit de Lyon 2, 2004 Cours de Joseph Fong, City University of Hong Kong, 2008

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

14

MDX versus SQL (1)


MDX est fait pour naviguer dans les bases multidimensionnelles et pour dfinir des requtes sur tous leurs objets (dimensions, hirarchies, niveaux, membres et cellules) afin d'obtenir (simplement) une reprsentation sous forme de tableaux croiss MDX ressemble SQL par ses mots cl SELECT, FROM, WHERE, mais : SQL construit des vues relationnelles MDX construits des vues multidimensionnelles des donnes Analogies entre termes multidimensionnels (MDX) et relationnels (SQL) : Multidimensionnel (MDX) Cube Niveau (Level) Dimension Mesure (Measure) Membre de dimension (Dimension member)
Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

MDX versus SQL (2)


Structure gnrale d!une requte SQL : SELECT column1, column2, , columnn FROM table Structure gnrale d!une requte MDX : SELECT axis1 ON COLUMNS, axis2 ON ROWS FROM cube

FROM spcifie la source de donnes :


en SQL : une ou plusieurs tables en MDX : un cube

SELECT indique les rsultats que l!on souhaite rcuprer par la requte :
Relationnel (SQL) Table Colonne (chaine de caractre ou valeur numrique) plusieurs colonnes lies ou une table de dimension Colonne (discrte ou numrique) Valeur dans une colonne et une ligne particulire de la table 15
Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

en SQL : une vue des donnes en 2 dimensions (lignes (rows) et colonnes (columns)) les lignes ont la mme structure dfinie par les colonnes en MDX : nb quelconque de dimensions pour former les rsultats de la requte. terme d!axe pour viter confusion avec les dimensions du cube. pas de signification particulire pour les rows et les columns, mais il faut dfinir chaque axe : axe1 dfinit l!axe horizontal et axe2 dfinit l!axe vertical

16

3 Syntaxe de base de MDX


Structure gnrale d!une requte MDX Spcification de Membres, Tuples et Sets dans MDX Spcification d!un axe dans MDX (simple et en numration) Spcification de filtres (Slicers) dans MDX : clause WHERE Insertion de commentaires en MDX

Structure gnrale d!une requte MDX

Un prototype de requte MDX est donn par la syntaxe suivante :

SELECT [<axis_specification> [, <spcification_des_axes>...]] FROM [<spcification_d_un_cube>] [WHERE [<spcification_de_filtres>]]

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

17

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

18

Membres
Un membre = une instance d'un niveau d!une dimension, spcifi entre crochets [..] Ex : [Food], [Drink] sont des membres de la dimension "Products" au niveau 1 Les membres = items accessibles dans les hirarchies et peuvent tre rfrencs de diffrentes faons : [1997] [Time].[1997] [Product].[Food] [Product].[Food].[Baked Goods] [Product].[All Products].[Food].[Baked Goods] Les enfants d'un membre = membres du niveau immdiatement en dessous de celui-ci Ex. d!utilisations de membres dans des requtes simples : SELECT [Time].[1997] ON COLUMNS FROM [Sales] SELECT [Product].[Food] ON COLUMNS FROM [Sales] SELECT [Product].[Food].[Baked Goods] ON COLUMNS FROM [Sales] SELECT [Product].[All Products].[Food].[Baked Goods] ON COLUMNS FROM [Sales]

Tuples, cellule et mesure


Un tuple = suite de plusieurs membres entre parenthses spars par une virgule : Ex : ([Time].[1997], [Product].[Food]) on peut omettre les parenthses s'il s'agit d'un tuple ne contenant qu'un seul membre. Un tuple donne la liste des membres qui identifient une ou plusieurs cellules dans un cube. Une cellule est l'intersection des dimensions d'un cube de donnes : Ex : SELECT ([Time].[1997], [Product].[Food]) ON COLUMNS FROM [Sales] SELECT ([Product].[All Products].[Food].[Baked Goods], [1997]) ON COLUMNS FROM [Sales] Dans un tuple, les mesures sont traites comme une dimension particulire, nomme [Measures] : SELECT ([Measures].[Unit Sales], [Product].[All Products].[Food].[Baked Goods]) ON COLUMNS FROM [Sales]

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

20

19

Sets (1)
Un set = un ensemble ordonn de tuples Un set peut tre vu comme une plage de valeurs Un set commence par une accolade "{", dans laquelle sont numrs les tuples spars par des virgules, et se termine par une accolade apparie "}" Ex1 : SELECT { ([Measures].[Unit Sales], [Product].[All Products].[Food].[Baked Goods]), ([Measures].[Store Sales], [Product].[All Products].[Food].[Baked Goods]) } ON COLUMNS FROM [Sales] ce set contient : 2 mesures diffrentes (Units sales et Store Sales) et le mme membre (Baked Goods) :

Sets (2)
Ex2 : un set qui comporte 2 mesures et 2 membres diffrents de la mme dimension sur 2 niveaux diffrents ([Food] et [Baked Goods]) : SELECT { ([Measures].[Unit Sales], [Product].[Food]), ([Measures].[Store Sales], [Product].[Food].[Baked Goods]) } ON COLUMNS FROM [Sales] Ex3 : un set qui a la mme mesure et 2 diffrents membres contigus ([Food] et [Drink]) : SELECT { ([Measures].[Unit Sales], [Product].[Food]), ([Measures].[Unit Sales], [Product].[Drink]) } ON COLUMNS FROM [Sales] Ex4 : un set qui ne contient qu'un seul membre ([1997]) : SELECT { ([1997]) } ON COLUMNS FROM [Sales]

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

22

21

Spcification d!un axe en MDX (1)


Plusieurs spcifications possibles pour un mme axe en MDX : un set suivi du mot clef ON suivi d'un nom d'axe spcifique fait rfrence un numro d'ordre s'il y a plus de 2 axes de restitution, ou simplement aux noms d'axes explicites COLUMNS et ROWS Ex: units vendues "[Measures].[Unit Sales]" par an pour les produits "Drink" et "Food" : SELECT { ([Measures].[Unit Sales], [Product].[Food]), ([Measures].[Unit Sales], [Product].[Drink]) } ON AXIS(0), { ([Time].[1997]), ([Time].[1998]) } ON AXIS(1) FROM [Sales] ou SELECT { ([Measures].[Unit Sales], [Product].[Food]), ([Measures].[Unit Sales], [Product].[Drink]) } ON COLUMNS, { ([Time].[1997]), ([Time].[1998]) } ON ROWS FROM [Sales]
Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

Spcification d!un axe en MDX (2)


Une faon simple est de dfinir un axe est de prsenter sur l!axe tous les membres de d!une dimension : <dimension name>.MEMBERS Si l!on veut voir apparatre tous les membres de la dimension un certain niveau de cette dimension : <dimension name>.<level name>.MEMBERS par exemple la requte : SELECT Years.MEMBERS ON COLUMNS, Rgions.Continent.MEMBERS ON ROWS FROM Sales donne le rsultat :
1994 N. America S. America Europe Asia 120,000 55,000 30,000 1995 200,000 10,000 95,000 80,000 1996 400,000 30,000 160,000 220,000 1997 600,000 70,000 310,000 200,000

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

24

23

Spcification d!un axe en MDX (3)


Cette requte MDX : SELECT Years.MEMBERS ON COLUMNS, Rgions.Continent.MEMBERS ON ROWS FROM Sales

Spcification d!un axe en numration dans MDX


Certaines dimensions ou niveaux ont plus de 1000 membres ! On peut souhaiter ne pas considrer tous les membres de la dimensions ou du niveau Dans MDX on peut spcifier une liste de membres considrer ainsi : { dim.member1, dim.member2, , dim.membern} Ex : on souhaite considrer seulement les ventes sur les 2 annes 1996 et 1997 : SELECT { Years.[1996], Years.[1997] } ON COLUMNS, Regions.Continent.MEMBERS ON ROWS FROM Sales Remarques : il est recommand de spcifier des noms de membres entre crochet [ ] avec aucun symbole blanc, point, ici [1996] et [1997] sont des membres et pas des valeurs un axe est spcifi dans une expression entre accolades { } dans cette requte la mesure (measure) pas explicitement dfinie (mesure par dfaut) dans MDX la mesure est traite de la mme faon qu!une dimension quand une dimension a le niveau "All!, le premier membre du premier niveau sera choisi par dfaut

1994 N. America S. America Europe 120,000 55,000

1995 200,000 10,000 95,000

1996 400,000 30,000 160,000

1997 600,000 70,000 310,000 200,000

Son rsultat de la requte est une table avec 2 axes :220,000 Asia 30,000 80,000

l!axe horizontal est (i.e. columns) contient tous les membres de la dimension "Years! l!axe vertival est (i.e. rows) contient tous les membres du niveau "Continent! de la dimension "Regions!

Remarque : la mesure considre (auxquelles correspondent les valeurs du rsultat) n!est pas prcise, c!est une mesure par dfaut (default measure) : "sales! (valeurs de ventes) 25

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

26

Spcification de filtres (Slicers) dans MDX (1)


Dans la requte prcdente on considre que 2 dimensions : Regions et Years Supposons qu!on s!intresse non plus aux ventes de tous les produits, mais seulement aux ventes d!ordinateurs, on dfinie alors le nouvel axe : { Products.[Product Group].Computers } On pourrait ajouter cet axe notre requte, mais elle contiendrait alors 3 axes, et tous les outils OLAP ne pourraient le visualiser, aussi on prfre utiliser une opration de Slice (filtre) : Dans MDX l!opration de Slice est traite par une clause WHERE : SELECT { Years.[1996], Years.[1997] } ON COLUMNS, Regions.Continent.MEMBERS ON ROWS FROM Sales WHERE ( Products.[Product Group].[Computers] )

Spcification de filtres (Slicers) dans MDX (2)


La clause WHERE a la syntaxe : WHERE ( member-of-dim1, member-of-dim2, , member-of-dimn ) Dans un Slice en MDX on peut avoir plusieurs membres, mais ils doivent appartenir des dimensions diffrentes (pas de Slice sur 2 produits diffrents, par ex. computer et printers) Ex: Slide sur un produit (computer) et un client particulier (AT&T) : SELECT { Years.[1996], Years.[1997] } ON COLUMNS, Regions.Continent.MEMBERS ON ROWS FROM Sales WHERE ( Products.[Product Group].[Computers], Customers.[AT&T] ) Ventes de computer AT&T pour les annes 1996 et 1997 pour tous les continents.

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

27
Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

28

Spcification de filtres (Slicers) dans MDX (3)


On peut souhaiter voir plutt que les ventes (sales mesure par dfaut) de computer, le nombre d!unit expdies On doit juste ajouter la mesure units dans le Slice : SELECT { Years.[1996], Years.[1997] } ON COLUMNS, Regions.Continent.MEMBERS ON ROWS FROM Sales WHERE ( Products.[Product Group].[Computers], Customers.[AT&T], Measures.[Units] ) Units de computer expdies AT&T pour les annes 1996 et 1997 pour tous les continents.

Insertion de commentaires
Les commandes MDX peuvent tre commentes de trois faons diffrentes : // Commentaire en fin de ligne -- Commentaire en fin de ligne /* Commentaire sur plusieurs lignes */ Les commentaires peuvent tre imbriqus comme le montre l'exemple ci-dessous : /* Commentaire sur plusieurs lignes /* Commentaire imbriqu */ */

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

29

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

30

4 Membres et tuples dans MDX


Emboitement (Nest) de tuples dans MDX Membres calculs dans MDX Membres NULL et Cellules EMPTY

Emboitement (Nest) de tuples dans MDX (1)


Les axes peuvent contenir des membres ou des tuples On veut voir les ventes de computers et printers en Europe et Asia sur les annes 1996 et 1997. On peut le faire avec un requte MDX avec 3 axes : SELECT { Continent.[Europe], Continent.[Asia] } ON AXIS(0), { Product.[Computers], Product.[Printers] } ON AXIS(1), { Years.[1996], Years.[1997] } ON AXIS(2) FROM Sales Mais le rsultat de cette requte n!est pas une table 2 dimensions, mais un cube 3 dimensions, plus difficile interprter Solution : rcrire la requte en considrant 3 dimensions, avec seulement 2 axes et permettant avoir le rsultat suivant :
1996 1997

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

31

Europe

Computers Printers

Asia

Computers Printers

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

32

Emboitement (Nest) de tuples dans MDX (2)


Les lignes (ROWS) de cette table contiennent 2 dimensions : Computer et Printers La dimension Product est emboit (nested) dans la dimension Regions conduisant aux 4 combinaisons des membres de dimensions {Europe, Asie} et {Computers, Printers} Chaque combinaison de membres venant de dimensions diffrentes est un Tuple La requte MDX est alors : SELECT { Year.[1996], Year.[1997] } ON COLUMNS, { ( Continent.Europe, Product.Computers ), ( Continent.Europe, Product.Printers ), ( Continent.Asia, Product.Computers ), ( Continent.Asia, Product.Printers ) } ON ROWS FROM Sales Donne les ventes de computers et printers pour l!Europe et l!Asie pour 1996 et 1997.

Membres calculs dans MDX (1)


MDX permet d!tendre le cube en dfinissant d!autres membres de dimensions, membres qui sont calculs partir de membres existants Le syntaxe pour les membres calculs est de mettre la construction suivante WITH en face de l!instruction SELECT : WITH MEMBER parent.name AS 'expression' Le parent du nouveau membre est de dimension mesure (measures), le nom est Profit et l!expression est : Profit = Sales Cost : WITH MEMBER Measures.Profit AS 'Measures.Sales Measures.Cost' SELECT Products.MEMBERS ON COLUMNS, Year.MEMEBERS ON ROWS FROM Sales WHERE ( Measures.Profit ) Donne les profits des produits au cours des annes

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

33
Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

34

Membres calculs dans MDX (2)


Les membres calculs sont traits de la mme manire que des membres ordinaires Ils peuvent tre utiliss : dans la dfinition d!axes dans une clause WHERE : on peut dfinir des membres calculs avec d!autres membres calculs Ex : le membre calcul ProfitPercent (profit pourcentage du cot) : ProfitPercent = Profit / Cost WITH MEMBER Measures.Profit AS 'Measures.Sales Measures.Cost' MEMBER Measures.ProfitPercent AS 'Measures.Profit / Measures.Cost', FORMAT_STRING = '#.#%' SELECT { Measures.Profit, Measures.ProfitPercent } ON COLUMNS FROM Sales L!instruction FORMAT_STRING dfini le format du membre calcul

Membres calculs dans MDX (3)


Supposons que l!on veuille comparer la compagnie entre 1997 et 1998, on peut : construire une requte qui a un axe {[1997], [1998]} et regarde les paires de nombres pour chaque mesure dfinir un membre calcul dans le niveau Year, parallle 1997 et 1998, qui contiendra la diffrence entre eux : Ex : WITH MEMBER Time.[97 to 98] AS 'Time.[1998] Time.[1997]' SELECT { Time.[97 to 98] } ON COLUMNS, Measures.MEMBERS ON ROWS FROM Sales

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

36

35

Membres calculs dans MDX (4)


Supposons qu!on veuille voir comment les profits ont volus entre 97 et 98 : WITH MEMBER Measures.Profit AS 'Measures.Sales Measures.Cost' MEMBER Time.[97 to 98] AS 'Time.[1998] Time.[1997]' SELECT { Measures.Sales, Measures.Cost, Measures.Profit } ON COLUMNS, { Time.[1997], Time.[1998], Time.[97 to 98] } ON ROWS FROM Sales On obtient la matrice 3x3 :
Sales 1997 1998 97 to 98 300 350 50 Cost 220 210 -10 Profit 80 140 60

Membres NULL
Soit la requte suivante : WITH MEMBER Measures.[Sales Growth] AS '(Sales) (Sales, Time.PrevMember)' SELECT { [Sales], [Sales Growth] } ON COLUMNS, Month.MEMBERS ON ROWS FROM Sales Calcule pour chaque mois la croissante des ventes compare au mois prcdent. Pour le premier mois, il n!y a pas de mois prcdent dans le cube : au lieu de retourner une erreur, MDX a la notion de membre NULL reprsentant des membres qui n!existent pas La smantique d!un membre NULL est : 1. When the cell contains as one of its coordinates NULL member, the numeric value of the cell will be zero : Ainsi (Sales, [January].PrevMember) = 0 2. Any member function applied to NULL returns NULL. 3. When NULL member is included in set, it is just ignored. Ainsi{[September], [January].PrevMember} = {[September]}

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

37
Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

38

Cellules EMPTY
La notion cellule EMPTY est lie celle de membre NULL Quand une cellule est hors du cube alors sa valeur est vide, et la valeur calcule pour cette cellule est 0 (zro). On peut avoir des cellules vides pas seulement hors du cube. Il est important de distinguer : le fait qu!une donne existe et sa valeur est 0, et le fait qu!une donne n!existe pas rsultant d!une cellule EMPTY, cellule dont la valeur sera value 0. Pour cela MDX a le prdicat IsEmpty qui peut tre appliqu une cellule et retourne la valeur boolenne TRUE ou FALSE.

5 Fonctions sur les membres et ensembles (Set) de MDX


Fonctions sur les membres et les dimensions Oprations sur les ensembles (Sets) dans MDX Fonctions sur les Sets (Head, Tail, Subset, Topcount, Order, Filter) Fonctions sur les Sets (CrossJoin)

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

40

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

39

Fonctions sur les membres et les dimensions (1)


On a besoin de fonctions pour naviguer dans les hirarchies de dimensions Les axes d!interrogation dfinissent les sous-espaces dimensionnels de la requte Par exemple crire [WA].Parent (Etat du Washington) est quivalent crire [USA] Si l!on veut connatre les coordonnes d!une cellule dans le sous-espace de la requte : <dimension name>.CurrentMember <level name>.CurrentMember Ex : on veut calculer le pourcentage des ventes dans chaque ville relative son tat, on utilisera pour trouver l!tat d!une ville donne la fonction Parent : WITH MEMBER Measures.PercentageSales AS '(Regions.CurrentMember, Sales) / (Regions.CurrentMember.Parent, Sales)',FORMAT_STRING = '#.00%' SELECT { Sales, PercentageSales } ON COLUMNS, Regions.Cities.MEMBERS ON ROWS FROM Sales

Fonctions sur les Membres de dimensions (2)

Fontion Parent FirstChild LastChild FirstSibling LastSibling

Signification Donne le parent du membre de dimension considr Donne le premier fils du membre considr Donne le dernier fils du membre considr

Remarque Dplacement vertical sur une hirarchie, et on change ainsi de niveau Dplacement horizontal l!intrieur d!un mme niveau

NextMember Donne le membre suivant du membre considr PrevMember Donne le membre prcdent fils du membre considr Ex : FirstSibling

[Aug].PrevMember retourne [Jul]. Les 2 membres appartiennent [Qtr 3] [Oct].PrevMember retourne [Sep]. On traverse la hirarchie en changeant de parents de [Qtr 4] [Qtr 3].

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

41

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

42

Fonctions sur les Membres de dimensions (3)


On veut dfinir un nouveau membre calcul Sales Growth montrant la croissance ou le dclin des ventes compares avec le prcdent mois, trimestre ou anne : WITH MEMBER Measures.[Sales Growth] AS '(Sales) (Sales, Time.PrevMember)' On peut alors utiliser ce nouveau membre dans la requte : SELECT { [Sales], [Sales Growth] } ON COLUMNS, Month.MEMBERS ON ROWS FROM Sales Autre exemple : voir une chute des ventes pour diffrents produits et comment ces ventes ont augment pour chaque produit dans le dernier mois : SELECT { [Sales], [Sales Growth] } ON COLUMNS, Product.MEMBERS ON ROWS FROM Sales

Les ensembles (Sets) dans MDX


MDX propose des fonctions classiques de thorie des ensembles, pour des ensembles (set) de membres ou de tuples Dans un set , la seule restriction est que tous les lments ont la mme structure

Pour un set de membres :


tous les membres doivent venir de la mme dimension(mme si ils appartiennent diffrents niveaux) : le set { [1997], [August] } est valide, le set { [August], [Sales] } n!est pas valide.

Pour un set de tuples :


la dimensionnalit doit tre la mme et les membres correspondants des tuples doivent venir de la mme dimension : le set { ([1997], [USA]), ([August], [WA]) } est valide, le set { ([August], [WA]), ([1997], [USA]) } n!est pas valide, car l!ordre des dimensions dans le tuple est invers.

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

44

43

Oprations sur les ensembles (Sets) dans MDX


Ces fonctions ont en entre et en sortie des sets de membres ou des sets de tuples

Fonctions sur les Sets (1)


Fonctions principales qui oprent sur un set et qui retournent un set :

Intersection : INTERSECT( set1, set2 )


Rarement utilise Fonction Head Tail Syntaxe
Head(<< Set >> [,<< Numeric Expression >>]) Tail(<< Set >> [,<< Numeric Expression >>])

Description Elments de tte d'un set

Intersection : UNION( set1, set2 )


Trs souvent utilise pour combiner plus de 2 ensembles , parfois on veut l!union d!ensembles avec membres, etc. On peut aussi utiliser les expressions MDX plus concises suivantes : { set1, set2, , setn } ou { member1, set1, set2, member2, , memberk, setn } Ex: on veut voir sur les axes rsultats sur l!Europe, USA, tous les tats des USA, toutes les villes dans l!tat WA et pour l!Asie (scnario de Drilldown typique), on peut alors dfinir un set : { [Europe], [USA], [USA].Children, [WA].Children, [Asia] } L!quivalent avec l!oprateur UNION sera : UNION( { [Europe], [USA] }, UNION( [USA.Children], UNION( [WA].Children, { [Asia] } ) ) ) Certaines implmentations de MDX dispose de l!oprateur + (plus) pour faire l!union de 2 sets : set1 + set2 + + setn

Derniers lments d'un set Sous-ensemble Subset Subset(<< Set >>, << Start >> [,<< Count >>]) d'lments d'un set TopCount TopCount(<< Set >>, << Count >> [,<< Numeric Expression Les premiers lments >>]) ayant la plus grande valeur de la mesure Order (<< Set <<, {<<String Expression>> | <<Numeric Order Tri des lments d'un set
Expression >>} [, ASC | DESC | BASC | BDESC]) Filter(<< Set >>, << conditions >>)

Filter

Les lments d'un set qui satisfont le filtre

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

46

45

Fonctions sur les Sets (2) :


L'exemple suivant montre l'utilisation des fonctions Topcount, Tail et Head :
SELECT { ([Measures].[Unit Sales]) } ON COLUMNS, { (Head([Time].Children, 2)), (Tail([Time].Children, 3)), (Topcount([Time].Children,1,[Measures].[Unit Sales])) } ON ROWS FROM [Sales]

Fonctions sur les Sets : CrossJoin (1)


La fonction CrossJoin permet de croiser des sets et ainsi raliser des tableaux croiss Etant donn un set A et un set B, CrossJoin construit un nouveau set contenant tous les tuples (a,b) o a est dans A et b dans B : Ex 1 : SELECT { CrossJoin ( {([Time].[1997].[Q1]), ([Time].[1997].[Q2])}, {([Measures].[Unit Sales]), ([Measures].[Store Sales])} ) } ON COLUMNS, { ([Product].[Drink].Children) } ON ROWS FROM [Sales]

La requte suivante, avec la fonction Filter n'affiche que les cellules dont la mesure "[Unit Sales]" est suprieur ou gale (#) une certaine valeur :
SELECT { ([Measures].[Unit Sales]) } ON COLUMNS, { Filter([Time].Children, ([Measures].[Unit Sales]) > 70000) } ON ROWS FROM [Sales]
Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

47

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

48

Fonctions sur les Sets : CrossJoin (2)


Ex 2 : SELECT { CrossJoin ( {([Time].[1997].[Q1]), ([Time].[1997].[Q2])}, {([Measures].[Unit Sales]), ([Measures].[Store Sales])} ) } ON COLUMNS, { ([Product].[Drink].Children), ([Product].[Food].[Baked Goods]) } ON ROWS FROM [Sales]

Fonctions sur les Sets : CrossJoin (3)


Ex 3 : SELECT Crossjoin ( {[Measures].[Unit Sales], [Measures].[Store Sales]}, {[Time].[1997].[Q1]} ) ON COLUMNS, Crossjoin ( {[Promotion Media].[All Media].[Cash Register Handout], [Promotion Media].[All Media].[Sunday Paper, Radio, TV], [Promotion Media].[All Media].[TV]}, {[Gender].Children} ) ON ROWS FROM [Sales]

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

49

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

50

Fonctions sur les Sets : CrossJoin (4)


Dans l!exemple prcdent il y a des cellules vides, d au fait qu'aucun croisement n'est possible sur le 2 axes Pour n'afficher que les cellules pleines, utilisez l'oprateur Non Empty CrossJoin : SELECT Crossjoin ( {[Measures].[Unit Sales], [Measures].[Store Sales]}, {[Time].[1997].[Q1]} ) ON COLUMNS, Non Empty Crossjoin ( {[Promotion Media].[All Media].[Cash Register Handout], [Promotion Media].[All Media].[Sunday Paper, Radio, TV], [Promotion Media].[All Media].[TV]}, {[Gender].Children} ) ON ROWS FROM [Sales] Remarque : on ne peut pas mettre plus d'une fois la mme hirarchie dans plusieurs axes indpendants d'une requte.
Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

6 Expressions avances de MDX


Analyse comparative (ParallelPeriod) Calcul cumulatif Expressions conditionnelles

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

52

51

Analyse comparative (ParallelPeriod)


L'analyse comparative consiste prsenter ct d'une mesure, la mme mesure sur une priode parallle qui lui est antrieure On utilise la fonction ParallelPeriod : ParallelPeriod(["niveau"[, "expression numrique" [, "membres" ]]]) o "niveau" reprsente le niveau, la priode, sur lequel on veut "remonter dans le temps", "l'expression numrique" donne le nombre de priode, et "membre" permet de fixer un membre sur la dimension temps. Ex: la mesure "[Unit Sales]" est affiche en parallle sur le trimestre en cours et antrieur : WITH MEMBER [Measures].[Unit Sales Q-1] as ( ParallelPeriod( [Time].[1997].[Q1], 1) ) SELECT { ([Measures].[Unit Sales]), ([Measures].[Unit Sales Q-1]) } ON COLUMNS, { ([Time].Children) } ON ROWS FROM [Sales]

Calcul cumulatif (1)


Il arrive souvent qu'on ait besoin de calculer des cumuls sur une priode de temps Ex: calcul du cumul de la mesure "[Unit Sales]" durant l'anne 1997. Dans un premier temps, on doit retrouver tous les mois de l'anne 1997 On peut envisager un accs par membre, mais l'expression correspondante pourrait tre longue et dpendante des trimestres : SELECT { ([Measures].[Unit Sales]) } ON COLUMNS, { ([Time].[1997].[Q1].Children), ([Time].[1997].[Q2].Children), ([Time].[1997].[Q3].Children), ([Time].[1997].[Q4].Children) } ON ROWS FROM [Sales]

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

53

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

54

Calcul cumulatif (2)


Une faon plus lgante et moins fastidieuse est d'utiliser la fonction Descendants avec 2 paramtres : 1 paramtre : retourne un ensemble de descendants d'un membre sur un niveau ou d'une distance spcifie 2 paramtre (optionnel) : permet d'inclure ou d'exclure des descendants d'autres niveaux Ex 1 : calcul des descendants d'une distance gale 2 mois partir de l'anne 2007 : SELECT { ([Measures].[Unit Sales]) } ON COLUMNS, { Descendants([Time].[1997],2) --L'appel ci-dessous donne le mme rsultat --Descendants([Time],[Time].[Month]) } ON ROWS FROM [Sales]

Calcul cumulatif (3)


Ex 2 : calcul des descendants du niveau mois du membre dont la valeur est le 2ime semestre : SELECT { ([Measures].[Unit Sales]) } ON COLUMNS, { Descendants([Time].[1997].[Q2],[Time].[Month]) } ON ROWS FROM [Sales]

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

55

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

56

Calcul cumulatif (4)


La fonction Descendants peut avoir un 3ime paramtre optionnel, appel drapeau :

Calcul cumulatif (5)


Requte renvoyant tous les membres dont le niveau est le descendant hirarchique du niveau 1 (trimestre) de la dimension Time :
SELECT { ([Measures].[Unit Sales]) } ON COLUMNS, { Descendants([Time],1, After) } ON ROWS FROM [Sales]

Drapeau

Description
Renvoie les membres descendants partir d'un niveau donn ou une distance donne. Le membre donn en entre est renvoy si le niveau donn est le niveau de ce membre. Renvoie les membres descendants de tous les niveaux subordonns d'un niveau ou une distance donne. Renvoie les membres descendants partir de tous les niveaux entre un membre et un niveau donn, ou une distance donne. Le membre donn en entre est renvoy mais pas les membres partir niveau ou de la distance donne. membre donn. Le membre donn en entre est renvoy mais pas les membres partir niveau ou de la distance donne. Renvoie les descendants membres partir d'un niveau ou une distance donne, et partir tous les niveaux subordonns du niveau ou de la distance donne. Renvoie les descendants membres partir d'un niveau ou une distance donne, et partir de tous les niveaux entre le membre et le niveau donn ou le distance donne, incluant le membre donn en entre. donn. Le membre donn en entre est galement renvoy.

Self After Before

Before_And_After Renvoie les descendants membres partir de tous les niveaux subordonns d'un niveau d'un Self_And_After Self_And_Before

Requte donnant tous les membres dont le niveau est le suprieur hirarchique du niveau 2 (mois) de la dimension Time :
SELECT { ([Measures].[Unit Sales]) } ON COLUMNS, { Descendants([Time],2, Before) } ON ROWS FROM [Sales]
Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

Self_Before_After Renvoie les descendants membres partir des niveaux subordonns d'un niveau d'un membre Leaves
Renvoie les descendants feuilles entre un membre et un niveau donn ou une d'une distance donne. Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

57 58

Calcul cumulatif (6)


Requte renvoyant tous les membres du niveau 1 (trimestre) et ceux des niveaux qui les suivent hirarchiquement (mois) : SELECT { ([Measures].[Unit Sales]) } ON COLUMNS, { Descendants([Time],1, Self_and_After) } ON ROWS FROM [Sales]

Calcul cumulatif (7)


Ex : Calcul du cumul de "[Unit Sales]" par intervalle d'un mois de l'anne 1997 : WITH Member [Measures].[Accumulated Unit Sales] as Sum(YTD(), [Measures].[Unit Sales]) -- ici comme on ne spcifie pas de paramtre pour YTD, il utilisera [Time].currentMember SELECT { ([Measures].[Unit Sales]), ([Measures].[Accumulated Unit Sales]) } ON COLUMNS, { Descendants([Time],[Time].[1997].[Q4].[12]) } ON ROWS FROM [Sales] Si on voulait avoir le cumul par intervalle d'un trimestre, il suffit de reculer d'un niveau les descendants de la dimension "[Time]"

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

59

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

60

Expressions conditionnelles (1)


Elles permettent de raliser des tests conditionnels l'aide du mot cl IIF. Dans l'exemple qui suit, on construit plusieurs membres dont :

Expressions conditionnelles (2)


WITH MEMBER [Measures].[Q-1] AS ( ParallelPeriod([Time].[1997].[Q1],1, [Time].CurrentMember), [Measures].[Unit Sales] ) MEMBER [Measures].[Evolution] AS ( ([Time].CurrentMember, [Measures].[Unit Sales]) - (ParallelPeriod([Time].[1997].[Q1],1, [Time].CurrentMember), [Measures].[Unit Sales]) ), solve_order = 1 MEMBER [Measures].[%] AS ( [Measures].[Evolution] / (ParallelPeriod([Time].[1997].[Q1],1,[Time].CurrentMember), [Measures].[Unit Sales]) ), format_string = "Percent", solve_order = 0 MEMBER [Measures].[Performance] AS IIF([Measures].[Q-1]<>0, IIF([Measures].[%] < 0, "-", IIF([Measures].[%] > 0 and [Measures].[%] < 0.01, "+", IIF([Measures].[%] > 0.01 and [Measures].[%] < 0.05, "++", "better performance") )),"null") SELECT { ([Measures].[Unit Sales]), ([Measures].[Q-1]), ([Measures].[Evolution]), ([Measures].[%]), ([Measures].[Performance]) } ON COLUMNS, Descendants([Time], 1) ON ROWS FROM [Sales]

[Measures].[Q-1] : donne [Unit Sales] au trimestre prcdent [Measures].[Evolution] : donne Sales] entre deux trimestres conscutifs l'volution de [Unit

[Measures].[%] : donne l'volution en pourcentage [Measures].[Performance] : renvoie une chane de caractres qui nous permet d'appliquer des rgles de gestion lies des conditions

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

61

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

62

Rsum sur MDX (1)


Instruction simple MDX : SELECT axis [,axis] FROM cube WHERE slicer [,slicer] La clause SELECT est utilise pour dfinir les dimensions des axes (axis) et la clause WHERE pour spcifier les dimension de filtrage (slicer), et CUBE est le nom du cube considr Les dimensions des axes dans la clause SELECT Si le cube est vu comme une structure n dimensions, cette clause spcifie les artes du cube a retourner. La structure de base de la clause SELECT est : SELECT set ON axis_name, set ON axis_name, set ON axis_name o axis_name peut tre COLUMNS ou ROWS Les filtres (Slicers) dans la clause WHERE Les dimensions de filtrage contiennent les seuls membres avec lesquels le cube est filtr ou sliced

Rsum sur MDX (2)


Le contenu des axes : Un membre (Member) = est un item dans une dimension et correspond une lment spcifique de donne, Ex. : [Time].[1997] [Customers].[All Customers].[Mexico].[Mexico[ [Product].[All Products].[Drink] un tuple = une collection de membres de diffrentes dimensions, Ex. : ([Time].[1997], [Product].[All Products].[Drink]) (1997, Drink) (1997, [Customers].[All Customers].[Mexico].[Mexico]) Un set = une collection de tuples, Ex. : {[Time].[1997], [Time].[1998], [Time].[1999]} {1997, 1998, 1999} {1990:1999} (The colon(! is an inclusive range.) {(1997, Drink), (1998, Drink)}

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

64

63

Rsum sur MDX (3)


La hirarchie des donnes : Les donnes au sein d!un cube sont organises avec les relations suivantes : Dimensions Hierarchies Levels Members Ex. : Product Dimension Function Hierarchy Level Product Family Member Drink Member Food Non-Consumable Member

Rsum sur MDX (3)


MDX Functions and Expressions: Function refers to a specific operation being performed on some set of data (Sum(), TopCount()). Expression describe syntax in which the function is placed after the cube parameter ([1997].children, [Products].DefaultMember). The .Members Expression This expression is used to retrieve a set of enumerated members from a dimension, hierarchy, or level. For example: dimension.Members hierarchy.Members level.Members The CrossJoin() Function: The CrossJoin() function is used to generate the cross-product of two input sets. If 2 sets exists in 2 independent dimensions, the CrossJoin operator creates a new set consisting of all of the combinations of the members in the two dimensions as follows: crossjoin (set1, set2) The TopCount() and BottomCount() Functions: These expressions sort a set based on a numerical expression and pick the top index items based on rank order as follows: TopCount (set, index, numeric expression) BottomCount (set, index, numeric expression) The Filter() Function The Filter() function is used to filter a set based on a particular condition as follows: Filter (set, search condition) The Order() Function The Order() function provides sorting capabilities within the MDX language as follows: Order (set, string expression [, ASC | DESC | BASC | BDESC]) or Order (set, numeric expression [, ASC | DESC | BASC | BDESC])

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

65

Introduction au langage MDX pour l!OLAP - Bernard ESPINASSE -

66

Vous aimerez peut-être aussi