Aller au contenu
Retour au blog
Business Intelligence 17 octobre 2026 9 min de lecture

DAX Power BI : les formules essentielles, avec exemples

Les formules DAX qui couvrent la plupart des rapports Power BI, classées par usage, avec des exemples prêts à copier et les règles de contexte qui les font fonctionner.

DAX Power BI : les formules essentielles, avec exemples

Qu'est-ce que le DAX dans Power BI ?

Le DAX (Data Analysis Expressions) est le langage de formules de Power BI, d'Excel Power Pivot et d'Analysis Services, utilisé pour créer des mesures, des colonnes calculées et des tables calculées. Il ressemble aux formules Excel, mais il travaille sur des tables et des colonnes plutôt que sur des cellules, et ses résultats changent selon les filtres appliqués dans le rapport. Inutile de connaître des centaines de fonctions : une quinzaine couvre l'essentiel des tableaux de bord métier.

Tous les exemples ci-dessous utilisent un schéma en étoile simple :

TableColonnes principales
Ventes (faits)NumCommande, ClientID, ProduitID, MagasinID, Date, Quantite, PrixUnitaire, CoutUnitaire, Montant
ProduitProduitID, NomProduit, Categorie
MagasinMagasinID, Ville, Region
ClientClientID, NomClient
'Date'Date, Annee, Mois, NumMois (marquée comme table de dates)

Si votre modèle n'a pas encore cette forme, commencez par le guide du modèle en étoile Power BI : le DAX devient beaucoup plus simple sur un modèle propre.

Mesure ou colonne calculée : laquelle choisir ?

MesureColonne calculée
CalculéeÀ la requête, pour chaque cellule du visuelÀ l'actualisation, une fois par ligne
Réagit aux filtresOuiNon (valeur stockée)
MémoireAucune tant qu'elle n'est pas utiliséeAugmente la taille du modèle
Usage typiqueTotaux, ratios, KPICatégories pour filtrer ou regrouper

Règle simple : pour afficher un nombre, écrivez une mesure. Pour filtrer par une valeur, une colonne calculée (ou mieux, une colonne Power Query) convient.

-- Colonne calculée dans la table Ventes
Marge Ligne = Ventes[Quantite] * ( Ventes[PrixUnitaire] - Ventes[CoutUnitaire] )

Quelles sont les formules DAX de base ?

Total Ventes = SUM ( Ventes[Montant] )

Commandes = DISTINCTCOUNT ( Ventes[NumCommande] )

Clients Actifs = DISTINCTCOUNT ( Ventes[ClientID] )

Lignes de Vente = COUNTROWS ( Ventes )

Panier Moyen = DIVIDE ( [Total Ventes], [Commandes] )

Préférez toujours DIVIDE à l'opérateur / : il renvoie BLANK au lieu d'une erreur quand le dénominateur vaut zéro, et un troisième argument facultatif permet de choisir une autre valeur.

Comment fonctionnent les itérateurs comme SUMX ?

Les itérateurs (SUMX, AVERAGEX, MINX, MAXX, COUNTX) évaluent une expression ligne par ligne, puis agrègent. Utilisez-les quand le calcul doit se faire avant la somme :

Marge Totale =
SUMX ( Ventes, Ventes[Quantite] * ( Ventes[PrixUnitaire] - Ventes[CoutUnitaire] ) )

Taux de Marge = DIVIDE ( [Marge Totale], [Total Ventes] )

Cette mesure remplace la colonne calculée précédente et économise de la mémoire.

Comment fonctionne CALCULATE ?

CALCULATE est la fonction DAX la plus importante : elle évalue une expression dans un contexte de filtre modifié. Toutes les mesures du type « ventes de X », « part du total » ou « même période l'an dernier » l'utilisent.

Ajouter ou remplacer un filtre

Ventes Casablanca =
CALCULATE ( [Total Ventes], Magasin[Ville] = "Casablanca" )

Ventes Casablanca ou Rabat =
CALCULATE ( [Total Ventes], Magasin[Ville] IN { "Casablanca", "Rabat" } )

Retirer des filtres pour calculer une part du total

Part Tous Produits =
DIVIDE (
    [Total Ventes],
    CALCULATE ( [Total Ventes], REMOVEFILTERS ( Produit ) )
)

Part de la Selection =
DIVIDE (
    [Total Ventes],
    CALCULATE ( [Total Ventes], ALLSELECTED ( Produit ) )
)

La première ignore tous les filtres sur les produits ; la seconde respecte ce que l'utilisateur a choisi dans les segments, mais ignore la ligne du visuel.

Conserver le filtre existant

Par défaut, un filtre dans CALCULATE remplace un filtre existant sur la même colonne. KEEPFILTERS fait l'intersection :

Ventes Electromenager (conserve) =
CALCULATE ( [Total Ventes], KEEPFILTERS ( Produit[Categorie] = "Electromenager" ) )

Filtrer sur une mesure avec FILTER

Un filtre booléen simple dans CALCULATE ne peut pas faire référence à une mesure. Utilisez FILTER sur une table de valeurs :

Clients Plus de 100k =
COUNTROWS (
    FILTER ( VALUES ( Ventes[ClientID] ), [Total Ventes] > 100000 )
)

Quelles formules de time intelligence connaître ?

Les fonctions de time intelligence exigent une table de dates avec une ligne par jour, sans trou, marquée comme table de dates et reliée à la table de faits.

Ventes YTD = TOTALYTD ( [Total Ventes], 'Date'[Date] )

Ventes N-1 =
CALCULATE ( [Total Ventes], SAMEPERIODLASTYEAR ( 'Date'[Date] ) )

Ventes Mois Precedent =
CALCULATE ( [Total Ventes], DATEADD ( 'Date'[Date], -1, MONTH ) )

Ventes 12 Mois Glissants =
CALCULATE (
    [Total Ventes],
    DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -12, MONTH )
)

Moyenne Mensuelle 3 Mois =
DIVIDE (
    CALCULATE (
        [Total Ventes],
        DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -3, MONTH )
    ),
    3
)

Pour un exercice fiscal qui ne se termine pas le 31 décembre, indiquez la date de clôture : TOTALYTD ( [Total Ventes], 'Date'[Date], "06-30" ).

Comment écrire un DAX plus lisible avec les variables ?

VAR stocke un résultat intermédiaire, évalué une seule fois, et RETURN renvoie la valeur finale. Les variables rendent les mesures plus lisibles et souvent plus rapides :

Evolution N-1 % =
VAR VentesActuelles = [Total Ventes]
VAR VentesPrecedentes =
    CALCULATE ( [Total Ventes], SAMEPERIODLASTYEAR ( 'Date'[Date] ) )
RETURN
    IF (
        NOT ISBLANK ( VentesPrecedentes ),
        DIVIDE ( VentesActuelles - VentesPrecedentes, VentesPrecedentes )
    )

Classement, top N et texte dynamique

Rang Produit =
RANKX ( ALL ( Produit[NomProduit] ), [Total Ventes], , DESC, DENSE )

Ventes Top 5 Produits =
CALCULATE (
    [Total Ventes],
    TOPN ( 5, ALL ( Produit[NomProduit] ), [Total Ventes], DESC )
)

Titre Rapport =
"Ventes - " & SELECTEDVALUE ( Magasin[Ville], "Toutes les villes" )

Titre Rapport sert de titre dynamique (Titre > fx) : l'en-tête change avec le segment sélectionné.

Segmenter avec SWITCH

Une colonne calculée dans la table Client qui classe les clients selon leur chiffre d'affaires :

Segment Client =
VAR CAClient = CALCULATE ( SUM ( Ventes[Montant] ) )
RETURN
    SWITCH (
        TRUE (),
        CAClient >= 100000, "Grand compte",
        CAClient >= 20000, "Moyen",
        "Petit"
    )

Le CALCULATE sans filtre déclenche la transition de contexte : la ligne client courante devient un filtre sur la table Ventes.

Aide-mémoire : quelle fonction DAX pour quel besoin ?

BesoinFonction(s)
Somme, comptage, comptage distinctSUM, COUNTROWS, DISTINCTCOUNT
Ratio sans erreurDIVIDE
Calcul ligne à ligneSUMX, AVERAGEX
Modifier les filtresCALCULATE, REMOVEFILTERS, ALL, ALLSELECTED, KEEPFILTERS
Condition complexeFILTER
Cumul annuel, N-1, glissantTOTALYTD, SAMEPERIODLASTYEAR, DATEADD, DATESINPERIOD
Stock en fin de périodeCALCULATE avec LASTDATE
ClassementRANKX, TOPN
Valeur sélectionnée, libellé dynamiqueSELECTEDVALUE
Conditions multiplesSWITCH ( TRUE (), … )

Tester une mesure dans la vue de requête DAX

Power BI Desktop propose une vue de requête DAX pour vérifier une mesure sous forme de table :

EVALUATE
SUMMARIZECOLUMNS (
    'Date'[Annee],
    Magasin[Ville],
    "Ventes", [Total Ventes],
    "Evolution %", [Evolution N-1 %]
)
ORDER BY 'Date'[Annee], Magasin[Ville]

Comparez le résultat avec le système source avant de placer la mesure sur une page.

Quelles sont les erreurs DAX les plus fréquentes ?

  • Utiliser des colonnes calculées pour des totaux et ratios qui devraient être des mesures.
  • Diviser avec / et obtenir des erreurs ou l'infini sur les périodes vides.
  • Faire de la time intelligence sans vraie table de dates continue.
  • Activer des relations bidirectionnelles pour « réparer » une mesure, ce qui crée des résultats ambigus.
  • Calculer un ratio comme la moyenne de ratios ligne à ligne au lieu du ratio des totaux.

La référence officielle des fonctions sur Microsoft Learn (référence DAX) permet de vérifier chaque argument.

Comment organiser et nommer ses mesures ?

  • Rangez toutes les mesures dans une table dédiée (par exemple _Mesures) et regroupez-les en dossiers d'affichage : Ventes, Marge, Temps, Clients.
  • Utilisez des noms explicites et lisibles par les métiers : Evolution N-1 % plutôt que Mesure 12.
  • Construisez les mesures complexes sur des mesures simples ([Total Ventes], puis [Ventes N-1], puis [Evolution N-1 %]) : une définition ne change qu'à un seul endroit.
  • Ajoutez une description à chaque mesure ; elle s'affiche en info-bulle dans la liste des champs.

Le DAX est-il demandé sur le marché marocain ?

Oui : dans les offres de data analyst, de développeur BI et de contrôleur de gestion à Casablanca et Rabat, « Power BI » s'accompagne souvent de « DAX » et de « Power Query ». Savoir expliquer CALCULATE et le contexte de filtre en entretien fait la différence avec un profil qui ne fait que glisser des visuels. La certification PL-300 évalue d'ailleurs explicitement ces compétences.

Conclusion

Avec SUM, DIVIDE, SUMX, CALCULATE et ses modificateurs de filtre, quelques fonctions de time intelligence, RANKX et les variables, vous construisez la plupart des KPI métier dans Power BI. Maîtrisez le contexte de filtre avant d'apprendre des fonctions par cœur. Pour mettre ces mesures en pages, voyez les exemples de tableaux de bord Power BI ; pour un projet sur vos propres données, le service de tableaux de bord Power BI.

DAXPower BICALCULATETime intelligenceMeasuresData modelling
Anass Essadikine

À propos de l'auteur

Anass Essadikine

Data & AI Engineer et ingénieur logiciel basé à Casablanca, au Maroc. Je construis des plateformes data, des tableaux de bord Power BI, des assistants RAG et des applications Next.js / Spring Boot.

Questions fréquentes

Power Query (langage M) prépare et charge les données avant qu'elles n'entrent dans le modèle : nettoyage, fusion, restructuration. Le DAX calcule des mesures et des colonnes sur le modèle chargé et réagit aux filtres du rapport.

Continuer la lecture

Tous les articles

Besoin de ces compétences ?

Je suis ouvert aux missions freelance, aux stages et aux postes à temps plein. Discutons.