DAX ALLEXCEPT pour additionner par catégorie de plusieurs tables de dimension
Je voudrais calculer le total par catégorie. La catégorie est dans la table de dimension.
Voici un exemple de fichier : DAX ALLEXCEPT total par catégorie.pbix
J’ai le modèle suivant:
Voici mes résultats attendus. Total par couleur:
Je pensais pouvoir obtenir les résultats attendus par la mesure suivante:
ALLEXCEPT_color =CALCULATE ( , ALLEXCEPT ( FactTable, -- surprisingly 'dim1' table in that place gives wrong results dim1 ))
Ou alternativement en utilisant la méthode suggérée par Alberto Ferrari https://www.sqlbi.com/articles/using-allexcept-versus-all-and-values/:
ALL_VALUES_color = CALCULATE ( , ALL (FactTable), -- again, 'dim1' produces wrong results, has to be FactTable VALUES ( dim1 ) )
Ces deux mesures fonctionnent et donnent des résultats corrects. Cependant elles multiplient les résultats affichés en faisant le produit cartésien de toutes les dimensions. Pourquoi ? Comment l’empêcher ?
J’obtiens les résultats attendus avec la mesure :
Expected_Results_Color =IF ( ISBLANK ( ), BLANK (), )
Probablement il me manque quelque chose sur la fonction ALLEXCEPT
donc je n’obtiens pas ce que je veux du premier coup. Quelle est la logique derrière l’utilisation de la fonction ALLEXCEPT avec plusieurs tables, en particulier avec des dimensions éloignées, loin du centre du schéma en étoile.
Quel modèle utiliser ? Ici, j’ai trouvé une solution prometteuse qui ressemble à ceci:
ByCategories =CALCULATE ( SUM ( FactTable ), ALLEXCEPT ( dim1, dim1 ), ALLEXCEPT ( dim2, dim2 ), ALLEXCEPT ( dim3, dim3 ))
Mais comme je l’ai testé auparavant, cela ne fonctionne pas. Il ne fait pas d’agrégation par dimensions mais produit telles quelles.
J’ai donc découvert que c’est la bonne direction:
ByCategories =CALCULATE ( SUM ( FactTable ), ALLEXCEPT ( FactTable, -- here be difference dim1, dim2, dim3 ))
Je spécule qu’il pourrait y avoir aussi une autre façon.
Measure = var MyTableVariable = ADDCOLUMNS ( VALUES ( dim1 ), "GroupedSales", ) RETURN ...
Si seulement nous pouvions récupérer la valeur scalaire unique de GroupedSales à partir de MyTableVariable et la faire correspondre avec la couleur appropriée dans le visuel de la table.
Je serais très reconnaissant pour toute autre perspicacité dans le calcul du total pour la catégorie.