Hieronder een PowerBI kalender met de juiste ISO weken.


Ook wordt er rekening gehouden met week 53 en week 1.
Mocht eind december in week 1 vallen dan wordt er een week 53 aangemaakt.

Zo blijft de omzet per week zuiver.



----------------------------------------------


let
// Definieer de start- en einddatum voor de kalender
StartDatum = #date(2019, 1, 1),
EindDatum = #date(2023, 12, 31),

// Genereer een lijst met datums van StartDatum tot EindDatum
DatumLijst = List.Dates(StartDatum, Duration.Days(EindDatum - StartDatum) + 1, #duration(1,0,0,0)),

// Converteer deze lijst naar een tabel
DatumTabel = Table.FromList(DatumLijst, Splitter.SplitByNothing(), null, null, ExtraValues.Error),

// Hernoem de kolommen naar 'Datum'
GerenommeerdeKolommen = Table.RenameColumns(DatumTabel,{{"Column1", "Datum"}}),

// Voeg het jaar toe
AddYear = Table.AddColumn(GerenommeerdeKolommen, "Jaar", each Date.Year([Datum]), Int64.Type),

// Voeg kwartaal informatie toe
AddQuarter = Table.AddColumn(AddYear, "Kwartaal", each
if Date.QuarterOfYear([Datum]) = 1 then "1e kwartaal"
else if Date.QuarterOfYear([Datum]) = 2 then "2e kwartaal"
else if Date.QuarterOfYear([Datum]) = 3 then "3e kwartaal"
else "4e kwartaal"
),
AddQuarterNumber = Table.AddColumn(AddQuarter, "KwartaalNr", each Date.QuarterOfYear([Datum]), Int64.Type),
AddYearQuarter = Table.AddColumn(AddQuarterNumber, "JaarKwartaal", each Text.From([Jaar]) & "Q" & Text.From([KwartaalNr])),

// Voeg maand en maand naam toe
AddMonthNumber = Table.AddColumn(AddYearQuarter, "MaandNr", each Date.Month([Datum]), Int64.Type),
AddMonthName = Table.AddColumn(AddMonthNumber, "MaandNaam", each Date.ToText([Datum], "MMMM")),

// Voeg de maandafkorting toe, correctie voor maart
AddMonthAbbreviation = Table.AddColumn(AddMonthName, "Mnd", each
if [MaandNaam] = "maart" then "mrt"
else Text.Start([MaandNaam], 3)
),
AddYearMonth = Table.AddColumn(AddMonthAbbreviation, "JaarMaand", each Text.From([Jaar]) & "M" & Text.PadStart(Text.From([MaandNr]), 2, "0")),

// Bereken ISO weeknummer met correctie voor decemberdagen die in week 1 vallen
CalculateIsoWeekNumber = (Datum) =>
let
CurrentThursday = Date.AddDays(Datum, 3 - Date.DayOfWeek(Datum, Day.Monday)),
YearCurrThursday = Date.Year(CurrentThursday),
FirstThursdayOfYear = Date.AddDays(#date(YearCurrThursday, 1, 7), -Date.DayOfWeek(#date(YearCurrThursday, 1, 1), Day.Friday)),
ISO_Week = Number.IntegerDivide(Duration.Days(CurrentThursday - FirstThursdayOfYear), 7) + 1,
CorrectedWeek = if Date.Month(Datum) = 12 and ISO_Week = 1 then 53
else if Date.Month(Datum) = 1 and ISO_Week >= 52 then 0
else ISO_Week
in
CorrectedWeek,

// Vervang de bestaande weeknummer berekeningen met de ISO weeknummer berekeningen met correctie
AddIsoWeekNumber = Table.AddColumn(AddYearMonth, "WeekNr", each CalculateIsoWeekNumber([Datum]), Int64.Type),
AddWeekDescription = Table.AddColumn(AddIsoWeekNumber, "Week", each "Week " & Text.PadStart(Text.From(CalculateIsoWeekNumber([Datum])), 2, "0")),
AddYearWeek = Table.AddColumn(AddWeekDescription, "JaarWeek", each Text.From([Jaar]) & "W" & Text.PadStart(Text.From(CalculateIsoWeekNumber([Datum])), 2, "0")),

// Voeg dag informatie toe
AddDayName = Table.AddColumn(AddYearWeek, "DagNaam", each Date.ToText([Datum], "dddd")),
AddDayAbbreviation = Table.AddColumn(AddDayName, "Dg", each Text.Start([DagNaam], 2)),
AddDayOfWeek = Table.AddColumn(AddDayAbbreviation, "DagVanWeek", each Date.DayOfWeek([Datum]) + 1, Int64.Type),

// Voeg werk- en weekenddag indicatoren toe
AddWorkDay = Table.AddColumn(AddDayOfWeek, "WerkDag", each if [DagVanWeek] >= 1 and [DagVanWeek] <= 5 then 1 else 0, Int64.Type),
AddWeekendDay = Table.AddColumn(AddWorkDay, "WeekendDag", each if [DagVanWeek] = 6 or [DagVanWeek] = 7 then 1 else 0, Int64.Type),

// Finaliseer de volgorde van kolommen
#"Volgorde van kolommen gewijzigd" = Table.ReorderColumns(AddWeekendDay, {
"Datum", "Jaar", "Kwartaal", "KwartaalNr", "JaarKwartaal", "MaandNr", "MaandNaam", "Mnd", "JaarMaand", "WeekNr", "Week", "JaarWeek", "DagNaam", "Dg", "DagVanWeek", "WerkDag", "WeekendDag"
}),
#"Type gewijzigd" = Table.TransformColumnTypes(#"Volgorde van kolommen gewijzigd",{{"Datum", type date}})
in
#"Type gewijzigd"