Forum Discussion
Incorrect week number at year end / beginning
- 5 years ago
Anonymous ,
You also have a solution to calculate ISO Week Number (First week of 4 days), using M code to add to your code creating your date table :
//Calculate ISO Week Num in 4 steps //Step1. Calculate the date of the Thursday of the week InsertCurrThursday = Table.AddColumn(InsertMonthEnding, "CurrThursday", each Date.AddDays([DateRef], -Date.DayOfWeek([DateRef],1) + 3), type date), //Step2. Calculate the 1st january of the date (cf step1) InsertFirstJan = Table.AddColumn(InsertCurrThursday, "FirstJan", each #date(Date.Year([CurrThursday]),1,1),type date), //Step3. Calculate the number of days between the 1st january and Thursday InsertDuration= Table.AddColumn(InsertFirstJan, "Duration", each Duration.Days(Duration.From([CurrThursday] - [FirstJan])), type number), //Step4. Divide the number of days (duration)calculated on step3 by 7 //Roud it down and add 1 InsertISOWeekNum = Table.AddColumn(InsertDuration, "NumSemISO", each Number.RoundDown([Duration]/7)+1), ChangeType5=Table.TransformColumnTypes(InsertISOWeekNum,{{"NumSemISO", Int64.Type}}), //Delete unusefull columns RemovedColumns = Table.RemoveColumns(ChangeType5, {"CurrThursday","FirstJan","Duration"})I'm using the rules defined by the ISO norm :
For further details :
https://en.wikipedia.org/wiki/ISO_week_date
Hope it helps
- 5 years ago
Hi,
In your first screenshot, it seems that weeks number are sorted like text, so I think that if you format them as numbers, or use 01 instead of 1 it should do the trick.
Screenshot number is more strange, do you sort it by week numbers ?
Have a nice day,
Hi Anonymous
Power Query isn't able to calculate ISO calender week. You have to do it manulally with a custom function like this:
// This function expects a valid date as argument
let
fxWeekOfCalendar = (Data as date) =>
let
Weekday = Date.DayOfWeek(Data) + 1,
Part1 = Number.From(Data) - Weekday + 11,
Part2 = Number.From(#date(Date.Year(Date.From(Number.From(Data) + 4 - Weekday)),1,1)),
Part3 = (Part1 - Part2) / 7,
Tranc = Part3 - Number.Mod(Part3, 1)
in
Tranc
in
fxWeekOfCalendar
With kind regards from the town where the legend of the 'Pied Piper of Hamelin' is at home
FrankAT (Proud to be a Datanaut)
- Maike923 years agoNew Member
As long as there is no direct Microsoft-feature for ISO-weeks,
I would suggest the following solution which I guess should be the most efficient workaround:
= Table.AddColumn(#"Hinzugefügte benutzerdefinierte Spalte1 Wochentag", "Woche", each Date.WeekOfYear(Date.AddDays([Datum],-7)), Int64.Type)