here - Hugo Alatrista
Transcription
here - Hugo Alatrista
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… 34000 342 59100 110 SELECT Magasin.CP, Date.Mois, SUM(Ventes) from… 34000 janvier 33 34000 février 11 34000 mars 4 59100 janvier 45 … … … 5 Motivation 2 • Comment faire mieux? janvier février 34000 ? ? mars … ? … … 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 Projec9on SELECT {[date].[year].[mois].MEMBERS} ON COLUMNS, {[Magasins].[villes].CHILDRENS} ON ROWS FROM [Ventes] Colonnes Cube (fait) Lignes 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 VENTES unitésVendues prixUnitaire MAGASIN 34000 Montpellier 34090 DATE Lille Ardennes 59100 Janvier Février 08090 Janvier Février 2011 2012 Action Sport PRODUIT Resident Evil Darkness 2 PES 2014 Fifa 2013 16 Exemple de hiérarchie Dimension Produit Membres de la dimension Produit Produit Produit Catégorie JeuVideo Sport PES2014 Ac9on FIFA2013 Darkness 2 Resident Evil 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? 20 Solu%on : Les indicateurs (ou mesures) 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