Aller au contenu
Power Platform Hub Parler à un expertUn expert

Power BI

Les 10 formules DAX essentielles à maîtriser en Power BI

Cumul annuel, part du total, comparaison avec l’an dernier : les 10 formules DAX qui répondent aux vraies questions d’une direction, avec un exemple complet pour chacune.

Les 10 formules DAX à connaître en premier sont CALCULATE, SUM et SUMX, FILTER, RELATED et RELATEDTABLE, ALL, IF, DATESYTD, DIVIDE, DISTINCTCOUNT et SWITCH. DAX est le langage de calcul de Power BI : il répond aux questions que les graphiques de base ne traitent pas, comme un cumul depuis janvier, une comparaison avec l’an dernier ou la part de chaque produit dans le total. Chaque formule est montrée ci-dessous avec un exemple complet, à adapter à vos tables.

À quoi servent ces formules dans une entreprise

Prenons une situation type. Un directeur financier ouvre le tableau de bord du mois et se pose trois questions : où en sommes-nous depuis janvier, est-ce mieux que l’an dernier, et quelle gamme pèse le plus ? Aucune de ces réponses ne se trouve telle quelle dans le fichier de ventes. Il faut les calculer.

Sans DAX, quelqu’un refait ces calculs dans Excel chaque mois. Avec DAX, ils sont écrits une fois, et le résultat s’adapte tout seul quand le lecteur filtre sur une région ou un mois. C’est ce qui sépare un rapport qui montre des données d’un rapport qui répond à une question.

Formule La question à laquelle elle répond
CALCULATE Combien de ventes pour la France seule ?
SUM, SUMX Quel est le chiffre d’affaires total ?
FILTER Combien réalisent les clients qui dépassent 10 000 € ?
RELATED, RELATEDTABLE À quelle catégorie appartient ce produit vendu ?
ALL Quelle part du total représente cette gamme ?
IF Ce client est-il un gros, un moyen ou un petit compte ?
DATESYTD Où en sommes-nous depuis le début de l’année ?
DIVIDE Quel est le taux de marge, même sans ventes ce mois-ci ?
DISTINCTCOUNT Combien de clients différents ont acheté ?
SWITCH Dans quelle région classer ce département ?

Avant de commencer : où écrire une formule

Dans Power BI Desktop, sélectionnez une table dans le volet de droite, puis Nouvelle mesure dans le ruban. Une mesure est un calcul qui s’adapte aux filtres du visuel où elle s’affiche. La plupart des exemples ci-dessous sont des mesures. Le guide pour créer des mesures DAX avancées approfondit le sujet.

Les exemples utilisent une table Ventes, reliée aux tables Produits, Clients et Calendrier, et la mesure [Ventes totales] définie à la formule 2. Ils sont écrits avec la virgule comme séparateur. Dans une interface en français, le séparateur devient le point-virgule (;) selon la langue ou les réglages régionaux : si Power BI refuse une formule copiée, c’est la première chose à vérifier.

Les 10 formules DAX, une par une

1. CALCULATE : changer le périmètre d’un calcul

CALCULATE évalue un calcul dans un contexte de filtre que vous modifiez. Le contexte de filtre, c’est l’ensemble des filtres actifs à l’endroit où la mesure s’affiche : le mois de la ligne, la région du segment, et ainsi de suite. C’est la fonction qui revient le plus dès que les calculs se compliquent.

Ventes France = CALCULATE([Ventes totales], Clients[Pays] = "France")

Cette mesure affiche les ventes de la France, même si le visuel est découpé par pays : le filtre écrit dans la formule remplace celui du visuel sur la même colonne. Vous pouvez en ajouter plusieurs, ils se cumulent.

Accessoires France = CALCULATE([Ventes totales], Clients[Pays] = "France", Produits[Catégorie] = "Accessoires")

2. SUM et SUMX : additionner une colonne ou un calcul

SUM additionne une colonne existante. C’est la base de presque tous les rapports, et la colonne doit être écrite avec le nom de sa table.

Ventes totales = SUM(Ventes[Montant])

Si le montant n’existe pas dans vos données et qu’il faut multiplier une quantité par un prix, SUM ne suffit plus. SUMX parcourt la table ligne par ligne, fait le calcul sur chacune, puis additionne les résultats.

Ventes calculées = SUMX(Ventes, Ventes[Quantité] * Ventes[PrixUnitaire])

Réservez SUMX aux cas où il est nécessaire : sur des millions de lignes, une colonne déjà calculée à la source reste plus rapide.

3. FILTER : garder les lignes qui répondent à une condition

FILTER renvoie une table réduite aux lignes qui respectent une condition. On l’utilise le plus souvent à l’intérieur de CALCULATE, quand un filtre simple ne suffit pas, par exemple quand la condition porte sur une mesure.

Ventes grands clients =
CALCULATE(
    [Ventes totales],
    FILTER(VALUES(Clients[Client]), [Ventes totales] > 10000)
)

Ici, VALUES donne la liste des clients visibles, et FILTER ne garde que ceux dont les ventes dépassent 10 000. On peut aussi l’employer seul, dans une autre fonction, pour compter des lignes.

Grosses lignes = COUNTROWS(FILTER(Ventes, Ventes[Quantité] * Ventes[PrixUnitaire] > 1000))

Le piège est la lenteur : FILTER sur une grande table entière peut ralentir tout le rapport. Si la condition porte sur une seule colonne, préférez le filtre direct : CALCULATE([Ventes totales], Ventes[Quantité] > 10).

4. RELATED et RELATEDTABLE : aller chercher dans une autre table

Ces deux fonctions suivent les relations de votre modèle, et elles travaillent ligne par ligne : on les trouve dans une colonne calculée ou dans une fonction comme SUMX. RELATED va du côté « plusieurs » vers le côté « un » : depuis une vente, elle récupère une information sur le produit vendu.

Catégorie = RELATED(Produits[Catégorie])

C’est utile dans un calcul quand le prix se trouve dans la table des produits.

Ventes au tarif = SUMX(Ventes, Ventes[Quantité] * RELATED(Produits[PrixUnitaire]))

RELATEDTABLE fait le chemin inverse : depuis un client, elle renvoie toutes ses lignes de ventes. Cette colonne calculée, dans la table Clients, compte les commandes de chacun.

Nombre de commandes = COUNTROWS(RELATEDTABLE(Ventes))

Si une relation manque entre les tables, ces fonctions échouent. Vérifiez d’abord votre modèle dans la vue Modèle.

5. ALL : ignorer les filtres en cours

ALL retire les filtres d’une table ou d’une colonne. C’est l’outil des pourcentages du total : pour connaître la part d’une gamme, il faut le total de toutes les gammes, sans le filtre de la ligne.

Part du total = DIVIDE([Ventes totales], CALCULATE([Ventes totales], ALL(Produits)))

La fonction a plusieurs variantes, à choisir selon ce que vous voulez garder :

  • ALL(Produits) retire tous les filtres de la table Produits.
  • ALL(Produits[Catégorie]) retire seulement ceux de cette colonne.
  • ALLEXCEPT(Produits, Produits[Catégorie]) retire tous les filtres de la table, sauf ceux de la colonne citée.
  • ALLSELECTED(Produits) retire les filtres du visuel, mais garde ceux qui viennent de l’extérieur, comme un segment : la part se calcule alors sur la sélection du lecteur.

6. IF : calculer selon une condition

IF teste une condition et renvoie une valeur si elle est vraie, une autre sinon. Sans troisième argument, le résultat est vide quand la condition est fausse.

Niveau de ventes = IF([Ventes totales] > 10000, "Élevé", IF([Ventes totales] > 5000, "Moyen", "Faible"))

Cette écriture reste lisible jusqu’à deux ou trois niveaux. Attention à un effet de bord : une ligne sans aucune vente affichera « Faible », et le visuel fera apparaître des clients qu’il aurait masqués. Si cela vous gêne, renvoyez un résultat vide dans ce cas : IF(ISBLANK([Ventes totales]), BLANK(), [Niveau de ventes]), dans une seconde mesure.

7. DATESYTD : le cumul depuis le début de l’année

DATESYTD renvoie les dates du 1er janvier à la date en cours d’affichage. Associée à CALCULATE, elle donne le cumul annuel, qui suit le mois sélectionné.

Ventes cumul annuel = CALCULATE([Ventes totales], DATESYTD(Calendrier[Date]))

Si votre exercice ne finit pas en décembre, un second argument indique sa date de clôture, par exemple DATESYTD(Calendrier[Date], "6-30") pour un exercice clos au 30 juin. Son format dépend des réglages régionaux du fichier : contrôlez le résultat sur un mois connu.

D’autres fonctions de la même famille reviennent souvent. DATESMTD fait le cumul du mois. DATESBETWEEN(Calendrier[Date], DATE(2026, 1, 1), DATE(2026, 3, 31)) vise une période précise. SAMEPERIODLASTYEAR compare avec l’année précédente :

Ventes N-1 = CALCULATE([Ventes totales], SAMEPERIODLASTYEAR(Calendrier[Date]))

Ces fonctions réclament une vraie table de dates, sans trou. Vous pouvez la créer avec Calendrier = CALENDAR(DATE(2024, 1, 1), DATE(2026, 12, 31)), la relier à la date de vos ventes, puis la déclarer avec Marquer comme table de dates. C’est l’oubli qui explique le plus souvent un cumul faux.

8. DIVIDE : diviser sans mauvaise surprise

DIVIDE divise deux valeurs en gérant le cas d’un dénominateur à zéro ou vide. Avec l’opérateur /, une division par zéro peut afficher l’infini dans votre rapport. DIVIDE renvoie un résultat vide, et le visuel reste propre.

Taux de marge = DIVIDE([Marge], [Ventes totales])

Un troisième argument facultatif donne la valeur à afficher à la place du vide : DIVIDE([Marge], [Ventes totales], 0) affiche 0. Prenez cette habitude pour tous vos ratios : vous n’avez plus à écrire un IF avant chaque division.

9. DISTINCTCOUNT : compter les valeurs différentes

DISTINCTCOUNT compte le nombre de valeurs différentes d’une colonne. Elle répond à des questions comme « combien de clients ont acheté ce mois-ci ? ».

Clients actifs = DISTINCTCOUNT(Ventes[ClientID])

Deux points surprennent. D’abord, la fonction compte aussi la valeur vide comme une valeur : pour l’exclure, utilisez DISTINCTCOUNTNOBLANK, comme l’indique la documentation de Microsoft sur DISTINCTCOUNT. Ensuite, les totaux ne s’additionnent pas : un client qui achète dans deux catégories compte une fois dans chacune, mais une seule fois dans le total général. Ce n’est pas une erreur.

10. SWITCH : remplacer les IF imbriqués

SWITCH compare une expression à une liste de valeurs et renvoie le résultat correspondant, avec une valeur par défaut à la fin. Cette colonne calculée, dans la table Clients, classe des départements par région.

Région =
SWITCH(
    Clients[Département],
    "34", "Occitanie",
    "13", "Provence-Alpes-Côte d'Azur",
    "69", "Auvergne-Rhône-Alpes",
    "Autre"
)

Pour tester des conditions différentes plutôt qu’une seule valeur, on l’écrit avec TRUE(). C’est une version plus lisible de l’exemple donné pour IF : la première condition vraie gagne.

Niveau de ventes =
SWITCH(
    TRUE(),
    [Ventes totales] > 10000, "Élevé",
    [Ventes totales] > 5000, "Moyen",
    "Faible"
)

Ajouter un cas revient à ajouter une ligne, sans toucher au reste. C’est ce qui rend ces formules faciles à reprendre plusieurs mois plus tard.

Quand faire appel à un expert DAX

Vous pouvez aller loin seul avec ces dix formules, surtout sur un modèle simple à quelques tables. Un regard extérieur devient utile quand un rapport met plusieurs secondes à réagir, quand deux mesures censées dire la même chose donnent des résultats différents, ou quand un cumul sert à la clôture et ne peut pas être approximatif. Plusieurs services qui définissent chacun leur marge, c’est aussi un bon signal : le sujet est alors d’écrire une définition commune plus que de corriger une formule. La page sur les tableaux de bord Power BI montre ce qu’un tel projet recouvre, et la formation Power Platform convient si vous préférez rendre vos équipes autonomes.

Pour la suite, le guide pour démarrer avec Power BI Desktop reprend les bases du modèle, et celui sur les KPI dans Power BI montre comment afficher ces mesures face à un objectif. Une fois vos calculs fiables, il reste à concevoir un tableau de bord lisible.

Questions fréquentes

Quelle est la différence entre une mesure et une colonne calculée en DAX ?

Une mesure se calcule au moment de l’affichage, selon les filtres du visuel. Une colonne calculée se calcule ligne par ligne lors de l’actualisation, et son résultat est stocké dans le modèle, ce qui consomme de la mémoire. Pour un total ou un ratio, préférez la mesure ; pour classer une ligne et vous en servir comme filtre, la colonne convient.

Combien de temps faut-il pour apprendre les formules DAX ?

Les fonctions simples comme SUM ou DIVIDE se prennent en main très vite. CALCULATE et le contexte de filtre demandent davantage de pratique, car il faut comprendre ce qui filtre quoi. Le plus efficace est de progresser sur vos propres données, avec un résultat que vous connaissez déjà.

Peut-on utiliser DAX sans connaître Excel ?

Oui, ce sont deux outils distincts. Connaître Excel aide pour certaines fonctions au nom proche, comme SUM ou IF. La vraie différence est ailleurs : DAX ne travaille pas sur des cellules, mais sur des tables, des colonnes et des filtres.

Quelles sont les erreurs DAX les plus fréquentes à éviter ?

Les plus courantes sont la confusion entre mesure et colonne calculée, l’oubli du contexte de filtre et l’usage de FILTER sur de grandes tables quand un filtre direct suffit. Viennent ensuite les fonctions de date sans vraie table de dates, et les RELATED employés sans relation entre les tables.

Comment optimiser les performances des formules DAX ?

Préférez les mesures aux colonnes calculées quand c’est possible, et les filtres directs dans CALCULATE plutôt que FILTER sur une table entière. Évitez les fonctions comme SUMX sur des millions de lignes si la valeur peut être calculée à la source. Retirez aussi du modèle les colonnes qui ne servent pas.

Parlons de votre besoin

Décrivez ce qui vous fait perdre du temps. Nos experts vous disent quel outil convient.

  1. Vous décrivez votre besoinRéponse sous 48 h ouvrées.
  2. On en parle 40 minutesL’échange est offert.
  3. Vous voyez une maquetteAvant tout engagement.
  4. Votre outil est livréDe 4 à 6 semaines.
Ce qui vous intéresse (plusieurs choix possibles)

Vos informations servent seulement à répondre à votre demande.