Cette séance a pour objectif de vous familiariser avec l’outil SQL Server Data Tools (SSDT) de Microsoft qui permet de créer des cubes OLAP et de manière plus générale de gérer des projets Analysis Services.
Cette activité a pour objectif de vous faire créer un cube OLAP pour générer les données décisionnelles nécessaires aux tableaux de bord de votre client. Le cube OLAP doit lui permettre d’obtenir le nombre d’unités de produits mises en jeu lors de chaque transaction, ainsi que son chiffre d’affaire en fonction du temps et par lignes de produits (produits - groupes de produits - catégories de produits).

Ressources à votre disposition

Schéma dimensionnel

Le schéma dimensionnel du cube OLAP à réaliser est présenté sur la figure ci-dessous. Ce schéma comprend 3 tables :

  • une table de faits de transactions contenant les transactions d’achat et de vente du marchand avec les données permettant d’obtenir les indicateurs qu’il souhaite mesurer (nombre d’unités de produits mises en jeu, et chiffre d’affaire).

  • 2 tables de dimension qui représentent les axes d’analyse pour ces indicateurs:

    • une table de dimension donnant toutes les informations sur les différents produits.

    • une table de dimension date.

Schéma dimensionnel du cube OLAP à réaliser.
Schéma dimensionnel du cube OLAP à réaliser.

La dimension date est volontairement pauvre sur la représentation de la figure mais elle est en réalité plus complexe. Nous nous y attarderons plus loin dans cet atelier, lors de sa création. Les deux autres tables sont décrites ci-dessous :

FactsTransactions(productID, date, transID, transType, quantity, unitPrice, amount) :
  • productID : identifiant du produit

  • date: date de la transaction

  • transID(dimension dégénérée) : numéro de la transaction

  • transType(dimension dégénérée) : type de la transaction (Sell ou Buy)

  • quantity : nombre d’unités de produits vendues ou achetées lors de la transaction

  • unitPrice : prix d’une unité de produit vendue ou achetée lors de la transaction

  • amount : montant de la transaction

DimProducts(id, typeID, typeName, groupName, categoryName) :
  • id : identifiant du produit

  • typeID : identifiant du produit (dans le monde OLTP)

  • typeName : nom du produit

  • groupName : groupe de produit

  • categoryName : catégorie de produit

Données présentes sur SQL Server

Le cube sera alimenté à partir de tables relationnelles présentes sur une instance de SQL Server :

  • Serveur : VM-DISI-B2S-24

  • Base relationnelle SQL Server : eveonline

  • Connexion par authentification windows.

  • Tables :

    • facts_transactions , contenant toutes les données relatives aux transactions effectuées par le marchand

    • dim_products, contenant toutes les données relatives aux produits pouvant être achetés ou vendus

Environnement de travail

SQL Server 2012

Le logiciel utilisé en tant que moteur de stockage de l’entrepôt de données est SQL Server 2012 Analysis Services (SSAS). Ce logiciel fait partie de la suite Microsoft SQL Server 2012 comprenant, en plus du serveur base de données et de SSAS, SQL Server Integration Services (SSIS) pour gérer le processus ETL et SQL Server Reporting Services (SSRS) pour gérer la création de rapports. Dans le contexte de cette UV le choix a été fait de n’utiliser, pour la partie Business Intelligence, que le logiciel SSAS de cette suite et d’utiliser Talend, un outil open source, pour l’ETL et Tableau Software pour le reporting.

Les deux outils de développement que vous utiliserez dans cet atelier sont :

  • SQL Server Management Studio (SSMS), l’outil de développement permettant de gérer les objets base de données.

  • SQL Server Data Tools (SSDT), l’outil de développement permettant de gérer les projets SQL Server Analysis Services (SSAS). Il s’agit, en fait, d’un raccourci vers Microsoft Visual Studio.

La conception d’une application décisionnelle avec Microsoft SQL Server commence par la création d’un projet Analysis Services avec SSDT qui est par la suite déployé sur une instance de SQL Server Analysis Services.

Une fois le projet créé, SSDT permet entre autres de :

  • Créer la ou les sources de données à partir des-quelles le cube sera généré (une source de données correspond à une connexion vers une base de données relationnelle).

  • Créer une ou des vues de sources de données (ensemble de tables et vues relationnelles accessibles par la source de données).

  • Créer des dimensions qui seront utilisées par le cube.

  • Créer le cube utilisant des dimensions précédemment créées et/ou en créant automatiquement des dimensions à partir des vues de sources de données.

  • Déployer le cube.

  • Visualiser les données du cubes par un accès direct à Excel.

Affectation des ressources

Pour le projet de cette UV F3B205, vous avez chacun été affecté à un groupe. À chaque groupe a été attribuée une instance de SQL Server : VM-DISI-B2S-24\MSSQLSERVERx, x correspond à votre numéro de groupe.

Une instance SQL Server comporte un moteur Base de données et un moteur Analysis Services. Chaque groupe est administrateur de sa propre instance SQL Server et n’a aucun droit sur les autres instances.

Au cours de cet atelier (où vous travaillerez en binôme), vous n’allez utiliser que la partie Analysis Services de l’instance qui a été attribuée à votre groupe. Vous utiliserez le moteur Base de données de votre instance plus tard, lors de l’atelier sur l’intégration des données. En revanche, vous allez tout de même utiliser un moteur de Base de données, celui qui gère la base eveonline et qui se trouve sur l’instance VM-DISI-B2S-24 accessible par tous.

Connexion au serveur distant

Les logiciels que vous utiliserez sont installés sur le serveur distant : srv-disi-b2-90.priv.enst-bretagne.fr. Vous devez donc, pour commencer, établir une connexion par bureau distant (RDP) sur ce serveur.

  • Sous Windows, vous devez aller dans Démarrer/Accessoires/Connexion bureau à distance (voir figure ci-dessous).

  • Sous Linux, vous devez aller dans Applications/Internet/Visionneur de bureau distant Remmina.

Création d’une connexion bureau à distance (RDP) sur le serveur, à partir de Windows.
Création d’une connexion bureau à distance (RDP) sur le serveur, à partir de Windows.

Montage de votre répertoire sur le serveur distant

Pour que votre répertoire home soit accessible à partir du serveur distant sur lequel se trouvent tous les outils de Business Intelligence, il est nécessaire de le monter. Pour cela, une fois connecté sur le serveur distant :

  • Ouvrez un explorateur windows,
  • Sur le répertoire Ordinateur, demandez , Connecter un lecteur réseau
  • Lecteur : Choisissez une lettre,
  • Dossier : Tapez \\campus.enst-bretagne.fr\Homes\<votre login>,
  • Pour éviter de faire cette manipulation à chaque connexion, cochez la case Se reconnecter à l'ouverture de session .

Mise en route

Avant de créer votre projet Analysis Services, vous allez utiliser SQL Server Management Studio pour :

  • Visualiser la base de données eveonline que vous devrez utiliser.

  • Voir qu’aucune base Analysis Services n’est présente sur votre instance SQL Server (vous n’avez pas encore créé de cube).

Visualisation de la base eveonline

Sur le serveur distant, lancez SQL Server Management Studio : Démarrer/Tous les programmes/Microsoft SQL Server 2012/SQL Server Management Studio

Une fenêtre de connexion apparaît :

  • Demandez à vous connecter à un moteur de base de données,
  • Saisissez le nom de l’instance de eveonline ou faites Parcourir et recherchez la bonne instance parmi les serveurs en réseaux,
  • Choisissez de vous connecter par authentification windows.

Une fois connecté, allez voir les tables présentes dans la base de données relationnelle eveonline.

Contenu d’Analysis Services de votre instance

Toujours avec SQL Server Management Studio, ouvrez une nouvelle connexion pour aller voir le contenu de Analysis Services de votre instance. Une nouvelle fenêtre de connexion apparaît :

  • Cette fois-ci, demandez à vous connecter à Analysis Services,

  • Vérifiez que le nom du serveur correspond bien à votre instance, ou saisissez-le,

  • Choisissez de vous connecter par authentification windows.

Un nouveau serveur apparaît dans l’explorateur d’objets. Vous pouvez constater qu’il n’y a aucune base de données Analysis Services dans votre instance. C’est ici que seront stockés les divers objets Analysis Services qui seront créés au cours de cet atelier.

Création d’un projet Analysis Services

Vous allez maintenant créer une application Analysis Services pour la gestion du cube OLAP de votre marchand. Lancez SQL Server Data Tools : Démarrer/Tous les programmes/Microsoft SQL Server 2012/SQL Server Data Tools

Lorsque SSDT est lancé pour la première fois, vous devez commencer par indiquer, comme sur la copie d’écran de la figure ci-dessous, que vous voulez par défaut faire de la Business Intelligence.

Paramètres de création d'un nouveau projet.
Paramètres de création d'un nouveau projet.

Une fois SSDT lancé, créez un nouveau projet Analysis Services basé sur un modèle multidimensionnel Analysis Services (voir ci-dessous). Donnez un nom au projet (par exemple atelierSSAS\<votrelogin>) et localisez-le dans un répertoire sous votre home.

Création d’un nouveau projet multidimensionnel Analysis Services.
Création d’un nouveau projet multidimensionnel Analysis Services.

Un projet Analysis Services contient des objets stockés dans une base de données Analysis Services. Les propriétés de déploiement du projet spécifient le serveur et le nom de la base de données sur lesquels les métadonnées du projet seront déployées comme des objets instanciés. Par défaut, SSDT déploie un projet sur l’instance par défaut d’Analysis Services à savoir sur l’ordinateur local (localhost) et dans une base de données de même nom que le projet.

Modifiez les propriétés de votre projet (Clic droit/Propriétés sur votre projet dans l'explorateur de solutions) pour modifier le comportement par défaut concernant l’instance de déploiement. Faites en sorte que le déploiement ait lieu sur l’instance d’Analysis Services qui a été attribuée à votre groupe VM-DISI-B2S-24\MSSQLSERVERx, x correspond à votre numéro de groupe), comme sur la figure ci-dessous.

Configuration de déploiement d’un projet Analysis Services.
Configuration de déploiement d’un projet Analysis Services.

Création d’une source de données

Une source de données est une connexion vers une base de données relationnelle qui contient des données utilisées par un cube OLAP. Dans cet atelier, le cube à générer est basé sur des données provenant uniquement de la base eveonline, une seule source de données sera donc à créer.

Par un clic droit sur Sources de données dans l’Explorateur de solutions, utilisez l’assistant Source de données pour créer une nouvelle source de données que vous appellerez eveonline :

  • Créez-là à partir d’une nouvelle connexion, et utilisez les informations de connexion.
  • Choisissez le mode d’authentification Windows.
  • Sur la page concernant l’emprunt d’identité, sélectionnez l’option Utiliser le compte de service.

Création d’une vue de sources de données

Les cubes OLAP SSAS ne sont pas générés directement à partir des sources de données mais à partir de vues au dessus de ces sources de données. Ces vues de sources de données sont une abstraction des sources de données et permettent que certaines modifications nécessaires aux cubes soient faites dans les vues sans toucher aux schémas et données des sources de données (comme par exemple le renommage ou la concaténation de colonnes). Concrètement, une vue de source de données est composée d’un ensemble de tables et de vues accessibles par une source de données.

Par un clic droit sur Vues des sources de données, créez la vue de source de données nécessaire à votre cube OLAP. SSDT va essayer de découvrir par lui-même les liens qui existent entre les différentes tables que vous voulez inclure dans votre vue de source de données. Pour cela, il utilise les règles classiques de nommage d’attribut. Il vous propose de choisir entre 3 règles :

  • les attributs clef étrangère et clef primaire ont le même nom,
  • l’attribut clef étrangère a le même nom que la table référencée,
  • l’attribut clef étrangère a pour nom la concaténation du nom de la table et de l’attribut de la clef primaire.

Ensuite, une fois votre source de données créée, s’il reste des liens entre tables que SSDT n’a pas pu détecter, vous devez les lui indiquer. Vous le faites par un glissé-déposé des clefs étrangères sur les clefs primaires, dans la fenêtre principale de l’éditeur de vues.

Création du cube OLAP

Les cubes OLAP sont des structures multidimensionnelles associées à des tables relationnelles de dimensions et de faits, et constituées de deux types de structures de base : les dimensions et les mesures. Les dimensions sont des axes avec lesquels vont être analysées les données contenues dans les tables de faits. Les mesures sont les données numériques de la table de faits qui sont agrégées selon les dimensions. Voir l’exemple de cube OLAP sur la figure ci-dessous.

Dans cette section, vous allez donc créer un cube OLAP pour le marchand de evelonline lui permettant d’obtenir, en fonction du temps et par lignes de produits (produits - groupes de produits - catégories de produits), le nombre d’unités de produits mises en jeu lors de chaque transaction ainsi que son chiffre d’affaire.

Un exemple de cube OLAP.
Un exemple de cube OLAP.

Création du cube à partir des tables de la vue de source de données

Par un clic droit sur Cubes dans l’Explorateur de solutions, utilisez l’assistant cube pour créer votre cube OLAP.

Dans la première page de l’assistant, sélectionnez la première option Utiliser des tables existantes puisque les données qui seront traitées par votre cube sont déjà dans des tables relationnelles (accessibles par la vue de sources de données que vous avez définie précédemment).

L’assistant cube va essayer au maximum de vous aider et/ou vous proposer les bons choix lors de la création des différentes structures du cube. Il va se baser sur la/les table(s) de faits et la/les table(s) des dimensions présentes dans votre vue de source de données pour créer les mesures et les dimensions du cube.

La page Sélectionner les tables des groupes de mesures permet de sélectionner :

  • une vue de source de données,
  • les tables de faits (appelées ici tables de groupes de mesures) concernées par votre cube.

Pour votre cube OLAP, il vous reste à :

  • vous assurer que votre vue de source de données est bien sélectionnée,
  • cliquer Suggérer sur et vous assurer que votre table de faits est bien sélectionnée,
  • cliquer sur Suivant.

La page Sélectionner les mesures permet simplement de sélectionner les mesures à prendre en compte dans le cube.

Par défaut, l’assistant cube propose de créer une mesure pour chaque attribut de la table de faits qui a un type numérique et n’est pas clef.

De plus, il ajoute une mesure qui permet de compter le nombre de lignes de la tables de faits. Toutes ces mesures sont regroupées dans un même groupe de mesures.

La page Sélectionner de nouvelles dimensions permet de créer des dimensions en fonction des tables présentes dans la vue Sources de données qui sont référencées par la ou les tables de faits sélectionnées précédemment. Par défaut, l’assistant cube propose les tables de faits sélectionnés et toutes les tables référencées. Désélectionnez la table de faits.

La dernière page de l’assistant :

  • Vous permet de donner un nom au cube OLAP créé.

  • Affiche les différentes mesures et dimensions du cube. Si les informations ne vous conviennent pas, revenez en arrière et modifiez vos sélections.

Cliquez sur Terminer. L’éditeur de cube s’ouvre automatiquement sur le 1er onglet (il en comporte dix). Le 1er onglet s’appelle Structure de cube. Cet onglet comporte trois volets. Sur la gauche deux volets pour les mesures et les dimensions du cube. Au centre, le plus grand volet, pour les vues de sources de données du cube.

Allez dans les deux volets de gauche pour consulter les mesures et les dimensions qui ont été créées lors de la création du cube.

Le deuxième onglet, utilisation de la dimension, permet de définir comment la dimension est liée au groupe de mesure. Etant donné que c’est SSDT qui a été capable de créer la dimension DimProducts lors de la création du cube, vous n’avez rien à définir sur cet onglet.

Allez tout de même dans l’onglet utilisation de la dimension, et regardez comment a été définie l’utilisation de la dimension DimProducts dans le cube OLAP.

La relation entre la dimension et le groupe de mesure se fait par l’attribut Id. Pour accéder au détail de cette relation, cliquez sur Id , puis sur le - qui apparaît.

Traitement du cube OLAP

Une fois le cube OLAP créé (ou défini dans le projet), il reste une ou deux étapes avant de pouvoir l’exploiter. Pour qu’un cube puisse être exploité, il faut :

  • qu’il ait été créé sur une instance du serveur Analysis Services,

  • qu’il ait été traité.

La création du cube sur une instance du serveur Analysis Services se fait soit lors du déploiement explicite du projet (Générer/Déployer <Projet>), soit lors d’une action sur le cube comme par exemple son traitement qui demande qu’il soit préalablement créé sur une instance Analysis Services. Dans ce dernier cas, un message propose le déploiement du projet avant le traitement du cube.

Traitez le cube que vous venez de créer par un clic droit puis Traiter sur votre cube. Cliquez sur Oui suite au message de demande de déploiement du projet.

Une fenêtre apparaît affichant les différents paramètres pour le traitement du cube. Cliquez juste sur Exécuter. Puis, une fois le traitement terminé, fermez les fenêtres.

Utilisez SQL Server Management Studio, et allez voir les objets SSAS qui ont été créés dans votre base de données.

Le cube que vous venez de créer et de traiter est minimal. Il a été créé à partir des tables relationnelles qui existent sous eveonline, sans prendre en compte toutes les contraintes du schéma dimensionnel.

Les trois sections suivantes vont avoir pour but d’enrichir le cube en revenant sur la dimension qui a été créée minimalement par SSDT et en créant les dimensions manquantes.

Amélioration de la dimension DimProducts

A partir le l’explorateur de solutions, consultez la dimension DimProducts qui a été automatiquement créée par SSDT.

L’éditeur de dimension s’ouvre automatiquement sur le 1er onglet (il en comporte quatre). Il s’appelle Structure de dimension.

Cet onglet comporte trois volets :

  • Le volet de gauche liste les attributs de la dimension.
  • Celui du milieu permet de gérer les hiérarchies de la dimension.
  • Celui de droite est une vue graphique d’un sous-ensemble de la vue de source de données. Il affiche la ou les tables associées à la dimension (avec possibilité de visualiser toutes les tables de la vue de source de données).

Lors de la création de la dimension produit, SSDT n’a créé qu’un seul attribut, la clef de la table produit. Par un glissé-déplacé depuis la vue de source de données, ajoutez tous les autres attributs à la dimension DimProducts.

Le deuxième onglet de l’éditeur de dimension concerne les relations d’attribut, c’est-à-dire les liens qui existent entre les différents attributs d’une même dimension. Il est, en situation réelle, important de préciser les relations d’attributs car ces relations d’attributs permettent :

  • d’améliorer les performances lors de l’exécution des requêtes,
  • de diminuer la quantité de mémoire nécessaire au traitement de la dimension.

Vous pouvez remarquer que SSDT, par défaut, crée une relation d’attributs entre la clef primaire de la relation et chacun de ses attributs. Vous reviendrez sur cet onglet par la suite. Le quatrième onglet de l’éditeur de dimension permet la navigation dans la dimension.

Traitez la dimension DimProducts que vous venez de modifier, puis revenez dans l’onglet Navigation de l’éditeur de dimension. Vous remarquez que la dimension ne possède qu’une seule hiérarchie (ici, un seul attribut) : id (les modifications que vous venez de faire n’ont pas encore été prises en compte). En ouvrant le niveau all, vous pouvez voir la liste des id des produits.

Reconnectez-vous au serveur Analysis Services soit par le menu Dimension/Reconnexion soit en cliquant sur l’icône Reconnexion dans la barre d’outils, pour prendre en compte les dernières modifications.

Vous pouvez remarquer que tous les attributs que vous avez ajoutés dans la dimension apparaissent maintenant dans la liste des hiérarchies. Vous avez accès à toutes les informations des produits de la dimension.

Création de la dimension date

La dimension date n’a pas pu être créée automatiquement lors de la création du cube car la vue de sources de données ne contient pas de table de temps.

La dimension date est généralement, une dimension très riche. Vous allez utiliser dans le cadre de cet atelier une fonctionnalité de SSDT qui permet de créer une dimension date relativement simple.

Par un clic droit sur Dimensions dans l’Explorateur de solutions, utilisez l’assistant dimension pour créer une nouvelle dimension temporelle. L’assistant dimension vous propose quatre méthodes de création.

Afin d’alléger la création de cette dimension temporelle, et en tenant compte des données contenues dans la table relationnelle facts_transactions, précisez la plage de temps allant du 1er juin au 1er novembre 2010 (page Définir des périodes de l’assistant).

Sur la page de l’assistant Définir des périodes, n’oubliez pas de choisir le lundi comme premier jour de la semaine, et le Français comme langue de votre calendrier.

La page Sélectionner des calendriers de l’assistant diot être modifiée uniquement dans des cas particuliers de hiérarchies de dates (par exemple calendriers fiscaux) ce qui n’est pas le cas ici. Vous pouvez garder la sélection par défaut (Calendrier régulier) et cliquer sur Suivant.

La dernière page de l’assistant :

  • Vous permet de donner un nom à votre dimension. Changez le nom donné par défaut qui n’est pas très pertinent.
  • Affiche les attributs de la dimension. Regardez les attributs qui ont été générés en fonction des périodes que vous avez cochées
  • Affiche les hiérarchies de la dimension. Regardez encore ce qui a été généré automatiquement.

Si les attributs et/ou hiérarchies qui ont été créés automatiquement ne vous satisfont pas, revenez en arrière et modifiez les périodes de votre dimension. Une fois satisfait de votre dimension date, cliquez sur Terminer.

À partir de l’explorateur de solutions, ouvrez la dimension date que vous venez de créer et allez dans les deux premiers onglets (structure de dimension et relations d’attributs). Remarquez les différents attributs, relations d’attributs et hiérarchies qui ont été créés.

Vous pouvez consulter les données de la dimension par l’onglet Navigation , après avoir traité la dimension (Clic droit/Traiter... sur la dimension dans l’explorateur de solutions). Attention, n’oubliez pas de vous reconnecter à Analysis Services.

Ajout de la dimension date au cube OLAP

Dans l’éditeur de cube, à partir de l’onglet Structure du cube, utilisez le volet Dimensions pour ajouter une nouvelle dimension à votre cube. Sélectionnez votre dimension date dans la fenêtre qui apparaît.

Vous devez ensuite définir comment votre groupe de mesures est lié à votre dimension date. En effet, la dimension date ne provient pas d’une table de la vue de source de données (qui aurait été référencée par la table facts_transactions): SSDT ne peut deviner le lien entre le groupe de mesures et la date.

Allez dans le 2ème onglet, utilisation de la dimension. Précedemment cette page ne contenait que la dimension DimProducts, avec sa relation au groupe de mesures.

Maintenant, votre cube OLAP possède bien deux dimensions. En revanche, la dimension date n’est pas reliée au groupe de mesures. Cliquez sur la cellule au croisement de la dimension et du groupe de mesures, puis sur le - qui apparaît, pour définir la relation entre la dimension date et le groupe de mesures.

Précisez :

  • Qu’il s’agit d’une relation normale.
  • Que la granularité de la table de dimension est l’attribut date.
  • Que l’attribut de la table de faits en relation avec la dimension est l’attribut date.

Retraitez le cube.

Création des dimensions dégénérées

Les deux dimensions dégénérées du schéma dimensionnel, c’est-à-dire transID et transType n’ont pas été créées lors de la création du cube. Vous allez les créer manuellement maintenant.

Création de la dimension dégénérée transType

Créez une nouvelle dimension. Dans l’assistant de création :

  • Demandez d’utiliser une table existante.
  • Choisissez la table facts_transactions.
  • Choisissez la colonne clef transType.
  • Choisissez la colonne nom transType.
  • Ne choisissez pas de tables associées,
  • Ne choisissez que transType comme attribut de la dimension.
  • Dans la dernière page de l’assistant, vérifiez les caractéristiques de votre dimension dégénérée et donnez-lui un nom plus approprié.

Création de la dimension dégénérée transID

Créez la dimension dégénérée transID de la même manière que vous l’avez fait pour la dimension transType.

Ajoutez les deux dimensions dégénérées au cube OLAP. Vérifiez l’utilisation de ces deux dimensions dans l’éditeur du cube. Puis, retraitez le cube.

Une fois le cube défini complètement et traité, vous allez pouvoir exploiter ses données.

Ouvrez le logiciel Tableau que vous connaissez bien, analysez les données obtenues.

Vous allez maintenant étudier plus particulièrement la mesure unitPrice dans les deux cas suivants :

  • Intéressez-vous aux ventes et achats du dimanche 1er août 2010 du produit dont la valeur de id est 3334 (ce qui correspond au produit Kernite Mining Crystal II).
  • Puis intéressez-vous aux ventes et achats du jeudi 9 septembre 2010 de tous les produits du même groupe de produits que le produit 3334.

Amélioration du cube OLAP

Pour pallier les défauts que vous venez de déceler, vous allez améliorer le cube destiné à votre marchand utilisant Eveonline.

Ajout d’une hiérarchie à la dimension Produit

De façon à pouvoir mieux parcourir votre cube et analyser ses données, vous allez créer une hiérarchie dans votre dimension :

  • Ouvrez votre dimension DimProducts et allez dans le premier onglet. Glissez l’attribut CategoryName dans le volet Hierarchy, puis l’attribut GroupName sous CategoryName, et enfin l’attribut TypeName sous GroupName.
  • Renommez votre hiérarchie en Hiérarchie Produit. Un petit warning sur le nom de votre hiérarchie vous indique qu’il manque des relations d’attributs.
  • Allez dans l’onglet Relations d'attributs et par des glissés-déposés dans le volet supérieur, indiquez que TypeName détermine GroupeName, et que GroupName détermine CategoryName.
  • Traitez à nouveau votre dimension.
  • Allez dans l’onglet Navigation et reconnectez-vous à SSAS. Vous pouvez, maintenant, naviguer dans la hiérarchie que vous venez de définir.
  • Traitez le cube OLAP et retournez explorer vos données par Tableau.

Résolution du problème sur unitPrice

Les mesures contenues dans une table de faits peuvent être de 3 types différents :

  • Mesures additives : ce type de mesure peut s’agréger au moyen d’une somme quelle que soit la dimension observée. Par exemple un chiffre d’affaire peut s’agréger au moyen d’une somme aussi bien sur une dimension temporelle que spatiale.
  • Mesures semi-additives : ce type de mesure ne peut s’agréger au moyen d’une somme que selon certaines dimensions, mais pas toutes. Par exemple une quantité en stock peut s’agréger au moyen d’une somme sur une dimension spatiale, mais pas sur une dimension temporelle. Sur une dimension temporelle, l’agrégation se ferait au moyen d’une moyenne.
  • Mesures non-additives : ce type de mesure ne peut s’agréger avec aucune des dimensions de la mesure. Le calcul doit être fait pour chacune des cellules du cube. Par exemple un pourcentage ne peut pas se calculer en fonction des valeurs de pourcentages des cellules-enfant.

Avec SSAS, toutes les mesures sont configurées par défaut comme étant des mesures additives, la fonction d’agrégation étant la somme. Cette fonction d’agrégation (paramètre Aggregate Function), peut être modifiée.

En fonction du type de mesure (additive, semi-additive ou non-additive), les valeurs possibles pour le paramètre sont les suivantes :

  • Mesure additive : Sum (par défaut), Count.
  • Mesure semi-additive : Min, Max, AverageOfChildren, FirstChild, LastChild, FirstNonEmpty, LastNonEmpty, ByAccount. La fonction d’agrégation n’est utilisée que pour la dimension temporelle; Sur toutes les autres dimensions, c’est la somme qui est utilisée.
  • Mesure non-additive : DistinctCount, None. La mesure doit être calculée pour chaque cellule.

La mesure UnitPrice ne peut être une mesure additive ni semi-additive. Elle ne peut être que non-additive, car elle doit tenir compte de la quantité d’unités de produits achetées ou vendues lors d’une transaction.

Allez vérifier que la mesure UnitPrice est bien configurée comme étant une mesure additive (Clic droit / Propriétés sur la mesure), et modifiez la fonction d’agrégation en None. Retraitez le cube et explorez de nouveau les données par Tableau (F5 suffit pour rafraichir les données). Reprenez les deux cas d’étude pour comprendre comment fonctionne le nouveau prix unitaire.

Vous allez créer une nouvelle mesure en indiquant le calcul à effectuer pour chaque cellule. Commencez par renommer la mesure UnitPrice actuelle en UnitPriceSum et remettez sa fonction d’agrégation à Sum; Ceci afin de pouvoir comparer les valeurs de prix unitaire fournies par cette mesure et par celle que vous allez maintenant créer.

Dans l’éditeur de cube, allez dans l’onglet Calculs.

Dans le volet Organisateur de script, créez un nouveau membre calculé (par un clic droit dans le volet).

Dans la page principale de l’éditeur, renseignez les informations suivantes :

  • Nom : UnitPrice
  • Hiérarchie parente : choisissez Measures
  • Expression : dans le petit éditeur, demandez la division de la mesure Amount par la mesure Quantity. Vous pouvez utiliser le glisser-déposer à partir du volet Métadonnées, pour y mettre les deux mesures.
  • Visible : Laissez la valeur à true
  • Comportement non vide (pour optimisation) : Sélectionnez les deux mesures (Amount et Quantity).
  • Groupe de mesures associé : Selectionnez FactsTransactions.

Traitez votre cube et retournez dans Tableau pour exploiter vos données.

Revenez dans SSDT et supprimez la mesure UnitPriceSum.