Académique Documents
Professionnel Documents
Culture Documents
5-Manipulation Des ED Requetes MDX 22-23
5-Manipulation Des ED Requetes MDX 22-23
entrepôt de données
Parcours BI « Business Intelligence »
Chapitre 5
Manipulation des entrepôts de données
(Requetes MDX)
3
MDX versus SQL
• MDX est fait pour naviguer dans les bases multidimensionnelles et pour
définir des requêtes sur tous leurs objets (dimensions, hiérarchies, niveaux,
membres et cellules) afin d'obtenir (simplement) une représentation sous
forme de tableaux croisés
• MDX ressemble à SQL par ses mots clé SELECT, FROM, WHERE, mais :
o SQL construit des vues relationnelles
o MDX construit des vues multidimensionnelles des données
• Analogies entre termes multidimensionnels (MDX) et relationnels (SQL) :
Multidimensionne (MDX) Relationnel (SQL)
Cube Table
Plusieurs colonnes liées ou une table de
Dimension dimension
Niveau de hierarchie (Level) Colonne (attribut)
Mesure (measure) Colonne (attribut) 4
Membre de dimension Valeur dans une colonne et une ligne de la table
MDX versus SQL
MDX SQL
Avantages Avantages
• Modélisation des données : définition des • Grande base d'utilisateurs
dimensions, hiérarchies, mesure, à partir de diverses • Sémantique des requêtes facile à comprendre
sources de données • Les résultats sont faciles à visualiser : scalaires ou
• Navigation simple dans la dimension temporelle et tableaux 2D
hiérarchies • Différentes manières de relier les tables : jointures,
• Des expressions relativement simples pour tables dérivées, requêtes corrélées, etc.
demandes commerciales souvent utilisées
• Rapide, du fait de l'existence d'agrégations
Désavantages Désavantages
• Effort supplémentaire pour concevoir (design) un • Les tables doivent être jointes explicitement dans
cube et configurer des agrégations une requête
• Concepts difficiles à appréhender : contexte actuel, • Syntaxe parfois peu intuitive et complexe pour
phases d'exécution, etc. exprimer des requêtes analytiques
• Certaines opérations sont difficiles à exprimer, • Pas de concept d'ordre des lignes et de hiérarchies :
comme le classement sur plusieurs critères les dimensions de navigation peuvent être complexes
• Pas si performant pour les types de requêtes
utilisées dans l'analyse des données
5
MDX versus SQL
•Structure générale dʼune requête SQL :
SELECT column1, column2, …, columnn FROM table
•Structure générale dʼune requête MDX :
SELECT axis1 ON COLUMNS, axis2 ON ROWS FROM cube
• FROM spécifie la source de données :
o en SQL : une ou plusieurs tables
o en MDX : un cube
• SELECT indique les résultats que lʼon souhaite récupérer par la requête :
-en SQL :
• une vue des données en 2 dimensions (lignes (rows) et colonnes (columns))
• les lignes ont la même structure définie par les colonnes
-en MDX :
• nb quelconque de dimensions pour former les résultats de la requête.
• terme dʼaxe pour éviter confusion avec les dimensions du cube.
• pas de signification particulière pour les rows et les columns, mais il faut
6
définir chaque
6 axe : axe1 définit lʼaxe horizontal et axe2 définit lʼaxe vertical
RAPPEL DE MODÉLISATION MULTIDIMENSIONNELLE
Région
temps
Région produits
2020 2021 2022
temps Europe AudioV 100 200 300
PC 225 245 240
Afrique AudioV 163 152 145
PC 187 174 184
produits
Cube de donnés 7
(nommé vente)
STRUCTURE GÉNÉRALE D’UNE REQUÊTE
MDX MEMBRE
Un membre est une instance d'un niveau d’une dimension, spécifié
entre crochets [..] .
Exemples:
[PC], [AudioV] sont les membres de la dimension Produit
[produit].[PC] : les produits PC temps
[produit].[PC].[Acer] : les produits PC de la marque Acer
Région produits
2020 2021 2022
Europe AudioV 100 200 300
PC 225 245 240
8
Afrique AudioV 163 152 145
PC 187 174 184
STRUCTURE GÉNÉRALE D’UNE REQUÊTE MDX
TUPLE
Un tuple est l'intersection d'un (et un
[Temps].[2021], [produit].[PC], [Region].
seul) membre tiré de chacune des [Europe]
dimensions du cube. Un tuple identifie
une seule cellule du cube. Tuple
10
STRUCTURE GÉNÉRALE D’UNE REQUÊTE MDX
SELECT
SELECT
[Axes spécifiés]
FROM
[Cube spécifié]
WHERE
[Filtres spécifiés]
Les crochets peuvent être optionnels sauf pour les noms avec
11
espaces intégrés
STRUCTURE GÉNÉRALE D’UNE REQUÊTE MDX
SELECT
Le mot clé SELECT marque le début de la requête. Il précise ce que vous
voulez sélectionner.
Le mot clé ON est utilisé pour organiser les données sélectionnées. MDX
utilise le concept d'axes. Les données sélectionnées à partir d'une dimension
peuvent être placées sur un axe.
SELECT n'est pas limité à deux axes. Nous pourrions avoir jusqu'à 128 axes
Remarque : Une requête qui utilise l'axe 1 doit également utiliser l'axe 0. Une
requête qui utilise l'axe 2 doit également utiliser l'axe 1 et l'axe 0. Vous ne
pouvez pas ignorer un axe dans une requête.
Dans la clause FROM, nous spécifions le cube qui sera utilisé pour interroger
12
les données spécifiées dans la clause SELECT.
STRUCTURE GÉNÉRALE D’UNE REQUÊTE MDX
SELECT
Dans la requête ci-dessous, nous avons sélectionné les membres de la
dimension [Measure] et les avons placés sur l'axe 0, ou COLUMNS. Et nous
avons sélectionné les membres de la dimension [Region] et les avons placés
sur l'axe 1, ou ROWS.
SELECT
{
([Measures].[quantité vendue], [produit].[PC]), PC AudioV
([Measures].[quantité vendue], [produit].[AudioV]) }
ON AXIS(0), 2020
{ 2021
([Temps].[2020]),
([Temps].[2021]) }
ON AXIS(1)
13
FROM [ventes]
STRUCTURE GÉNÉRALE D’UNE REQUÊTE MDX
SELECT
14
STRUCTURE GÉNÉRALE D’UNE REQUÊTE MDX
SELECT
FROM Sales
15
SPÉCIFICATION D’UN AXE EN MDX
Une autre façon plus simple :
Définir un axe et présenter sur l’axe tous les membres d’une
dimension : [nom de la dimension].CHILDREN
Exemple
SELECT
{[Temps]. [année].CHILDREN} ON COLUMNS,
{[Régions].[pays]. CHILDREN} ON ROWS
FROM [ventes] 2008 2009 2020 2021 2022
France
Espagne
Tunisie
16
Italie
Canada
SPÉCIFICATION D’UN AXE EN MDX
Exemple
SELECT
{ [Temps]. [année].CHILDREN } ON COLUMNS,
{ [Régions].[pays]. CHILDREN } ON ROWS
FROM [ventes]
Remarque : Comme la mesure n’est pas
2008 2009 2020 2021 2022
précisée, c’est une mesure par défaut
(default mesure)
France
Espagne
Tunisie
Italie
Canada
L’axe horizontal (columns) contient tous les membres de la dimension temps (les années)
17
L’axe vertival est (rows) contient tous les membres du niveau « pays » de la dimension "régions »
SPÉCIFICATION D’UN AXE EN MDX
Une autre façon simple Aussi:
Définir un axe et présenter sur l’axe tous les membres d’une
dimension : [nom de la dimension].MEMBERS
Exemple
SELECT
{[Temps].[année].MEMBERS} ON COLUMNS,
{[Régions].[pays].MEMBERS} ON ROWS
2008 2009 2020 2021 2022
FROM [ventes]
Tous
France
Espagne
Tunisie
18
Italie
Canada
SPÉCIFICATION D’UN AXE EN MDX
"CHILDREN" et "MEMBERS"
Par exemple, une hiérarchie "Pays" avec des membres tels que "France",
"Allemagne" et "Espagne"
[Pays].CHILDREN
donnera la mesure spécifiée pour les membres "France", "Allemagne" et
"Espagne".
[Pays].MEMBERS
Donnera la mesure spécifiée pour les membres "France", "Allemagne",
"Espagne", mais aussi celle pour tous les autres membres pour tous les pays. 19
[Pays].[Pays].MEMBERS est équivalente à [Pays].CHILDREN
Requêtes de base
OPÉRATION SLICE
Dans MDX l’opération de Slice est traitée par une clause WHERE :
SELECT
{[temps]. [année]. MEMBERS} ON COLUMNS,
{ [Regions].[pays].MEMBERS } ON ROWS
FROM [ventes]
WHERE ([produits].[produit Group]. [Computers])
21
Requêtes de base
OPÉRATION DICE
Plusieurs membres de différentes hiérarchies peuvent être ajoutés à la
clause WHERE. La requête suivante affiche les valeurs de toutes les
mesures pour toutes les années pour les clients résidant en France et ayant
acheté des produits de la catégorie boissons (Beverages) :
23
Requêtes de base
NON EMPTY
Pour filtrer les valeurs "non vides" dans MDX, vous pouvez utiliser
la fonction MDX "NON EMPTY :
24
Requêtes de base
OPÉRATION ROLLUP ET DRILLDOWN
25
Requêtes de base
OPÉRATION DRILLUPLEVEL
Cube AnalyseVentes
27
Requêtes de base
OPÉRATION DRILLUPLEVEL
Exemple:
AnalyseVentes
28
Requêtes de base
OPÉRATION DRILLDOWNLEVEL
DrilldownLevel( <Liste> , <Niveau> )
Retourne : un ensempbe complété des enfants du plus bas niveau du set d’origine
Exemple:
AnalyseVentes
29
On voit que le niveau le plus bas de l’arbre précédent (2ème trimestre 2011) a bien été développé
Requêtes de base
OPÉRATION DRILLDOWNLEVEL
Si on souhaite descendre d’un étage autre que les feuilles de plus bas niveau, on peut utiliser le paramètre
niveau: descendre le niveau semestre
Exemple:
AnalyseVentes
30
FONCTIONS SUR LES MEMBRES ET LES
DIMENSIONS
31
FONCTIONS SUR LES MEMBRES ET LES
DIMENSIONS
PrevMember([Année].[2019])
.Cela retournera le membre de l'année 2018 s'il existe dans l'hierarchie
SELECT [Measures].[TotalSales] ON COLUMNS,
[Time].[Year].FirstChild ON ROWS
FROM [Sales]
Cela renverra le premier enfant de la hiérarchie [Time], qui est généralement le premier membre de
la hiérarchie (par exemple, la première année dans la liste des années).
[Europe].[Allemagne].FirstSibling
renverra "Autriche" s’ il est le premier membre de l'ensemble
"Europe" 32
EXERCICES
Exercice1
Considérez le cube (schéma multidimensionnel ) nommé
cinémacube :
Qui contient 4 dimensions
• Film(idFilm, titre, annéeParit, description);
• Personne(idPersonne, nom, dateNaissance, tel);
• GenreFilm(idGFilm, genre);
• Date (date, année, mois, semaine, jour)
Page(PageKey,TypePage…)
Promotion(PromotionKey, TauxPromotion, …)
36
PRINCIPALES SOURCES POUR CE CHAPITRE
• https://www.iccube.com/support/documentation/mdx_tutorial/gentle_introduction.php
• https://docplayer.fr/8319111-Entrepots-de-donnees-introduction-au-langage-mdx-multi-dimensional-
extensions-pour-l'olap.html
• https://www.youtube.com/watch?v=CIz9E1vbi7c
• https://www.youtube.com/watch?v=FqlDM_HzkO4
• 37
CORRECTION DES EXERCICES
Exercice 1
1.Donner la requête MDX permettant d’avoir le nombre de films vus par genre de film durant l’année 2022.
Genre documentaire Genre science fiction
2022 x y
SELECT {[measures]. [nbfilmVu], [GenreFilm].[genre].MEMBERS} ON COLUMNS
[Date].[annee].[2022] ON ROWS
FROM cinémacube
Ou
SELECT {[measures]. [nbfilmVu], [GenreFilm].[genre].MEMBERS} ON COLUMNS
FROM cinémacube
WHERE [Date].[annee].[2022]
• 38
CORRECTION DES EXERCICES
Exercice 1
2. Donner la requête MDX permettant d’avoir le CA par films chaque année.
Film 1 Film2 ….
2021 x y
2022 v w
…..
Film 1 Film2 …
SELECT {[measures]. [CA], [Film].[titre].MEMBERS} ON COLUMNS .
[Date].[annee].MEMBERS ON ROWS Nbfilm x+y+v+w
FROM cinémacube
2021 x y
Ou 2022 v w
SELECT {[measures]. [CA], [Film].[titre].CHILDREN} ON COLUMNS …..
[Date].[annee].CHILDREN ON ROWS
FROM cinémacube
Remarque: La différence entre MEMBERS et CHILDREN: MEMBERS donne le CA global de tous les ans pour• 39
tous les films, en plus des CA année par année pour chaque film. CHILDREN donne uniquement les CA année par
année pour chaque film.
CORRECTION DES EXERCICES
Exercice 1
3. Si on suppose que la dimension GenreFilm comprend le niveau « catégorieAge » et la catégorieAge comprend les
niveaux : enfant, adultes. Sachant que les membres du niveau enfant = « 4-6, 7-10, 11-13 », donner la requête MDX
permettant d’avoir le nombre de films vus par genre de film (exemple action, horreur,…), chaque année par les
enfants de 11-13 ans.
G1 G2 ….
GenreFilm(idGFilm, genre, catégorieAge)
2021 x y 11-13ans
2022 v w
…..
SELECT {[measures]. [nbfilmVu], [GenreFilm].[genre]. CHILDREN} ON COLUMNS
[Date].[annee]. CHILDREN ON ROWS
FROM cinémacube
WHERE ([GenreFilm].[catégorieAge]. [enfant].[11-13]
• 40
CORRECTION DES EXERCICES
Exercice 1
4.Donner la requête MDX permettant d’observer toutes les mesures pour chaque personne durant toutes les années
pour un genre de film d’action. m1 m2 ….
Film d’action
2021 x y
2022 v w
…..
SELECT [measures]. CHILDREN ON 0
[Date].[annee]. CHILDREN ON 1
[Personne].[nom]. CHILDREN ON 2
FROM cinémacube
WHERE ([GenreFilm].[genre].[action]
Ou
Ou
• 43
ORRECTION DES EXERCICES
Exercice 2
2. Donner la requête MDX, permettant d’avoir le montant des achats par visiteur durant toutes les années,
uniquement pour le produit « montre » et la promotion "50% " V1 V2 ….
a1 x y
a2 v w
…..
SELECT {[measures].[MontantAchétéDansLaPage], [Visiteur].[nom].CHILDREN} ON COLUMNS
[Date].[annee]. CHILDREN ON ROWS
FROM SiteCube
• 44
CORRECTION DES EXERCICES
Exercice 2
3. Donner la requête MDX, permettant d’avoir le nombre de secondes passées sur les pages P1 et P2 par visiteur, durant
les mois d’octobre et novembre.
FROM SiteCube P1 P2
WHERE (Date].[Mois].[Octobre], Date].[Mois].[Novembre]) V1 x y
V2 v w
Ou le nombre pour octobre et novembre séparés sur un 3eme axe
V3 z u
SELECT {[measures].[NombreSecondesPasséesDansLaPage], [Page].[typePage].[P1]
[measures].[NombreSecondesPasséesDansLaPage], [Page].[typePage].[P2]} ON 0 --ou bien AXIS 0
{[Visiteur].[nom].[V1], [Visiteur].[nom].[V2], [Visiteur].[nom].[V3]} ON 1 --ou bien AXIS 1
{[Date].[Mois].[Octobre], Date].[Mois].[Novembre]} ON 2 --ou bien AXIS 2
FROM SiteCube • 46