Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

PDF Semaine10-5

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

L’informatique des entrepôts

de données
Daniel Lemire

SEMAINE 10
Introduction à MDX

10.1. Présentation de la semaine


Tout comme le modèle relationnel utilise SQL comme langage, le mo-
dèle OLAP utilise le langage MultiDimensional eXpressions (MDX).
Mis au point à la fin des années 90 par Microsoft, MDX est rapidement
devenu la norme. Nous allons étudier le langage à partir d’une mise en
œuvre open source au sein du moteur OLAP Mondrian.

10.2. Un peu de contexte


MDX fut inventé par Mosha Pasumansky. Il a été présenté pour la
première fois en 1997 comme un volet de la spécification OLE DB for
OLAP (ODBO). La spécification fut rapidement suivie en 1998 par
une version commerciale de Microsoft OLAP Services 7.0, puis par
Microsoft Analysis Services. En superficie, MDX est proche du SQL
avec ses instructions select et where, même si la similarité ne va
pas plus loin. Alors que l’objectif visé au départ par MDX était de
rendre aisé et intuitif l’accès aux données de différentes dimensions,
vous pourrez constater que MDX est tout de même destiné avant tout
aux experts OLAP.
On trouve beaucoup de documentation sur le web ayant trait à
MDX et vous êtes invité à faire vos propres recherches. Commencez par
consulter l’article sur MDX dans wikipedia : http://fr.wikipedia.
org/wiki/Multidimensional_Expressions.
1
2 DANIEL LEMIRE, ENTREPÔTS DE DONNÉES

Par ailleurs, Microsoft rend disponible la documentation concernant


MDX en ligne à l’adresse http://technet.microsoft.com/fr-fr/
library/ms145595(SQL.90).aspx. Vous devriez en prendre rapide-
ment connaissance. Vous trouverez davantage de références en anglais,
comme à l’adresse http://www.databasejournal.com/features/article.
php/3593466/MS-SQL-Series.htm#mdx.

10.3. Approche pédagogique


Le meilleur moyen d’apprendre un langage est de mettre la main à la
pâte. Nous allons donc travailler directement avec un moteur OLAP
supportant MDX. Au lieu d’apprendre la syntaxe formelle du MDX,
nous allons plutôt procéder par exemples.

10.4. Installation de Mondrian Derby


Avant de débuter, vous devez installer Mondrian Derby. Suivez avec
rigueur les instructions suivantes. En cas de problème, faites de saisies
d’écran complètes et transmettez-les à la personne chargée de votre
encadrement.
• Vérifiez si vous avez une machine virtuelle Java à jour. Allez
en ligne de commande. Sous Windows, dans le menu Démar-
rer, cliquez sur Exécuter; une fenêtre s’ouvre, tapez le nom de
programme cmd pour ouvrir une fenêtre de commande. Sous
Mac OS, lancez le programme Applications/Utilities/Ter-
minal. La commande javac doit être reconnue. Vous pouvez
vérifier la version de Java dont vous disposez en tapant javac
-version.
• Si vous n’avez pas le JDK, vous devrez l’installer. Sous Win-
dows, vous pouvez charger la dernière version de Java à par-
tir de l’adresse http://www.oracle.com/technetwork/java/
javase/downloads/index.html. (Si ce lien ne fonctionne pas,
cherchez “java jdk” dans un moteur de recherche.) Assurez-
vous d’installer le JDK et non seulement le JRE.
• Si la commande javac n’est pas reconnue, mais que vous dis-
posez d’une machine virtuelle Java, trouvez l’exécutable java
sur votre machine (par exemple c:\mondirjava\bin\javac.exe)
puis ajoutez le dossier correspondant à la variable PATH en
tapant, PATH=c:\mondirjava \bin\. (Vous devrez peut-être
faire cela à chaque fois que vous voudrez démarrer Mondrian.)
• Avant de continuez, assurez-vous que lors que vous tapez java
-version et javac -version, vous n’obtenez pas de message
LECTURE 10. INTRODUCTION À MDX 3

d’erreur. Vous devez avoir la version 1.6 ou mieux. Si ça


ne fonctionne toujours pas, ne continuez pas! Reprenez tout
depuis le début.
• Chargez Mondrian Derby 3.1.6 à partir de l’adresse http:
//sourceforge.net/projects/mondrian/files/. Vous de-
vez trouver une archive zip nommée mondrian-3.1.6.13364-
derby.zip. Dans cette archive, vous trouverez le fichier lib/
mondrian-embedded.war. Nous en aurons besoin. Attention:
Si vous chargez une autre archive que mondrian-3.1.6.13364-
derby.zip, il est possible que vous n’arriviez pas à faire fonc-
tionner Mondrian. Tous les tests ont été réalisés avec cette ver-
sion précise de Mondrian. Si vous obtenez une erreur de type
java.lang.NoClassDefFoundError en exécutant des requêtes MDX,
c’est que vous avez installé une mauvaise version de Mon-
drian. En particulier, la version 3.2 de Mondrian nécessite
une étape d’installation supplémentaire. De plus, il faut absol-
ument utiliser la version derby de Mondrian, à moins que vous
souhaitiez configurer vous-même une base de données.
• Chargez Tomcat à partir de l’adresse http://tomcat.apache.
org/ (cherchez un lien intitulé Download et chargez un fichier
zip). Vous devez extraire le contenu de l’archive dans un dossier,
par exemple sur votre bureau. Les tests furent réalisés avec les
versions 6.0 et 7.0 de Tomcat.
• Copiez le fichier mondrian-embedded.war dans le dossier we-
bapps de Tomcat. Avant de continuer, assurez-vous que le
fichier a bien été copié au bon endroit.
• Visitez l’adresse http://localhost:8080. Vous devez obtenir
un message d’erreur. En effet, il ne devrait pas y avoir de
serveur sur votre machine utilisant le port 8080. Si jamais
c’est le cas, prenez-en note. Il vous faudra modifier le port
sur lequel le serveur Tomcat fonctionne. Ouvrez le fichier con-
f/server.xml de Tomcat avec un éditeur de texte et remplacez
le port 8080 par le port 8090 (ou tout autre port disponible).
Nous supposerons dans toutes les instructions qui suivent que
vous utilisez le port 8080 : c’est à vous d’interpréter les in-
structions en remplaçant 8080 par le numéro du port que vous
utilisez.
• Demarrez Tomcat. Sous Windows, il faut exécuter le script
bin\startup.bat. Allez donc en ligne de commande dans le
dossier bin et tapez startup.bat. Sous Linux et Mac OS, exé-
cutez plutôt le script bin/startup.sh. (Allez donc en ligne de
4 DANIEL LEMIRE, ENTREPÔTS DE DONNÉES

commande dans le dossier bin et tapez ./startup.sh.) Tou-


jours sous Linux et Mac OS, il peut être utile de changer la
permission des fichiers à l’extension sh pour les rendre exécuta-
bles : allez dans le dossier bin, puis tapez chmod +x *.sh. Si
vous obtenez une erreur portant sur les variables d’environnement
(JAVA HOME ou JRE HOME), votre environnement Java est
mal configuré: il faut peut-être réinstaller votre environnement
Java. Avant de continuer, assurez-vous que Tomcat fonctionne
en visitant le site http://localhost:8080 dans votre naviga-
teur. Vous devriez voir une page web avec la mention Apache
Tomcat, puis ce message If you’re seeing this page via
a web browser, it means you’ve setup Tomcat success-
fully. Congratulations!. Si Tomcat ne fonctionne pas, il
est inutile de continuer. Vous devez recommencer.
• Vérifiez que Mondrian a été reconnu par Tomcat. Allez dans
le dossier logs de Tomcat et ouvrez le fichier catalina.out
dans un éditeur de texte ou dans un navigateur web. Vous
devriez voir un ligne ressemblant à celle-ci : Deploying web
application archive mondrian-embedded.war. Si ce n’est
pas le cas, c’est que vous avez omis une étape. Vous devez
alors fermer Tomcat et recommencer. Pour terminer Tom-
cat, exécutez le script bin/shutdown.bat sous Windows ou
bin/shutdown.sh sous Linux ou Mac OS. À tout moment, en
cas de problème inexpliqué, vous pouvez toujours consulter le
fichier catalina.out pour obtenir un diagnostic.
• Rendez-vous à l’adresse http://localhost:8080/mondrian-
embedded/, vous devez voir une page intitulée Mondrian OLAP
Server.
• Afin de tester votre installation, suivez le lien JPivot pivot
table. Vous devriez voir une interface graphique se charger.
Si ça ne fonctionne pas, et en particulier si vous obtenez une
erreur Java de type java.lang.NoClassDefFoundError, assurez-
vous d’avoir installé la bonne version de Mondrian (3.1.6).
Dans le cas contraire, vous devez recommencer l’installation.
• Revenez ensuite à l’adresse http://localhost:8080/mondrian-
embedded/. Suivez le lien intitulé Basic interface for ad
hoc queries1. Il vous donne accès à une interface permettant
de saisir des requêtes MDX. (Normalement, nous devrions aussi
installer une base de données et nos propres données, mais nous

1Si vous suivez d’autres liens, vous obtiendrez peut-être une erreur.
LECTURE 10. INTRODUCTION À MDX 5

utiliserons ici les données test fournies par défaut avec Mon-
drian.) Les requêtes MDX vont dans la boı̂te de saisie. On exé-
cute la commande en pressant le bouton process MDX query.
Vous pouvez ignorer le reste de l’interface (Sample Query, show
query, etc.).
• Lorsque vous avez terminé votre travail, exécutez le script
bin/shutdown.bat sous Windows ou bin/shutdown.sh sous
Linux ou Mac OS afin de fermer Tomcat. Si vous ne faites pas
cette opération, et ne fermez pas votre ordinateur, Tomcat con-
tinuera de fonctionner, utilisant ainsi de la mémoire sur votre
ordinateur. De plus, si vous tentez de repartir Tomcat sans
d’abord l’avoir fermé, vous obtiendrez un message d’erreur.

10.5. Démarche recommandée


Vous devez reproduire tous les exemples, un à un, et vous assurer de les
comprendre. Ne copiez pas trop rapidement : prenez plutôt le temps
de réécrire les commandes vous-même.
Mondrian n’est pas toujours très convivial. Lorsque vous commet-
tez une erreur dans une expression MDX, il est possible que le message
d’erreur vous paraisse incompréhensible. Soyez patient!

10.6. Données
Normalement, dans une entreprise, il faut créer ses propres cubes. La
collecte de données et la configuration des dimensions, qui forment les
cubes est une opération un peu fastidieuse. Il faut aussi installer et
choisir un moteur de bases de données, il faut charger les données,
configurer les index, et ainsi de suite. Pour nos besoins, nous allons
utiliser les données déjà présentes dans votre installation de Mondrian,
sous le nom de FoodMart. FoodMart est composé des cubes suivants :
• Le cube Warehouse comprend les mesures Store Invoice, Sup-
ply Time, Warehouse Cost, Warehouse Sales, Units Shipped,
Units Ordered, Warehouse Prot, et les dimensions Store, Store
Size in SQFT, Store Type, Time, Product, Warehouse.
• Le cube Store comprend les mesures Store Sqft, Grocery Sqft
et les dimensions Store, Store Type, Has coffee bar, Grocery
sqft
• Le cube HR comprend les mesures Org Salary, Count, Number
of Employees, Employee Salary, Avg Salary et les dimensions
Time, Store, Pay Type, Store Type, Position, Department,
Employees
6 DANIEL LEMIRE, ENTREPÔTS DE DONNÉES

• Le cube Sales comprend les mesures Unit Sales, Store Cost,


Store Sales, Sales Count, Customer Count et les dimensions
Store, Store Size in SQFT, Store Type, Time, Product, Promo-
tion Media, Promotions, Customers, Education Level, Gender,
Marital Status, Yearly Income, Has bought dairy
Le cube Sales nous intéresse plus particulièrement à cause de son
grand volume.

10.7. Concepts de base


MDX est fait pour naviguer dans les bases multidimensionnelles et
pour définir des requêtes sur tous les objets (dimensions, hiérarchies,
niveaux, membres et cellules) afin d’obtenir une représentation sous
forme de tableaux. En MDX, un cube est composé de dimensions. Une
dimension peut contenir une ou plusieurs hiérarchies. Par exemple, la
dimension Time contient deux hiérarchies : Year, Quarter, Month et
Year, Week, Day, comme le montre la Fig. 1.
Une hiérarchie est composée de niveaux (levels). Par exemple, la
hiérarchie Time est composée des niveaux Year, Quarter et Month; la
hiérarchie Store est composée des niveaux Country, State, City et Store
Name.
Un niveau est lui-même composé de membres (ou valeurs). Par
exemple, les membres du niveau Country sont Canada, Mexico et USA
(voir Fig. 1). Les enfants (children) d’un membre sont tous les membres
du niveau immédiatement en dessous de celui-ci. Par exemple, les
enfants du membre USA sont les différents états américains.
Nous pouvons illustrer l’utilisation des membres à l’aide des re-
quêtes simples ci-dessus. Dans ces requêtes, nous utilisons l’instruction
on columns qui stipule que la dimension sélectionnée détermine le con-
tenu des colonnes. Nous reviendrons sur cette instruction par la suite.
select [Time].[1997] on columns
from [Sales]
select [Product].[Food] on columns
from [Sales]
select [Product].[Food].[Baked Goods] on columns
from [Sales]
La mesure par défaut dans le cube Sales est Unit Sales. Nous ver-
rons bientôt comment stipuler la mesure.
LECTURE 10. INTRODUCTION À MDX 7

Figure 1. Illustration de hiérarchies MDX

10.7.1. Tuples
Un tuple est une suite de plusieurs membres entre parenthèses séparés
par une virgule :
([Time].[1997], [Product].[Food])
est un exemple de tuple. Nous pouvons omettre les parenthèses s’il
s’agit d’un tuple ne contenant qu’un seul membre.
On peut utiliser une requête avec un tuple pour stipuler que nous
souhaitons obtenir le résultat des ventes durant l’année 1997, mais
seulement en ce qui concerne les Baked Goods :
select ([Product].[All Products].[Food].[Baked Goods],
[Time].[1997]) on columns
from [Sales]
8 DANIEL LEMIRE, ENTREPÔTS DE DONNÉES

Avec un tuple, on peut spécifier une autre mesure. Par exemple, si


on s’intéresse plutôt au nombre de clients (mesure Customer Count),
on peut utiliser cette requête :
select ([Product].[All Products].[Food].[Baked Goods],
[Time].[1997],
[Measures].[Customer Count]) on columns
from [Sales]
En pratique, les mesures se traitent comme une dimension, mais
dont le nom est toujours Measures.

10.7.2. Sets
Il est un peu pénible de construire une requête MDX pour chaque tuple.
On peut faire mieux.
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 }.
Ainsi, il est possible de traiter deux mesures distinctes dans une
même requête :
select
{
([Measures].[Unit Sales],
[Product].[All Products].[Food].[Baked Goods]),
([Measures].[Store Sales],
[Product].[All Products].[Food].[Baked Goods])
}
on columns
from [Sales]
Bien sûr, on peut aussi, par exemple, énumérer des catégories de
produits :
select
{
([Measures].[Unit Sales], [Product].[Food]),
([Measures].[Unit Sales], [Product].[Drink])
}
on columns
from [Sales]
On peut varier à la fois la mesure, mais aussi les dimensions et les
niveaux hiérarchiques :
select
LECTURE 10. INTRODUCTION À MDX 9

{
([Measures].[Unit Sales], [Product].[Food]),
([Measures].[Store Sales], [Product].[Food].[Baked Goods])
}
on columns
from [Sales]
Bien sûr, un set peut ne contenir qu’un seul élément :
select
{
([Time].[1997])
}
on columns
from [Sales]

10.8. Syntaxe de base


Maintenant que nous connaissons les tuples et les sets, nous allons
explorer davantage les requêtes MDX. Voici le prototype d’une requête :
select [<axis_specification>
[, <spécification_des_axes>...]]
from [<spécification_d_un_cube>]
[where [<spécification_de_filtres>]]

10.8.1. Spécification d’axes


Sous Mondrian, il y a deux axes, les colonnes (columns) et les rangées
(rows). On spécifie l’axe avec le mot-clé on. La requête suivante donne
les unités vendues ”[Measures].[Unit Sales]” 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]
10 DANIEL LEMIRE, ENTREPÔTS DE DONNÉES

(Quand Mondrian n’a pas de données correspondant à une cellule,


il n’affiche rien dans la cellule correspondante.)

10.8.2. Spécification de filtres (Slicers)


On utilise la clause where pour filtrer les cellules. Imaginons que nous
souhaitions n’avoir que les ventes concernant les consommateurs de
sexe masculin. Nous obtenons ce résultat avec la requête suivante :
select
{
([Measures].[Unit Sales], [Product].[Food]),
([Measures].[Unit Sales], [Product].[Drink])

}
on columns,
{
([Time].[1997]),
([Time].[1998])
}
on rows
from [Sales]
where
{
([Gender].[M])
}
On peut aussi utiliser la clause where pour stipuler une autre mesure
que la mesure par défaut.
select
{([Product].[Drink])}on columns,
{([Time].[1997])} on rows
from [Sales]
where {[Measures].[Store Cost]}

10.8.3. Insertion de commentaires


On peut insérer les commentaires dans du code MDX de trois façons
différentes.
// Commentaire en fin de ligne
-- Commentaire en fin de ligne
/* Commentaire
sur plusieurs lignes
LECTURE 10. INTRODUCTION À MDX 11

*/

10.9. Remerciements
Mondrian n’est pas parfait, mais il a l’avantage d’être gratuit ce qui
est bien pratique pour apprendre MDX sans dépenser une fortune. Il
faut donc remercier l’auteur de Mondrian, Julian Hyde, et tous ses
collaborateurs. Mondrian est un produit de la société d’intelligence
d’affaires Pentaho. Julian Hyde a un blogue : http://julianhyde.
blogspot.com/.

10.10. Questions d’approfondissement


(a) Calculez la mesure Store Cost pour les produits [Product].[All
Products].[Drink].[Alcoholic Beverages] et [Product].[All Prod-
ucts].[Drink].[Dairy], et pour les deux sexes ([Gender].[M], [Gen-
der].[F]). Votre réponse doit comprendre quatre cellules.
(b) Pour l’année 1997, trouvez les valeurs des mesures Store Cost
et Unit Sales pour les produits de type Drink. Formulez votre
requête de deux manières distinctes : une fois avec l’instruction
where et une fois sans.

10.11. Réponses suggérées


where {[Measures].[Store Cost]}
from [Sales]
{[Gender].[M],[Gender].[F]} on rows
[Product].[All Products].[Drink].[Dairy]} on columns,
{[Product].[All Products].[Drink].[Alcoholic Beverages],
(a) select
12 DANIEL LEMIRE, ENTREPÔTS DE DONNÉES
where [Time].[1997]
from [Sales]
[Measures].[Unit Sales]} on rows
{[Measures].[Store Cost],
{([Product].[Drink])}on columns,
select

**/
* ou
/**

from [Sales]
([Time].[1997],[Measures].[Unit Sales])} on rows
{([Time].[1997],[Measures].[Store Cost]),
{([Product].[Drink])}on columns,
(b) select

10.12. En terminant
N’oubliez pas de fermer Tomcat lorsque vous aurez terminé. Il faut exé-
cuter le script bin/shutdown.bat sous Windows ou bin/shutdown.sh
sous Linux ou Mac OS. Si vous ne le faites pas, Tomcat continuera de
fonctionner. Par contre, conservez votre installation de Mondrian, vous
en aurez encore besoin.
BIBLIOGRAPHIE

13

Vous aimerez peut-être aussi