3.2 · Time intelligence : cumuls (YTD) & comparaison N-1

Niveau 3 · Analyse avancée

3.2Time intelligence : cumuls (YTD) & comparaison N-1

Objectif : Construire le quatuor de pilotage (CA YTD, CA N-1, évolution en valeur et en %) et le poser dans une matrice temporelle qui répond à la direction d'un regard.
Temps estimé : 22 min · lecture autonome · Si vous n'avez que 5 min : lisez « L'essentiel en 30s » + le schéma.

L'essentiel en 30 secondes

  • La question n°1 de toute direction — « où en est-on vs l'an dernier ? » — se répond avec trois fonctions : TOTALYTD (cumul), SAMEPERIODLASTYEAR (même période N-1) et DATEADD (décalage générique).
  • Prérequis absolu : la table de dates marquée — sans elle, ces fonctions renvoient des résultats faux, surtout le cumul et la comparaison.
  • L'évolution s'exprime toujours en valeur ET en % : les deux mesures vont par paire, et l'ensemble forme le quatuor de pilotage.

Mini-cas filé — Zineb répond à la direction en un regard

La direction de la PME agroalimentaire de Zineb demande chaque lundi : « où en est-on par rapport à l'an dernier ? ». Plutôt que de recalculer à la main, Zineb applique la section : elle vérifie d'abord que sa table de dates est bien marquée (prérequis absolu), puis construit le quatuor — CA YTD = TOTALYTD([Total CA]; Dates[Date]) pour le cumul depuis janvier, CA N-1 = CALCULATE([Total CA]; SAMEPERIODLASTYEAR(Dates[Date])) pour la même période un an plus tôt, puis l'évolution en valeur et en %. Elle les pose dans une matrice Mois × 4 mesures : la réponse à la direction tient sur un seul visuel, et le cumul grimpe avant de repartir en janvier.

Cas autonome de cette section : il revient dans le cours, le schéma, le script et le défi 48h de la section 3.2.

1. Les trois fonctions phares

La time intelligence DAX répond à la question n°1 de toute direction avec trois fonctions : TOTALYTD (le cumul depuis le début d'année), SAMEPERIODLASTYEAR (la même période un an plus tôt) et DATEADD (le décalage générique, plus souple). Elles ne calculent jamais « toutes seules » : elles déplacent une période dans le temps.

2. Le prérequis non négociable

Prérequis absolu : la table de dates marquée comme table de dates. Sans elle, ces fonctions mentent — un CA N-1 vide ou un cumul faux vient presque toujours de là. Zineb vérifie ce réglage avant de douter de sa formule.

3. Le quatuor de pilotage

On assemble le quatuor standard de tout rapport de direction : CA YTD, CA N-1, évolution en valeur et évolution en %. Ces mesures se construisent une fois proprement et se copient de modèle en modèle. L'évolution s'exprime toujours en valeur ET en % : les deux vont par paire.

Erreur d'interprétation fréquente : « La time intelligence, c'est magique : j'écris TOTALYTD et ça marche sans rien préparer ; l'évolution peut rester en valeur seule, et le N-1 tombe juste même sans historique. » Non, triple erreur. Sans table de dates marquée, TOTALYTD et SAMEPERIODLASTYEAR mentent — c'est le prérequis absolu. L'évolution s'exprime en valeur ET en % : la valeur seule ne dit pas l'ampleur relative. Et un CA N-1 vide est souvent normal quand l'historique ne couvre pas l'année précédente — on vérifie la table, la relation, puis l'historique, dans cet ordre.
Le quatuor de pilotage Cumuler, comparer, chiffrer l'écart : le quatuor qui répond à « où en est-on ? ». CA YTD TOTALYTD([TotalCA]; Dates[Date])CA N-1 SAMEPERIODLASTYEARÉvolution Valeur puis% (DIVIDE)
Cumuler, comparer, chiffrer l'écart : le quatuor qui répond à « où en est-on ? ».
Version texte du schéma (SEO / lecteurs d'écran / traduction) : 1) Zineb, contrôleuse de gestion à Alger, répond à la question de la direction : « où en est-on vs l'an dernier ? ». 2) Elle vérifie le prérequis — la table de dates marquée — puis construit CA YTD = TOTALYTD([Total CA]; Dates[Date]) pour le cumul annuel et CA N-1 = CALCULATE([Total CA]; SAMEPERIODLASTYEAR(Dates[Date])) pour la même période un an plus tôt. 3) Elle complète l'évolution en valeur ([Total CA] - [CA N-1]) et en % (DIVIDE de l'écart par [CA N-1]), puis pose le tout dans une matrice Mois × 4 mesures. Leçon : la time intelligence s'appuie toujours sur la table de dates marquée, et l'évolution va par paire valeur + pourcentage.

🔎 Exemple concret — 🔎 Exemple concret — Les mesures temporelles

Le quatuor standard, réutilisable sur tous les modèles de Zineb :

CA YTD  = TOTALYTD([Total CA]; Dates[Date])
CA N-1  = CALCULATE([Total CA]; SAMEPERIODLASTYEAR(Dates[Date]))
Evol    = [Total CA] - [CA N-1]
Evol %  = DIVIDE([Total CA] - [CA N-1]; [CA N-1])   // format %

Lecture : TOTALYTD cumule depuis janvier et repart à zéro en début d'année ; SAMEPERIODLASTYEAR décale le calcul d'un an en arrière.

Leçon : DIVIDE([Total CA] - [CA N-1]; [CA N-1]) donne l'écart relatif — l'évolution va par paire valeur + %.

Vocabulaire de la section

Time intelligence
La famille de fonctions DAX qui manipulent les périodes (cumuls, décalages, comparaisons), toutes appuyées sur la table de dates.

Exemple simple : Zineb y recourt pour le cumul annuel et la comparaison N-1 de la PME.

Ce que ce n'est pas : un simple filtre de dates posé à la main sur un visuel.

Réflexe : comparer des périodes → time intelligence.

TOTALYTD
Le cumul annuel depuis le début de l'année : TOTALYTD([Total CA]; Dates[Date]).

Exemple simple : Zineb suit le CA cumulé depuis janvier pour la direction.

Ce que ce n'est pas : le CA du mois seul, sans cumul.

Réflexe : cumul annuel → TOTALYTD.

SAMEPERIODLASTYEAR
La même période un an plus tôt : CALCULATE([Total CA]; SAMEPERIODLASTYEAR(Dates[Date])).

Exemple simple : Zineb compare le mois courant au même mois de l'an dernier.

Ce que ce n'est pas : une période quelconque sans repère de date.

Réflexe : comparaison N-1 → SAMEPERIODLASTYEAR.

DATEADD
Le décalage générique : DATEADD(Dates[Date]; -1; MONTH) pour le mois précédent — plus flexible que les fonctions dédiées.

Exemple simple : Zineb l'utilise pour un décalage sur mesure.

Ce que ce n'est pas : une fonction figée sur un seul type de période.

Réflexe : décalage sur mesure → DATEADD.

Évolution N-1
Le duo final : Evol = [CA] - [CA N-1] et Evol % = DIVIDE([CA] - [CA N-1]; [CA N-1]).

Exemple simple : Zineb affiche l'écart en valeur et en % côte à côte.

Ce que ce n'est pas : une évolution en valeur seule, sans ampleur relative.

Réflexe : toujours valeur ET pourcentage.

En pratique — En pratique — Le quatuor de pilotage

  1. Créez CA YTD = TOTALYTD([Total CA]; Dates[Date]) et vérifiez dans une matrice Mois × mesures : le cumul grimpe puis repart en janvier, comme chez Zineb.
  2. Créez CA N-1 = CALCULATE([Total CA]; SAMEPERIODLASTYEAR(Dates[Date])) (nécessite un historique sur deux ans — dupliquez les ventes décalées d'un an dans le CSV si besoin).
  3. Complétez Évol % = DIVIDE([Total CA] - [CA N-1]; [CA N-1]) en format %.
  4. Assemblez la matrice de pilotage : Mois en lignes, les 4 mesures en valeurs — la réponse à « où en est-on ? » tient sur un visuel.
Les mesures temporelles standard de tout tableau de bord de direction — réutilisables sur tous vos futurs modèles.

Script pas-à-pas — le quatuor de Zineb (10 min)

1) Vérifiez que votre table de dates est marquée comme table de dates (Outils de table). 2) Créez CA YTD = TOTALYTD([Total CA]; Dates[Date]). 3) Créez CA N-1 = CALCULATE([Total CA]; SAMEPERIODLASTYEAR(Dates[Date])). 4) Ajoutez Evol = [Total CA] - [CA N-1] et Evol % = DIVIDE([Total CA] - [CA N-1]; [CA N-1]) en %. 5) Posez Mois en lignes et les 4 mesures en valeurs : lisez la réponse à la direction d'un seul regard.

Un CA N-1 vide ? Vérifiez dans l'ordre : table de dates marquée, relation active sur la bonne colonne, historique couvrant l'année précédente.

Modèle copier-coller — le quatuor temporel

CA YTD  = TOTALYTD([Total CA]; Dates[Date])
CA N-1  = CALCULATE([Total CA]; SAMEPERIODLASTYEAR(Dates[Date]))
Evol    = [Total CA] - [CA N-1]
Evol %  = DIVIDE([Total CA] - [CA N-1]; [CA N-1])   // %

Prérequis : table de dates MARQUÉE. Réflexe : évolution = valeur + %.

Cumul annuel

Zineb suit le CA cumulé depuis janvier (TOTALYTD) : la courbe grimpe puis repart à chaque nouvelle année.

Même mois N-1

Zineb compare le mois courant au même mois un an plus tôt (SAMEPERIODLASTYEAR) pour lisser la saisonnalité.

Mois précédent

Zineb décale d'un mois avec DATEADD pour suivre la tendance de court terme.

Exercice fiscal décalé

Clôture en juin : Zineb passe la date de fin d'exercice à TOTALYTD pour respecter l'exercice fiscal de la PME.

✓ Bonnes pratiques

  • S'appuyer sur la table de dates marquée : c'est le prérequis non négociable.
  • Construire ces mesures une fois proprement : elles se copient de modèle en modèle.
  • Exprimer l'évolution en valeur ET en % (les deux vont par paire).

✗ Pièges fréquents

  • Oublier de marquer la table de dates (les fonctions mentent).
  • Faire passer la relation date par la mauvaise colonne.
  • Attendre un CA N-1 sans historique couvrant l'année précédente.

Points clés à retenir

  • Toute la time intelligence repose sur la table de dates MARQUÉE : le prérequis n'était pas optionnel.
  • TOTALYTD, SAMEPERIODLASTYEAR, DATEADD : trois fonctions couvrent les demandes courantes.
  • L'évolution s'exprime en valeur ET en % : les deux mesures vont par paire.
  • Construisez ces mesures une fois proprement : elles se copient de modèle en modèle toute votre carrière.

Défi 48h — appliquez demain

Construisez le quatuor de pilotage de Zineb sur vos données : CA YTD, CA N-1, évolution en valeur et en %. Posez-le dans une matrice Mois × mesures, puis vérifiez que le cumul repart bien en janvier et que votre table de dates est marquée.

Checklist sortie de section
  • Je peux écrire un cumul annuel avec TOTALYTD.
  • Je sais comparer une période à N-1 avec SAMEPERIODLASTYEAR.
  • Je connais le prérequis : la table de dates marquée.
Auto-évaluation 1-5 : est-ce que j'explique pourquoi la table de dates doit être marquée ?Auto-évaluation 1-5 : ai-je assemblé le quatuor CA YTD / N-1 / évolution ?

Questions fréquentes

Mon CA N-1 affiche vide ou faux : pourquoi ?

Trois suspects, à vérifier dans cet ordre (l'un d'eux est en cause à 95 %) : la table de dates n'est pas marquée comme table de dates ; la relation passe par la mauvaise colonne de date (ou est inactive) ; l'historique ne couvre pas N-1 (le N-1 de janvier est alors vide, ce qui est normal). Commencez toujours par la table de dates marquée.

Comment gérer un exercice fiscal décalé (clôture en juin) ?

TOTALYTD accepte un troisième argument, la date de fin d'exercice : TOTALYTD([CA]; Dates[Date]; "30/06") cumule depuis le 1er juillet. Pour des besoins plus complexes, on enrichit la table de dates de colonnes fiscales (AnnéeFiscale, MoisFiscal) — la beauté d'avoir sa propre table calendrier maîtrisée.

Vérifiez votre compréhension

Quel prérequis absolu pour que la time intelligence fonctionne ?

Ressources supplémentaires (optionnel, pour aller plus loin)

Examen du niveau 3Questions inédites et durcies pour valider vos acquis