Télécharger 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 …
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.