Forum Discussion
Issue with SAMEPERIODLASTYEAR in Enhanced DAX Time Intelligence (Preview) Week 53 returns incorrect
We are testing the new Enhanced DAX Time Intelligence (Preview) functionality in Microsoft Power BI Desktop which allows defining custom calendars (e.g., fiscal years, 4-5-4 retail calendars) directly in the data model.
Steps :
1. Customized the calendar like below
2. TY Sales = CALCULATE(sum('fact'[sales]))
3. LY sales = CALCULATE(sum('fact'[sales]), SAMEPERIODLASTYEAR('Date(454)') )
It should return null/ blank values for week 53 dates.
Appreciate your help in resolving this issue.
9 Replies
- Ahmed-Elfeel
Super User
Hi bpratyusha,
Let me clarify this issue for you...this issue occurs because SAMEPERIODLASTYEAR uses a standard 365 day calendar while your fiscal calendar has 364-368 days and sometimes 53 weeks
So here is some Approaches to solve it you can try:
- Use Custom DAX with FILTER
- Replace your LY sales measure with this pattern:
LY Sales Corrected = VAR CurrentFiscalYear = SELECTEDVALUE('Date(454)'[fiscal_year]) VAR CurrentFiscalDay = SELECTEDVALUE('Date(454)'[fiscal_day_in_year]) VAR PreviousFiscalYear = CurrentFiscalYear - 1 RETURN CALCULATE( SUM('fact'[sales]), FILTER( ALL('Date(454)'), 'Date(454)'[fiscal_year] = PreviousFiscalYear && 'Date(454)'[fiscal_day_in_year] = CurrentFiscalDay ) )- Handle Week 53 Specifically
LY Sales Week53 Fixed = VAR CurrentDate = MAX('Date(454)'[calendar_date]) VAR CurrentFiscalYear = MAX('Date(454)'[fiscal_year]) VAR CurrentFiscalWeek = MAX('Date(454)'[fiscal_week_in_year]) VAR LYDate = SAMEPERIODLASTYEAR('Date(454)'[calendar_date]) RETURN IF( CurrentFiscalWeek = 53 && NOT EXISTS( FILTER( ALL('Date(454)'), 'Date(454)'[fiscal_year] = CurrentFiscalYear - 1 && 'Date(454)'[fiscal_week_in_year] = 53 ) ), BLANK(), CALCULATE(SUM('fact'[sales]), LYDate) )Date Table Enhancement
Add a column to your date table to identify valid same-period-last-year dates:
// Add this as a calculated column to DimDate Valid SPY Date = VAR CurrentFiscalYear = [fiscal_year] VAR CurrentFiscalDay = [fiscal_day_in_year] RETURN CALCULATE( COUNTROWS('Date(454)'), FILTER( ALL('Date(454)'), 'Date(454)'[fiscal_year] = CurrentFiscalYear - 1 && 'Date(454)'[fiscal_day_in_year] = CurrentFiscalDay ) ) > 0I suggest starting with First Solution as it's the most reliable for custom fiscal calendars. It directly matches fiscal days between years rather than relying on calendar date offsets.
if this post helps, then I would appreciate a thumbs up and mark it as the solution to help the other members find it more quickly. - Use Custom DAX with FILTER
- v-dineshya
Community Support
Hi bpratyusha ,
Thank you for reaching out to the Microsoft Community Forum.
Hi Ahmed-Elfeel , Thank you for your prompt response.
Hi bpratyusha , Could you please try the proposed solution shared by Ahmed-Elfeel ? Let us know if you’re still facing the same issue we’ll be happy to assist you further.
Regards,
Dinesh
- bpratyushaRegular Visitor
Hello v-dineshya ,
I have followed all the steps to work with Enhanced Time Intelligence feature according to the documentation https://learn.microsoft.com/en-us/power-bi/transform-model/desktop-time-intelligence and defined the Retail calendar (pattern).
I have defined all the highlighted categories as shown in the picture.
Created the following measure to test this feature
LY sales (sameperiodly) = CALCULATE(sum('fact'[sales]), SAMEPERIODLASTYEAR('Date(454)') )
LY Sales (dateadd) = CALCULATE(sum('fact'[sales]), DATEADD('Date(454)' , -1, YEAR))
LY Sales correctedWhen SamePeriodLastYear is used the LY sales appear to same for all days in week 53
When DateAdd is used then week 53 it returns null values only bug is the highlighted LY sales in the image (in red) which is almost 6 times.
LY sales corrected values appears to be correct , however I don’t see value in Total column
Is there any bug with Sameperiodlastyear and DateAdd functionality even after the new Enhanced Time Intelligence feature is launched ? Please help me resolve the issue.
- v-dineshya
Community Support
Hi bpratyusha ,
SAMEPERIODLASTYEAR works by shifting the entire set of dates by one year, but it expects a continuous date range. In a 454 calendar, Week 53 is not always present in the previous year. When it tries to map Week 53 from the current year to last year, it often defaults to the last available date range, causing repeated values. This is why you see the same LY Sales for all days in Week 53.
DATEADD shifts each date individually by the specified interval like -1 YEAR.
If the shifted date doesn’t exist in your custom calendar like Week 53 last year, it returns BLANK. This is expected behavior for DATEADD with non-standard calendars.Your corrected measure likely uses logic like IF(HASONEVALUE(...), ... , BLANK()) or similar row-level calculation. Totals disappear because the calculation doesn’t aggregate properly at higher levels like month or year.
No, this is not a bug. It’s a limitation of how these functions work with custom calendars. The new Enhanced Time Intelligence feature helps generate relationships and patterns, but it doesn’t change the fundamental behavior of SAMEPERIODLASTYEAR or DATEADD.
Please try below alternative workaround.
1. Create a mapping table for current year vs. last year weeks including Week 53 logic.
2. Use LOOKUPVALUE or TREATAS to map the correct week from last year.
3. Alternatively, use OFFSET-based functions introduced in Enhanced Time Intelligence like OFFSET(-1, YEAR), which are designed for irregular calendars.
Please refer below sample measure.
LY Sales (Offset) =
CALCULATE(
SUM('fact'[sales]),
OFFSET(-1, YEAR, ALL('Date(454)'))
)
Please refer below links.SAMEPERIODLASTYEAR function (DAX) - DAX | Microsoft Learn
Solved: SAMEPERIODLASTYEAR AND DATEADD DIFFERENT RESULTS F... - Microsoft Fabric Community
I hope this information helps. Please do let us know if you have any further queries.
Regards,
Dinesh