olap:%% mondrian+% pentaho%hugo.alatristasalas.free.fr/cours/mdx_dw_olap.pdf · olap:%% mondrian+%...
TRANSCRIPT
OLAP : Mondrian + Pentaho Maguelonne Teisseire Hugo Alatrista Salas – hugo.alatrista-‐[email protected] 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
ArdennesPRO
DUIT
Resident Evil
Darkness 2
Fifa 2013
PES 2014
Action
Sport
2011Janvier
FévrierJanvier
Février 2012
DATE
unitésVenduesprixUnitaire
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 : Les indicateurs (ou mesures) 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