3.1CALCULATE, contexte de filtre & variables (VAR)
Voici le chapitre qui sépare l'utilisateur du praticien DAX. Tout calcul s'évalue dans un contexte de filtre : la cellule d'une matrice « Paris × Janvier » calcule [Total CA] filtré sur Paris ET janvier — sans que vous n'ayez rien écrit. CALCULATE est l'outil qui MODIFIE ce contexte : ajouter un filtre, en écraser un (la part du total), en retirer (ALL).
Vous apprendrez à lire le contexte d'une cellule de visuel, à manier CALCULATE avec ALL pour les pourcentages du total, et à structurer vos formules avec les variables VAR/RETURN — lisibilité et performance. C'est dense, c'est le cœur du réacteur : prenez le temps de l'exercice.
Vocabulaire de la section
- Contexte de filtre
- L'ensemble des filtres actifs sur une cellule de visuel (axes, légendes, segments, filtres) : chaque cellule a le sien.
- CALCULATE
- Évalue une expression dans un contexte modifié : CALCULATE([CA]; Ventes[Ville]="Paris") ajoute/écrase le filtre Ville.
- ALL
- Retire des filtres : ALL(Ventes[Ville]) ignore le filtre ville — la clé des « % du total » : DIVIDE([CA]; CALCULATE([CA]; ALL(Ventes[Ville]))).
- VAR / RETURN
- Les variables DAX : VAR TotalGlobal = … RETURN … — formules lisibles, calculs non répétés, débogage facilité.
- Transition de contexte
- Le mécanisme (avancé) par lequel CALCULATE transforme un contexte de ligne en contexte de filtre — à connaître de nom, à creuser avec SQLBI.
Que fait la fonction CALCULATE ?
En pratique — Le « % du total » décortiqué
- Créez une matrice Ville × [Total CA] et LISEZ chaque cellule en énonçant son contexte : « cette cellule = CA filtré sur Lyon ».
- Écrivez : CA Toutes villes = CALCULATE([Total CA]; ALL(Ventes[Ville])) — ajoutez-la à la matrice : la même valeur partout (le filtre ville est retiré).
- Assemblez avec variables : Part ville = VAR Total = CALCULATE([Total CA]; ALL(Ventes[Ville])) RETURN DIVIDE([Total CA]; Total) — formatée en %.
- Testez avec un segment Commercial actif : la part se recalcule DANS le périmètre du segment — relisez la formule jusqu'à pouvoir expliquer pourquoi.
Points clés à retenir
- Chaque cellule de visuel a son contexte de filtre : lisez-le à voix haute pour comprendre un résultat.
- CALCULATE ajoute/écrase des filtres ; ALL en retire : les deux gestes couvrent l'essentiel des besoins.
- VAR/RETURN systématiques dès qu'une formule dépasse une ligne : lisibilité ET performance.
- Un résultat DAX « bizarre » = un contexte mal compris : le diagnostic commence toujours là.
Questions fréquentes
ALL, ALLSELECTED, ALLEXCEPT : comment s'y retrouver ?
ALL retire tout filtre sur la cible ; ALLSELECTED respecte les sélections externes (segments) ; ALLEXCEPT retire tout SAUF les colonnes citées. Commencez par ALL, ajoutez ALLSELECTED quand le % doit suivre les segments — les cas fins viendront avec la pratique.
Pourquoi mes mesures donnent-elles juste en matrice mais faux en total ?
La ligne Total a un contexte plus large (aucun filtre ville) : une mesure mal construite (moyenne de ratios, par ex.) s'y dégrade. Solution habituelle : recalculer par itération (SUMX) — abordé avec la pratique, documenté chez SQLBI.