Mise en forme conditionnelle dynamique & DAX

Cet article est une adaptation de l’article « Dynamic Conditional Formatting for Values and Totals in a Power BI Matrix »  de Parker Stevens (BIElite).

La mise à jour d’avril 2020 de Power BI nous permet maintenant d’appliquer des mises en forme conditionnelles sur les totaux et sous-totaux dans les Tables et Matrices.

Dans cette article, je partage avec vous une petite astuce qui permettra à vos utilisateurs finaux d’appliquer de manière dynamique une mise en forme conditionnelle aux Valeurs, aux Totaux (et sous-totaux) ou les deux. Comme ci-dessous :

 

Pour commencer, il faut créer une table déconnectée en cliquant sur le bouton « Entrer des données »  puis entrer les valeurs suivantes :


(*MeF pour Mise en Forme)

La colonne Index est facultative. Elle pourra servir à trier les valeurs de la colonne Sélection autrement que par ordre alphabétique.

Ensuite, nous ajoutons sur le canvas un Segment (Slicer) avec pour valeur la colonne ‘MeF Conditionnelle'[Sélection]  :

On s’assurera également d’activer la sélection simple dans le panneau Format. Cela obligera l’utilisateur à ne sélectionner qu’une et une seule valeur dans le slicer.

Ce qui donnera un slicer qui ressemblera à ça :

Puis nous ajoutons sur le canvas une Matrice. Pour cette exemple, voici la configuration de la matrice :

* [Total Profits] est une mesure.

Ce qui donne une matrice qui ressemble à ça :

Puis là intervient la séquence DAX… Nous créons une mesure [Mesure de MeF Conditionnelle] avec la formule suivante :

Mesure de MeF Conditionnelle = 
VAR SelectionMeF = SELECTEDVALUE( 'MeF Conditionnelle'[Sélection]; "Aucune" )
VAR ProfitMoyen =
IF(
    ISINSCOPE( Dates[Year] );
    AVERAGEX( ALLSELECTED( Dates[Year] ); [Total Profits] );
    AVERAGEX( ALLSELECTED( Products[Product Name] ); [Total Profits] )
)
RETURN
SWITCH(
    TRUE();
    SelectionMeF = "Valeurs" && ISINSCOPE( Dates[Year] ) && [Total Profits] >= ProfitMoyen;
    "#228B22";
    SelectionMeF = "Valeurs" && ISINSCOPE( Dates[Year] ) && [Total Profits] < ProfitMoyen;
    "#ff0000";
    SelectionMeF = "Totaux" && NOT ( ISINSCOPE( Dates[Year] ) ) && [Total Profits] >= ProfitMoyen;
    "#228B22";
    SelectionMeF = "Totaux" && NOT ( ISINSCOPE( Dates[Year] ) ) && [Total Profits] < ProfitMoyen;
    "#ff0000";
    SelectionMeF = "Valeurs + Totaux" && [Total Profits] >= ProfitMoyen;
    "#228B22";
    SelectionMeF = "Valeurs + Totaux" && [Total Profits] < ProfitMoyen;
    "#ff0000";
    "#000000"
)

Cette mesure définit d’abord deux variables :

  • VAR SelectionMeF : Grâce à la fonction SELECTEDVALUE, cette variable permet d’identifier quelle valeur du slicer est sélectionnée par l’utilisateur
  • VAR ProfitMoyen : Calcul du profit moyen par année et du profit moyen par produit avec AVERAGEX.  La combinaison IF & ISINSCOPE( Dates[Year] ) permettra de retourner le profit moyen par année pour les cellules correspondant aux années, et le profit moyen par produit pour les autres cellule.

La combinaison SWITCH & TRUE() est comme une formule multi-conditionnelle. Voyez ça un peu comme un enchainement formule SI (IF).
On peut lire la première condition comme suit : Si la valeur sélectionnée du slicer égale « Valeur », et s’il s’agit d’une cellule sur la ligne année (Dates[Year]), et si le Profit [Total Profits] de cette cellule est supérieur au profit moyen par année, alors appliquer la couleur verte (code HEX : #228B22) à cette cellule.

Enfin, il ne restera plus qu’a appliquer la mise en forme conditionnelle dans le champs Valeurs de la Matrice sur la mesure [Total Profits] :

Etape 1

Etape 2

Etape 3 – Voilà le résultat 😀

 

Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *