2017-09-06 4 views
0

Ok, table très simplifiée de trois colonnes, ordre #, produit # et quantité ...DAX moyenne à différents grains

Order | Product | Qty 
1  | A  | 10 
1  | B  | 20 
2  | C  | 30 

Je veux calculer une moyenne de quantité, donc .. c'est à le "grain par défaut":

AvgQty = 60/3 = 20

facile, cependant, j'ai aussi veulent ensuite enlever le produit:

Order | Qty 
1  | 30 
2  | 30 

et maintenant la Quantité devrait réagréger [comme ils le feraient avec une somme()], et maintenant je voudrais AvgQty pour revenir à la moyenne de ces nouvelles lignes ...

AvgQty = 60/2 = 30

Si essayé de le faire en groupant par ordre explicitement comme ceci:

measure := 
IF (
    ISFILTERED ('Table'[Product]), 
    AVERAGEX (
     SUMMARIZE (
      'Table', 
      'Table'[Order], 
      'Table'[Product], 
      "SumQty", SUM ('Table'[Qty]) 
     ), 
     [SumQty] 
    ), 
    AVERAGEX (
     SUMMARIZE (
      'Table', 
      'Table'[Order], 
      "SumQty", SUM ('Table'[Qty])), 
     [SumQty] 
    ) 
) 

il n'a pas tout à fait le travail en raison du total de la colonne techniquement non filtrés par produit, il continue de montrer encore le total incorrect ...

Je ne suis pas certain comment surcharger cela ..?

Mon calcul réel n'est pas seulement une simple moyenne, mais le principal problème auquel je suis confronté est de m'assurer que je peux obtenir un "recalcul" de la Qté à un nouveau grain .. si je peux clouer ça, je peux réparer problème .. la solution pourrait bien être aussi de charger la table au modèle au grain de commande aussi !!! ;)

+0

Je ne comprends pas vraiment la question, qu'est-ce que le résultat souhaité? pour la commande + produit, commande seulement, produit seulement et total –

+0

oui ... je l'ai relu et c'est un peu peu clair .. laissez-moi re-mot! réponse courte est que je veux atteindre la moyenne du «nouvel» agrégat de Qté, quand il y a maintenant deux lignes I.e. Le filtre de produit est retiré ... – m1nkeh

+0

Ok, édité .. merci! – m1nkeh

Répondre

0

Je pensais aussi à ce sujet les derniers jours et je crains qu'il n'y ait aucun moyen de résoudre ce pour les raisons suivantes:

  • il n'y a pas de fonction dans le DAX de retourner toute la table qui a été calculé que vos lignes
  • il n'y a pas de fonction de vous dire ce qui a été agrégé il
  • pour une seule rangée, vous pouvez savoir ce qui a été filtré à l'aide des fonctions complexes est filtré en cascade, mais ce n'est pas vraiment faisable ni fiable
  • le plus gros problème : quand vous êtes sur le total ou sous-total niveau, il n'y a aucun moyen de savoir ce qui a été utilisé pour les lignes de détail comme aucune des fonctions existantes comme est filtré, HASONEVALUE, etc. travaillerait

donc pour DAX cela ne peut pas être résolu pour le moment de mon point de vue

dans le cas où vous utilisez MDX pour interroger votre modèle (par exemple un tableau croisé dynamique) vous pouvez créer une mesure MDX qui utilise la fonction AXIS() pour retourner l'ensemble qui a été utilisé sur les lignes/colonnes et est-il dans une fonction COUNT()

+0

Gerhard, c'est une superbe réponse, très claire. Je suis heureux que vous soyez revenu avec ceci car il valide mes propres résultats, et je vous remercie. J'utilisais (pour un court moment) PivotTable pour valider mon travail, mais je passais ensuite à l'utilisation du contrôle matriciel PowerBI car j'étais en fait sous ce qu'ils faisaient "sous les couvertures" et notre couche de reporting est PowerBI. – m1nkeh