top of page
Rechercher

SAMEPERIODLASTYEAR dans Power BI : comparer avec l'année précédente

Groupe Kronoscope
24 sept.
6 min de lecture

SAMEPERIODLASTYEAR compare une période avec la même période un an plus tôt.

C'est la fonction la plus utilisée de l'intelligence temporelle en DAX.

C'est aussi celle qui renvoie le plus souvent un résultat vide.

Cet article montre son mécanisme, ses trois causes d'échec et le piège du mois en cours.




Télécharger le pack d'exercices sur l'intelligence temporelle

Le pack contient un jeu de données fictif sur deux exercices. L'année 2024 est complète.

L'année 2025 s'arrête volontairement au 31 août. C'est ce qui permet de reproduire le piège du mois en cours.

  • Exercices_SAMEPERIODLASTYEAR.xlsx : 120 lignes de ventes, 8 questions et un corrigé avec validation automatique.

  • Code_M_Calendrier.txt : le code Power Query qui génère une table de dates sur des années civiles complètes.

  • Mesures_DAX_SAMEPERIODLASTYEAR.txt : les 7 mesures de l'article, prêtes à coller.

Retrouvez aussi tous nos exercices Power BI gratuits.



Ce que fait vraiment SAMEPERIODLASTYEAR

SAMEPERIODLASTYEAR ne calcule aucun montant.

Elle renvoie une table de dates.

Ce sont les dates du contexte courant, reculées d'un an.

C'est CALCULATE qui les applique ensuite comme filtre.


La syntaxe

Syntaxe

SAMEPERIODLASTYEAR ( <dates> )

Un seul argument : la colonne de dates de votre table de dates.

L'argument accepte une référence de colonne de type date. Il accepte aussi une expression qui renvoie une seule colonne de dates.

La documentation Microsoft précise que le résultat est identique à DATEADD ( dates, -1, YEAR ).


La démonstration, valeur par valeur

Voici un extrait simplifié de la table Ventes. Les données sont fictives.

Date

Montant

15/01/2024

12 000 €

15/02/2024

9 000 €

15/03/2024

15 000 €

15/01/2025

14 000 €

15/02/2025

8 000 €

15/03/2025

18 000 €

Deux mesures suffisent.

CA = SUM ( Ventes[Montant] )

CA N-1 =
CALCULATE (
    [CA],
    SAMEPERIODLASTYEAR ( Calendrier[Date] )
)

Plaçons-nous sur la ligne mars 2025 d'un visuel.

Le contexte filtre les dates du 01/03/2025 au 31/03/2025.

SAMEPERIODLASTYEAR renvoie alors les dates du 01/03/2024 au 31/03/2024.

Voici les lignes retenues par ce filtre.

Date

Montant

Retenu ?

15/01/2024

12 000 €

✗

15/02/2024

9 000 €

✗

15/03/2024

15 000 €

✓

15/01/2025

14 000 €

✗

15/02/2025

8 000 €

✗

15/03/2025

18 000 €

✗

Total

15 000 €


La mesure CA N-1 vaut donc 15 000 € sur la ligne mars 2025.

Le même raisonnement s'applique à chaque ligne du visuel.

Mois

CA

CA N-1

Période reprise

Janvier 2025

14 000 €

12 000 €

01/01/2024 au 31/01/2024

Février 2025

8 000 €

9 000 €

01/02/2024 au 29/02/2024

Mars 2025

18 000 €

15 000 €

01/03/2024 au 31/03/2024

Total

40 000 €

36 000 €

01/01/2024 au 31/03/2024

Notez la ligne de février. La fonction reprend bien le 29 février 2024, car 2024 est bissextile.


Schéma du mécanisme de SAMEPERIODLASTYEAR dans Power BI. Il va du contexte de filtre de mars 2025 à l'évaluation du CA sur mars 2024.


Calculer l'écart et l'évolution en pourcentage

Le CA N-1 seul n'a pas d'intérêt. Ce qui compte, c'est la comparaison.

L'écart en valeur

Ecart N vs N-1 = [CA] - [CA N-1]

Cette mesure renvoie un montant. Elle est vide quand les deux mesures sont vides.


L'évolution en pourcentage

N'utilisez jamais l'opérateur de division ici. Le CA N-1 peut valoir zéro ou être vide.

Evolution % =
DIVIDE (
    [CA] - [CA N-1],
    [CA N-1]
)

DIVIDE renvoie du vide au lieu d'une erreur quand le dénominateur est nul.

Mois

CA

CA N-1

Écart

Évolution

Janvier 2025

14 000 €

12 000 €

+ 2 000 €

+ 16,7 %

Février 2025

8 000 €

9 000 €

- 1 000 €

- 11,1 %

Mars 2025

18 000 €

15 000 €

+ 3 000 €

+ 20,0 %

Total

40 000 €

36 000 €

+ 4 000 €

+ 11,1 %



Quand CA N-1 renvoie du vide, regardez le modèle

C'est le problème numéro un avec cette fonction. La mesure est correcte, mais la colonne reste vide.

Dans la quasi-totalité des cas, la cause se trouve dans le modèle de données.

La colonne de dates vient de la table de faits

C'est l'erreur la plus fréquente. Elle apparaît dans de nombreux tutoriels français.

// À éviter
CA N-1 = CALCULATE ( [CA], SAMEPERIODLASTYEAR ( Ventes[Date] ) )

// Correct
CA N-1 = CALCULATE ( [CA], SAMEPERIODLASTYEAR ( Calendrier[Date] ) )

La table de faits ne contient que les dates où une vente existe.

Les fonctions d'intelligence temporelle ont besoin d'une plage de dates continue.

Passez toujours par la colonne de dates de votre table de dates.


La table de dates est incomplète ou non marquée

Deux vérifications suffisent.

Première vérification : la table couvre des années civiles complètes.

Elle commence un 1er janvier et se termine un 31 décembre.

Deuxième vérification : la table est marquée comme table de dates. L'option se trouve dans l'onglet Outils de table.

Sans ce marquage, Power BI ne sait pas quelle colonne porte le temps.


Schéma listant les trois causes d'un CA N-1 vide dans Power BI et la correction associée à chacune.


Le piège du mois en cours

Ce piège est rarement expliqué. Il fausse pourtant tous les tableaux de bord d'année en cours.

Le symptôme, une évolution à moins 100 %

Votre table de dates couvre l'année 2025 entière. Vos ventes s'arrêtent au 31 mars 2025.

Le visuel affiche alors ceci.

Période

CA

CA N-1

Évolution

Mars 2025

18 000 €

15 000 €

+ 20,0 %

Avril 2025

(vide)

11 000 €

- 100,0 %

Année 2025

40 000 €

110 000 €

- 63,6 %

Avril 2025 n'a pas encore eu lieu. La fonction renvoie pourtant avril 2024.

Sur la ligne de total, le calcul compare 3 mois de 2025 à 12 mois de 2024.

Le résultat est mathématiquement exact. Il est commercialement faux.


La mesure comparable

La correction consiste à limiter le N-1 à la période réellement écoulée.

CA N-1 comparable =
VAR DerniereVente =
    CALCULATE ( MAX ( Ventes[Date] ), REMOVEFILTERS ( Calendrier ) )
VAR DerniereVenteN1 =
    EDATE ( DerniereVente, -12 )
VAR DatesComparables =
    FILTER (
        SAMEPERIODLASTYEAR ( Calendrier[Date] ),
        Calendrier[Date] <= DerniereVenteN1
    )
RETURN
    CALCULATE ( [CA], DatesComparables )

La variable DerniereVente cherche la dernière date de vente, tous filtres de dates retirés.

EDATE recule cette date de 12 mois. FILTER supprime ensuite les dates postérieures.

Période

CA

CA N-1 comparable

Évolution

Mars 2025

18 000 €

15 000 €

+ 20,0 %

Avril 2025

(vide)

(vide)

(vide)

Année 2025

40 000 €

36 000 €

+ 11,1 %

La comparaison porte maintenant sur trois mois contre trois mois.


Attention

Cette correction suppose que vos données sont à jour. Si une source est en retard de deux semaines, la période comparable se réduit d'autant.



Le comportement d'extension en fin de mois

Ce comportement est documenté par Microsoft. Il est absent de la quasi-totalité des articles français.

La règle vaut quand la sélection inclut les deux derniers jours d'un mois.

La fonction étend alors le résultat jusqu'à la fin du mois, un an plus tôt.

L'exemple officiel est parlant.

Sélection

Résultat renvoyé

27 et 28 février 2009

27 au 29 février 2008

27 février 2009 seul

27 février 2008

Dans le premier cas, la fonction ajoute le 29 février 2008. Ce jour n'existe pas en 2009.

Ce comportement évite de perdre une journée de chiffre d'affaires sur une année bissextile.

Il surprend en revanche quand vous comparez des périodes au jour près.



SAMEPERIODLASTYEAR, DATEADD ou PREVIOUSYEAR

Ces trois fonctions renvoient une table de dates décalée. Elles ne sont pas interchangeables.

Fonction

Ce qu'elle renvoie

À utiliser quand

SAMEPERIODLASTYEAR

La période du contexte, reculée d'un an

Vous comparez à N-1 et voulez l'écriture la plus lisible

DATEADD

La période du contexte, décalée du nombre d'unités choisi

Vous décalez d'un mois, d'un trimestre, ou de plusieurs années

PREVIOUSYEAR

L'année civile précédente entière

Vous voulez le total annuel N-1, quelle que soit la sélection

Une dernière limite à connaître. La fonction n'est pas prise en charge en mode DirectQuery dans une colonne calculée.

La même restriction s'applique aux règles de sécurité au niveau des lignes.


Le cas de l'intelligence temporelle basée sur un calendrier

La documentation Microsoft mentionne désormais un second usage de l'argument.

Cette intelligence temporelle basée sur un calendrier est arrivée en préversion en septembre 2025.

Elle permet de déclarer un calendrier personnalisé, par exemple un calendrier 4-4-5 ou fiscal.

SAMEPERIODLASTYEAR accepte alors une référence de calendrier à la place d'une colonne de dates.

Les résultats peuvent différer de l'intelligence temporelle classique.

Sur un calendrier, reculer le 29 février 2008 d'un an donne le 1er mars 2007.

En classique, la fonction renvoie le 28 février 2007.

La fonctionnalité était toujours en préversion à la date de rédaction. Vérifiez son statut dans la documentation officielle.


Retenez trois points. Passez par la table de dates, marquez-la, et couvrez des années entières.

Contrôlez ensuite votre ligne de total avant de publier le rapport.

 
 

Posts récents

Voir tout
bottom of page