1
Chapitre 4:
Les requêtes
MDX
Langages de requêtes pour les BDs
Multidimensionnelles
31
❑ Comme SQL pour les BDs relationnelles, il existe des langages de
requêtage pour l’utilisation des OLAP.
❑ Il s’agit de langage de calcul avec une syntaxe similaire à celledes
tableurs.
❑ L’inconvénient est qu’il n’y a pas de langage universel.
❑ Néanmoins, on peut distinguer deux tendances :
▪ MDX (MultiDimensional eXpressions) intégré à Microsoft SQL
Server 2005.
▪ OLAP DML (Data Manipulation Language) intégré à Oracle 10g.
Langage
32 MDX
Définition
❑ MDX (MultiDimensional eXpressions) est un langage de requêtes pour
les BDs OLAP, analogue au rôle de SQL pour les BDs Relationnelles.
❑ MDX est aussi un langage de calcul avec une syntaxe similaire à celle
des tableurs.
❑ Le langage MDX possède une syntaxe appropriée à l’interrogation et
manipulation des données multidimensionnelles mémorisées dans un cube
OLAP.
❑ Bien qu’il soit possible de traduire certaines expressions dans le langage
SQL traditionnel, cela nécessite une syntaxe SQL souvent maladroite
même pour des expressions MDX très simples.
❑ MDX a été adopté par une large majorité de fournisseur de la technologie
OLAP et est devenu un standard de facto pour les systèmes OLAP.
Source : Wikipédia
Historique du
33 MDX
▪ De facto standard développé par Microsoft et plus tard par le Conseil
XMLA.
2001 mdXML
1997 MS specification
OLAP by XMLA
specification Council
1998 MS MS 2005
OLAP MDX revision
services
release
Usage du
34 MDX
❑ Fondation pour les produits Microsoft et le logiciel d'analyse open
source.
❑ SQL Server Analysis Services (SSAS), Excel Pivot Tables,
Microsoft Power BI.
❑ Hyperion, IBM, SAP, et d'autres fournisseurs.
❑ Fondation pour les projets open source : Olap4J, Pivot4J, Pentaho,
...
Cube
35 SteelWheels
Exemple de structure de cube MDX
Hiérarchie des attributs et
36 membres
Dimensions
▪ Markets avec des attributs hiérarchiques: Territory, Country,
State Province, City.
▪ Customer.
▪ Product avec des attributs hiérarchiques: Line, Vendor, Product.
▪ Time avec attributs hiérarchiques: Years, Quarters, Months.
▪ Order status avec attribut: Type.
Measures
▪ Quantity
▪ Sales
Affichage du cube Steel
38 Wheels
Terminologie du
39 MDX
❑ Il y a six types de données MDX:
▪ Dimension ou hierarchy
▪ Level
▪ Member
▪ Tuple
▪ Scalar
▪ Set
Terminologie du
40 MDX
❑ Dimension
▪ La dimension est une dimension d'un cube.
▪ Les dimensions organisent les informations dans un cube, ce
sont les axes d'analyse des indicateurs.
▪ MDX considère que les dimensions sont mutuellement
indépendantes.
▪ Une dimension peut contenir quelques membres organisés en
hiérarchies.
▪ Elle peut être spécifiée par son nom unique.
▪ Elle peut être retournée par une fonction MDX : .Dimension
Exemple:
▪ [Time]
Terminologie du
41 MDX
❑ Hierarchy
▪ La hiérarchie d'un cube OLAP peut être spécifiée par son nom
unique
▪ Elle peut être retournée par une fonction MDX,
comme .Hierarchy.
▪Les hiérarchies sont contenues dans des dimensions.
Exemple
▪ [Time].[Fiscal]
Terminologie du
42 MDX
❑ Level
Level est un niveau dans une hiérarchie de dimensions.
▪
▪ Il peut être spécifié par son nom unique,
▪ Il peut être retourné par une fonction MDX : .Level
Exemple:
▪ [Time].[Fiscal] .[Month]
Terminologie du
43 MDX
❑ Member
▪ Un membre est un membre d'une hiérarchie de dimension,
▪ Il peut être spécifié par son nom unique,
▪ Il peut être retourné par une fonction MDX :
.PrevMember, .Parent, .FirstChild, etc
▪ Tous les membres sont spécifiques à une hiérarchie.
Exemple:
▪ [Time].[Fiscal] .[Month].[August 2006]
▪ [Time].[Fiscal].[2006].[Q3].[August 2006]
Terminologie du
44 MDX
❑ Tuple
▪ Un tuple est une collection ordonnée d'un ou plusieurs membres
de différentes hiérarchies ou de différentes dimensions.
▪ Un tuple est une suite de plusieurs membres entre parenthèses
séparés par une virgule.
▪ Identifiant une cellule.
▪ Un tuple peut être retourné par une fonction MDX : .Item.
Exemple:
▪ ([Time].[1997], [Product].[Food])
▪ ([Time].[Fiscal].[Month].[August 2006], [Customer].[By Geography].[All
Customers].[USA], [Measures].[Sales])
Terminologie du
45 MDX
❑ Set
▪ Un set est un ensemble ordonné de tuples.
▪ Un set peut être vu comme une plage de valeurs.
▪ Le set commence par une accolade "{", dans laquelle sont
énumérés les tuples séparés par des virgules, et se termine par
une accolade appariée "}".
Exemple:
▪ { ([Measures].[Unit Sales], [Product].[All Products].[Food].[Baked Goods]),
([Measures].[Store Sales], [Product].[All Products].[Food].[Baked Goods]) }
▪ {([Measures].[Sales], [Time].[Fiscal].[2006]), ([Measures].[Sales],
[Time].[Fiscal].[2007])}
Terminologie du
46 MDX
❑ Scalar
▪ Le scalaire est soit un nombre, soit une chaine de caractères.
▪ Il peut être explicitement défini,
▪ Il peut aussi être retourné par une fonction MDX:
✓ Aggregate qui retourne un nombre,
✓ UniqueName retourne une chaîne de caractères,
✓ .Value renvoie un nombre ou une chaîne de caractères, etc.
Exemple:
▪ Le nombre 15
▪ La chaîne de caractères "OLAP".
Instructions de MDX
SQL Versus
50 MDX
❑ Table comme résultat pour l’instruction SQL SELECT.
❑ Cube de données (Data cube) comme résultat pour l’instruction
MDX SELECT.
❑ L’instruction SQL SELECT génère une table bidimensionnelle (en
2 dimensions).
❑ L’instruction MDX SELECT génère un cube m-dimensionnel avec
des calculs récapitulatifs.
❑ Différentes approches mathématiques pour manipuler des tables et
des cubes de données.
SQL Versus
51
MDX
Comparison de Clauses
Langage
Clause SQL MDX
SELECT Liste de colonnes Liste des axes de dimensions (cellules
de cube source)
FROM Liste de tables Nom du Cube
WHERE Conditions de restriction Restriction à une combinaison des
sur les lignes membres de dimension (cellules de cube
de résultat)
Langage
52
MDX
❑ MDX peut supporter jusqu’à 128 axes.
❑ Les alias pour les 5 premiers axes sont: COLUMNS, ROWS,
PAGES, SECTIONS, et CHAPTERS.
❑ Les axes doivent être utilisé dans le meme ordre.
❑ Chaque axis doit sélectionner membres à partir de la meme
dimension.
❑ Seulement 1 cube comme la source de données.
Langage
53
MDX
Syntaxe de base
SELECT
[< spécification_des_axes > [, <spécification_des_axes>...]]
FROM [<spécification_d_un_cube>]
WHERE [<spécification_de_filtres>]
❑ Dimensions dans la clause WHERE doivent être différentes de
celles de la clause SELECT.
❑ Condition WHERE est connue come une condition slicer.
❑ Si aucune mesure n'apparaît dans la liste SELECT (Axes de
dimension), la mesure par défaut est affichée dans les cellules.
Langage
54 MDX
Syntaxe de base
Exemple 1:
❑ Fournir les effectifs d’une société pendant les années 2004 et 2005
croisés par le type de paiement.
Langage
55
MDX
Exemple 2:
Langage
56
MDX
Exemple 3:
Langage
57
MDX
Slicer
❑ WHERE spécifie une ”tranche dimensionnelle” dans le cube.
Langage
58
MDX
Slicer
Exemple 1:
Langage
59
MDX
Slicer
Exemple 2:
La requête suivante donne les unités vendues aux clients de sexe
masculin par an pour les produits "Drink" et "Food".
SELECT
{
([Measures].[Unit Sales], [Product].[Food]), ([Measures].[Unit Sales],
[Product].[Drink])
} ON COLUMNS,
{
([Time].[1997]), ([Time].[1998])
} ON ROWS
FROM [Sales]
WHERE { ([Gender].[M]) }
Instructions
61
MDX
Exemple 3:
SELECT
{[Measures].[Store Sales]} ON COLUMNS,
{[Date].[2002], [Date].[2003]} ON ROWS
FROM Sales
WHERE ([Store].[USA].[CA])
▪ Sales est le cube sur lequel la requête est faite.
▪ [Measures].[Store Sales] et [Date].[2002], [Date].[2003] sont les
dimensions conservées.
▪ [Store].[USA].[CA] est le ”slicer”.
Instructions
62
MDX
Délimiteurs
❑ Les délimiteurs [ et ] peuvent ne pas être mis si pas d’ambiguïté.
Exemple 1:
Instructions
63
MDX
Délimiteurs
Exemple 2:
SELECT [Link] ON COLUMNS,
[Link] ON ROWS
FROM [Adventure Works]
équivalent à :
SELECT [Measures].MEMBERS ON COLUMNS,
[Product].[Style].CHILDREN ON ROWS
FROM [Adventure Works]
Instructions
64
MDX
Expressions de sous-cube
❑ Attention : ne marche pas dans tous les systèmes OLAP.
Exemple :
SELECT [Measures].MEMBERS ON COLUMNS,
[Date].[Calendar Year].MEMBERS ON ROWS
FROM
(SELECT [Measures].[Internet Sales Amount] ON COLUMNS,
[Date].[Calendar Year].[2004] ON ROWS
FROM [Adventure Works])
Fonctionnalités avancées de
69
MDX
MEMBERS
❑ Retourne le jeu des membres d’une dimension, d’un niveau ou
d’une hiérarchie.
Exemple 1:
▪ SELECT
{ ([Measures].[Unit Sales]) } ON COLUMNS,
{ ([Gender].MEMBERS) } ON ROWS
FROM [Sales]
▪SELECT [Link] ON COLUMNS,
[Store].MEMBERS ON ROWS
FROM [Sales]
Fonctionnalités avancées de
70
MDX
MEMBERS
Exemple 2 :
Fonctionnalités avancées de
71
MDX
CurrentMember
❑ Retourne le membre en cours d’une dimension, d’un niveau ou
d’une hiérarchie.
❑ La fonction CurrentMember s'applique à la fois sur une
dimension ou un niveau d'une dimension:
<dimension>.CurrentMember
ou
<niveau >.CurrentMember.
Fonctionnalités avancées de
72
MDX
CurrentMember
❑ Exemple
Fonctionnalités avancées de
73 MDX
CHILDREN
❑ Retourne le jeu des enfants d’un membre spécifié.
Exemple 1:
SELECT
[Link] ON COLUMNS,
{
[Store].[Store State].[CA].CHILDREN,
[Store].[Store State].[WA].CHILDREN
} ON ROWS
FROM [Sales]
Fonctionnalités avancées de
74 MDX
Members/Levels(n)
❑ La fonction Members peut-être combinée avec Levels(n) pour
retrouver tous les membres du niveau n d'une dimension.
Exemple :
SELECT
{
([Time].Children)
} ON COLUMNS,
{
([Store].Levels(1).Members)
} ON ROWS
FROM [Sales]
Fonctionnalités avancées de
75
MDX
DESCENDANTS
DESCENDANTS(member, level [, flags])
❑ Retourne le jeu de descendants d’un membre à un niveau spécifié
ou à une distance spécifiée, en incluant ou en excluant
éventuellement des descendants dans d’autres niveaux.
Exemple :
SELECT
[Link] ON COLUMNS,
{[Store].[Store State].[CA],
DESCENDANTS([Store].[Store State].[CA], [Store City])} ON ROWS
FROM [Sales]
Fonctionnalités avancées de
76 MDX
DESCENDANTS
DESCENDANTS(member, level [, flags])
❑ Le ”flag” peut être BEFORE, AFTER, SELF ou bien
BEFORE_AND_AFTER selon le niveau désiré.
Fonctionnalités avancées de
77 MDX
DESCENDANTS
Exemples :
SELECT
[Link] ON COLUMNS,
{[Store].[Store State].[CA],
DESCENDANTS([Store].[Store State].[CA], [Store City], AFTER)} ON
ROWS
FROM [Sales]
SELECT
[Link] ON COLUMNS,
{[Store].[Store State].[CA],
DESCENDANTS([Store].[Store State], [Store City],
BEFORE_AND_AFTER)} ON ROWS
FROM [Sales]
Fonctionnalités avancées de
78 MDX
AddCalculatedMembers
❑ Retourne un ensemble généré par l’ajout des membres calculés à un
ensemble spécifié.
Exemple :
SELECT
AddCalculatedMembers([Measures].Members) ON COLUMNS,
{[Store].[USA].[CA], Descendants([Store].[USA].[CA], [Store].[Store
City])} ON ROWS
FROM [Sales]
Fonctionnalités avancées de
79 MDX
WITH SET
❑ WITH SET permet la création d’ensembles.
Exemple :
WITH SET [ChardonnayChablis] AS
{[Product].[All Products].[Drink].[Good Chardonnay],
[Product].[All Products].[Drink].[Pearl Chardonnay],
[Product].[All Products].[Drink].[Portsmouth],
[Product].[All Products].[Drink].[Walrus Chardonnay],
SELECT
[ChardonnayChablis] ON COLUMNS,
{Measures.[Unit Sales]} ON ROWS
FROM Sales
Fonctionnalités avancées de
80 MDX
CALCULATED MEMBERS
WITH MEMBER
❑ MDX permet de rajouter des calculs directement dans les requêtes
MDX.
❑ Ceci s’effectue grâce à la syntaxe :
WITH MEMBER [Link] AS ’expression’
Exemple 1:
WITH MEMBER [Link] AS
’(Measures.[Store Sales] - Measures.[Store Cost]) / (Measures.[Store
Cost])’, FORMAT_STRING = ’#.00%’
Fonctionnalités avancées de
81 MDX
CALCULATED MEMBERS
WITH MEMBER
Exemple 2:
WITH MEMBER
[Measures].[Special Discount] AS [Measures].[Discount
Amount] * 1.5
SELECT
[Measures].[Special Discount] ON COLUMNS,
NON EMPTY [Product].[Product].MEMBERS ON ROWS
FROM [Adventure Works]
WHERE [Product].[Category].[Bikes]
Fonctionnalités avancées de
82 MDX
CALCULATED MEMBERS
WITH MEMBER
Exemple 3:
WITH MEMBER
[Time].[First Half 97] AS ’[Time].[1997].[Q1] + [Time].[1997].[Q2]’
[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]
Fonctionnalités avancées de
83
MDX
COUNT
❑ Retourne le nombre de cellules d’un ensemble.
Exemple:
WITH MEMBER
measures.X AS [Product].[Link]
SELECT Measures.X ON 0
FROM [Sales]
Fonctionnalités avancées de
84 MDX
TopPercent
❑ Trie un jeu en ordre décroissant et retourne un jeu de tuples avec
les valeurs les plus élevées dont le total cumulé est égal ou
supérieur à un pourcentage spécifié.
Exemple 1:
SELECT
[Link] ON COLUMNS,
TOPPERCENT({[Store].[Store City].MEMBERS}, 50, Measures.[Sales
Count]) ON ROWS
FROM [Sales]
Fonctionnalités avancées de
85 MDX
TopCount
❑ Trie un ensemble par ordre décroissant et renvoie le nombre
spécifié d'éléments avec les valeurs les plus élevées.
Exemple:
SELECT {TopCount([Measures].[Quantity], 5.0, [Measures].[Sales])} ON
COLUMNS, {[Product].CHILDREN} ON ROWS FROM [SteelWheelsSales]
Fonctionnalités avancées de
89 MDX
Autres fonctions MDX:
❑ Il y a d’autres fonctions comme: AVG, MEDIAN, MAX, MIN,
VAR, STDDEV, ...
Exemple 1:
WITH MEMBER
Measures.[Maximum Sales] AS
’MAX(DESCENDANTS([Time].CURRENTMEMBER, [Time].[Month]),
Measures.[Unit Sales])’
SELECT
{[Time].[1997]} ON COLUMNS,
[Product].[Product Category].MEMBERS ON ROWS
FROM [Sales]
WHERE (Measures.[Maximum Sales])
Fonctionnalités avancées de
90 MDX
Autres fonctions MDX:
Exemple 2:
Fonctionnalités avancées de
91
MDX
Autres fonctions MDX
Pour plus de détails sur les fonctions MDX, voir le guide de référence
des fonctions MDX:
[Link]