OLAP :
Mondrian + Pentaho
Maguelonne Teisseire
Hugo Alatrista Salas – hugo.alatrista-‐salas@teledetec9on.fr Flavien Bouillot
Outils Open Source
• Mondrian : serveur OLAP
• JFreeReport : ou9l de « Repor9ng »
• KeHle : ou9ls ETL
• Pentaho : ou9ls pour faire « Business Intelligence »
• Weka : ou9ls de fouille de données
2
Mondrian
• Serveur OLAP codé en Java
• U9lise le langage MDX (Mul9Dimensional eXpresion) et XML pour l’analyse XMLA
• Spécifica9ons JOLAP (Api Java OLAP)
• Modèle ROLAP
• Développé pour la société Pentaho
3
Pentaho
• Ensemble d’ou9ls pour faire de « Business Intelligence »
• Il existe une version propriétaire et une version open source
• Il s’appuie sur Mondrian pour faire du MDX
• Installa9on rela9vement facile (sauf pour Tomcat)
4
Motivation 1
SELECT Magasin.CP , SUM(Ventes) FROM…
SELECT Magasin.CP, Date.Mois, SUM(Ventes) from…
34000 342
59100 110
34000 janvier 33
34000 février 11
34000 mars 4
59100 janvier 45
… … …
5
Motivation 2
• Comment faire mieux?
janvier février mars …
34000 ? ? ? …
… …
59100 ? ? ? …
… …
6
MDX
• Mul9Dimensional eXpresion
• Permet de faire des requêtes très complexes
• Syntaxe très naturelle
• Qui u9lise MDX? MS SQL Server 200X, Oracle, SSAS, icCube, MicroStrategy Intelligence Server, …
7
Premier exemple
SELECT {[date].[year].[mois].MEMBERS} ON COLUMNS, {[Magasins].[villes].CHILDRENS} ON ROWS
FROM [Ventes]
8
Premier exemple
SELECT {[date].[year].[mois].MEMBERS} ON COLUMNS, {[Magasins].[villes].CHILDRENS} ON ROWS
FROM [Ventes]
Lignes
Colonnes Cube (fait)
Projec9on
9
Attention à la syntaxe du MDX
/* La syntaxe du MDX faire aHen9on */
SELECT {collec9on 0} ON COLUMNS, {collec9on 1} ON ROWS
...
{collec9on n} ON AXIS(n) // il se peut FROM [cube]
WHERE (tuple) // appelé "slicer dimension"
10
RAPPEL DE CONCEPTS BASIQUES
11
Dimensions et membres
• Dimensions (axes dans un cube) peut contenir différents niveaux de granularité
• Chaque niveau a un nombre déterminé de membres
• Les membres par default d’une dimension sont les éléments les plus généraux (ALL)
12
Axes
• Sont des dimensions qui par9cipent à la forma9on d’un cube (qui représente des faits)
• Une axe peut contenir plusieurs dimensions en concurrence
13
Masures
• AHributs du cube, généralement numériques (associés aux faits)
• Peuvent être agrégées
• Toutes les mesures (indicateurs) font par9e de la dimension appelé « Measures »
• La mesure par default est la première spécifiée dans le cube (fait)
14
Tuples et Collections
• Tuple: tranche du cube
([Magasin].[Ville].[CP].[34000])
• Collec9on : liste ordonnée de tuples
{[Magasin].[Ville].[CP].MEMBERS}
15
Exemple
MAGASIN
34000
34090
59100
08090 Montpellier
Lille
Ardennes
PRODUIT
Resident Evil
Darkness 2
Fifa 2013 PES 2014 Action
Sport
2011 Janvier
Février Janvier
Février 2012
DATE unitésVendues
prixUnitaire VENTES
16
Exemple de hiérarchie
Produit
Catégorie
JeuVideo
Produit
Sport Ac9on
Resident Evil Darkness 2
FIFA2013 PES2014
Dimension
Produit Membres de la dimension Produit
17
Parcourir les niveaux
• [Produit].[Catégorie].[FIFA2013] = tous les données pour FIFA2013
• [Produit].[JeuVideo].MEMBERS = {Resident Evil 5, Darkness 2, FIFA2013, PES2014}
• [Produit].[Sport].CHILDREN = {FIFA2013, PES2014}
• [Produit].[Ac9on].[Resident Evil]:[Darkness 2] = {Resident Evil, Darkness 2}
• DESCENDANTS([Produit].[Sport], [JeuVideo]) = {FIFA2013, PES2014}
18
Une requête MDX simple
SELECT {[Measures].MEMBERS} ON COLUMNS FROM [Ventes]
Quelle informa9on sera montrée?
19
Une requête MDX simple
SELECT {[Measures].MEMBERS} ON COLUMNS FROM [Ventes]
Quelle informa9on sera montrée?
Solu%on : L es ind icate urs
(o u m esu res
) 20
Différences entre MDX et SQL
• Les ensembles de registres doivent se déclarer avant l’instruc9on SELECT
• L’instruc9on FROM fait référence à un seul cube
• L’instruc9on WHERE permet de faire l’opéra9on slice du OLAP
• …
21
Exemple 1
SELECT {[Date].[Année].[2011], [Date].[Année].[2012]} ON COLUMNS,
{[Magasin].[Ville].MEMBERS} ON ROWS FROM [Ventes]
WHERE ([Measures].[prixUnitaire])
2011 2012
Montpellier Lille
Ardennes 22
Exemple 2
SELECT {[Date].[Year].[2011].CHILDREN} ON COLUMNS, {[Magasin].[Villes].MEMBERS} ON ROWS
FROM [Ventes]
WHERE ([Measures].[prixUnitaire])
Janvier Février
Montpellier Lille
Ardennes 23
Opération Slice
Exemple : slice sur la dimension produit
SELECT {[Date].[Année].[2011].CHILDREN} ON COLUMNS, {[Magasin].[Ville].MEMBERS} ON ROWS
FROM [Ventes]
WHERE ([Produit].[Catégorie].[Sport],[Measures].[prixUnitaire])
24
Opérateur Filter
Syntaxe : FILTER(collec9on, condi9on)
Exemple : extraire le prix unitaire des produits vendus en plus de 150 unités pendant l’année 2011
SELECT {[Date].[Année].[2011].CHILDREN} ON COLUMNS, FILTER ({[Magasin].[Ville].MEMBERS}, ([Measures].
[unitésVendues], [Date].[2011]) > 150) ON ROWS FROM [Ventes]
WHERE ([Measures].[prixUnitaire])
25
Opérateur Order
Syntaxe : ORDER(collec9on, expression, [, ASC | DESC | BASC | BDESC]
SELECT {[Measures].MEMBERS} ON COLUMNS,
ORDER ({[Magasin].[Ville].MEMBERS}, [Measures].[prixUnitaire], BDESC) ON ROWS
FROM [Ventes]
26
Opérateur Head
Exemple : Montrer les top-‐10 villes en termes de unités vendus SELECT {[Measures].[unitésVendues]} ON COLUMNS,
HEAD (ORDER ({[Magasin].[Ville].MEMBERS}, [Measures].
[PrixUnitaire], BDESC), 10) ON ROWS FROM [Ventes]
27
Opérateur CrossJoint
Combine deux dimensions et les représente comme une seule dimension
SELECT {[Date].[2011].CHILDREN} ON COLUMNS, CROSSJOIN ({[Magasin].[Ville].MEMBERS}, {[Produit].
[Catégorie].MEMBERS}) ON ROWS FROM [Ventes]
WHERE ([Measures].[unitésVendues])
28
Opérateur Non Empty
Filtre les résultats en excluant les membres vides du résultat
SELECT {[Date].[2011].CHILDREN} ON COLUMNS,
NOT EMPTY (CROSSJOIN ({[Magasin].[Ville].MEMBERS}, {[Produit].[Catégorie].MEMBERS})) ON ROWS
FROM [Ventes]
WHERE ([Measures].[unitésVendues])
29
Operations d’agrégation 1
Syntaxe : WITH MEMBER parent.name AS 'expression'
WITH MEMBER [Date].[2011].[Bimestre1] AS '[Date].[2011].
[janvier] + [Date].[2011].[février]'
MEMBER [Date].[2011].[Bimestre2] AS '[Date].[2011].[mars] + [Date].[2011].[avril]'
SELECT {[Date].[2011].[Bimestre1], [Date].[2011].[Bimestre2]}
ON COLUMNS
{[Magasin].[CP].MEMBERS} ON ROWS FROM [Ventes]
WHERE ([Measures].[unitésVendues])
30
Operations d’agrégation 2
WITH MEMBER [Measures].[Profit]
AS '([Measures].[PrixUnitaire] – [Measures].[PrixProduc9on])' SELECT {[Date].[2011].CHILDREN} ON COLUMNS,
{[Magasin].[CP].MEMBERS} ON ROWS FROM [Ventes]
WHERE ([Measures].[Profit])
31
Références
• A Brief MDX Tutorial Using Mondrian, Wei Wang
• Pentaho User Guide
hHp://www.osbi.fr/wp-‐content/Pentaho-‐Analysis-‐Viewer-‐
User-‐Guide.pdf
• hHp://wiki.pentaho.com/
• The Baker's Dozen: 13 Tips for Querying OLAP Databases with MDX hHp://www.devx.com/codemag/Ar9cle/37460
32