J'ai une table de faits instantanés accumulée qui suit l' entrée et la sortie des conteneurs dans un terminal .
Les conteneurs peuvent entrer et sortir de 3 façons différentes , j'ai donc pensé à créer un tableau de dimensions spécifiques qui répertorie ces 3 voies possibles ( train, bateau ou camion ).
Ensuite, j'ai lu cet article qui dit essentiellement que cette technique est erronée, mais je ne comprends pas pourquoi.
Premier article:
Parfois, lorsqu'une table de faits contient une longue liste de faits peu peuplés dans une ligne individuelle, il est tentant de créer une dimension de type de mesure qui réduit la ligne de la table de faits à un seul fait générique identifié par la dimension de type de mesure. Nous ne recommandons généralement pas cette approche. Bien qu'il supprime toutes les colonnes de faits vides, il multiplie la taille de la table de faits par le nombre moyen de colonnes occupées dans chaque ligne et rend les calculs intra-colonnes beaucoup plus difficiles. Cette technique est acceptable lorsque le nombre de faits potentiels est extrême (par centaines), mais moins d'une poignée serait applicable à une ligne de table de faits donnée.
Je comprends que si une " dimension de type de mesure " est implémentée pour une table de faits de transaction, cela peut créer des problèmes comme le dit cet autre article , mais je ne vois aucun inconvénient si elle est utilisée pour un fait de capture instantanée .
Deuxième article: (quelques inconvénients de la mise en œuvre d'une "dimension de type de mesure")
- [...] Si nous optons pour une "dimension de type mesure", nous perdrons cette capacité d'analyse. Si une mesure n'est pas compatible avec les autres mesures, nous ne pouvons pas les additionner.
- [...] Plus le nombre de passes que notre SQL doit exécuter pour produire un rapport est important, plus le rapport est lent.
- [...] Sur l'outil BI, si vous ne placez pas le filtre de type de mesure, vous risquez que l'utilisateur obtienne des "informations de détritus". Du point de vue de la convivialité, cette conception est une poubelle.
Réponse à la réponse de Mark Storey-Smith
Très belle approche, je n'y aurais jamais pensé.
Une autre chose: chaque entrée et sortie d'un véhicule qui amène un conteneur dans le terminal a un identifiant unique qui me donne d'autres informations comme: l'arrivée prévue du véhicule, l'arrivée réelle, si c'est un navire le quai, si c'est un camion le péage et beaucoup d'autres informations ...
Il s'agit de 3 tables de faits différentes et elles doivent être liées d'une manière ou d'une autre à la table de faits du conteneur.
Je pensais que l'ID du voyage était un degenerate dimension
, donc il irait directement dans la table de faits des conteneurs. Donc, mon doute est le suivant: dois-je ajouter 6 champs différents dans la table de faits sur les conteneurs (navire_voyage_in_key, navire_voyage_out_key, train_voyage_in_key, train_voyage_out_key, truck_voyage_in_key, truck_voyage_out_key) ou juste 2 autres champs (voyage_in, voyage_out) qui sont liés dynamiquement aux différentes tables de voyage?
J'espère que mon doute est clair, merci.
la source