SAMEPERIODLASTYEAR dans Power BI : comparer avec l'année précédente
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.

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.

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.


