2 votes

Axe des X avec l'année et aussi le mois et l'année pour les dates proches dans le même graphique

J'ai un ensemble de données qui contient des valeurs mensuelles sur de nombreuses années (regroupées par mois et autres attributs, donc il peut y avoir plusieurs enregistrements pour chaque mois, bien que je ne pense pas que cela importe pour le problème) :

       mois     val  ...   
1 2017-01-01 17.0700
2 2017-01-01 17.0700
3 2017-02-01  2.4432
.. .........   .....
4 2019-04-01 61.0800
5 2019-04-01 40.7200
6 2019-05-01 20.3600

Je peux visualiser correctement les données mensuelles dans un diagramme à barres (mois est reconnu comme une hiérarchie de date avec Année et Mois dans la sous-hiérarchie) par année/mois.

Le problème que j'ai est que parce que les données couvrent une longue période de temps, le graphique est grand et j'aimerais pouvoir réduire les données d'une année (par exemple 2017, 2018) à sa moyenne mensuelle. L'axe des x du graphique résultant serait : moy. 2017 - moy. 2018 - janv.2019 - fév. 2019 ... L'idée est de pouvoir passer d'une moyenne mensuelle annuelle aux valeurs mensuelles, bien que je ne sache pas si c'est possible?

J'ai réussi à obtenir la moyenne mensuelle des années avec la mesure suivante :

moy_mensuelle_an =
            AVERAGEX (
                SUMMARIZE ( données, données[mois] ),
                CALCULATE ( SUM ( données[val] )
            )   

Que je peux afficher dans un autre diagramme à barres (année sur l'axe).

2voto

Sid29 Points 1089

L'idée est - Pour ce faire, vous avez besoin d'une autre table dérivée de votre table existante contenant vos valeurs d'axe des x qui vont apparaître sur le graphique.

J'ai commencé avec des données comme ceci :-

Table 1

Données données

Donc, créons la colonne de l'axe (Colonne calculée) sur cette Table1 :-

AxisCol = 
       Var MaxYear = MAX((Table1[Date].[Année]))
       Var Année_Requise = YEAR(Table1[Date])
       Var Diff_Année = MaxYear - Année_Requise
       Var sortie = IF(Diff_Année = 0, FORMAT(FORMAT(Table1[Date], "MMM AA"),"chaine"), FORMAT(Année_Requise, "@"))
       Retourner (sortie)

Le type de données de cette AxisCol est "Texte".

Générer la colonne Mois Année et Année (Colonne calculée) dans la Table 1

Mois Année = FORMAT(Table1[Date], "MMM AA") 
Année = YEAR(Table1[Date]) 

Définissez également le type de données de ces deux colonnes en tant que "Texte".

Créer une nouvelle table :-

Table_Axe = DISTINCT(Table1[AxisCol]) 

Cela a maintenant créé la table déconnectée.

Maintenant, créez la Col_Date (Colonne calculée) pour trouver l'ordre de tri à l'intérieur de la Table_Axe.

Date_col = 
        Var Valeur_Requise = VALUE(Table_Axe[AxisCol])
        Var Année_ou_Mois_Année = SI(LEN(Valeur_Requise) = 4, "Année", "Mois Année")
        Var année_découpage = VALUE("20" & RIGHT(Table_Axe[AxisCol],2))
        Var mois_découpage = (LEFT(Table_Axe[AxisCol],3))
        Var num_mois = SWITCH(mois_découpage, "Jan", 1, "Fév", 2, "Mars", 3, "Avr"  
               , 4, "Mai", 5, "Juin", 6, "Juil", 7, "Août"  
               , 8, "Sep", 9, "Oct", 10, "Nov", 11, "Déc"  
               , 12)  
        Var maDate = SI(Année_ou_Mois_Année = "Année",DATE(Valeur_Requise,1,1),DATE(année_découpage, num_mois,1))
        Retourner maDate

Maintenant, vous pouvez créer l'Ordre de Tri (Colonne calculée) dans Table_Axe

Ordre_tri = DATEDIFF((Table_Axe[Date_col]),MAX(Table_Axe[Date_col]),MOIS)

Maintenant, la sortie finale en tant que Mesure,

ValeurDemandée = 
            var valeur_axe_requise = SELECTEDVALUE(Table_Axe[AxisCol])
            Var axe_requis = LEN(valeur_axe_requise)
            Var sortie1 = CALCULATE(MOYENNE(Table1[Valeur]), FILTER(Table1,Table1[Mois Année] = valeur_axe_requise))
            Var sortie2 = CALCULATE(MOYENNE(Table1[Valeur]),FILTER(Table1, Table1[Année] = valeur_axe_requise))
            var sortie_requise = SI(axe_requis = 4, sortie2, sortie1)
            retourner sortie_requise

Cette mesure peut être modifiée selon vos sélections de filtre et d'autres conditions que vous pourriez avoir.

La visualisation finale ressemble à ceci,

insérer la description de l'image ici

Utilisez l'Ordre de Tri dans les infobulles puis triez l'axe à l'intérieur de la visualisation par l'Ordre de Tri.

Vous pouvez ensuite créer une relation entre les tables sur la colonne d'axe pour que vos tranches fonctionnent.

insérer la description de l'image ici

insérer la description de l'image ici

Vous pouvez ensuite différencier l'axe avec une mise en forme conditionnelle en utilisant ceci -

mise en forme conditionnelle = SI(LEN(SELECTEDVALUE(Table_Axe[AxisCol])) = 4,1,0) 

insérer la description de l'image ici

Faites-moi savoir si vous avez du mal à comprendre la solution.

Acceptez la réponse si vous parvenez à la faire fonctionner pour vous.

0 votes

La mesure que je veux est le total par mois (et la moyenne mensuelle des années précédentes) donc la mesure devrait être comme ceci : ValueReq = ... Var output1 = CALCULATE(SUM(Table1[Value]); FILTER(Table1;Table[Month Year] = required_axis_val)) Var output2 = CALCULATE(SUM(Table1[Value])/12;FILTER(Table1; Table1[Year]= required_axis_val)) ...

0 votes

Le tri fonctionne parfaitement, j'avais juste une question car je ne comprends pas clairement comment est déterminé si une année est affichée en moyenne mensuelle ou entièrement affichée ? De plus, comment utiliser la mise en forme conditionnelle ?

0 votes

Pour être plus clair, dans AxisCol output, vous utilisez le yeardiff pour déterminer s'il doit être "MMM YY" ou "YYYY", mais comme spécifié dans la question, serait-il possible d'avoir un sélecteur dans le rapport où l'utilisateur pourrait choisir manuellement si les données doivent être regroupées par année ou non (c'est-à-dire que le filtre contiendrait dans ce cas 2017 2018 2019 et cocher ces cases ou non servirait de condition pour le output

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