Garder la répartition réelle d’un Top X en créant un groupe « Autres » dans un visuel
Prenons l’exemple du TOP 10 de nos produits par rapport à leurs ventes dans un graphique de type camembert.
Nous constatons ci-dessous que la répartition ne s’effectue que sur la totalité des ventes de ces 10 produits, bien que nous devrions prendre en compte la totalité des ventes, avec la création d’un regroupement « Autres » pour les produits exclus du TOP 10, afin d’en garder la visibilité des chiffres.
Graphique camenbert pour la répartition des produits Npremiers
Procédons donc par étapes pour obtenir ce visuel TOP 10 :
1 /Création d’une table Liste_Produits
Nous créons une table Liste_Produits sans doublon de nos produits que nous récupérons grâce à la formule DAX : VALUES() à laquelle nous ajouterons une ligne « Autres » créée par un DATATABLE() et regroupée par notre UNION().
Création d’une table Liste_Produits
Vous pouvez également la créer en M query directement, code ci-dessous. Vous récupérez uniquement la colonne de la table contenant les produits , insérez une ligne nommée « Autres » , supprimez les doublons et enfin les lignes vides.
let
Source = Csv.Document(File.Contents(Chemin_Dossier & « Liste_produits.csv »),[Delimiter= »; », Columns=187, Encoding=1252]),
# »En-tete promue » = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
# »Removed Other Columns » = Table.SelectColumns(# »En-tete promue »,{« ProductName »}),
# »Insert row Autres » = Table.InsertRows(# »Removed Other Columns »,1,{[ProductName= »Autres »]}),
# »Removed Duplicates » = Table.Distinct(# »Insert row Autres »),
# »Removed Blank Rows » = Table.SelectRows(# »Removed Duplicates », each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {« », null})))
in
# »Removed Blank Rows »
Une fois notre table créée, nous pouvons la relier dans le modèle par le champ du même nom en relation 1 à * en sens unique.
2 / Création d’un rang
Nous allons ensuite y créer un rang en fonction de la valeur des ventes de chaque produit (Mesure [CA] que vous aurez déjà créée auparavant pour les ventes)
Création d’un Rang_Produits
3 /Formule DAX
Pour finir, nous procédons avec une formule DAX en deux conditions :
– pour l’ensemble des produits dont le rang est inférieur ou égal à 10, de nous renvoyer le chiffre d’affaires [CA],
– sinon via un SELECTEDVALUE() sur notre liste de produits pointant en « Autres » d’itérer avec un SUMX() le [CA] de tous les produits de la liste dont le rang est au-dessus de 10.
Notez que sans itération, votre mesure ne sera pas capable de contrôler le rang de chaque ligne de produit.
En premier lieu, notre mesure itère ligne par ligne pour avoir en mémoire tous les produits de rang supérieurs à 10, puis effectue l’agrégation en second lieu.
Formule DAX en 2 conditions
4 / Utilisation graphique
Attention, cela ne marchera pas si vous utilisez le champs ProductName de la table initiale Produits.
Il faut que vous utilisiez le champs ProductName de la table liste que vous avez créée précédemment.
Il suffit maintenant de prendre notre dernière mesure Valeur_Top10+ et de l’utiliser en champs Valeurs du graphique.
Vous en voulez plus ?
Et pourquoi pas une sélection dynamique de notre Top 10 que nous appellerons Top X ?
Allez, nous vous mettons sur la voie :
- Un paramètre avec sélecteur de 1 à 15 vous permettant de choisir la valeur de votre Top N
- Une légère modification de votre mesure Valeur_Top10+ par un remplacement dynamique du Top précédemment figé en dur (Cf notre valeur « 10 »)
Encore plus ?! 😉