Exercice 55 / 60

Metriques SaaS — MRR et churn

ConsigneSur la table subscriptions (customer_id, amount, period_start, status = 'active'), calcule par mois : le MRR total (total_mrr), le nouveau MRR (new_mrr), l'expansion (expansion_mrr), le churn (churned_mrr), la variation nette (net_mrr_change = new + expansion − churn − contraction) et le taux de churn en % (churn_rate_pct). Les quatre mouvements comparent chaque mois au mois PRÉCÉDENT : le churn d'un mois est le MRR des clients qui étaient là le mois d'avant et qui n'y sont plus, rapporté au MRR total de ce mois d'avant. Trie par mois.

📖 Cours

Métriques SaaS d'abonnement :

MRR = revenu récurrent mensuel (somme des abonnements actifs)Churn = taux de clients/revenus perdus sur le moisMRR net = nouveau + expansion - churn - contraction
Le MRR net est ce qui reste une fois retirés le churn et les contractions de ce qu'apportent les nouveaux abonnements et les expansions
Le MRR net est ce qui reste une fois retirés le churn et les contractions de ce qu'apportent les nouveaux abonnements et les expansions

On agrège les abonnements par mois (date_trunc('month', ...)) puis on compare mois par mois avec lag.

Attention au sens DE LA comparaison. Si l'on compte comme churn tout client absent du mois suivant, le dernier mois de la table affiche mécaniquement 100 % de churn : il n'a pas de mois suivant, et l'absence de données est prise pour un départ. Or c'est justement le mois le plus récent qu'on regarde. On mesure donc le churn d'un mois par rapport au mois précédent : les clients qui étaient là le mois d'avant et qui n'y sont plus. Le premier mois de la table n'a alors pas de churn calculable, ce qui est normal et se voit tout de suite.

Exemple (table abonnements) :

WITH mrr_mensuel AS ( SELECT DATE_TRUNC('month', debut_periode) AS mois, client_id, SUM(montant) AS mrr FROM abonnements GROUP BY mois, client_id)SELECT mois, SUM(mrr) AS mrr_total FROM mrr_mensuel GROUP BY mois;

Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →