Decideo - Actualités sur le Big Data, Business Intelligence, Data Science

Abonnez-vous gratuitement à Decideo !


Decideo


 
Forums, dernières contributions

Modélisation - Comment compter une dimension (1 seule dimension hiérarchique ou plusieur mini-dimensions) ?

 Luis Ribeiro
Samedi 12 Janvier 2008

Version imprimable
[Ignorer]
Supposons une table de dimension client en Slowly Changing Dimension (Kimball) composée hiérarchiquement de groupe client, client. (un groupe client = groupe RENAULT,Groupe PSA,...), inutile de gérer le lien 1 client plusieurs groupes, ce n'est pas ma problématique qui m'interresse ici.
Il y a moins de groupes que de clients.

Selon Kimball, il faudrait faire une unique dimension client pour eviter les mini-dimensions mais COMMENT ensuite DENOMBRER LE NOMBRE DE GROUPES, LE NOMBRE DE CLIENTS ?
Après plusieures heures passées sur le Net, je vous livre l'état de ma reflexion :

Pour le client : pas de probème : créer une table de fait (table de fait sans fait selon Kimball) avec un 1 pour chaque client. Id_date,id_client, nb_cli.
La table de fait ne contient une ligne avec nb_cli à 1 que pour les versions courantes de la dimension client.

Pour le groupe : problème !

A moins que l'unique table de dimension ne contienne 2 niveaux (ajout d'un champ niveau qui contient Groupe ou client )càd quelle soit la fusion d'une table groupe (les données clients sont à blanc) et d'une table clients avec les groupes renseignés. => C'est à dire que l'alimentation en SCD se fait en 2 temps : 1) sur le niveau groupe 2) sur le niveau client.
Il serait possible de créer une table de Fait unique: id_date, d_client, nb_groupe à l'image de la table de fait client.

A moins que l'on crée :
1) un snow-flake Groupe -> client mais cela ajoute une jointure et donc des temps de requêtes plus longs.
2) Une mini-dimension Groupe càd que la dimension unique est éclatée en 2 dimensions l'une pour le groupe et l'autre pour le client. ces 2 tables n'étant pas jointes l'une à l'autre mais directement sur les faits.
Je ne vois que peu d'inconvénients : il sera toujours possible de recréer l'illusion de la hiérarchie dans l'univers ou le catalogue fourni aux utilisateurs.

Comment gerez-vous cette problématique, j'aimerais éviter de créer des tables de faits à mille pates !
 Stefan
Mardi 15 Janvier 2008

Version imprimable
[Ignorer]
J'ai peut être du mal à saisir le problème mais un simple count distinct pourrais faire l'affaire?

Sinon, n'hesite pas à surcharger les objets dans la couche sémantique.

Pour les aspects modèlisation , tout dépend de la taille de la table , si c'est une table très importante , tu peux envisager le flocon , sinon tu peux rester en étoile. Un flocon c'est pas forcément moins rapide sur certains cas.

Ceci dit , les counts , sauf si c'est très coûtant en temps de restitution tu peux le faire coté restitution/couche sémantique ou avec une techno de type OLAP ( attention aux limitations en termes d'espace et flexibilité ). Des vues sont utilisées à ces fins parfois, matérialisées ou pas.

Ex : vue sur la table client avec 2 counts distinct. La restit pourrais utiliser cette vue.

NB : la réalité est des fois assez loin de Kimball / Inmon , une combin perso des 2 est souvent plus adaptée.
 Luis Ribeiro
Dimanche 27 Janvier 2008

Version imprimable
[Ignorer]
Merci Stefan, pour ta réponse et tes autres contributions.

Effectivement, le count distinct(sur ID_CLIENT ou ID_GROUPE) fournit simplement la réponse et permet d'avoir le nombre de clients (ou de groupes) LORSQUE la requête fait intervenir une table de fait (factures par exemple).
Mais, si je veux juste avoir le nombre de clients à un instant t INDEPENDAMMENT de toute table de faits, un 2 éme indicateur comportant un PROMPT pour renseigner la date est à créer, c'est ça ? Ce qui permet ensuite en l'utilsant 2 fois au niveau du rapport de faire des variations entre 2 dates. Je ne sais pas si ces rapports se rafraîchissent ensuite facilement les mois suivants avec les prompts ?

La volumétrie sur une des tables à dénombrer sera de 500 000, ce ne sont pas des clients mais la problématique reste la même.

Ma difficulté première portait surtout sur le peuplement de la dimension hiérarchique client : je ne savais pas s'il était possible d'y faire figurer des groupes sans clients et des clients sans groupe. A priori, c'est possible en remplacant au chargement les données absentes avec des clés arbitraires (0 ou -1) et des valeurs arbitraires (groupe inexistant , client inexistant). Du coup, adieu flocons !


Twitter
Rss
LinkedIn
Facebook
Apple Podcast
App Store
Google Play Store