Ett vanligt fel i rapporter är att man inte hanterar år korrekt när man vill ta fram ett sammansatt värde för [År Vecka]. Detta grundar sig i att ett datum kan ligga i ett år, men dess veckas år kan vara ett annat. I det här blogginlägget tittar vi närmre på hur man hanterar dessa i Qlik, Tableau och Power BI.
Vi utgår från några exempel på datum mellan 2021-12-30 och 2022-01-04. Här ligger datumen 2021-12-30 till 2022-01-02 i vecka 52 som hör till 2021. Korrekta värden ska alltså vara:
Om man är för snabb att räkna sätter man för t.ex. 2022-01-01 ihop år (2022) med vecka (52) och lägger felaktigt dagen till 2022 W52. Dagen skulle egentligen skulle ligga i 2021 W52.
Qlik
Qlik har en inbyggd funktion för att hantera ISO-år som bygger på veckor, weekyear(). Denna skiljer sån från funktionen year() genom att den hämtar året för veckan som datumet ligger i.
year() = ger året för datumet
weekyear() = ger året för veckan som datumet ligger i
Med hjälp av funktionen kan man i script och i uttryck räkna ut År Vecka med formeln/koden:
weekyear(Date) & ” W” & num(week(Date),’00’)
Num-funktionen säkerställer att veckor 1-9 får en nolla framför sig så att alla värden får lika många tecken.
Tableau
Tableau har på motsvarande sätt som Qlik en funktion för ISO-år, ISOYEAR(), som skiljer sig från den vanliga funktionen för år, YEAR().
På motsvarande enkla sätt kan man räkna ut År Vecka med formeln:
STR(ISOYEAR([Date])) + ” W” + RIGHT(”0” + STR(ISOWEEK([Date])),2)
STR()-funktionen omvandlar ett numeriskt värde till en sträng så att vi kan sätta samman de olika delarna till en längre sträng.
RIGHT()-funktionen används här för att veckor 1-9 får en nolla framför sig så att alla värden får lika många tecken.
Power BI
Power BI saknar funktion för att räkna ut ISO-år vilket gör formeln lite mer komplicerad. Ett trick för att beräkna året är att ta ett datum + 26 dagar – veckonumret. Detta sätts sedan samman med veckonumret hanterat med FORMAT() för att få en inledande 0:a för veckorna 1-9.
PowerBI YearWeek = YEAR([Date] + 26 – WEEKNUM([Date], 21 ) ) & ” W” & FORMAT(WEEKNUM([Date], 21 ), ”00”)
WEEKNUM(Date,21) ger ISO-vecka för Date.