Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
4 years ago
Solved

Fill missing weeks and calculate hours per week

Hi!

 

I have a dataset with accumulated values per random weeks.

 

I want to calculate hours per week. In the cases where a consecutive week is missing I would like to add the week and a zero value for each id.

Idyywwacc hours
a2208110
a2207106
a220385
a220156
a215136
a215015
a214810
a21465
b2208164
b2207152
b2206148
b2205108
b220457
b220356
b220222
c220569
c220115
c211014
c21098
c21056
c21044
c21012

Any ideas?

 

/Anna.

  • Hi,

    I suggest creating a calendar table like the attached pbix file, and create a measure like below.

     

     

    Calendar Table: 

    Calendar =
    ADDCOLUMNS (
        CALENDAR ( DATE ( 2021, 1, 1 ), DATE ( 2022, 12, 31 ) ),
        "YYYYWW",
            YEAR ( [Date] ) * 100
                + WEEKNUM ( [Date], 21 )
    )
    

     

     

    Measure:

    Hours: =
    VAR currentweeknumber =
        MAX ( 'Calendar'[YYYYWW] )
    VAR acc_hours =
        CALCULATE (
            SUM ( Data[acc hours] ),
            FILTER ( Data, Data[yyww] + 200000 = currentweeknumber )
        )
    VAR previousweeknumber =
        MAXX ( FILTER ( Data, Data[yyww] + 200000 < currentweeknumber ), Data[yyww] ) + 200000
    VAR previousacchours =
        CALCULATE (
            SUM ( Data[acc hours] ),
            FILTER ( Data, Data[yyww] + 200000 = previousweeknumber )
        )
    RETURN
        IF ( acc_hours <> 0, acc_hours - previousacchours, 0 )
    

     

3 Replies

  • Hi,

    I suggest creating a calendar table like the attached pbix file, and create a measure like below.

     

     

    Calendar Table: 

    Calendar =
    ADDCOLUMNS (
        CALENDAR ( DATE ( 2021, 1, 1 ), DATE ( 2022, 12, 31 ) ),
        "YYYYWW",
            YEAR ( [Date] ) * 100
                + WEEKNUM ( [Date], 21 )
    )
    

     

     

    Measure:

    Hours: =
    VAR currentweeknumber =
        MAX ( 'Calendar'[YYYYWW] )
    VAR acc_hours =
        CALCULATE (
            SUM ( Data[acc hours] ),
            FILTER ( Data, Data[yyww] + 200000 = currentweeknumber )
        )
    VAR previousweeknumber =
        MAXX ( FILTER ( Data, Data[yyww] + 200000 < currentweeknumber ), Data[yyww] ) + 200000
    VAR previousacchours =
        CALCULATE (
            SUM ( Data[acc hours] ),
            FILTER ( Data, Data[yyww] + 200000 = previousweeknumber )
        )
    RETURN
        IF ( acc_hours <> 0, acc_hours - previousacchours, 0 )
    

     

  • Samarth_18's avatar
    Samarth_18
    Icon for Community Champion rankCommunity Champion

    Hi Anonymous ,

     

    Please use date table for week calculation and return zero for blank values.

     

    Thanks,

    Samarth