ISO Hetek generálása Power BI-ban

A heteket többféleképpen is számozzák a vállaltok. írtam erről korábban hosszasan is, de a lényeget bemásolom ide is:

„Az év első hete lehet:

  • január 1-ét tartalmazó hét
  • január első teljes hete
  • január 4-ét tartalmazó hét.

Az Outlook alapértelmezésként a január 1-ét tartalmazó hét módszerét támogatja, az asztali naptáram a január első teljes hete módszerét, az ISO szabvány pedig a január 4.-ét tartalmazó hét módszerét.”

Az idézett cikk nem mai... Emlékszik itt még valaki az asztali naptárra? Ez nem egy Windows "asztali" alkalmazás volt, hanem az alábbihoz hasonló papíralapú spirálos cucc:

Asztali naptár

De ennek a cikknek nem ez adja az appropóját…

Nem tudom, hogy tudja-e, de a Power BI nem az ISO szabvány szerint tartja nyilván a heteket, ezért a Power BI WEEKNUM() függvényét nem is tudjuk használni a hetek számozására. Mint a dátummal kapcsolatban mindig, most is az a legjobb gyakorlat, hogy saját táblát hozunk létre, ezért bemásolok ide egy olyan DAX utasítást, ami legenerálja az ISO heteket tartalmazó táblát:

Hét =
-- ISO 8601 szerinti hét bontás. Az év első hete az a hét, ahová az év első csütörötke esik
VAR MinYear = 2020
VAR MaxYear = 2021
VAR BaseCalendar =
    ADDCOLUMNS (
        FILTER(CALENDARAUTO (), YEAR([Date]) >= MinYear && YEAR([Date]) <= MaxYear),
        "ISOWEEk", WEEKNUM ( [Date], 21 ), -- A 21-ben a 2-es jelentése, hogy a hét első napja a hétfő, az 1-es jelentése pedig az első csütörtök
        "Calendarweek", WEEKNUM ( [Date], 2 ),
        "ISOYear", --Ötlet innen: https://blog.gbrueckl.at/2012/04/iso-8601-week-in-dax/
            IF (
                WEEKNUM ( [Date], 21 ) < 5
                    && WEEKNUM ( [Date], 2 ) > 50,
                YEAR ( [Date] ) + 1,
                IF (
                    WEEKNUM ( [Date], 21 ) > 50
                        && WEEKNUM ( [Date], 2 ) < 5,
                    YEAR ( [Date] ) - 1,
                    YEAR ( [Date] )
                )
            )
    )
VAR BaseCalendar2 =
    SELECTCOLUMNS (
        BaseCalendar,
        "Dátum", [Date],
        "ISO YearWeek",  [ISOYear] & "." & RIGHT ( 100 + [ISOWEEk], 2 )
    )
VAR BaseCalendar3 =
    GROUPBY (
        BaseCalendar2,
        [ISO YearWeek],
        "Dátum", MINX ( CURRENTGROUP (), [Dátum] )
    )
VAR ISOWeekCalendar =
    ADDCOLUMNS (
        BaseCalendar3,
        "Hét srsz", WEEKNUM ( [Dátum], 21 ),
        "Hét", WEEKNUM ( [Dátum], 21 ) & ". hét",
        "Év hét", LEFT ( [ISO YearWeek], 4 ) & ". " & WEEKNUM ( [Dátum], 21 ) & ". hét"
    )
RETURN
    ISOWeekCalendar

 

Kővári Attila - BI projekt

POWER BI WORKSHOP

Tudjon meg többet az itt elhangzottakról! Jöjjön el a 2021. június 29.-i Power BI workshopra vagy rendeljen kihelyezett képzést! Részletek >>

 

Új hozzászólás