Time Intelligence & fonctions avancées
Le niveau analyste : comparer des périodes, cumuler, classer, isoler une donnée, créer des tables avec SUMMARIZE, manier les variables et calculer des moyennes mobiles.
Toutes les fonctions DAX de ce cours (SAMEPERIODLASTYEAR, RANKX, SUMMARIZE, variables…) sont identiques sur le web : copie-colle les formules telles quelles. Crée les mesures via Nouvelle mesure dans la modélisation web (« Ouvrir le modèle de données ») ou en éditant un rapport. La mesure rapide (module 10) existe aussi en ligne.
📁 À importer pour tout le cours : 02 - base-DAX2.xlsx — table BaseVente (tous les modules utilisent cette base).
Fichier à télécharger : 02 - base-DAX2.xlsx. On y retrouve la table BaseVente avec une colonne Date de vente.
📗 Tu connais Excel ? Voici l'équivalent des fonctions DAX de ce cours
| En DAX (Power BI) | ≈ En Excel | L'idée |
|---|---|---|
SAMEPERIODLASTYEAR() | (pas de fonction : on décale d'un an) | Comparer à l'année précédente (N-1) |
TOTALYTD / MTD / QTD() | Somme cumulée (YTD) | Cumul depuis le début de l'année / mois / trimestre |
PREVIOUSMONTH() | Pointer le mois précédent (décalage) | Les données du mois d'avant |
RANKX() | RANG() / RANG.EQ() | Classer (1er, 2e, 3e…) |
KEEPFILTERS() | (pas d'équivalent direct) | Cibler une valeur sans écraser les filtres |
SUMMARIZE() | Tableau croisé dynamique | Regrouper et résumer dans une table |
FILTER() | FILTRE() / critères de SOMME.SI.ENS | Ne garder que les lignes voulues |
VAR … RETURN | LET() | Nommer une valeur pour la réutiliser |
SELECTEDVALUE() | Lire la valeur choisie (liste/segment) | Réagir à la sélection de l'utilisateur |
AVERAGE() / AVERAGEX() | MOYENNE() / moyenne par groupe | Moyenne simple / moyenne d'un calcul |
MONTH() · DATE() · FORMAT() | MOIS() · DATE() · TEXTE() | Extraire / construire / formater une date |
⚠️ Analogies pour visualiser : le DAX réagit au contexte des visuels, ce qu'Excel ne fait pas. Mais l'intuition Excel aide énormément à démarrer.
Pré-requis indispensable : les fonctions de Time Intelligence (modules 1 à 3) ont besoin d'une colonne de date continue (sans trous). Active la hiérarchie de dates automatique (Fichier › Options › Chargement des données) ou crée une vraie table de dates. On réutilise la mesure CA total de la compétence DAX.
SAMEPERIODLASTYEAR() — comparer à N-1
Mesurer l'évolution par rapport à l'année précédenteComparer les ventes à la même période de l'année précédente (N-1).
CA N-1 =
CALCULATE (
SUM ( BaseVente[Chiffre d'affaires] ) ,
SAMEPERIODLASTYEAR ( BaseVente[Date de vente] )
)
Et l'évolution en % :
Évolution % =
DIVIDE ( [CA total] - [CA N-1] , [CA N-1] )
≈ En Excel : il n'y a pas de fonction dédiée — tu irais chercher « à la main » la même période un an plus tôt (décalage de cellules). DAX le fait automatiquement en une formule.
SAMEPERIODLASTYEAR décale le contexte de date d'exactement un an. Place ces mesures dans une matrice avec l'année en lignes pour voir la comparaison.

TOTALMTD / TOTALQTD / TOTALYTD — cumuls
Cumuler depuis le début du mois, trimestre ou annéeCumuler les ventes par période : MTD (Month-To-Date), QTD (Quarter-To-Date), YTD (Year-To-Date).
CA cumul mois = TOTALMTD ( SUM ( BaseVente[Chiffre d'affaires] ) , BaseVente[Date de vente] )
CA cumul trimestre = TOTALQTD ( SUM ( BaseVente[Chiffre d'affaires] ) , BaseVente[Date de vente] )
CA cumul année = TOTALYTD ( SUM ( BaseVente[Chiffre d'affaires] ) , BaseVente[Date de vente] )
≈ En Excel : c'est la somme cumulée (Year-To-Date) que tu construirais avec une plage qui s'agrandit, ex. =SOMME($B$2:B2) recopiée vers le bas.
Place « CA cumul année » dans une courbe avec les mois en axe : tu obtiens la courbe en escalier classique d'un cumul annuel qui repart à zéro chaque 1ᵉʳ janvier.
PREVIOUSMONTH() — le mois précédent
Afficher les données du mois d'avantAfficher le CA du mois précédent pour le comparer au mois courant.
CA mois précédent =
CALCULATE (
SUM ( BaseVente[Chiffre d'affaires] ) ,
PREVIOUSMONTH ( BaseVente[Date de vente] )
)
≈ En Excel : revient à pointer la cellule du mois précédent (un décalage d'une ligne dans un tableau mensuel).
Même logique que SAMEPERIODLASTYEAR, mais le décalage est d'un mois. Famille proche : PREVIOUSDAY, PREVIOUSQUARTER, PREVIOUSYEAR.
RANKX() — classer les produits
Établir un classement par chiffre d'affairesClasser les produits par chiffre d'affaires (1 = meilleur). Le classement doit se mettre à jour automatiquement quand on filtre par ville.
Rang produit =
RANKX (
ALL ( BaseVente[Produit] ) , -- l'ensemble des produits à classer
[CA total] , -- le critère de classement
, DESC -- du plus grand au plus petit
)
Pourquoi ALL() ? Sans lui, chaque ligne ne « verrait » que son propre produit et serait classée 1ᵉ. ALL(BaseVente[Produit]) dit à RANKX de comparer tous les produits entre eux.
≈ En Excel : c'est la fonction RANG() (ou RANG.EQ()). La différence : RANKX reclasse automatiquement quand on filtre (par ville, par date…).
Ajoute une Ville dans un segment : le contexte de filtre change, et le classement des produits se recalcule par ville automatiquement.
KEEPFILTERS() — cibler sans tout écraser
Isoler un produit en respectant les autres filtresIsoler le CA du produit JEAN, mais sans écraser les autres filtres du visuel (date, ville…).
CA Jean ciblé =
CALCULATE (
[CA total] ,
KEEPFILTERS ( BaseVente[Produit] = "Jean" )
)
≈ En Excel : pas d'équivalent direct — c'est une notion propre au moteur de filtres de Power BI. Retiens l'idée : « cibler en plus des filtres déjà là », pas « à la place ».
La différence subtile : un filtre normal dans CALCULATE remplace le filtre existant sur la colonne. KEEPFILTERS s'ajoute aux filtres déjà présents (intersection). Résultat : si l'utilisateur a déjà sélectionné « Pull » dans un segment, la mesure renverra un blanc (Jean ∩ Pull = ∅) au lieu de forcer Jean.
SUMMARIZE() — créer une table de synthèse
Extraire un résumé (quantité max par produit) puis le cumulerTrouver la quantité maximale vendue, puis la cumuler par contexte de filtre (département ou ville).
SUMMARIZE crée une table résumée : on choisit une colonne de regroupement et on ajoute des colonnes calculées.
SUMMARIZE (
BaseVente ,
BaseVente[Produit] , -- regroupement
"Q max" , MAX ( BaseVente[Quantité] ) -- colonne ajoutée
)
Pour obtenir le cumul de ces quantités max par filtre, on enveloppe le tout dans SUMX :
Cumul Q max =
SUMX (
SUMMARIZE (
BaseVente ,
BaseVente[Produit] ,
"Q max" , MAX ( BaseVente[Quantité] )
) ,
[Q max]
)
≈ En Excel : c'est exactement un tableau croisé dynamique — regrouper par produit et résumer (ici le max par produit), mais sous forme de table réutilisable dans une formule.
Schéma mental : SUMMARIZE fabrique une mini-table (Produit + Q max), puis SUMX parcourt cette mini-table et additionne la colonne « Q max ». Le résultat s'adapte au filtre (département/ville) du visuel.
FILTER() & les variables (VAR / RETURN)
Croiser plusieurs critères et rendre le code lisibleCalculer un critère précis : le CA des « Jean » au mois de juin.
FILTER permet d'exprimer plusieurs conditions combinées avec && (ET) ou || (OU) :
CA Jean juin =
CALCULATE (
SUM ( BaseVente[Chiffre d'affaires] ) ,
FILTER (
BaseVente ,
BaseVente[Produit] = "Jean" && MONTH ( BaseVente[Date de vente] ) = 6
)
)
Avec une variable (VAR / RETURN)
Les variables rendent le code lisible et facile à modifier : on déclare une valeur une fois, on la réutilise.
CA Jean juin =
VAR Produit = "Jean"
RETURN
CALCULATE (
SUM ( BaseVente[Chiffre d'affaires] ) ,
FILTER (
BaseVente ,
BaseVente[Produit] = Produit && MONTH ( BaseVente[Date de vente] ) = 6
)
)
VAR / RETURN : on déclare des variables après VAR, puis on écrit le résultat après RETURN. Pour changer de produit, il suffit de modifier une seule ligne.
≈ En Excel : FILTER() ≈ la fonction FILTRE() (ou les critères de SOMME.SI.ENS). Et VAR … RETURN ≈ la fonction LET() d'Excel, qui nomme une valeur pour la réutiliser.
SELECTEDVALUE() — cumuler jusqu'au mois choisi
Réagir à la sélection de l'utilisateur dans un segmentObjectif 1 : créer une table « Liste mois ». Objectif 2 : une mesure qui cumule le CA jusqu'au mois sélectionné.
A. Préparer les colonnes & la table des mois
Num Mois = MONTH ( BaseVente[Date de vente] )
Mois = FORMAT ( DATE ( 2020 , BaseVente[Num Mois] , 1 ) , "mmmm" )
Liste mois = SUMMARIZE ( BaseVente , BaseVente[Num Mois] , BaseVente[Mois] )
B. La mesure de cumul
CA cumulé mois sélectionné =
VAR ms = SELECTEDVALUE ( 'Liste mois'[Num Mois] , 12 )
RETURN
CALCULATE (
SUM ( BaseVente[Chiffre d'affaires] ) ,
FILTER ( BaseVente , BaseVente[Num Mois] <= ms )
)
≈ En Excel : comme lire la valeur choisie dans une liste déroulante, puis l'utiliser dans une formule. Ici, le segment « mois » joue le rôle de la liste déroulante.
SELECTEDVALUE renvoie la valeur si une seule est sélectionnée dans le segment, sinon la valeur par défaut (ici 12 = décembre, donc l'année entière). On cumule ensuite tous les mois ≤ mois choisi.
AVERAGE() & AVERAGEX()
Moyenne d'une colonne vs moyenne par critèreCalculer la moyenne d'une vente, puis la moyenne du CA par mois.
CA moyen d'une vente = AVERAGE ( BaseVente[Chiffre d'affaires] )
CA moyen par mois =
AVERAGEX (
VALUES ( BaseVente[Date de vente].[Mois] ) ,
[CA total]
)
≈ En Excel : AVERAGE ≈ MOYENNE(). AVERAGEX ≈ faire la moyenne d'un calcul effectué par groupe (comme une moyenne des sous-totaux d'un TCD).
AVERAGE moyenne une colonne (ligne par ligne). AVERAGEX moyenne une expression évaluée par groupe : ici, il calcule le CA total de chaque mois, puis fait la moyenne de ces 12 totaux. Ce n'est pas du tout la même chose !
Moyenne mobile (mesure rapide)
Lisser une courbe sur les 3 derniers moisCréer une moyenne mobile du CA total sur les 3 derniers mois pour lisser les variations.
La méthode simple — Mesure rapide
- Clic droit sur la table → Nouvelle mesure rapide.
- Calcul : Moyenne mobile. Champ de base = CA total, période = 3 mois.
- Power BI génère automatiquement la formule DAX complète.
La formule produite par Power BI ressemble à ceci (à connaître, pas à taper à la main) :
Moyenne mobile CA TOTAL =
IF (
ISFILTERED ( BaseVente[Date de vente] ) ,
ERROR ( "Les mesures de Time Intelligence doivent être filtrées par une colonne de dates." ) ,
VAR __LAST_DATE = ENDOFMONTH ( BaseVente[Date de vente].[Date] )
VAR __DATE_PERIOD =
DATESBETWEEN (
BaseVente[Date de vente].[Date] ,
STARTOFMONTH ( DATEADD ( __LAST_DATE , -3 , MONTH ) ) ,
__LAST_DATE
)
RETURN
AVERAGEX (
CALCULATETABLE (
SUMMARIZE (
VALUES ( BaseVente ) ,
BaseVente[Date de vente].[Année] ,
BaseVente[Date de vente].[Trimestre] ,
BaseVente[Date de vente].[Mois]
) ,
__DATE_PERIOD
) ,
CALCULATE ( [CA total] , ALL ( BaseVente[Date de vente].[Jour] ) )
)
)
≈ En Excel : la moyenne mobile que tu calculerais avec MOYENNE() sur une fenêtre glissante (ex. les 3 derniers mois). Power BI génère la formule à ta place.
Tu reconnais maintenant presque toutes les briques : VAR/RETURN, AVERAGEX, SUMMARIZE, CALCULATE, ALL… Les mesures rapides sont un excellent moyen d'apprendre en lisant le DAX qu'elles génèrent.
🏆 Félicitations ! Tu as terminé les 4 compétences. Tu sais transformer, modéliser et analyser des données avec Power BI, du nettoyage Power Query jusqu'au DAX avancé. Prochaine étape : publier ton rapport sur le service Power BI et le partager !