[Langage DAX] Comprendre les contextes d’évaluation implicite et explicite

Publié le 01 décembre 2020
par Sophie Marchand M.Sc.
Ventes dans une matrice Power BI

La notion la plus complexe à maîtriser au niveau de l’élaboration de rapports et de tableaux de bord avec Power BI est sans aucun doute la maîtrise du langage DAX. Mais c’est aussi cette maîtrise qui vous permettra de créer les rapports et les tableaux de bord les plus efficaces. Alors, ne vous laissez surtout pas décourager par vos premiers efforts. Une fois que vous aurez bien sais les concepts de contextes d’évaluation implicite et explicite, vous verrez les portes de ce langage s’ouvrir devant vous. Cet article vise à vous permettre d’ouvrir ces portes.

 

Qu’entend-on par contextes d’évaluation en langage DAX?

En langage DAX, on parle de contextes d’évaluation implicite et explicite. Il est bien important de comprendre ces deux types de contextes afin d’être en mesure de composer des formules efficaces, qui produisent les résultants escomptés dans nos visualisations.

 

Chaque expression DAX est donc évaluée selon un contexte :

 

  • Contexte d’évaluation implicite
    • Contextes de filtres (introduit par les filtres du rapport)

 

  • Contexte d’évaluation explicite
    • Contexte de filtres (introduit par le langage DAX)
    • Contexte de lignes (introduit par le langage DAX)

 

Contexte d’évaluation implicite en langage DAX

Le contexte d’évaluation implicite comprend tous les filtres qui sont apposés au modèle de données, avant de faire l’évaluation de l’expression. L’expression demeure la même mais elle est adaptée au contexte de filtres et produit donc des résultats différents.

 

Lorsqu’on parle de filtres, on peut penser aux dimensions utilisées dans les lignes et les colonnes d’un tableau croisé dynamique dans Excel ou d’une matrice dans Power BI, ainsi qu’aux filtres et aux segments. Chacune des cellules est évaluée à la croisée de ces lignes, colonnes, filtres et segments, selon son expression de base.

 

Par exemple, ci-dessous, la matrice n’utilise qu’une seule mesure, sur la mesure Ventes$ = SUM(Ventes[Ventes]). Cette mesure est évaluée pour chaque croisement de catégorie (dimension placée en ligne) et de numéro de canal (dimension placée en colonne), afin de produire les résultats de ventes pour chaque combinaison de catégorie et de canal.

 

Ventes dans une matrice Power BI

 

Vous devez analyser de grandes quantités de données et les présenter dans des rapports et tableaux de bord, avec des indicateurs de performance pertinents ? Développez vos compétences avec nos formations en Power BI.

Formations Power BI disponibles en anglais

 

Contexte d’évaluation explicite en langage DAX

Le contexte d’évaluation explicite est introduit par l’utilisation de fonctions DAX et se décompose en deux, soit les contextes de filtres et les contextes de lignes.

 

Contexte de filtres explicite

En plus du contexte de filtres implicite, qui existe toujours pour toute expression DAX, il pourrait également exister un contexte de filtres explicite, introduit par une fonction DAX. D’abord, précisons qu’un contexte de filtres définit un ensemble de lignes actives dans un modèle de données pour effectuer un calcul.

 

On retrouve 3 types de fonctions DAX qui agissent explicitement sur le contexte de filtres, soit des fonctions qui

  • Modifient le contexte de filtres implicite
  • Filtrent davantage le modèle de données
  • Ignorent le contexte de filtres implicite

 

Le contexte de filtres explicites illustré

Voici 3 exemples de fonctions DAX qui illustrent les 3 types de fonctions présentées ci-dessus.

 

Filtres explicites en langage DAX

 

Nous allons étudier leurs comportements à partir d’un modèle dont les ventes par canal et par catégorie (sans aucun autre filtre) se présentent comme suit :

Ventes dans une matrice Power BI

 

La fonction CALCULATE avec un filtre naturel comme paramètre de filtre

Filtre Naturel = CALCULATE([Ventes$],DimCanaux[# canal]=1)

 

Ci-dessous, on voit que le filtre de la fonction CALCULATE remplace le contexte de filtres implicite du rapport. C’est ce qui fait en sorte que l’on voit toujours les ventes du canal 1 dans les colonnes du canal 2 et du canal 3. En effet, les filtres de canaux placés en colonnes (filtres implicites du rapport) sont ici REMPLACÉS par le filtre de canal 1 (filtre explicite de la fonction CALCULATE).

 

 

La fonction  CALCULATE avec une fonction FILTER comme paramètre de filtre

Fonction FILTER = CALCULATE([Ventes$],FILTER(DimCanaux,DimCanaux[# canal]=1))

 

Ci-dessous, on voit que le filtre de la fonction CALCULATE filtre davantage le modèle de données mais n’efface pas les filtres implicites. Autrement dit, avant de considérer les filtres implicites du rapport, la fonction FILTER réduit ici le nombre de lignes du modèles de données, qui ne comprend plus maintenant que les lignes associées au canal #1. Par la suite, quand on demande de présenter les ventes des canaux 1 et 2, on n’obtient donc plus aucune valeur.

 

Fonction DAX Filter

 

La fonction CALCULATE avec une fonction ALL comme paramètre de filtre

Fonction ALL = CALCULATE([Ventes$],ALL(DimCanaux))

 

Ci-dessous, on voit que le filtre de la fonction CALCULATE ignore le contexte de filtres implicite du rapport. C’est ce qui fait en sorte que l’on voit toujours les ventes du total des 3 canaux, peu importe les filtres implicites dans les colonnes.

 

Fonction DAX ALL

 

La fonction CALCULATE avec une fonction FILTER(ALL) comme paramètre de filtre

Fonction FILTER ALL = CALCULATE([Ventes$],FILTER(ALL(DimCanaux),DimCanaux[# canal]=1))

 

Ci-dessous, on voit que le filtre de la fonction CALCULATE filtre d’abord les lignes du modèle de données, pour ne retenir que les données du canal 1 et ignore le contexte de filtres implicite.

 

Fonction DAX FILTER(ALL)

 

Contexte de lignes explicite

Dès que l’expression DAX peut être évaluée par une colonne calculée, il y a un contexte de lignes. La formule est alors calculée pour toutes les lignes de la table, sans que l’on doive mentionner sur quelle ligne aller chercher les données.

 

Contexte de filtres vs contexte de lignes explicite

Pour illustrer simplement la différence entre un contexte de filtres et un contexte de ligne explicite, on peut utiliser un exemple de fonction de somme, en opposant les fonctions suivantes :

 

  • Contexte de filtres : Fonction d’agrégation: SUM(Ventes [Ventes])
    • fait la somme de la colonne ventes et pose ensuite un filtre sur le résultat, selon le contexte

 

  • Contexte de lignes : Fonction itérative: SUMX(Ventes, Ventes[Ventes])
    • fait une itération pour chacune des lignes, dans la table spécifiée et enregistre le tout en mémoire dans une colonne “temporaire et invisible”… et à la toute fin, fait la somme de toutes les lignes de cette colonne et pose un filtre sur le résultat, selon le contexte

 

Les deux fonctions rapportent le même résultat si on regarde les ventes par une dimension quelconque, mais la procédure de calcul est différente.

 

Pour un article détaillé sur le sujet, je vous suggère de lire La fonction SUMX en renfort (erreur courante chez les débutants).

 

Fichier d’accompagnement VIP à télécharger

Pour télécharger le fichier utilisé dans ce tutoriel, devenez membre VIP du CFO masqué.

 

Formation complémentaire

Afin d’approfondir vos compétences en langage DAX, nous vous recommandons notre formation Introduction au langage DAX.

Voici quelques commentaires d’apprenants ayant suivi cette formation :

Le-CFO-masque_Commentaires-Introduction-langage-DAX

CFO-Masque_Formations-en-ligne_FBLa mission du CFO masqué est de développer les compétences techniques des analystes et des contrôleurs de gestion en informatique décisionnelle avec Excel et Power BI et favoriser l’atteinte de leur plein potentiel, en stimulant leur autonomie, leur curiosité, leur raisonnement logique, leur esprit critique et leur créativité.

1 réflexion sur “[Langage DAX] Comprendre les contextes d’évaluation implicite et explicite”

Laisser un commentaire

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

Retour en haut