Mise en œuvre du langage MDX -3ème partie- Comment concevoir un cube avec Mondrian…
Il faut produire un fichier XML … (1) spécifiant : le nom du cube les Measures les Dimensions -> Shared dimensions -> Multiple Hierarchies -> Parent-child hierarchies -> Snowflake schema les membres calculés les fonctions définies
Il faut produire un fichier XML … (2) <Cube name="Sales"> <Table name="sales_fact_1997"/> ... </Cube> Possibilité d’utiliser <View> et <Join> pour construire des requêtes SQL plus complexes
Il faut produire un fichier XML … (3) Le cube Sales a des mesures : <Measure name="Unit Sales” column="unit_sales" aggregator="sum" datatype="Integer" formatString="#,###"/> <Measure name="Store Sales" column="store_sales" aggregator="sum" datatype="Numeric" formatString="#,###.00"/> Chaque mesure a un nom, correspond à une colonne dans la table de faits et spécifie un opérateur d’agrégation tel que "sum", "count", "min", "max", "avg", and "distinct count"
Il faut produire un fichier XML … (4) Le cube Sales a des dimensions : <Dimension name="Gender" foreignKey="customer_id"> <Hierarchy hasAll="true" primaryKey="customer_id"> <Table name="customer"/> <Level name="Gender" column="gender" uniqueMembers="true"/> </Hierarchy> </Dimension> L’attribut foreignKey dans <Dimension> est le nom d’une colonne de la table de faits La <Hierarchy> a un attribut clé primaire (primaryKey) Par défaut, la Hiérarchie a un élément de plus haut niveau nommé ‘All’ avec un seul membre appelé 'All {hierarchyName}'.
Il faut produire un fichier XML … (5) Avec éventuellement des hié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" type="Numeric" 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>
Il faut produire un fichier XML … (6) Un exemple de schéma en étoile (La dimension Produit est constituée de 3 tables : product, product_class, product_type: <Cube name="Sales"> ... <Dimension name="Product" foreignKey="product_id"> <Hierarchy hasAll="true" primaryKey="product_id" primaryKeyTable="product"> <Join leftKey="product_class_id" rightAlias="product_class" rightKey="product_class_id"> <Table name="product"/> <Join leftKey="product_type_id" rightKey="product_type_id"> <Table name="product_class"/> <Table name="product_type"/> </Join> </Join> ... </Hierarchy> </Dimension> </Cube>
Il faut produire un fichier XML … (6) 1/ La constitution d’un tel fichier est complexe 2/ Il existe des outils facilitant l’écriture du fichier XML (vérification de la syntaxe) 3/ Il existe des générateurs (wizards) offrant une interface utilisateur pour générer automatiquement le fichier XML selon la bonne syntaxe : les outils existants sont cependant limités ...
Exemple de l’outil Cube Designer 1/ Choix du nom du cube et de la base de données
Exemple de l’outil Cube Designer 2/ Choix des informations utilisées
Exemple de l’outil Cube Designer 3/ Définition des mesures
Exemple de l’outil Cube Designer 4/ Définition des autres dimensions
Exemple de l’outil Cube Designer 5/ Sauvegarder et exploiter le fichier XML produit