La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Mise en œuvre du langage MDX

Présentations similaires


Présentation au sujet: "Mise en œuvre du langage MDX"— Transcription de la présentation:

1 Mise en œuvre du langage MDX
-1ère partie- Présentation de l’exemple et des outils utilisés

2 Le cube Sales (1)

3 Le cube Sales (2)

4 Le cube Sales (3)

5 JRubik Une application Java intégrant le moteur OLAP Mondrian
Démonstration sur un exemple : Select {[Measures].[Unit Sales]} ON COLUMNS, {[Store].[All Stores]} ON ROWS from [Sales]

6 Mondrian Web Application
Une application Web (Servlet Tomcat) intégrant le moteur OLAP Mondrian Démonstration sur un exemple : Select {[Measures].[Unit Sales]} ON COLUMNS, {[Store].[All Stores]} ON ROWS from [Sales]

7 Mise en œuvre du langage MDX
-2ème partie- Les bases du langage de requête MDX

8 Principes des requêtes MDX (1)
Les axes représentent des dimensions et/ou des Measures Slicer représente le prédicat de sélection

9 Principes des requêtes MDX (2)
Il est possible de faire appel à : - Des ensembles : {} - Des tuples : () Des noms associés aux éléments d’un cube (dimensions, levels, members and properties) : [] ON ROWS et ON COLUMNS permettent d’exprimer la configuration d’affichage souhaitée

10 Principes des requêtes MDX (3)
Opérateur . Pour accéder à un membre d’une certaine dimension [Time].[1997] member 1997 of the level Year Pour accéder à un certain niveau d’une dimension [Time].[Year] Year Level Pour accéder à une fonction [Time].[Year].Members operation Members

11 Principes des requêtes MDX (4)
A propos des ensembles : Une expression qui désigne un ensemble de membres associés à un tuple {([Time].[1997]), ([Time].[1998]), ([Time].[1998].[9-1998])} Une telle expression peut être utilisée pour désigner un axe d’une requête MDX

12 Principes des requêtes MDX (5)
A propos des tuples : Ils doivent être cohérents : - Chaque tuple spécifié doit inclure des membres appartenant à une même dimension - Les tuples spécifiés peuvent correspondre à différents niveaux de hiérarchie {([Time].[1997], [Store].[Canada]), ([Time].[1998], [Store].[USA]), ([Time].[1998].[9-1998], [Store].[Canada])}

13 Principes des requêtes MDX (6)
CROSSJOIN : Un axe peut être défini comme le produit cartésien de différents ensembles CROSSJOIN({[Time].[Year].Members}, {[Store].[USA],[Store].[Canada]})

14 Principes des requêtes MDX (7)
Les opérations : x.Members = ensemble des membres d’un niveau ou d’une dimension donnée x.Children = ensemble des enfants du membre x DESCENDANTS (x, l) = ensemble des descendants d’un membre x au niveau l

15 Principes des requêtes MDX (8)
Exemple pour l’opérateur DESCENDANTS SELECT {([Measures].[Store Sales])} On COLUMNS, DESCENDANTS ([Time].[1998], [Quarter]) ON ROWS FROM [SALES]

16 Principes des requêtes MDX (9)
A propos du slicer WHERE permet de sélectionner une tranche du cube On spécifie la tranche en utilisant des membres qui ne font pas partie des dimensions utilisées au niveau des axes ON ROWS et ON COLUMNS SELECT {([Measures].[Unit Sales])} ON COLUMNS, {([Time].[Year].Members)} ON ROWS FROM SALES WHERE ([Store].[USA].[WA]) -> tranche de l’état de WA Pas autorisé de préciser une tranche avec plus d’un membre d’une même dimension

17 Principes des requêtes MDX (10)
Membres calculés Ils sont utilisés pour calculer des mesures et faire des comparaisons with member [Measures].[Store Profit] as '([Measures].[Store Sales] - [Measures].[Store Cost])' select {[Measures].[Store Profit]} ON COLUMNS, {[Time].[Year].Members} ON ROWS from [Sales] where [Store].[All Stores].[USA].[WA]

18 Principes des requêtes MDX (11)
Fonctions de calcul SUM (set, expression) MAX (set, expression) AVG(set, expression) MIN(set, expression) AVG([Time].Members, [Measures].[Store Profit])

19 Principes des requêtes MDX (12)
Un exemple de calcul with member [Store].[USA+Canada] as 'Sum({[Store].[All Stores].[USA], [Store].[All Stores].[Canada]}, [Measures].[Store Sales])' select {[Store].[All Stores].[USA], [Store].[All Stores].[Canada], [Store].[USA+Canada]} ON COLUMNS, Descendants([Time].[1997], [Time].[Quarter]) ON ROWS from [Sales]

20 Mise en œuvre du langage MDX
-3ème partie- Application des requêtes MDX sur le cube Sales

21 Forme la plus simple de requête
Exemple : select [Measures].Members ON COLUMNS, [Store].Members ON ROWS from [Sales]

22 Sélection de tuples (1) Exemple : SELECT Measures.MEMBERS ON COLUMNS,
{[Store].[Store State].[CA], [Store].[Store State].[WA]} ON ROWS FROM [Sales]

23 Sélection de tuples (2) Exemple (pour avoir les enfants à l’intérieur d’une hiérarchie): SELECT Measures.MEMBERS ON COLUMNS, {[Store].[Store State].[CA].CHILDREN, [Store].[Store State].[WA].CHILDREN} ON ROWS FROM [Sales]

24 Sélection de tuples (3) Exemple (pour avoir les descendants à l’intérieur d’une hiérarchie): SELECT Measures.MEMBERS ON COLUMNS, {[Store].[Store State].[CA], DESCENDANTS([Store].[Store State].[CA], [Store City])} ON ROWS FROM [Sales]

25 Slicing (1) Exemple (on choisit une des mesures):
SELECT {[Store Type].[Store Type].MEMBERS} ON COLUMNS, {[Store].[Store State].MEMBERS} ON ROWS FROM [Sales] WHERE ([Measures].[Customer Count])

26 Slicing (2) Exemple (on choisit une des mesures et une année):
select {[Store Type].[Store Type].Members} ON COLUMNS, {[Store].[Store State].Members} ON ROWS from [Sales] where ([Measures].[Customer Count], [Time].[1997])

27 Calculs dans les requêtes (1)
Exemple (on affiche le profit sur deux semestres de 97): WITH MEMBER [Time].[1997].[H1] AS '[Time].[1997].[Q1] + [Time].[1997].[Q2]' MEMBER [Time].[1997].[H2] AS '[Time].[1997].[Q3] + [Time].[1997].[Q4]' SELECT {[Time].[1997].[H1], [Time].[1997].[H2]} ON COLUMNS, [Store].[Store Name].MEMBERS ON ROWS FROM [Sales] WHERE (Measures.Profit)

28 Calculs dans les requêtes (2)
Exemple (on affiche les pourcentages de profits sur des périodes de 97): 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 from [Sales] where [Measures].[ProfitPercent]

29 Crossjoin (1) Exemple : SELECT [Product].[Product Family].MEMBERS ON COLUMNS, {CROSSJOIN([Customers].[City].MEMBERS, [Time].[Quarter].MEMBERS)} ON ROWS FROM [Sales] WHERE (Measures.[Unit Sales])

30 Crossjoin (2) Exemple : SELECT [Product].[Product Family].MEMBERS ON COLUMNS, NON EMPTY {CROSSJOIN([Customers].[City].MEMBERS, [Time].[Quarter].MEMBERS)} ON ROWS FROM [Sales] WHERE (Measures.[Unit Sales])

31 Filter Exemple : select NON EMPTY {[Store Type].[Store Type].Members}
ON COLUMNS, Filter({[Store].[Store City].Members}, (([Measures].[Unit Sales], [Time].[1997]) > 500.0)) ON ROWS from [Sales] where ([Measures].[Profit], [Time].[1997])

32 Comptage Exemple (On prend les 12 villes ayant le mieux vendu):
SELECT Measures.MEMBERS ON COLUMNS, TOPCOUNT({[Store].[Store City].MEMBERS}, 12, Measures.[Sales Count]) ON ROWS FROM [Sales]

33 Mise en œuvre du langage MDX
-5ème partie- Comment concevoir un cube avec Mondrian…

34 Il faut produire un fichier XML … (1)
spécifiant : le nom du cube les Measures les Dimensions -> Shared dimensions -> Multiple Hierarchies -> Parent-child hierarchies -> Snowflake schema les membres calculés les fonctions définies

35 Il faut produire un fichier XML … (2)
<Cube name="Sales"> <Table name="sales_fact_1997"/> ... </Cube> Possibilité d’utiliser <View> et <Join> pour construire des requêtes SQL plus complexes

36 Il faut produire un fichier XML … (3)
Le cube Sales a des mesures : <Measure name="Unit Sales” column="unit_sales" aggregator="sum" datatype="Integer" formatString="#,###"/> <Measure name="Store Sales" column="store_sales" aggregator="sum" datatype="Numeric" formatString="#,###.00"/> Chaque mesure a un nom, correspond à une colonne dans la table de faits et spécifie un opérateur d’agrégation tel que "sum", "count", "min", "max", "avg", and "distinct count"

37 Il faut produire un fichier XML … (4)
Le cube Sales a des dimensions : <Dimension name="Gender" foreignKey="customer_id"> <Hierarchy hasAll="true" primaryKey="customer_id"> <Table name="customer"/> <Level name="Gender" column="gender" uniqueMembers="true"/> </Hierarchy> </Dimension> L’attribut foreignKey dans <Dimension> est le nom d’une colonne de la table de faits La <Hierarchy> a un attribut clé primaire (primaryKey) Par défaut, la Hiérarchie a un élément de plus haut niveau nommé ‘All’ avec un seul membre appelé 'All {hierarchyName}'.

38 Il faut produire un fichier XML … (5)
Avec éventuellement des hiérarchies multiples : <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" type="Numeric" 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>

39 Il faut produire un fichier XML … (6)
Un exemple de schéma en étoile (La dimension Produit est constituée de 3 tables : product, product_class, product_type: <Cube name="Sales"> <Dimension name="Product" foreignKey="product_id"> <Hierarchy hasAll="true" primaryKey="product_id" primaryKeyTable="product"> <Join leftKey="product_class_id" 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> </Hierarchy> </Dimension> </Cube>

40 Il faut produire un fichier XML … (6)
1/ La constitution d’un tel fichier est complexe 2/ Il existe des outils facilitant l’écriture du fichier XML (vérification de la syntaxe) 3/ Il existe des générateurs (wizards) offrant une interface utilisateur pour générer automatiquement le fichier XML selon la bonne syntaxe : les outils existants sont cependant limités ...

41 Exemple de l’outil Cube Designer
1/ Choix du nom du cube et de la base de données

42 Exemple de l’outil Cube Designer
2/ Choix des informations utilisées

43 Exemple de l’outil Cube Designer
3/ Définition des mesures

44 Exemple de l’outil Cube Designer
4/ Définition des autres dimensions

45 Exemple de l’outil Cube Designer
5/ Sauvegarder et exploiter le fichier XML produit

46 Mise en œuvre du langage MDX
-6ème partie- A vous de jouer …


Télécharger ppt "Mise en œuvre du langage MDX"

Présentations similaires


Annonces Google