Helaas gebruikt Power Query 'M' in plaats van de bekende Excel functies. Effectief is dat dus een tweede 'taal' die je moet beheersen.
Het beste is om stap voor stap te bereiken wat je wilt. Gebruik eerst wat hulpkolommen in Power Query, om aan het eind alles samen te voegen tot één formule.
Eerst het dikgedrukte stuk om de datum te genereren, deze heb je 3x in je formule:
MAX(
DATUM($E$3;1;1) ;
DATUM($E$3;1;1) -WEEKDAG(
DATUM($E$3;1;1) ;2)+(J$5-1)*7+8)
De M variant voor DATUM() is
#date(<year>, <month>, <day>) waar we voor 'year' refereren naar de kolom waar je jaartal in staat (zorg dat deze kolom het data-type 'Whole Number' heeft:
Nu dat je een datum hebt van "1 januari <jaartal>" kun je verder met het tweede deel, de WEEKDAG() formule. In M is dit
Date.DayOfWeek(<datum>, <eerste dag van week>)
In Excel gebruik je de optie 2 die maandag als 1e dag geeft, en zondag als 7e dag. In M gebruik je de optie 1 voor maandag als 1e dag, of de formule
Day.Monday. Echter, bij M begint een index op 0, en in Excel bij 1. Je Excel formule voor Weekday geeft dus een '1' voor Maandag als 1e dag, maar M geeft een '0', om dit toch een 1 te laten zijn gebruik je Day.Sunday als je eerste dag van de week (Sunday is dan 0, Monday is dan 1, etc).
Je WEEKDAG in M is dan als volgt:
code:
1
| Date.DayOfWeek(#date([Year],1,1),Day.Sunday) |
Nu wil je in het 2e deel van je MAX formule de weekdag van de datum aftrekken, en daarna het weeknummer (minus 1) maal 7 plus 8 bij je datum optellen. Zorg dat ook je kolomo Week het datatype 'Whole Number' heeft
In M gebruik je hiervoor
Date.AddDays(<datum>, <aantal dagen>) echter om dagen af te trekken gebruik je gek genoeg ook 'AddDays' maar begin je met een minus karakter.
Dus:
Date.AddDays(<datum, die we hierboven al hebben staan>, - (minus) je WEEKDAG + (plus) je Week-1 maal 7 + 8
Oftewel:
code:
1
| Date.AddDays( #date([Year],1,1), - Date.DayOfWeek(#date([Year],1,1),Day.Sunday) + ([Week]-1) * 7 + 8) |
Vervolgens wil je met MAX de grootste vinden tussen 1 januari, of je berekende datum. In M is er geen MAX equivalent (voor zover ik weet), en om niet moeilijk te doen met List.Max (waarbij je eerst lists moet maken met je twee waardes) kun je het makkelijkst een IF statement gebruiken. Want MAX(a, b) is niets anders dan "als a groter is dan b, dan a, anders b". In M werkt de if ook iets anders. Namelijk:
Waar 'a' je datum is die je in het begin genereert, en b de datum die je in het tweede stuk genereert.
Tot slot wil je de boel als "YYYY-MM" weergeven. Echter is dat 'text', en M vind het niet leuk dat je een datum combineert met text, dus je zult eerst de boel moeten omzetten naar text.
Om het jaar te krijgen doe je
Date.Year(<hier je formule voor de datum>) en die wrap je in Text.From() om er text van te maken. Dan doe je &"-"& om een streepje toe te voegen. En dan doe je hetzelfde voor de maand met
Date.Month(<hier je formule voor de datum>) die je ook wrapped in Text.From()
Echter geeft het resultaat nu de maand zonder leading 0 weer. Hiervoor kun je de maand dus weer wrappen in
Text.PadStart(<je tekst>, <aantal karakters>, <karakter wat je toe wilt voegen>)
Met als eindformule (aan de experts; dit kan vΓ‘st korter

):
spoiler:Text.From(Date.Year(if #date([Year],1,1) > Date.AddDays(#date([Year],1,1),-Date.DayOfWeek(#date([Year],1,1),Day.Sunday)+([Week]-1)*7+8) then #date([Year],1,1) else Date.AddDays(#date([Year],1,1),-Date.DayOfWeek(#date([Year],1,1),Day.Sunday)+([Week]-1)*7+8)))&"-"&Text.PadStart(Text.From(Date.Month(if #date([Year],1,1) > Date.AddDays(#date([Year],1,1),-Date.DayOfWeek(#date([Year],1,1),Day.Sunday)+([Week]-1)*7+8) then #date([Year],1,1) else Date.AddDays(#date([Year],1,1),-Date.DayOfWeek(#date([Year],1,1),Day.Sunday)+([Week]-1)*7+8))),2,"0")
Echter raad ik je wel aan om gewoon lekker met hulpkolommen te werken in Power Query, nadat je de maand hebt berekend kun je deze kolommen gewoon verwijderen waarmee je berekening blijft staan. Dat scheelt je één grote formule zoals hierboven, en je kunt makkelijker aanpassingen maken en kolommen hergebruiken in je formule in plaats van dat je stukken formule moet hergebruiken.