Modélisation dimensionnelle : Comment choisir entre Fait, Dimension ou Attribut de Dimension ?

C’est une question qui m’a été posée dernièrement, et je voulais partager avec vous la réponse. Pour ceux qui débutent, on va parler ici de comment construire un modèle dimensionnel, qui permettra le stockage et l’analyse de données que l’on souhaite étudier, que ce soit pour Excel, Power Pivot, SQL Server ou SSAS.

Et pour bien répondre, le mieux est de partir d’un cas pratique :
Je veux analyser la ville de mes magasins, comment la représenter dans mon modèle ?

  • Est-ce que c’est un fait ? L’implémentation géographique de mes magasins ?
    • Qui méritera donc une table de fait à part entière…
  • Est-ce que c’est une dimension à part entière ?
    • Qui méritera donc une table propre et des clefs étrangères dans les tables de fait qui l’utilisent…
  • Ou est-ce que c’est un attribut de ma dimension magasin ?
    • Qui méritera donc une colonne dans la table de dimension correspondante…

Comme d’habitude la réponse est de l’expert est « ça dépend ! »

Mais...

« Et ça dépend de quoi ? » me demandez-vous ?

D’abord de savoir si on joue avec un fait ou une dimension. Là le critère pour trancher est simple : la valeur permet-elle de quantifier (compter, mesurer…) ou qualifier (ventiler, filtrer, trier, grouper…) le processus que je veux étudier (ce à quoi correspond une ligne dans ma table de fait).

Dans notre cas : les quantités mesurées peuvent-elles être ventilées par villes, ou pas ? La réponse est oui : ma ville en elle-même n’est donc pas un fait. Et c’est d’ailleurs plutôt logique, un fait c’est un processus métier qui se réalise, typiquement une transaction ou un comptage. Si on joue avec des villes, une transaction ça pourrait être un déménagement, un comptage le recensement annuel. La ville en elle-même n’est donc pas une mesure. Attention à ne pas croire que la distinction se fait selon le type de la donnée, texte ou valeur numérique, puisqu’un âge ou un prix peuvent complétement être des éléments servant à filtrer (j’étudie mon CA des ventes par prix de vente des articles), donc être côté dimension.

Pour les gens de niveaux 2 et plus, vous noterez que la vraie question sous-jacente est comme toujours de préciser quel est le processus métier concerné par ma table de fait. A quel événement dans le monde réel correspond une ligne dans ma table de fait.

La question suivante est de savoir si la ville est une dimension de mon processus métier, ou un attribut d’une autre dimension, dans mon cas la ville du magasin (cf. schéma ci-dessous):

MD - Schéma 1

D’un point de vue strictement fonctionnel, le critère est simple : c’est le rythme de changement d’un attribut par rapport à un autre, et par rapport aux faits :

  • Si le magasin ne change jamais de ville : la ville est un attribut du magasin, c’est une colonne de la dimension magasin (partie droite du schéma)
  • Si le magasin peut changer de ville mais c’est rare : toujours un attribut mais on va utiliser les techniques SCD (d’où d’ailleurs le lent/slowly de slowly changing dimension, dimension à variation lente) dans la dimension magasin (partie droite du schéma)
  • Si le magasin change de ville plus ou moins à la même granularité temporelle que les faits (le mois ou le jour) : alors c’est une dimension indépendante (partie gauche du schéma)

Plutôt élégant non ?

Maintenant, il arrive que pour des raisons techniques on puisse créer des dimensions géographie ou adresse, quand on veut réutiliser ces adresses pour différentes dimensions (clients, collaborateurs, fournisseurs…), même si on est dans les cas invariants ou à variation lente. A ce moment-là soit on floconne les dimensions, soit on reste en étoile. En flocon (schéma en dessous à droite) on complexifie l’alimentation et les requêtes pour utiliser le modèle (jointures à étage), en étoile (schéma en dessous à gauche) on perd toutes les relations qui existent entre la géographie et le magasin qui n’auraient pas été concrétisées par un fait :

MD - Schéma 2

Dans ce cas, à vous de choisir en fonction de votre besoin métier et vos contraintes techniques.

Si on récapitule le tout, c’est plutôt simple finalement ?

  • Fait ou Dimension : quantifier (mesurer) versus qualifier (ventiler).
  • Dimension ou Attribut de dimension : en fonction du rythme du changement de l’attribut par rapport à la table de fait.

Évidemment on ne peut pas parler de modélisation dimensionnelle sans rappeler que c’est une science exacte qui dispose d’une bible, le DWH Toolkit de Ralph Kimball et toute sa clique.

N’hésitez pas à partager vos cas tordus, la théorie ça doit se tester sur la pratique 😉

Un commentaire sur « Modélisation dimensionnelle : Comment choisir entre Fait, Dimension ou Attribut de Dimension ? »

Laisser un commentaire