CALCULATE |
Calcule |
| DAX (Data Analysis Expressions) |
Syntaxe
|
CALCULATE(expression[, filter1 [, filter2 [, ...]]])
|
Paramètres
| Nom |
Description |
| expression |
Ce paramètre permet de spécifier l'expression DAX à évaluer, généralement une mesure ou une agrégation (comme SUM, AVERAGE, COUNT,...). |
| filter1, filter2, ... |
Ce paramètre permet de définir un ou plusieurs filtres à appliquer ou à modifier dans le contexte d'évaluation de l'expression. Ces filtres peuvent être des expressions booléennes, des fonctions de filtrage (comme FILTER, ALL, KEEPFILTERS), ou des conditions directes sur des colonnes. |
Description
Cette fonction permet d'évaluer une expression dans un contexte de filtre modifié.
Remarques
- CALCULATE modifie le contexte de filtre, pas seulement l'évalue : La particularité principale de CALCULATE() est qu'elle change le contexte de filtre avant
d'exécuter l'expression. Contrairement à une simple agrégation, elle réécrit potentiellement l'environnement dans lequel la mesure est calculée. Ce comportement en fait
l'outil principal du langage DAX pour manipuler la logique analytique et construire des KPIs dynamiques.
- Elle convertit le contexte de ligne en contexte de filtre : Lorsqu'elle est utilisée dans une colonne calculée ou dans une expression itérative, CALCULATE
transforme le contexte de ligne en contexte de filtre. Ce mécanisme appelé context transition est à la base de nombreuses logiques de mesures, notamment quand une
mesure est calculée au niveau d'un détail ligne. Cette transition de contexte explique pourquoi CALCULATE est souvent utilisée implicitement dans les mesures.
- Les filtres appliqués peuvent remplacer ou compléter le contexte existant : CALCULATE peut ajouter de nouveaux filtres, mais aussi en effacer certains. Par
exemple, utiliser ALL(Table) supprime tous les filtres d'une table et permet de calculer une somme globale indépendamment du segment analysé. À l'inverse,
KEEPFILTERS() ou des conditions booléennes ajoutent des contraintes supplémentaires au contexte courant sans le détruire.
- L'ordre d'application des filtres est important : Dans une expression CALCULATE, les filtres sont appliqués dans l'ordre où ils apparaissent. Les filtres
placés plus tard peuvent écraser ceux appliqués avant, particulièrement si l'on utilise des fonctions comme ALL, REMOVEFILTERS,
ou CROSSFILTER. La lisibilité du code devient alors essentielle, car un filtre ambigu peut produire des résultats incompréhensibles.
- CALCULATE ne se contente pas de filtrer : elle redéfinit la logique du calcul : CALCULATE permet d'écrire des formules répondant à des questions comme :
"quelle serait ma somme si tel filtre n'existait pas ?". Ce n'est pas seulement une réévaluation dans un sous-ensemble de données, mais une modification du sens logique du
calcul. Par exemple, calculer un total hors contexte segmenté permet de produire des pourcentages globaux, des ratios et des indicateurs comparatifs.
- Les filtres peuvent être implicites ou explicites : Un filtre direct, tel que Sales[Year] = 2022, agit comme condition booléenne et impose une contrainte
simple. Mais les filtres peuvent aussi provenir de fonctions comme FILTER, CALCULATETABLE, VALUES,
ou TREATAS, permettant de créer des segments complexes basés sur des conditions multi-colonnes. Cela transforme CALCULATE en un moteur de requête
programmable à l'intérieur de DAX.
- CALCULATE est la base des mesures dynamiques temporelles : Toutes les fonctions d'intelligence temporelle (DATEADD,
PREVIOUSYEAR, SAMEPERIODLASTYEAR,...) reposent sur CALCULATE pour réécrire le contexte de date. Elles ne
se contentent pas de naviguer dans le calendrier : elles appliquent un contexte déplacé puis recalculent l'expression. Sans CALCULATE, ces fonctions ne pourraient pas
modifier le cadre temporel du calcul.
- Très sensible au modèle de données : CALCULATE fonctionne en s'appuyant sur les relations du modèle : direction des jointures, cardinalité, hiérarchies et
tables de faits vs tables de dimensions. Un même CALCULATE appliqué sur un modèle mal conceptualisé produira des résultats incohérents, voire vides. Il demande donc une
compréhension profonde des relations, beaucoup plus que les fonctions purement arithmétiques ou statistiques.
Dernière mise à jour : Vendredi, le 30 Mai 2025