Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Join us for an expert-led overview of the tools and concepts you'll need to become a Certified Power BI Data Analyst and pass exam PL-300. Register now.

Reply
GopVan
Frequent Visitor

Week Number and ISO Week Number in Power Query

I have added a week number column in Power Query and the output was as follows:

 

26/12/2022 - Week 53

...

31/12/2022 - Week 53

01/01/2023 - Week 1

02/01/2023 - Week 2

 

What is the logic behind this numbering? Why does Week 1 include only Jan 1, 2023?

 

GopVan_0-1671610373544.png

 

How can I generate the ISO Week Number in Power Query (DAX) such that Jan 2, 2023, is Week 1?

1 ACCEPTED SOLUTION
GopVan
Frequent Visitor

Thank You @Mahesh0016, found the solution here

View solution in original post

6 REPLIES 6
Pepijn
Frequent Visitor

A shorter formula for ISO-weeks in PBI:

 

Number.Round((Date.DayOfYear(Date.AddDays([Date],3-Date.DayOfWeek([Date])))-4)/7)+1)

 

Explanation:

If the first of january is on a thursday, that is week 1.

If the first of january is on a friday, that is the last week of last year.

So... The thursday is always in the right year.

 

If we grab a random date, and look at the thursday of that week (compensate for the weekday and add 3 to get to thursday)

We can use the function Date.DayOfYear() to determine the amount of days in the year from that point.

Then, substract 3 to get to monday, and again 1 to compensate that weekdays start at 0, but DayOfYear starts at 1. (-4 total)

This, we divide by 7 and round it.

(if thursday is in the old year, the old year is at least 4 days in that week so it should be rounded down. If thursday is in the new year, the new year is at least 4 days in that week so it should be rounded up)

 

This method starts 'counting' at 0, so in the end we compensate with a little +1.

ManeAmol2022
Regular Visitor

Nice, this helped me too, thanks for sharing.

Anonymous
Not applicable

Please look Function for ISO Year/Week number (ISO 8601)) 


NB! Pay attention to offsetindays parameter (by default it equals to zero - it means week starts on Sunday)

o_belov
Advocate II
Advocate II

@Mahesh0016 It works! Thanks a lot!

GopVan
Frequent Visitor

Thank You @Mahesh0016, found the solution here

Mahesh0016
Super User
Super User

let
Source = List.Dates(DateTime.Date(DateTime.LocalNow()), 365, #duration(1, 0, 0, 0)),
#"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Renamed Columns" = Table.RenameColumns(#"Converted to Table",{{"Column1", "Date"}}),
#"Changed Type" = Table.TransformColumnTypes(#"Renamed Columns",{{"Date", type date}}),
#"Weekday Number" = Table.AddColumn(#"Changed Type", "Weekday Number", each Date.DayOfWeek([Date], Day.Monday)+1),

#"ISO Week Number" = Table.AddColumn(#"Weekday Number", "ISO Week Number", each if
Number.RoundDown((Date.DayOfYear([Date])-(Date.DayOfWeek([Date], Day.Monday)+1)+10)/7)=0

then
Number.RoundDown((Date.DayOfYear(#date(Date.Year([Date])-1,12,31))-(Date.DayOfWeek(#date(Date.Year([Date])-1,12,31), Day.Monday)+1)+10)/7)

else if
(Number.RoundDown((Date.DayOfYear([Date])-(Date.DayOfWeek([Date], Day.Monday)+1)+10)/7)=53
and (Date.DayOfWeek(#date(Date.Year([Date]),12,31), Day.Monday)+1<4))

then
1

else
Number.RoundDown((Date.DayOfYear([Date])-(Date.DayOfWeek([Date], Day.Monday)+1)+10)/7))

in
#"ISO Week Number"


@GopVan Did I answer your question? Mark my post as a solution! Appreciate your Kudos !!

Helpful resources

Announcements
Join our Fabric User Panel

Join our Fabric User Panel

This is your chance to engage directly with the engineering team behind Fabric and Power BI. Share your experiences and shape the future.

June 2025 Power BI Update Carousel

Power BI Monthly Update - June 2025

Check out the June 2025 Power BI update to learn about new features.

June 2025 community update carousel

Fabric Community Update - June 2025

Find out what's new and trending in the Fabric community.