· ExcelWorkflow · Power BI & DAX  · 7 min read

DAX Avancé : Les 15 Patterns de Mesures Experts que chaque Analyste Power BI doit Connaître

Maîtrisez les patterns DAX avancés utilisés dans les grandes entreprises : Time Intelligence, CALCULATE complexe, tables virtuelles, ranking dynamique et mesures à contexte variable. Exemples réels détaillés.

Maîtrisez les patterns DAX avancés utilisés dans les grandes entreprises : Time Intelligence, CALCULATE complexe, tables virtuelles, ranking dynamique et mesures à contexte variable. Exemples réels détaillés.

Introduction : Pourquoi les Patterns DAX sont Essentiels

DAX (Data Analysis Expressions) est le langage de calcul de Power BI, SSAS et Power Pivot. Les formules basiques (SUM, AVERAGE, COUNT) sont accessibles à tous. Mais ce qui différencie les vrais experts, c’est la maîtrise des patterns avancés — ces combinaisons de fonctions qui permettent de répondre aux questions business les plus complexes.

Ce guide compile les 15 patterns DAX que l’on retrouve dans tous les tableaux de bord professionnels de haut niveau. Chaque pattern est accompagné d’une explication du contexte d’utilisation et d’un exemple concret.


Comprendre le Contexte de Filtre : La Base de Tout

Avant d’entrer dans les patterns, il est crucial de comprendre le concept fondamental de DAX : le contexte de filtre.

Chaque mesure DAX s’exécute dans un contexte de filtre — l’ensemble des filtres actifs à un moment donné (filtres visuels, slicers, filtres de page, hiérarchies…).

CALCULATE est la fonction qui modifie ce contexte. C’est pourquoi c’est la fonction la plus puissante de DAX.

// Sans CALCULATE : résultat dans le contexte courant
Ventes Totales = SUM(Faits[CA])

// Avec CALCULATE : résultat dans un contexte modifié
Ventes Paris = CALCULATE(SUM(Faits[CA]), Geo[Ville] = "Paris")

// Même dans un visuel filtré sur Lyon, cette mesure donnera toujours Paris

Pattern 1 : Year-to-Date (YTD) et Comparaisons Périodiques

Le pattern le plus demandé en entreprise. Indispensable dans tout dashboard financier.

// YTD standard
CA YTD = 
CALCULATE(
    [CA Total],
    DATESYTD(Calendrier[Date])
)

// YTD avec date de clôture fiscale personnalisée (31 mars)
CA YTD Fiscal = 
CALCULATE(
    [CA Total],
    DATESYTD(Calendrier[Date], "31/03")
)

// Comparaison YTD vs YTD année précédente
CA YTD N-1 = 
CALCULATE(
    [CA YTD],
    SAMEPERIODLASTYEAR(Calendrier[Date])
)

// Croissance YTD
Croissance YTD % = 
DIVIDE(
    [CA YTD] - [CA YTD N-1],
    [CA YTD N-1],
    BLANK()
)

Pattern 2 : Moving Average (Moyenne Mobile)

Pour lisser les variations saisonnières et identifier les tendances réelles.

// Moyenne mobile sur 3 mois
CA Moyenne Mobile 3M = 
AVERAGEX(
    DATESINPERIOD(
        Calendrier[Date],
        LASTDATE(Calendrier[Date]),
        -3,
        MONTH
    ),
    [CA Total]
)

// Moyenne mobile sur 12 mois (lissage annuel)
CA Moyenne Mobile 12M = 
AVERAGEX(
    DATESINPERIOD(
        Calendrier[Date],
        LASTDATE(Calendrier[Date]),
        -12,
        MONTH
    ),
    [CA Total]
)

Pattern 3 : Running Total (Cumul Progressif)

Essentiel pour les graphiques waterfall et les courbes cumulées.

CA Cumulé = 
CALCULATE(
    [CA Total],
    FILTER(
        ALL(Calendrier[Date]),
        Calendrier[Date] <= MAX(Calendrier[Date])
    )
)

// Cumul par catégorie (ex: par vendeur dans un classement)
CA Cumulé par Rang = 
VAR RangActuel = [Rang Vendeur]
RETURN
CALCULATE(
    [CA Total],
    FILTER(
        ALL(Vendeurs[Nom]),
        RANKX(ALL(Vendeurs[Nom]), [CA Total],, DESC, Dense) <= RangActuel
    )
)

Pattern 4 : Pareto Analysis (80/20)

Identifier les clients/produits qui génèrent 80% du chiffre d’affaires.

// % du CA sur le total (dans le contexte filtré)
CA % du Total = 
DIVIDE(
    [CA Total],
    CALCULATE([CA Total], ALL(Ventes))
)

// Cumul pour courbe Pareto
CA % Cumulé = 
VAR TousLesClients = ALLSELECTED(Clients[Nom])
VAR TotalGlobal = CALCULATE([CA Total], TousLesClients)
VAR CAActuel = [CA Total]
VAR ClientsSupérieurs = 
    FILTER(
        TousLesClients,
        CALCULATE([CA Total]) >= CAActuel
    )
RETURN
DIVIDE(
    CALCULATE([CA Total], ClientsSupérieurs),
    TotalGlobal
)

// Marquer les clients dans le top 80%
Est Pareto 80% = 
IF([CA % Cumulé] <= 0.80, "Top 80%", "Autres 20%")

Pattern 5 : Dynamic TopN avec Paramètre

Permettre à l’utilisateur de choisir son N dynamiquement avec un slicer.

// Créer d'abord une table de paramètres
// Dans Power BI : Modélisation > Nouveau paramètre > Numérique
// Nommons-le "Paramètre N" avec des valeurs de 3 à 20

// Mesure Top N dynamique
CA Top N Clients = 
VAR N = SELECTEDVALUE('Paramètre N'[Paramètre N], 10)
VAR TopNClients = 
    TOPN(
        N,
        ALLSELECTED(Clients[Nom]),
        [CA Total],
        DESC
    )
RETURN
CALCULATE([CA Total], TopNClients)

// Indicateur : ce client est-il dans le TopN ?
Est Dans Top N = 
VAR N = SELECTEDVALUE('Paramètre N'[Paramètre N], 10)
VAR RangClient = 
    RANKX(
        ALLSELECTED(Clients[Nom]),
        [CA Total],
        ,
        DESC,
        Dense
    )
RETURN IF(RangClient <= N, 1, 0)

Pattern 6 : Calculs sur Périodes Glissantes

Comparer les 30, 60 ou 90 derniers jours de manière dynamique.

// CA des 30 derniers jours (depuis la date max des données)
CA 30 Derniers Jours = 
VAR DerniereDate = LASTDATE(ALL(Calendrier[Date]))
RETURN
CALCULATE(
    [CA Total],
    DATESINPERIOD(Calendrier[Date], DerniereDate, -30, DAY)
)

// Même période, un an avant
CA 30J Année Précédente = 
CALCULATE(
    [CA 30 Derniers Jours],
    DATEADD(Calendrier[Date], -1, YEAR)
)

// Pour comparer N jours dynamiquement
CA N Derniers Jours = 
VAR N = SELECTEDVALUE('Paramètre Jours'[Valeur], 30)
VAR DerniereDate = LASTDATE(ALL(Calendrier[Date]))
RETURN
CALCULATE(
    [CA Total],
    DATESINPERIOD(Calendrier[Date], DerniereDate, -N, DAY)
)

Pattern 7 : Taux de Réalisation vs Objectifs

Pattern indispensable dans tous les dashboards commerciaux et financiers.

// Objectif du mois courant
Objectif Mois = 
CALCULATE(
    SUM(Objectifs[Montant]),
    DATESMTD(Calendrier[Date])
)

// Taux de réalisation
Taux Réalisation = 
DIVIDE([CA Total], [Objectif Mois], BLANK())

// Écart absolu
Écart vs Objectif = [CA Total] - [Objectif Mois]

// Statut avec icônes
Statut Objectif = 
VAR Taux = [Taux Réalisation]
RETURN
SWITCH(
    TRUE(),
    Taux >= 1.0, "✅ Objectif atteint",
    Taux >= 0.8, "🟡 En cours (" & FORMAT(Taux, "0%") & ")",
    "🔴 Retard (" & FORMAT(Taux, "0%") & ")"
)

// Projection fin de mois
Projection Fin de Mois = 
VAR JoursEcoules = DAY(TODAY())
VAR TotalJoursMois = DAY(EOMONTH(TODAY(), 0))
RETURN
DIVIDE([CA Total] * TotalJoursMois, JoursEcoules, BLANK())

Pattern 8 : Analyse de Cohortes (Rétention Client)

Suivre la rétention des clients mois par mois — le Graal du CRM analytique.

// Mois d'acquisition du client (premier achat)
Mois Acquisition = 
CALCULATE(
    MIN(Ventes[Date]),
    ALLEXCEPT(Ventes, Ventes[ID_Client])
)

// Table de cohorte : CA par cohorte et période de maturité
// Nécessite une table virtuelle SUMMARIZE

Clients Retenus = 
VAR MoisCourant = SELECTEDVALUE(Calendrier[Annee_Mois])
RETURN
CALCULATE(
    DISTINCTCOUNT(Ventes[ID_Client]),
    FILTER(
        ALL(Ventes),
        FORMAT(Ventes[Date], "YYYY-MM") = MoisCourant
            && FORMAT([Mois Acquisition], "YYYY-MM") 
               = SELECTEDVALUE(Cohortes[Mois_Acquisition])
    )
)

Pattern 9 : Tables Virtuelles avec SUMMARIZE et ADDCOLUMNS

Créer des tables intermédiaires pour des calculs complexes.

// Table virtuelle des meilleurs vendeurs avec leurs stats
Stats Vendeurs = 
ADDCOLUMNS(
    SUMMARIZE(
        Ventes,
        Vendeurs[Nom],
        Vendeurs[Région]
    ),
    "CA Total", [CA Total],
    "Nb Clients", [Nb Clients Actifs],
    "Panier Moyen", [Panier Moyen],
    "Rang", [Rang Vendeur],
    "Objectif Atteint", IF([Taux Réalisation] >= 1, "✅ Oui", "❌ Non")
)

// Utilisation dans une mesure
CA Médian par Vendeur = 
MEDIANX(
    SUMMARIZE(
        ALLSELECTED(Ventes),
        Vendeurs[Nom],
        "CA_Vendeur", [CA Total]
    ),
    [CA_Vendeur]
)

Pattern 10 : Gestion des Périodes Fermées

Ne pas affecter les périodes futures dans les ratios et comparaisons.

// Indicateur : cette période a-t-elle des données ?
A Données = 
NOT ISBLANK([CA Total])

// CA uniquement pour les périodes avec données
CA Périodes Complètes = 
CALCULATE(
    [CA Total],
    FILTER(
        ALL(Calendrier),
        [A Données]
    )
)

// Moyenne sur les mois complets uniquement
CA Moyen Mois Complets = 
AVERAGEX(
    FILTER(
        ALLSELECTED(Calendrier[Annee_Mois]),
        [A Données]
    ),
    [CA Total]
)

Patterns 11-15 : Les Essentiels Avancés

// Pattern 11 : Semi-additive (soldes bancaires, stocks)
Stock Fin de Période = 
CALCULATE(
    LASTNONBLANK(Stocks[Quantité], 1),
    ALLEXCEPT(Stocks, Calendrier[Date])
)

// Pattern 12 : Segmentation dynamique (bin analysis)
Segment CA = 
VAR CA = [CA Total]
RETURN
SWITCH(
    TRUE(),
    CA >= 100000, "🏆 Grand Compte",
    CA >= 50000, "🥈 Compte Majeur",
    CA >= 10000, "🥉 Compte Standard",
    ISBLANK(CA), BLANK(),
    "📦 Petit Compte"
)

// Pattern 13 : Mesure "What-if" de simulation
CA Simulé = 
VAR TauxCroissance = SELECTEDVALUE('Simulation Croissance'[Valeur], 0)
RETURN
[CA Total] * (1 + TauxCroissance / 100)

// Pattern 14 : Pourcentage relatif (vs parent dans hiérarchie)
CA % du Parent = 
DIVIDE(
    [CA Total],
    CALCULATE([CA Total], ALLSELECTED(Produits[Catégorie]))
)

// Pattern 15 : Mesure complexe avec VAR multiples
Analyse Rentabilité = 
VAR CA = [CA Total]
VAR Coûts = SUM(Achats[Coût])
VAR Marge = CA - Coûts
VAR TauxMarge = DIVIDE(Marge, CA)
VAR Benchmark = 0.25
VAR Statut = IF(TauxMarge >= Benchmark, "✅ Rentable", "⚠️ Sous objectif")
RETURN
Statut & " — " & FORMAT(TauxMarge, "0.0%") & " (Objectif: " & FORMAT(Benchmark, "0%") & ")"

Conclusion : La Pratique avant Tout

DAX s’apprend en faisant. Ces 15 patterns couvrent 90% des besoins des dashboards professionnels. La clé pour les maîtriser :

  1. Créez un fichier d’entraînement avec des données fictives
  2. Réimplémentez chaque pattern line by line, en comprenant chaque fonction
  3. Adaptez à vos données réelles — le contexte métier change tout
  4. Utilisez DAX Studio pour déboguer et optimiser vos mesures

La maîtrise de ces patterns vous placera dans le top 5% des utilisateurs Power BI — une compétence extrêmement valorisée sur le marché.

👉 Retrouvez nos exercices pratiques avec datasets dans la formation DAX Avancé.

Back to Blog

Related Posts

View All Posts »