2017-09-27 1 views
1

J'ai actuellement un graphique à barres en power-bi. Le graphique a id's distinct sur le x axis et la quantité de courrier qu'ils ont reçu sur le y axis. Dans le tableau que j'utilise, j'ai SalesYear, id, et une colonne Val qui a la valeur 1 dans chaque rangée. Le id apparaît plusieurs fois dans le tableau, parfois plus de deux fois dans la même année. Le problème est que je veux graph reversed. Je voudrais partager les gens en fonction de la quantité de courrier qu'ils ont reçu. Ensuite, utilisez un slicer pour voir combien ils reçoivent par an. J'ai eu du mal à trouver une solution par moi-même, quelqu'un aurait-il des idées sur la façon d'aborder cela. Le tableau l ressemble à ceci:Graphique en colonnes empilées qui crée des godets

id |  salesYear | Val 
    10 |   2012  | 1 
    11 |   2012  | 1 
    11 |   2013  | 1 
    10 |   2012  | 1 
    10 |   2013  | 1 
    12 |   2012  | 1 
    12 |   2012  | 1 

Ainsi, dans la visualisation, je veux montrer que sur l'axe x que les personnes qui ont reçu 1 morceau de mail = 0, 2 pièces de courrier = 2, 3 pièces de courrier = 1. Ma question est de savoir comment puis-je atteindre ce sera un tableau Colonnes empilées. Toutes les suggestions seraient grandement appréciées!

15k | Y axis would be amount of people who recieved 1 piece, 2 piece, etc.. 
14k | _ 
13k | | | 
12k | _| | 
11k || | | 
10k ||_|_|_________________________ 
     1 2 3 4 5 6 7 8 9 <-AmountOfMailRecieved 

Répondre

1

1) A partir de vos données d'échantillon dans Power BI.

Sample Data

2) Créer une nouvelle table qui est calculée une liste distincte des années de votre table source.

Years = DISTINCT(
    SELECTCOLUMNS(
     Mail, 
     "SalesYear", Mail[salesYear] 
    ) 
) 

Year Table

3) Créer une autre table calculé que crossjoins la table de l'année avec une série d'entiers. Power BI peut indiquer le [Value] a une erreur (comme il le fait pour moi dans l'image ci-dessous), mais cela fonctionne correctement.

MailCounts = SELECTCOLUMNS(
    CROSSJOIN(Years, GENERATESERIES(1, 20)), 
    "SalesYear", Years[SalesYear], 
    "MailReceived", [Value] 
) 

Count Table

4) Ajouter une colonne calculée qui compte le nombre d'ID dans la table source qui correspondent au nombre d'années et le courrier. Par exemple, la première ligne compte combien d'identifiants distincts apparaissent exactement une fois dans la table source pour l'année 2012; c'est 1 parce que seulement ID 11 apparaît en 2012 une fois.

PersonCount = CALCULATE(
    DISTINCTCOUNT(Mail[id]), 
    FILTER(Mail, 
     Mail[salesYear] = EARLIER(MailCounts[SalesYear]) && 
     EARLIER(MailCounts[MailReceived]) = CALCULATE(
      COUNTROWS(Mail), 
      FILTER(Mail, 
       Mail[salesYear] = EARLIER(Mail[salesYear]) && 
       Mail[id] = EARLIER(Mail[id]) 
      ) 
     ) 
    ) 
) 

Person Count

5) Créer des relations entre votre table source et la table d'année, puis entre la table de l'année et la table de comptage. Cela permettra la création d'un slicer basé sur l'année de votre table source pour filtrer les résultats de la table de comptage.

Relationships

6) En option, vous pouvez masquer le champ de l'année dans la source et en tableaux. Après avoir fait cela si vous le désirez, créer un graphique tel que configuré dans l'image ci-dessous

Chart

7) Créer une trancheuse de la table de l'année comme le montre l'image ci-dessous.

Slicer

Et voilà. Le graphique doit correspondre à votre résultat attendu et peut être filtré par année.

+0

Wow Merci beaucoup! Je ne peux vraiment pas exprimer ma gratitude pour vous avoir pris le temps de répondre à ma question. Les étapes étaient faciles à suivre et à comprendre. Ça a marché comme sur des roulettes! – Katan

+0

@Katan - Pas de problème; c'est mon plaisir. – Joe

0

Vous allez utiliser DistinctCount soit dans une mesure ou d'une colonne.

VariableName = DISTINCTCOUNT([AmountofMailReceived])