Cette question n'a pas de réponse satisfaisante. N'hésitez pas à y répondre ou à faire des commentaires.
Considérons le modèle de données suivant. Notre modèle comporte trois dimensions. Si vous devez les nommer, faites-le (A) produit, (B) marque, (C) région. B est un conteneur pour A, il s'agit donc d'une hiérarchie. Plusieurs produits dans une seule marque. Les tables désignées par A, B, C, AB, ABC sont des tables passerelles qui ne contiennent que des valeurs uniques.
Passons maintenant aux questions :
-
La table de bridge AB est-elle nécessaire dans le modèle suivant ? Ne pourrait-on pas connecter les tables A et B directement à ABC.
-
Est-ce une bonne idée de créer un produit cartésien pour toutes les dimensions ? dans le modèle en tant que Table de bridge centrale ?
-
Devons-nous brancher le tableau Budget avec les dimensions AB sur le pont AB ou sur le pont ABC ? En fonction de la réponse à la première question.
-
Comment intégrer le tableau de publicité dans le modèle ? En pontant ABC ou en créant spécialement une table de pont BC et en la connectant à ABC ?
Maintenant, le schéma :
+-------+
| |
| A +-----+
| | |
+-------+ |
|
v
+-------+ +--+----+ +--------+ +------------+
| | | | | | | Sales |
| B +--> AB +----->| ABC +----->| ABC |
| | | | | | | |
+-------+ +--+----+ +---+----+ +------------+
^
|
+-------+ | +------------+
| | | | Budget |
| C +---------------------+ | AB |
| | | |
+-------+ +------------+
+------------+
| Advertizing|
| BC |
| |
+------------+
Pont DAX.
J'aime construire des tables de correspondance en DAX, et non en M. Il y a quelques raisons à cela. Premièrement, le code est simple. Deuxièmement, cela introduit une sorte d'ordre dans l'éditeur de requêtes parce que je n'y vois que les tables sources (pas les ponts).
Tableaux de correspondance - DAX ou M ?
La création d'un pont pour la dimension A se présente donc comme suit :
#A =
DISTINCT (
UNION (
TOPN ( 0, ROW ( "A", "Apple" ) ),
DISTINCT ( Sales[A] ),
DISTINCT ( Budget[A] ),
DISTINCT ( Advertizing[A] )
)
)
Le pont pour AB serait un produit cartésien de A et B ainsi créés :
AB =
CROSSJOIN (
DISTINCT ( '#A'[A] ),
DISTINCT ( '#B'[B] ),
"A@B", COMBINEVALUES("@",'#A'[A], '#B'[B])
)
Mise à jour après réception de la première réponse.
Je ne veux pas modifier le contenu de ma question une fois que la prime a commencé. Après la première réponse, j'ai réalisé que les hiérarchies sont apparues dans ma question par accident et qu'elles vous détournent de ce que j'aimerais découvrir. Vous pouvez oublier les hiérarchies et traiter les dimensions A, B, C comme des dimensions indépendantes.
J'aimerais me concentrer sur la façon de construire un schéma en étoile dans le cas où nous avons de nombreuses dimensions indépendantes et quelques tables, disons des dictionnaires avec des dimensions jointes. Par exemple, nous pouvons avoir un budget de vente défini par la région et la marque, et un budget publicitaire défini par la couleur du produit. Devrions-nous construire une table centrale qui contienne toutes les dimensions (produit cartésien de ABC) ? Ou bien la table centrale doit-elle comporter des branches épaisses à plusieurs dimensions ? Dans le second cas, nous aurions [AB] -> [ABC] <- [BC].