Forum Discussion
Week Number Not Returning Week 1 In New Year
- 8 months ago
Hi L1102,
Oh ok let's give it some corrections touch..here is the corrected DAX formula that should work for your fiscal calendar (May 1 start, Thursday week start):
Fiscal Week Corrected = VAR CurrentDate = 'Sobeys Promo Calendar'[Promo Week Start Date] VAR CurrentYear = YEAR(CurrentDate) VAR May1Current = DATE(CurrentYear, 5, 1) VAR May1Previous = DATE(CurrentYear - 1, 5, 1) // Find first Thursday of May for current year VAR FirstThursdayCurrent = May1Current + SWITCH( WEEKDAY(May1Current, 2), 1, 3, // Monday -> Thursday is +3 days 2, 2, // Tuesday -> Thursday is +2 days 3, 1, // Wednesday -> Thursday is +1 day 4, 0, // Thursday -> no change 5, 6, // Friday -> next Thursday is +6 days 6, 5, // Saturday -> next Thursday is +5 days 7, 4 // Sunday -> next Thursday is +4 days ) // Find first Thursday of May for previous year VAR FirstThursdayPrevious = May1Previous + SWITCH( WEEKDAY(May1Previous, 2), 1, 3, 2, 2, 3, 1, 4, 0, 5, 6, 6, 5, 7, 4 ) // Determine which fiscal year the date belongs to VAR FiscalYearStart = IF( CurrentDate >= FirstThursdayCurrent, FirstThursdayCurrent, FirstThursdayPrevious ) // Calculate days difference VAR DaysDiff = CurrentDate - FiscalYearStart // Calculate week number VAR WeekNum = INT(DaysDiff / 7) + 1 RETURN WeekNumIf the above still has issues, try this version that ensures a full 7 day week calculation:
Fiscal Week Fixed = VAR CurrentDate = 'Sobeys Promo Calendar'[Promo Week Start Date] VAR CurrentYear = YEAR(CurrentDate) // Create May 1 dates for current and previous years VAR May1Current = DATE(CurrentYear, 5, 1) VAR May1Previous = DATE(CurrentYear - 1, 5, 1) // Function to find first Thursday VAR GetFirstThursday = VAR BaseDate = May1Current VAR DayNum = WEEKDAY(BaseDate, 2) VAR DaysToAdd = SWITCH( DayNum, 1, 3, // Monday -> Thursday 2, 2, // Tuesday -> Thursday 3, 1, // Wednesday -> Thursday 4, 0, // Thursday 5, 6, // Friday -> next week 6, 5, // Saturday -> next week 7, 4 // Sunday -> next week ) RETURN BaseDate + DaysToAdd VAR GetFirstThursdayPrevious = VAR BaseDate = May1Previous VAR DayNum = WEEKDAY(BaseDate, 2) VAR DaysToAdd = SWITCH( DayNum, 1, 3, 2, 2, 3, 1, 4, 0, 5, 6, 6, 5, 7, 4 ) RETURN BaseDate + DaysToAdd VAR FirstThursdayCurrent = GetFirstThursday VAR FirstThursdayPrevious = GetFirstThursdayPrevious // Determine correct fiscal year start VAR FiscalYearStart = IF( CurrentDate < FirstThursdayCurrent, FirstThursdayPrevious, FirstThursdayCurrent ) // Calculate week number ensuring it starts at 1 VAR WeekNumber = DIVIDE( CurrentDate - FiscalYearStart, 7, 0 // Returns 0 if error ) + 1 // Ensure week numbers are positive and within range RETURN IF( WeekNumber < 1, 52 + WeekNumber, // Handle rollover from previous year IF( WeekNumber > 52, WeekNumber - 52, // Handle overflow WeekNumber ) )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.
Hi L1102
Download example PBIX file with the data/code below
Given that your data has a date column and the fiscal year for that date, you can get the fiscal week with this
Fiscal Week = INT(([Date] - DATE([Year],5,1))/7) + 1
If your fiscal year starts on 1 May then Apr 30 2025 is actually the start of Week 53.
There are 365 days in a year (366 in a leap year) so 365 / 7 is 52.14. There are always 52 weeks plus another day, or two days in leap years.
If you really want to cap the week number to 52 then you can use this
Fiscal Week =
VAR _weeknum = INT(([Date] - DATE([Year],5,1))/7) + 1
RETURN
IF(_weeknum > 52, 52, _weeknum)
Regards
Phil
- L11028 months agoHelper I
Hi PhilipTreacy This didn't seem to work for me. For whatever reaseon when I use the INT funstion it gives me a - week number. This may be due to how my date and year is being calculated. My date is a min/max so I can get my calendar to start on the Thursday, and my fiscal year is a EDATE so I can line up the months in the proper year.
- PhilipTreacy8 months agoSuper User
Hi L1102
Download example PBIX file with the code/data shown below
What is pertinent is the first date of the fiscal year which I can see from your calculations is 1 May. It just happens to be a Thursday in 2024.
I can see that you are creating Sobeys Promo Calendar using MIN and MAX dates from Time_Table.
Though I am not sure what data is in Time_Table, so I have created a table called Sobeys Promo Calendar using some dummy data for Time_Table
Sobeys Promo Calendar = CALENDAR(MIN('Time_Table'[Week Start Date]), MAX('Time_Table'[Week End Date]))I can now create the (Fiscal) Year column using this
Year = IF(MONTH('Sobeys Promo Calendar'[Promo Week Start Date]) < 5, YEAR('Sobeys Promo Calendar'[Promo Week Start Date]) -1 , YEAR('Sobeys Promo Calendar'[Promo Week Start Date]))And the Fiscal Week using this
Fiscal Week = INT(('Sobeys Promo Calendar'[Promo Week Start Date] - DATE('Sobeys Promo Calendar'[Year],5,1))/7) + 1NOTE When creating calculated columns it is perfectly fine to use this syntax (without naming the table explicitly) because the columns being referred to, [Promo Week Start Date] and [Year] are in the table where you are creating the column
Fiscal Week = INT(([Promo Week Start Date] - DATE([Year],5,1))/7) + 1Additional Information
Just as a bit of hopeful useful info for you, when working with dates it's common practice to use a Date Table which is used specifically for creating/storing date related information, like fiscal periods, and is used in time intelligence calculations.
I see that you are using 'Sobeys Promo Calendar'[Promo Week Start Date].[Date] and the .[Date] bit would indicate that you don't have a proper Date Table.
Create the Date Table
DateTable = CALENDAR(MIN('Time_Table'[Week Start Date]), MAX('Time_Table'[Week End Date]))Create the fiscal year and week
Year = IF(MONTH([Date]) < 5, YEAR([Date]) -1 , YEAR([Date]))Fiscal Week = INT(([Date] - DATE([Year],5,1))/7) + 1Mark the date table as an actual date table and create a relationship between it and your main table, in this example I've called that main table Promo Calendar
Promo Calendar only has a single column of dates
But because it has a relationship to the Date Table you can create visuals with the Date column from Promo Calendar and the fiscal year and week from the Date Table
This gives you the same information in the visual as creating the columns.
Anyway, hope that isn't all information overload.
You can read more on Date Tables here
Design guidance for date tables in Power BI Desktop - Power BI | Microsoft Learn
Creating a simple date table in DAX - SQLBI
Regards
Phil