3 votes

Combiner les données réelles et planifiées dans les visualisations KPI de PowerBI

J'ai deux jeux de données primaires :

  1. Données réelles avec toutes les transactions de vente.

    Par exemple RealData :

    Date;Sales
    16-01-2017;1200
    20-01-2017;1500
    05-02-2017;800
    08-02-2017;1100
    13-02-2017;300

    Etc.

  2. Un plan avec les ventes totales que je veux atteindre, avec les totaux au dernier jour de chaque mois.

    Par exemple EndOfMonthTargets :

    Date;Sales
    31-01-2017;3000
    28-02-2017;2500

    Etc.

Dans mes données réelles, j'ai (a) également les données des années antérieures à 2017, et évidemment j'ai les objectifs pour chaque mois de 2017. Les RealData sont toujours en direct / à jour.

Ce que j'essaie de faire, c'est de montrer des visualisations d'indicateurs clés de performance : comment se comportent les données réelles par rapport au plan. Cependant, je n'arrive pas à trouver comment relier les deux ensembles de données, car ils ne peuvent pas vraiment être joints.

Quelle est la façon idiomatique de faire cela dans PowerBI ?


J'ai essayé :

  • ajouter une colonne à chaque source avec son statut respectif ( "real" vs "plan" )
  • créer une union (c'est-à-dire "Append Queries as New")
  • ajouter une colonne Month = MONTH([Date])

En me donnant ces données :

sample unioned data

Mais c'est bizarre, car alors la visualisation de l'ICP inclura les données "Plan" soit au début, soit pire à la fin où elles seront tracées comme le nombre "actuel".

Le résultat attendu est une visualisation des indicateurs clés de performance :

  • montrant le nombre absolu de ventes additionnées par année (ou par mois, si mes slicers sont configurés de cette façon !)
  • avec le Target goals extraites des données du plan
  • avec une tendance basée sur les années précédentes (non incluses dans mes données d'échantillon)

Comment puis-je y parvenir ?

2voto

user5226582 Points 1415

La façon dont je le ferais :

  • Ajouter une colonne calculée aux deux real y targets tables :
    Month = Date(Actual[Date].[Year],Actual[Date].[MonthNo],1)
    Month = Date(Target[Date].[Year],Target[Date].[MonthNo],1)

  • Créer des liens entre ces

  • Plot SUM(RealData[Sales]) y Target[Sales] contre Target[Month]

enter image description here

enter image description here

enter image description here

enter image description here

2voto

Leonard Points 1898

Il y a plusieurs façons de joindre des tables comme celle-ci. Ce que vous avez, ce sont deux tables avec des granularités différentes : une table de ventes qui va jusqu'au jour, et une table de cibles qui va jusqu'au mois. C'est une demande courante de les modéliser l'une par rapport à l'autre, et cela se résume à avoir une table de consultation avec laquelle les deux tables de faits peuvent se joindre.

Ce que je recommanderais :

  1. Disposez d'un tableau de vos données réelles
  2. Disposez d'un tableau de vos données plan/cible, l'utilisation du dernier jour du mois est acceptable.
  3. Ne pas relier directement ces 2 tables de faits entre elles
  4. Il est préférable d'avoir une table de consultation des dates séparée, à laquelle les deux tables sont jointes. Cette dimension de date devrait, au minimum, avoir une colonne de mois et d'année (par exemple, mars 2017).
  5. Joignez les deux tables de faits à votre table de dates
  6. Cachez les champs de date dans vos 2 tables de faits, afin que vous ne soyez pas tenté de les utiliser dans les visuels (vous devez utiliser les champs de date de la table de consultation à la place).

Vous pouvez ensuite créer des mesures pour faire la SOMME de vos objectifs et de vos résultats. Puis des mesures supplémentaires pour soustraire ces deux mesures l'une de l'autre (ou diviser l'une par l'autre). Toutes ces mesures pourront ensuite être découpées par mois et année dans votre tableau de dates. (Vous pourriez aussi les découper par date, mais comme les objectifs sont assignés au dernier jour du mois, cette granularité sera moins qu'utile).

Il y a beaucoup de bonnes informations et d'exemples ici : http://www.daxpatterns.com/handling-different-granularities/

1voto

alejandro zuleta Points 11559

Vous devrez créer une mesure pour calculer le total réel et une mesure pour calculer le planifié pour chaque mois ou fin de mois. Créez ensuite une mesure pour comparer la différence entre le total planifié et le total réel.

Actual =
CALCULATE (
    SUM ( RealDate[Sales] ),
    FILTER (
        ALL ( RealDate ),
        MONTH ( [Date] ) = MONTH ( MAX ( EndOfMonthTargets[Date] ) )
            && YEAR ( [Date] ) = YEAR ( MAX ( EndOfMonthTargets[Date] ) )
    )
)

Planned = SUM(EndOfMonthTargets[Sales])

ActualVSPlanned = [Actual] - [Planned]

Maintenant, utilisez ces mesures et la date dans le tableau eEndOfMonthTargets pour construire une matrice :

enter image description here

Pour la mesure ActualVSPlanned, utilisez le formatage conditionnel comme suit :

enter image description here

Vous obtiendrez quelque chose comme ceci :

enter image description here

1voto

Eugene Points 786

Vous pouvez utiliser PowerQuery pour transformer les données.

Table "réelle" :

let
    Source = Table.FromRecords({[Date="16.01.2017", Sales = 1200], [Date="20.01.2017", Sales=1500], [Date="05.02.2017", Sales = 800], [Date="08.02.2017", Sales = 1100], [Date="13.02.2017", Sales = 300], [Date="10.01.2016", Sales = 1400], [Date="02.02.2016", Sales = 1800]}),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}, {"Sales", Int64.Type}})
in
    #"Changed Type"

Table "Plan" :

let
    Source = Table.FromRecords({[Date="31.01.2017", Sales = 3000], [Date="28.02.2017", Sales=2500], [Date="31.01.2016", Sales = 2800], [Date="29.02.2016", Sales = 2700]}),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}, {"Sales", Int64.Type}})
in
    #"Changed Type"

Votre requête pour obtenir des données, appelons-la GetData :

let
    t1 = Table.AddColumn(Real, "Source", each "Real"),
    t2 = Table.AddColumn(Plan, "Source", each "Plan"),
    MergedTable = Table.Combine({t1, t2}),
    AddYear = Table.AddColumn(MergedTable, "Year", each Date.Year([Date])),
    AddMonth = Table.AddColumn(AddYear, "Month", each Date.Month([Date])),
    Group = Table.Group(AddMonth, {"Year", "Month", "Source"}, {{"Sales", each List.Sum([Sales]), type number}})

in
    Group

Vous pouvez éviter d'utiliser la dernière étape en regroupant les résultats au niveau du rapport, mais cela aura pour conséquence que les utilisateurs pourront visualiser le montant de chaque vente. Si c'est le comportement attendu, il suffit de supprimer Group ou le remplacer par Table.RemoveColumn pour supprimer [Date].

Si vous avez besoin colonnes séparées pour les valeurs Plan et Real, puis pivot Source : colonne.

Il suffit ensuite d'utiliser la requête GetData dans le graphique à colonnes en grappes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X