master 2 siglis systèmes d'information décisionnels stéphane tallard paramétrage d'un...

20
Master 2 SIGLIS Systèmes d'information décisionnels Stéphane Tallard Paramétrage d'un serveur OLAP Mondrian

Upload: anouk-barret

Post on 04-Apr-2015

127 views

Category:

Documents


10 download

TRANSCRIPT

Page 1: Master 2 SIGLIS Systèmes d'information décisionnels Stéphane Tallard Paramétrage d'un serveur OLAP Mondrian

Master 2 SIGLIS

Systèmes d'information décisionnelsStéphane Tallard

Paramétrage d'un serveur OLAP Mondrian

Page 2: Master 2 SIGLIS Systèmes d'information décisionnels Stéphane Tallard Paramétrage d'un serveur OLAP Mondrian

Master SIGLIS 22013 - 2014

Mondrian

Modrian est un moteur ROLAP : il traduit des requêtes MDX en requêtes SQL il exécute les requêtes SQL sur une base relationnelle il renvoie les résultats sous une forme

multidimensionnelle via une API Java. un schéma Mondrian permet de paramétrer la

transformation de la base relationnelle en une base multidimensionnelle.

Page 3: Master 2 SIGLIS Systèmes d'information décisionnels Stéphane Tallard Paramétrage d'un serveur OLAP Mondrian

Master SIGLIS 32013 - 2014

Architecture de Mondrian

Analyseur de schéma XML Interfaces (JRubik, Saiku, ..) Analyseur MDX Gestion du cache + Générateur SQL SGBD Relationnel

Page 4: Master 2 SIGLIS Systèmes d'information décisionnels Stéphane Tallard Paramétrage d'un serveur OLAP Mondrian

Master SIGLIS 42013 - 2014

Architecture

datasources.xml

source1.xml sourcen.xml

. . .

Décrit la liste des sources de données.

Chaque fichier se comporte comme une interface entre le SGBD et cube OLAP

Page 5: Master 2 SIGLIS Systèmes d'information décisionnels Stéphane Tallard Paramétrage d'un serveur OLAP Mondrian

Master SIGLIS 52013 - 2014

datasources.xml

Les différents schémas sont regroupé par source de données (datasource)On peut avoir n sources de donnéesChaque datasource peut contenir plusieurs schémas contenus dans un catalogue

DataSources

DataSource

Description de la source de données

Catalogs

Catalog

Emplacement du schéma

Contient notamment la chaîne de connexion à la base

Chaque catalogue contient un chemin vers un fichier qui permet de faire une traduction BD relationnel / Cube OLAP

DataSources DataSource Catalogs Catalog1..n 1..n 1..n

Structure

Page 6: Master 2 SIGLIS Systèmes d'information décisionnels Stéphane Tallard Paramétrage d'un serveur OLAP Mondrian

Master SIGLIS 62013 - 2014

<DataSources>  <DataSource>    <DataSourceName>MondrianFoodMart</DataSourceName>    <DataSourceDescription>FoodMart 2000 Data Warehouse From MS Analysis Services</DataSourceDescription>    <URL>http://localhost:8080/mondrian/xmla</URL>    <DataSourceInfo>Provider=mondrian; Jdbc=jdbc:odbc:MondrianFoodMart; JdbcDrivers=sun.jdbc.odbc.JdbcOdbcDriver</DataSourceInfo>    <ProviderType>MDP</ProviderType>    <AuthenticationMode>Unauthenticated</AuthenticationMode>    <Catalogs>        <Catalog name="FoodMart">            <Definition>/WEB-INF/schema/FoodMart.xml</Definition>        </Catalog>        <Catalog name="Marketing">            <DataSourceInfo>Provider=mondrian; Jdbc=jdbc:odbc:MarketingDB; JdbcDrivers=sun.jdbc.odbc.JdbcOdbcDriver</DataSourceInfo>            <Definition>/WEB-INF/schema/Marketing.xml</Definition>        </Catalog>    </Catalogs>  </DataSource>

....

Exemple : datasources.xml

chaîne de connexion JDBC

définition d'un fichier schéma

Page 7: Master 2 SIGLIS Systèmes d'information décisionnels Stéphane Tallard Paramétrage d'un serveur OLAP Mondrian

Master SIGLIS 72013 - 2014

Le schéma Mondrian

Le schéma Mondrian est un fichier XML

le schéma définit une base de données multi-dimensionnelle

il contient un model logique composé de : cubes, de mesures, de dimensions ... d'une correspondance vers un model physique.

les informations du schéma permettent de traduire les requêtes MDX en requêtes SQL

le modèle physique ce sont les données source.

Page 8: Master 2 SIGLIS Systèmes d'information décisionnels Stéphane Tallard Paramétrage d'un serveur OLAP Mondrian

Master SIGLIS 82013 - 2014

Schema Cube Table

Dimension Hierarchy Table

LevelMeasure

Calculated

Member

*

1

* 1

**

*

*

Le schéma Mondrian

Table de faits: le cube est défini à partir de la table de faits

Une dimension peut contenir plusieurs hiérarchies. Par ex: La dimension temps contient les hiérarchies Année/Trimestre/Mois/ et Années/Saison (Printemps,été, hiver, printemps)/Semaines (S1 à S52).

Si la hiérarchie est le temps structuré en Année/Trimestre/Mois alors Année, Trimestre et Mois constituent les levels de la hierarchie.

A une hierarchie correspond une table (modèle en étoîle).

Les mesures

Le schéma mondrian est un fichier XML

Page 9: Master 2 SIGLIS Systèmes d'information décisionnels Stéphane Tallard Paramétrage d'un serveur OLAP Mondrian

Master SIGLIS 92013 - 2014

Exemple de schema

<Schema><Cube name="Sales">

<Table name="sales_fact_1997"/><Dimension name="Gender" foreignKey="customer_id">

<Hierarchy hasAll="true" allMemberName="All Genders" primaryKey="customer_id"> <Table name="customer"/> <Level name="Gender" column="gender" uniqueMembers="true"/> </Hierarchy>

</Dimension> <Dimension name="Time" foreignKey="time_id">

<Hierarchy hasAll="false" primaryKey="time_id"> <Table name="time_by_day"/> <Level name="Year" column="the_year" type="Numeric" uniqueMembers="true"/> <Level name="Quarter" column="quarter" uniqueMembers="false"/> <Level name="Month" column="month_of_year" type="Numeric" uniqueMembers="false"/> </Hierarchy>

</Dimension> <Measure name="Unit Sales" column="unit_sales" aggregator="sum" formatString="#,###"/> <Measure name="Store Sales" column="store_sales" aggregator="sum" formatString="#,###.##"/> <Measure name="Store Cost" column="store_cost" aggregator="sum" formatString="#,###.00"/> <CalculatedMember name="Profit" dimension="Measures" formula="[Measures].[Store Sales]-[Measures].[Store Cost]"> <CalculatedMemberProperty name="FORMAT_STRING" value="$#,##0.00"/> </CalculatedMember>

</Cube> </Schema>

Cube salesLe sales est calculé à partir de la table de faits sales_fact_1997

dimension

dimension

les mesures

On a une table de faits, 2 tables de dimensions. Chaque niveau correspond à une partie de chaque table de dimension

Les mesures sont des attributs de la table de fait.

Page 10: Master 2 SIGLIS Systèmes d'information décisionnels Stéphane Tallard Paramétrage d'un serveur OLAP Mondrian

Master SIGLIS 102013 - 2014

Définition des mesures

<Measure name="Unit Sales" column="unit_sales" aggregator="sum" formatString="#,###"/> <Measure name="Store Sales" column="store_sales" aggregator="sum" formatString="#,###.##"/> <Measure name="Store Cost" column="store_cost" aggregator="sum" formatString="#,###.00"/> <CalculatedMember name="Profit" dimension="Measures"

formula="[Measures].[Store Sales]-[Measures].[Store Cost]"> <CalculatedMemberProperty name="FORMAT_STRING" value="$#,##0.00"/>

</CalculatedMember>

Le cube sales définit trois mesures chaque mesures a des propriétés :

son nom (name) column (la colonne correspondante dans la table de faits ) un agrégateur (aggrégator) : sum, max, min, count, ... formatString indique comment la valeur est affichée

il est possible d'utiliser un requête SQL pour calculer la valeur d'une mesure

<Measure name="Promotion Sales" aggregator="sum" formatString="#,###.00"> <MeasureExpression>

<SQL dialect="generic"> (case when sales_fact_1997.promotion_id = 0 then 0 else sales_fact_1997.store_sales end)

</SQL> </MeasureExpression>

</Measure>

Page 11: Master 2 SIGLIS Systèmes d'information décisionnels Stéphane Tallard Paramétrage d'un serveur OLAP Mondrian

Master SIGLIS 112013 - 2014

Les dimensions

un membre c'est un ensemble de valeurs particulières d'un attribut ex : Gender a deux membres 'M' et 'F'

une hiérarchie est un ensemble de membres organisés en une structure ex : la dimension Store est organisé en magasins, ville, état et nation la hiérarchie permet de calculer des sous-totaux intermédiaires

un niveau (level) est un item de la hiérarchie regroupant des membres une dimension est une collection de hiérarchies

Définition

Page 12: Master 2 SIGLIS Systèmes d'information décisionnels Stéphane Tallard Paramétrage d'un serveur OLAP Mondrian

Master SIGLIS 122013 - 2014

La dimension "Gender" contient une seule hiérarchie constitué d'un seul niveau "Gender" Pour chaque vente, Gender indique le sexe de l'acheteur Les valeurs de la dimension se trouvent dans la colonne "gender" de la table customer

Définition des dimensions

<Dimension name="Gender" foreignKey="customer_id"><Hierarchy hasAll="true" allMemberName="All Genders" primaryKey="customer_id">

<Table name="customer"/> <Level name="Gender" column="gender" uniqueMembers="true"/>

</Hierarchy> </Dimension>

nom de l'attribut dans la table de faits

nom de l'attribut dans la table Dimensionnom de l'attribut dans la table Dimension

Le membre "All Genders" est un membre fictif qui est l'ensemble des membres possibles

Pour trouver le gender relié à un fait il faut faire une jointure entre la table sales_fact_1997 et customer sur l'attribut sales_fact_1997.customer_id et customer.customer_id

Page 13: Master 2 SIGLIS Systèmes d'information décisionnels Stéphane Tallard Paramétrage d'un serveur OLAP Mondrian

Master SIGLIS 132013 - 2014

Hérarchies multiples

<Dimension name="Time" foreignKey="time_id"> <Hierarchy hasAll="false" primaryKey="time_id"> <Table name="time_by_day"/> <Level name="Year" column="the_year" type="Numeric" uniqueMembers="true"/> <Level name="Quarter" column="quarter" uniqueMembers="false"/> <Level name="Month" column="month_of_year" type="Numeric" uniqueMembers="false"/> </Hierarchy> <Hierarchy name="Time Weekly" hasAll="false" primaryKey="time_id"> <Table name="time_by_week"/> <Level name="Year" column="the_year" type="Numeric" uniqueMembers="true"/> <Level name="Week" column="week" uniqueMembers="false"/> <Level name="Day" column="day_of_week" type="String" uniqueMembers="false"/> </Hierarchy></Dimension>

Définit deux hiérarchies "Time" et "Time Weekly" basées sur les tables time_by_day et time_by_week

l'attribut name est absent: on prend par défault le nom de la dimension

Page 14: Master 2 SIGLIS Systèmes d'information décisionnels Stéphane Tallard Paramétrage d'un serveur OLAP Mondrian

Master SIGLIS 142013 - 2014

Définition d'une dimension temps

<Dimension name="Time" type="TimeDimension"> <Hierarchy hasAll="true" allMemberName="All Periods" primaryKey="dateid"> <Table name="datehierarchy"/> <Level name="Year" column="year" uniqueMembers="true" levelType="TimeYears" type="Numeric"/> <Level name="Quarter" column="quarter" uniqueMembers="false" levelType="TimeQuarters" /> <Level name="Month" column="month" uniqueMembers="false" ordinalColumn="month" nameColumn="month_name"

levelType="TimeMonths" type="Numeric"/>

<Level name="Week" column="week_in_month" uniqueMembers="false" levelType="TimeWeeks" /> <Level name="Day" column="day_in_month" uniqueMembers="false" ordinalColumn="day_in_month" nameColumn="day_name"

levelType="TimeDays" type="Numeric"/>

</Hierarchy> </Dimension>

La dimension "Year" correspond à l'attribut "year" de la table "datehierarchy"

La dimension "Quarter" correspond à l'attribut "quarter" de la table "datehierarchy"

La dimension "Month" correspond à l'attribut "month" de la table "datehierarchy"

La dimension "Week" correspond à l'attribut "week_in_month" de la table "datehierarchy"

uniqueMembers vaut "false" quand les valeurs sont partagés entre les membres du niveau supérieur (ex: on peut avoir deux fois le même jour pour deux mois différents)

type="TimeDimension" permet d'utiliser des opérateurs spécifiques. L'attribut "levelType" permet de définir le type de la valeur ( TimeMonth mois, TimeYears anné , ... )

Page 15: Master 2 SIGLIS Systèmes d'information décisionnels Stéphane Tallard Paramétrage d'un serveur OLAP Mondrian

Master SIGLIS 152013 - 2014

Le cube Sales : la base relationnelle sous jacente

<Schema><Cube name="Sales"> <Table name="sales_fact_1997"/> <Dimension name="Gender" foreignKey="customer_id"> <Hierarchy hasAll="true" allMemberName="All Genders" primaryKey="customer_id"> <Table name="customer"/> <Level name="Gender" column="gender" uniqueMembers="true"/> </Hierarchy> </Dimension> <Dimension name="Time" foreignKey="time_id"> <Hierarchy hasAll="false" primaryKey="time_id"> <Table name="time_by_day"/> <Level name="Year" column="the_year" type="Numeric"

uniqueMembers="true"/> <Level name="Quarter" column="quarter" uniqueMembers="false"/> <Level name="Month" column="month_of_year" type="Numeric"

uniqueMembers="false"/> </Hierarchy> </Dimension> <Measure name="Unit Sales" column="unit_sales" aggregator="sum" formatString="#,###"/> <Measure name="Store Sales" column="store_sales" aggregator="sum" formatString="#,###.##"/> <Measure name="Store Cost" column="store_cost" aggregator="sum" formatString="#,###.00"/> <CalculatedMember name="Profit" dimension="Measures" formula="[Measures].[Store Sales]-[Measures].[Store Cost]"> <CalculatedMemberProperty name="FORMAT_STRING" value="$#,##0.00"/> </CalculatedMember></Cube> </Schema>

Page 16: Master 2 SIGLIS Systèmes d'information décisionnels Stéphane Tallard Paramétrage d'un serveur OLAP Mondrian

Master SIGLIS 162013 - 2014

<Schema><Cube name="Sales"> <Table name="sales_fact_1997"/> <Dimension name="Gender" foreignKey="customer_id"> <Hierarchy hasAll="true" allMemberName="All Genders" primaryKey="customer_id"> <Table name="customer"/> <Level name="Gender" column="gender" uniqueMembers="true"/> </Hierarchy> </Dimension> <Dimension name="Time" foreignKey="time_id"> <Hierarchy hasAll="false" primaryKey="time_id"> <Table name="time_by_day"/> <Level name="Year" column="the_year" type="Numeric"

uniqueMembers="true"/> <Level name="Quarter" column="quarter" uniqueMembers="false"/> <Level name="Month" column="month_of_year" type="Numeric"

uniqueMembers="false"/> </Hierarchy> </Dimension> <Measure name="Unit Sales" column="unit_sales" aggregator="sum" formatString="#,###"/> <Measure name="Store Sales" column="store_sales" aggregator="sum" formatString="#,###.##"/> <Measure name="Store Cost" column="store_cost" aggregator="sum" formatString="#,###.00"/> <CalculatedMember name="Profit" dimension="Measures" formula="[Measures].[Store Sales]-[Measures].[Store Cost]"> <CalculatedMemberProperty name="FORMAT_STRING" value="$#,##0.00"/> </CalculatedMember></Cube> </Schema>

Les tables et les attributs utilisés pour les jointures

Page 17: Master 2 SIGLIS Systèmes d'information décisionnels Stéphane Tallard Paramétrage d'un serveur OLAP Mondrian

Master SIGLIS 172013 - 2014

<Schema><Cube name="Sales"> <Table name="sales_fact_1997"/> <Dimension name="Gender" foreignKey="customer_id"> <Hierarchy hasAll="true" allMemberName="All Genders" primaryKey="customer_id"> <Table name="customer"/> <Level name="Gender" column="gender" uniqueMembers="true"/> </Hierarchy> </Dimension> <Dimension name="Time" foreignKey="time_id"> <Hierarchy hasAll="false" primaryKey="time_id"> <Table name="time_by_day"/> <Level name="Year" column="the_year" type="Numeric"

uniqueMembers="true"/> <Level name="Quarter" column="quarter" uniqueMembers="false"/> <Level name="Month" column="month_of_year" type="Numeric"

uniqueMembers="false"/> </Hierarchy> </Dimension> <Measure name="Unit Sales" column="unit_sales" aggregator="sum" formatString="#,###"/> <Measure name="Store Sales" column="store_sales" aggregator="sum" formatString="#,###.##"/> <Measure name="Store Cost" column="store_cost" aggregator="sum" formatString="#,###.00"/> <CalculatedMember name="Profit" dimension="Measures" formula="[Measures].[Store Sales]-[Measures].[Store Cost]"> <CalculatedMemberProperty name="FORMAT_STRING" value="$#,##0.00"/> </CalculatedMember></Cube> </Schema>

Le cube sales: les données des dimensions Gender et Time

Page 18: Master 2 SIGLIS Systèmes d'information décisionnels Stéphane Tallard Paramétrage d'un serveur OLAP Mondrian

Master SIGLIS 182013 - 2014

<Schema><Cube name="Sales"> <Table name="sales_fact_1997"/> <Dimension name="Gender" foreignKey="customer_id"> <Hierarchy hasAll="true" allMemberName="All Genders" primaryKey="customer_id"> <Table name="customer"/> <Level name="Gender" column="gender" uniqueMembers="true"/> </Hierarchy> </Dimension> <Dimension name="Time" foreignKey="time_id"> <Hierarchy hasAll="false" primaryKey="time_id"> <Table name="time_by_day"/> <Level name="Year" column="the_year" type="Numeric"

uniqueMembers="true"/> <Level name="Quarter" column="quarter" uniqueMembers="false"/> <Level name="Month" column="month_of_year" type="Numeric"

uniqueMembers="false"/> </Hierarchy> </Dimension> <Measure name="Unit Sales" column="unit_sales" aggregator="sum" formatString="#,###"/> <Measure name="Store Sales" column="store_sales" aggregator="sum" formatString="#,###.##"/> <Measure name="Store Cost" column="store_cost" aggregator="sum" formatString="#,###.00"/> <CalculatedMember name="Profit" dimension="Measures" formula="[Measures].[Store Sales]-[Measures].[Store Cost]"> <CalculatedMemberProperty name="FORMAT_STRING" value="$#,##0.00"/> </CalculatedMember></Cube> </Schema>

Le cube Sales : Les mesures

Page 19: Master 2 SIGLIS Systèmes d'information décisionnels Stéphane Tallard Paramétrage d'un serveur OLAP Mondrian

Master SIGLIS 192013 - 2014

Référence

mondrian-3.0-technical-guide_2-1

Chapitre "How to design a Mondrian Schema" p.17 à 54

• L'exemple est basé sur un schéma en étoîle

Page 20: Master 2 SIGLIS Systèmes d'information décisionnels Stéphane Tallard Paramétrage d'un serveur OLAP Mondrian

Master SIGLIS 202013 - 2014

A vous

TD Entreprise