2017-10-08 2 views
2

J'ai un problème en essayant de compter les lignes dans une table Power BI où le critère varie en fonction d'un paramètre What-If. La table compte environ 11 millions de lignes, mais je vais essayer de donner un exemple simple de ce que j'essaie de faire. Pardonnez la longueur du message, mais il n'y en a pas vraiment beaucoup.Power BI compte les instances d'enregistrements qui correspondent aux critères basés sur le paramètre What-If

Les données au fur et à partir de SQL Server ressemble à quelque chose comme ceci (simplifié pour plus de clarté)

Item Category Price AvgCatPrice Variance 
Dog  Pet   20.00 15.00   33.33 
Cat  Pet   12.00 15.00   20.00 
Goat Pet   18.00 15.00   20.00 
Maggot Pet   05.00 15.00   66.67 
Apple Fruit  01.00 01.20   16.67 
Orange Fruit  01.20 01.20   00.00 
Mango Fruit  01.30 01.20   08.33 

L'écart est tout simplement la différence absolue entre le prix et la moyenne de la catégorie en pourcentage, mais ce n'est pas pertinent à la question

Donc je charge les données dans Power Bi et tout ressemble à ce qui précède. Puis, j'ajoute une colonne calculée simple comme suit: Count =1

Si je mets ces valeurs sur une table avec Category sous forme de lignes et Count comme valeurs je reçois

Category Count 
Fruit  3 
Pet   4 

Ceci est comme prévu.

J'ai ensuite ajouté un paramètre what-if appelé VarPc comme un nombre décimal compris entre 0 et 100 avec des incréments de 5. J'ai pris l'option d'ajouter automatiquement un slicer pour le paramètre.

Puis j'ajoute une nouvelle colonne comme ceci.

OverVarPc = IF(SOTestDat[Variance] > VarPc[VarPc Value],1,0) 

Si je l'ajouter à la table je reçois

Category Count OverVarPc 
Fruit  3  2 
Pet   4  4 

..which est correct en supposant que VarPc est égal à zéro.

Maintenant le premier numéro Si j'ajuste le paramètre via le curseur ou la zone de saisie, la colonne OverVarPc n'est pas réévaluée.

Prochaine approche J'ai ajouté une seconde table, cette fois tous les détails sont affichés (pas d'agrégation délibérée). J'ai ensuite ajouté une nouvelle mesure à la table VarPc appelée SumIfGt avec ce que la définition

SumIFGt = IF((sum(SOTestDat[Variance]) - sum(VarPc[VarPc])) >0,1,0) 

Le tableau ressemble à ceci avec le curseur à 0%

Item Price Variance Count OverVarPc SumIFGt 
Apple 1  16.67  1  1   1 
Cat  12  20   1  1   1 
Dog  20  33.33  1  1   1 
Goat 18  20   1  1   1 
Maggot 5  66.67  1  1   1 
Mango 1.3  8.33  1  1   1 
Orange 1.2  0   1  0   0 

Si je l'ai mis à 25% alors la table ressemble maintenant à ceci.

Item Price Variance Count OverVarPc SumIFGt 
Apple 1  16.67  1  1   0 
Cat  12  20   1  1   0 
Dog  20  33.33  1  1   1 
Goat 18  20   1  1   0 
Maggot 5  66.67  1  1   1 
Mango 1.3  8.33  1  1   0 
Orange 1.2  0   1  0   0 

Les deux résultats sont comme prévu.

Voici donc moi pense que je suis bon pour aller .... prochain numéro Je laisse tomber cette nouvelle mesure sur mon tableau d'origine agrégée, mais le tableau montre maintenant.

Category Count SumIfGt 
Fruit  3  0 
Pet   4  1 

je sorte de comprendre pourquoi il le fait, il est l'agrégation SUM de Variance et (pour les fruits) obtenir 75, puis l'agrégation VarPc pour chaque ligne (3 lignes x 25) = 75 puis retour 0 comme ce n'est pas plus grand que.

Enfin la question! Comment puis-je obtenir un compte simple des résultats de la mesure. Ce que je veux voir dans le tableau final, c'est la catégorie, le total des éléments de la catégorie et le nombre d'items dont la variance est supérieure au paramètre What-IF.

Il y a beaucoup plus de choses que je veux faire mais je pense que si je me fais craquer le reste suivra facilement.

Merci d'avoir lu jusqu'ici!

Répondre

1

Je pense que vous pourriez trouver des choses plus facile à long terme si, au lieu d'ajouter une colonne calculée à 'SOTestDat': Count = 1 vous ajoutez à la place une mesure à cette table:

Count = COUNTROWS(SOTestData) 

Après avoir fait cela, votre OverVarPc sera évaluer correctement si vous ajoutez comme une mesure quelque chose comme ceci:

OverVarPc = CALCULATE([Count], FILTER(SOTestDat, SOTestDat[Variance] > VarPc[VarPc Value])) 

qui comptera les lignes de la table SOTestDat après f Ilter pour les lignes où le [Variance] est supérieur à la valeur actuelle de la mesure [VarPc Value].

+0

Merci mendosi, je pense que je comprends où je me trompais maintenant et plus important encore, pourquoi! Merci pour ton aide. –