Analyse de cohortes
L'idée en une phrase
- Une cohorte regroupe les clients acquis au cours d'une même période (ici, le mois de leur premier achat). L'analyse de cohortes suit chaque groupe dans le temps pour mesurer la fidélisation : sur les clients acquis en janvier, combien reviennent un mois, deux mois, trois mois plus tard ?
- Elle est très utilisée en SaaS, en e-commerce et en marketing pour juger la rétention et l'attrition (churn).
Fichier d'exercice
- Cohortes_Depart : le modèle sans les colonnes ni les mesures, avec les consignes. Décompressez le dossier, puis ouvrez le fichier
.pbip. - Jeu de données fictif : 1 105 clients acquis de janvier 2024 à décembre 2025, 4 477 commandes.
- Corrigé : le PBIP Cohortes_Corrige (colonnes calculées, mesures Clients, Rétention %, Cohorte et CA cumulé par client, une page par matrice) est remis par le formateur.
Ce que l'on veut obtenir
Une matrice en « triangle » :
- En lignes : le mois d'acquisition (mois du premier achat).
- En colonnes : le nombre de mois écoulés depuis l'acquisition (0, 1, 2, 3...).
- Dans les cellules : le nombre de clients de la cohorte qui ont acheté ce mois-là, puis le même nombre en pourcentage de la cohorte de départ.
Extrait du résultat attendu :
| Premier achat | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| janv. 2024 | 70 | 19 | 20 | 23 | 17 | 16 | 12 |
| févr. 2024 | 62 | 20 | 24 | 24 | 13 | 7 | 15 |
| mars 2024 | 66 | 20 | 18 | 18 | 11 | 10 | 16 |
Lecture : 70 clients ont été acquis en janvier 2024 ; 19 d'entre eux ont racheté le mois suivant, 20 deux mois après, etc. La case en bas à droite reste vide : ces mois ne sont pas encore écoulés.
Le modèle de données
Un schéma en étoile minimal suffit :
- Ventes (table de faits) :
NumCommande,Date,ClientID,Montant. - Client (dimension) :
ClientID,Client,Segment,Pays. - Calendrier : table de dates marquée (non indispensable à la matrice).
- Relation un-à-plusieurs
Client[ClientID]versVentes[ClientID].
Il manque deux informations, que l'on va calculer : le mois d'acquisition de chaque client et, pour chaque vente, le nombre de mois écoulés depuis ce mois.
Étape 1 : la date du premier achat (colonne calculée dans Client)
Premier essai :
Premier achat = MIN ( Ventes[Date] )- Résultat : la même date sur toutes les lignes, la plus petite date de toute la table Ventes. Le contexte de ligne (« je suis sur le client 12 ») ne filtre pas la table Ventes.
Version correcte :
Premier achat = EOMONTH ( CALCULATE ( MIN ( Ventes[Date] ) ), 0 )CALCULATEdéclenche la transition de contexte : la ligne courante devient un filtreClient[ClientID] = 12, propagé à Ventes par la relation. On obtient la première date d'achat de ce client. Voir
CALCULATE et transition de contexte.EOMONTH ( date, 0 )ramène cette date au dernier jour de son mois : tous les clients acquis en janvier 2024 partagent la valeur 31/01/2024 et forment une seule ligne de la matrice.- Mettez la colonne au format mmm aaaa (par exemple « janv. 2024 »).
- Source (Microsoft Learn)
Étape 2 : la période de cohorte (colonne calculée dans Ventes)
Periode cohorte = DATEDIFF ( RELATED ( Client[Premier achat] ), Ventes[Date], MONTH )RELATEDva chercher la date du premier achat dans la table Client (l'équivalent d'une RECHERCHEV).DATEDIFF ( date la plus ancienne, date la plus récente, MONTH )compte les changements de mois entre les deux dates : 0 pour un achat le mois de l'acquisition, 1 le mois suivant, etc.- Contrôle : filtrez la table Ventes sur un client et triez par date ; la colonne vaut 0 sur ses premiers achats puis augmente au fil des mois.
- Source (Microsoft Learn)
Étape 3 : compter les clients (mesure)
Clients = DISTINCTCOUNT ( Ventes[ClientID] )- Un client apparaît sur plusieurs lignes de Ventes : il faut compter les identifiants distincts, pas les lignes.
- Source (Microsoft Learn)
Étape 4 : la matrice de cohortes
Insérez un visuel Matrice :
- Lignes :
Client[Premier achat]. - Colonnes :
Ventes[Periode cohorte]. - Valeurs :
[Clients].
Vous obtenez une analyse de cohortes en nombre de clients. En remplaçant [Clients] par [CA], la même matrice donne le chiffre d'affaires de chaque cohorte au fil des mois.
Étape 5 : la rétention en pourcentage
Le nombre brut se compare mal d'une cohorte à l'autre (70 clients en janvier 2024, 26 en décembre 2025). On rapporte donc chaque cellule à la taille de sa cohorte, c'est-à-dire au nombre de clients de la colonne 0.
Rétention % =
VAR depart =
CALCULATE ( [Clients], Ventes[Periode cohorte] = 0 )
RETURN
DIVIDE ( [Clients], depart )- Dans une cellule (cohorte janvier 2024, période 3),
CALCULATEremplace le filtre de la colonne (période 3) par la période 0, mais garde celui de la ligne (janvier 2024) :departvaut 70. DIVIDErenvoie 23 / 70 = 33 %. Mettez la mesure au format pourcentage sans décimale.- Ajoutez une
Mise en forme conditionnelle (couleur d'arrière-plan en dégradé) pour obtenir une carte de chaleur. - Source (Microsoft Learn)
Variante : nombre en période 0, pourcentage ensuite
Une formule courante affiche la taille de la cohorte en colonne 0 et des pourcentages ensuite, avec FORMAT :
Rétention % (texte) =
VAR depart =
CALCULATE ( [Clients], Ventes[Periode cohorte] = 0 )
RETURN
IF (
SELECTEDVALUE ( Ventes[Periode cohorte] ) = 0,
[Clients],
FORMAT ( DIVIDE ( [Clients], depart ), "0%" )
)- Inconvénient :
FORMATrenvoie du texte. La mesure ne se prête plus à la mise en forme conditionnelle, ni aux graphiques, ni aux calculs.
Version recommandée : la valeur reste numérique et seule la chaîne de format dynamique change.
Cohorte =
VAR depart =
CALCULATE ( [Clients], Ventes[Periode cohorte] = 0 )
RETURN
IF (
SELECTEDVALUE ( Ventes[Periode cohorte] ) = 0,
[Clients],
DIVIDE ( [Clients], depart )
)Chaîne de format dynamique de la mesure (Outils de mesure, Format, Dynamique) :
IF ( SELECTEDVALUE ( Ventes[Periode cohorte] ) = 0, "0", "0 %" )- Source (Microsoft Learn)
Pour aller plus loin : la valeur cumulée d'un client
CA cumulé par client =
VAR depart =
CALCULATE ( [Clients], Ventes[Periode cohorte] = 0 )
RETURN
DIVIDE (
CALCULATE ( [CA], Ventes[Periode cohorte] <= MAX ( Ventes[Periode cohorte] ) ),
depart
)MAX ( Ventes[Periode cohorte] )est évalué dans le contexte de la cellule (par exemple 5), avant queCALCULATEne remplace le filtre par « période de 0 à 5 ».- Lecture : « en moyenne, un client acquis en janvier 2024 a rapporté tant d'euros au cours de ses 6 premiers mois ».
- Le taux d'attrition d'une période se déduit de la rétention :
1 - [Rétention %].
Pièges fréquents
- Oublier CALCULATE dans la colonne Premier achat : toutes les lignes affichent la même date.
- Inverser les dates de DATEDIFF : on obtient des périodes négatives. La date la plus ancienne vient en premier.
- Compter les lignes (
COUNTROWS ( Ventes )) au lieu des clients distincts : un client qui commande deux fois dans le mois est compté deux fois. - Hiérarchie de dates automatique : si l'option Date/heure automatique est active, Premier achat s'affiche en Année, Trimestre, Mois. Utilisez la colonne elle-même (et non sa hiérarchie) dans la matrice.
Source
- D'après la vidéo Build a Cohort Analysis Dashboard in Power BI (Goodly), adaptée et complétée en français.