Power BI : maîtriser le DAX avancé avec la fonction CALCULATE

Sommaire

La donnée est aujourd’hui au cœur des décisions stratégiques. Les entreprises multiplient les sources d’information, centralisent leurs indicateurs et s’appuient sur des outils comme Power BI pour piloter leur performance en temps réel. Dans cet écosystème, le langage DAX joue un rôle clé : c’est lui qui transforme des données brutes en analyses exploitables.

Tant que les besoins restent simples, les fonctions de base suffisent. Mais dès qu’il s’agit de calculs cumulés, d’analyses temporelles, de comparaisons dynamiques ou de segmentation avancée, les limites apparaissent. Sans une réelle maîtrise du DAX avancé, les modèles deviennent complexes, les rapports s’alourdissent et les calculs perdent en précision.

C’est précisément là qu’intervient la compréhension des contextes d’évaluation et de fonctions comme CALCULATE, véritable pivot des analyses avancées.

Dans ce guide, vous découvrirez comment exploiter pleinement le potentiel du DAX avancé pour construire des mesures robustes, dynamiques et adaptées aux enjeux métier actuels.

Comprendre les contextes d’évaluation : le fondement du DAX avancé

Avant d’explorer la fonction CALCULATE et les fonctions avancées, un concept fondamental doit être parfaitement assimilé : le contexte d’évaluation. C’est la différence entre un utilisateur intermédiaire et un expert DAX.

Pourquoi une formule donne-t-elle un résultat différent selon le visuel où elle apparaît ? La réponse tient au contexte dans lequel Power BI évalue cette formule.

Il existe deux types de contextes qui cohabitent en DAX :

Le Contexte de Ligne (Row Context) : Power BI parcourt votre table ligne par ligne, comme si vous lisiez un document avec une loupe. Ce contexte s’active lors de la création d’une colonne calculée ou lors de l’utilisation de fonctions itératives.

Le Contexte de Filtre (Filter Context) : Il représente l’ensemble des filtres actifs à un instant donné (slicers, sélections dans un graphique, filtres de page). Ces filtres restreignent les données visibles avant même que le calcul ne commence.

💡 Conseil DDP : le piège le plus fréquent consiste à penser que le contexte de ligne filtre automatiquement vos données liées. Ce n’est pas le cas. Pour activer les relations entre vos tables dans un calcul, vous devez utiliser la fonction CALCULATE. Sans elle, Power BI ne “traverse” pas les relations du modèle.

Image1

Image 1 bis (calculs)

Étape 1 : Maîtriser CALCULATE, la fonction centrale du DAX avancé

CALCULATE est sans conteste la fonction la plus puissante du DAX. Si vous ne deviez retenir qu’une seule fonction avancée, ce serait celle-ci.

Elle permet de dire à Power BI : “Calcule-moi cette mesure, MAIS modifie d’abord le contexte de filtre selon mes instructions.”

Syntaxe :

CALCULATE(<Expression>, <Filtre1>, <Filtre2>…)

La puissance de CALCULATE réside dans sa capacité à :

  • Ajouter des filtres supplémentaires
  • Modifier des filtres existants
  • Supprimer des filtres en cours

Combinée avec les fonctions de table, CALCULATE devient l’outil central de toute analyse avancée. C’est la clé qui ouvre la porte aux calculs complexes.

💡Conseil DDP : CALCULATE est votre meilleur allié pour les calculs comparatifs (N vs N-1), les pourcentages du total, ou les analyses par segment. Prenez le temps de comprendre comment elle manipule les contextes de filtre avant d’aller plus loin.

Étape 2 : Contrôler les filtres avec ALL, ALLEXCEPT et ALLSELECTED

Les fonctions de table retournent des tables qui servent de modificateurs de filtre dans CALCULATE. Leur maîtrise est indispensable pour créer des calculs sophistiqués.

ALL : supprimer tous les filtres

ALL(Table/Colonne) supprime tous les filtres actifs sur la table ou la colonne visée. C’est la fonction standard pour calculer un “Grand Total” qui reste constant, quels que soient les filtres appliqués par l’utilisateur.

ALLEXCEPT : conserver certains filtres

ALLEXCEPT (Table, Colonne1, Colonne2) supprime tous les filtres sauf ceux des colonnes spécifiées. Parfait pour des calculs de sous-totaux où vous voulez garder un niveau d’agrégation spécifique.

ALLSELECTED : respecter les filtres externes

ALLSELECTED() : retire les filtres du visuel (contexte local) mais respecte les filtres externes (slicers, filtres de page). Essentiel pour des pourcentages relatifs à la sélection

Exemple de calcul de pourcentage du total
Exemple de calcul de pourcentage du total

Étape 3 : Affiner les sélections avec FILTER et KEEPFILTERS

Parfois, il vous faut filtrer sur une condition complexe qui ne peut pas s’exprimer simplement (par exemple : Prix > 100€ ET Stock < 50).

FILTER : itérer pour filtrer

FILTER permet d’itérer sur une table pour vérifier une condition ligne par ligne. Contrairement à un filtre simple, il gère des expressions complexes

KEEPFILTERS : ajouter sans remplacer

Par défaut, CALCULATE remplace un filtre existant. KEEPFILTERS force l’intersection : il ajoute votre critère sans écraser celui de l’utilisateur.

Image3
Sans filtre sur la feuille
Image4
Avec un filtre

Formule :

Image5Image6

 

Étape 4 : Exploiter les valeurs uniques avec VALUES et DISTINCT

VALUES et DISTINCT retournent les valeurs uniques d’une colonne dans le contexte actuel. La différence est subtile mais importante.

VALUES inclut la “ligne vide” (blank row) qui apparaît lorsque l’intégrité référentielle est brisée (par exemple, une vente sans produit associé).

DISTINCT ignore cette ligne vide et retourne uniquement les valeurs réellement présentes.

Exemple d’utilisation :

Nombre de Produits = COUNTROWS(VALUES(‘Produits'[Nom]))

Cette mesure compte le nombre de produits uniques visibles dans le contexte actuel, en tenant compte des filtres appliqués.

💡Conseil DDP : Dans la plupart des cas, VALUES et DISTINCT donnent le même résultat. Utilisez VALUES par défaut, sauf si vous devez absolument ignorer les lignes vides dans un modèle où l’intégrité référentielle n’est pas garantie.

Étape 5 : maîtriser l’analyse temporelle avec Time Intelligence

L’analyse temporelle est au cœur du pilotage d’entreprise. Comparer N vs N-1 ou suivre le cumul annuel (YTD) ne devrait pas être une source de difficultés.

Les fondamentaux : DATEADD et SAMEPERIODLASTYEAR

DATEADD décale une période dans le temps selon un intervalle spécifié (jour, mois, trimestre, année). SAMEPERIODLASTYEAR est un raccourci pour DATEADD avec un décalage d’un an.

Image7

Calculs cumulés : DATESYTD, TOTALYTD et variantes

Les fonctions YTD (Year-To-Date), QTD (Quarter-To-Date) et MTD (Month-To-Date) calculent des cumuls depuis le début de la période.

Image8

Pour les exercices fiscaux décalés, un troisième paramètre permet de spécifier la date de fin d’exercice, exemple pour un exercice se terminant au 30 juin :

Image9

Calculs glissants : moyennes mobiles

Les moyennes mobiles et autres calculs sur périodes glissantes nécessitent une combinaison de CALCULATE avec DATESINPERIOD ou une construction manuelle.

Image10

Attention à l’architecture : Ces fonctions nécessitent impérativement une Table de Dates dédiée et marquée comme table de dates dans votre modèle. Sans cela, les résultats peuvent être erronés ou incomplets.

Image11

💡 Conseil DDP : Créez systématiquement une table calendrier complète (avec jours, semaines, mois, trimestres, années) et marquez-la comme table de dates dans Power BI. C’est la fondation de toute analyse temporelle fiable.

Étape 6 : Exploiter la puissance des fonctions itératives

Les fonctions itératives (ou fonctions X) parcourent chaque ligne d’une table pour effectuer un calcul, puis agrègent les résultats. Elles offrent une grande flexibilité pour des calculs ligne à ligne.

Parfois, “la moyenne des totaux” n’est pas égale au “total des moyennes”. C’est là qu’interviennent les fonctions en “X”.

Contrairement à un SUM classique qui additionne une colonne d’un coup, SUMX parcourt votre table ligne par ligne, effectue un calcul complexe sur chaque ligne, puis additionne les résultats.

Il existe un équivalent itératif pour presque chaque fonction d’agrégation standard :

  • Agrégations classiques : SUMX, AVERAGEX, MINX, MAXX, COUNTX
  • Statistiques : MEDIANX, PERCENTILEX.EXC, STDEVX.P, VARX.P
  • Texte : CONCATENATEX (très utile pour joindre des textes, comme une liste de produits vendus)
  • Autres : RANKX (pour les classements), PRODUCTX

L’exemple typique : La Marge
Si vous calculez la marge globale, vous devez le faire transaction par transaction pour être précis :

Image12

Image13

Image14

💡 Conseil DDP : les fonctions itératives sont puissantes mais peuvent ralentir vos rapports si elles itèrent sur des millions de lignes. Utilisez-les uniquement quand un calcul ligne par ligne est réellement nécessaire. Pour les agrégations simples, préférez les fonctions standard (SUM, AVERAGE, etc.).

Récapitulatif des fonctions DAX avancées

Récapitulatif des fonctions DAX avancées

Récapitulatif des fonctions DAX avancées

Transformez vos rapports Power BI en leviers décisionnels

Maîtriser le DAX avancé transforme radicalement la valeur de vos analyses. La compréhension des contextes d’évaluation, la maîtrise de CALCULATE et des fonctions de table, l’utilisation des calculs temporels et l’exploitation des fonctions itératives constituent les piliers d’une expertise DAX solide.

Ces compétences vous permettent de passer de la simple observation à l’explication des phénomènes. Vos tableaux de bord ne se contentent plus d’afficher des chiffres : ils répondent aux questions stratégiques de vos décideurs avec précision et pertinence.

Cependant, la frontière entre un rapport performant et une structure difficile à maintenir est parfois fine. Un modèle mal optimisé, des calculs redondants ou des relations mal configurées peuvent rapidement dégrader les performances et compliquer les évolutions futures.

Chez DDP Decision, nous accompagnons les entreprises dans la mise en œuvre de solutions Power BI robustes et évolutives. Que ce soit pour former vos équipes au DAX, auditer vos modèles existants ou structurer vos architectures de données, nos experts transforment vos données en avantages compétitifs concrets.

Partager cet article
Retour en haut