2012-06-14 2 views
2

Je crée un modèle dimensionnel sur un "système d'enregistrement d'appels", pour un service VoIP. Je vais vous montrer un petit exemple pour montrer ma question. Supposons que j'ai un fait qui représente un seul appel.Modélisation dimensionnelle - Requêtes sans faits

Et j'ai une dimension appelée Client, et une autre appelée Provider. (Prétendre qu'il existe d'autres dimensions, comme la date bien sûr, et etc ...)

(Dimension)Client ---> (Fact)Call <--- (Dimension)Provider 

Avec cela, je serai en mesure de voir combien d'appels un client a fait, ou combien d'appels ont été envoyés par un fournisseur, et d'autres questions.

Et supposons qu'un client est associé à un fournisseur, et qu'un fournisseur peut avoir plusieurs clients.

Alors, voici la question. Hhow puis-je créer une requête comme: Quels clients chaque fournisseur a?

Il semble que ce soit une requête entre les deux dimensions. Je ne peux pas impliquer le fait à ce sujet, parce que si un client n'a jamais utilisé le service, il ne sera pas sur la table de faits d'appels, et il n'appliquera pas sur cette requête "Clients par fournisseur". Je pensais avec moi-même qu'une façon de le faire serait de créer une dimension Role-Playing-Dimension, une vue de la dimension Client et de l'ajouter directement à la dimension Provider, juste pour faire des requêtes comme celle-ci. Ce serait quelque chose comme ceci:

(Dimension)Client ---> (Fact)Call <--- (Dimension)Provider <--- (Dimension)View Client 

Bien sûr, avec cette approche, l'utilisateur doit être très prudent pour ne emploient pas cette dimension Voir client avec la table de fait, car il ferait double emploi avec les lignes de fait.

Alors, est-ce l'une des situations où j'ai besoin d'utiliser les fameuses tables de faits sans faits?

Quelle est la bonne façon de faire cela?

Merci!

Répondre

1

Les dimensions de jeu de rôle doivent être utilisées lorsque vous «réutilisez» une dimension à utiliser plusieurs fois dans la même table de faits (par exemple, date d'appel, date de service, etc.).

Il ne semble pas que ce soit ce que vous cherchez. Au lieu de cela, si la relation est vraiment un à plusieurs, alors j'ajouterais simplement l'identifiant du fournisseur directement sur la dimension client (pas besoin d'une vue ou quoi que ce soit), avec la reconnaissance que cette relation n'a rien à voir avec les faits. Essentiellement, pensez au «fournisseur» comme étant simplement un attribut flou du client, quand il s'agit de ce type de requête. Toutefois, il semble que vous souhaitiez être sûr que vous n'avez pas de relation de plusieurs à plusieurs entre les clients et les fournisseurs (un client peut utiliser plusieurs fournisseurs et un fournisseur peut avoir plusieurs clients). Une relation plusieurs-à-plusieurs est modélisée de manière dimensionnelle en tant que table de faits. Votre table de faits pourrait être un instantané du moment actuel, avec ou sans historique. Deux colonnes seulement sont nécessaires, Client et Provider. Si vous souhaitez conserver un enregistrement de la relation client/fournisseur dans un certain délai, vous devez simplement ajouter un horodatage.

Notez qu'un fait sans effet fonctionnera également pour modéliser la relation un-plusieurs (et si le modèle change sur le back-end, votre ETL est déjà fait).)

Questions connexes