Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now! Learn more

Reply
atjt217
Helper III
Helper III

Dynamic previous week up to 4 weeks

Hello, I hope someone could please help me with this report im working on. I need to get the sum of each week for the last 4 weeks. It was still working well last year and i was using these formulas but since the begining of this year its not: 

prevWEEK1 = CALCULATE([Billed_total],DateDimension[Week_Number] = WEEKNUM(TODAY(),1) -1)
prevWEEK2 = CALCULATE([Billed_total],DateDimension[Week_Number] = WEEKNUM(TODAY(),1) -2)
prevWEEK3 = CALCULATE([Billed_total],DateDimension[Week_Number] = WEEKNUM(TODAY(),1) -3)
prevWEEK4 = CALCULATE([Billed_total],DateDimension[Week_Number] = WEEKNUM(TODAY(),1) -4)

atjt217_0-1610652129178.png

The totals right now are supposed to be WK1= 1195 =, WK2 = 26, WK3 = 2203 and WK4 = 2386

 

atjt217_1-1610652220709.png

atjt217_2-1610652234859.png

 

I have a Calendar Table

I'm using direct query

 

Thank you! 

 

1 ACCEPTED SOLUTION
v-lionel-msft
Community Support
Community Support

@atjt217 ,

 

According to my understanding, the formula should be like this,

 

prevWEEK4 = 
VAR __weekNum = WEEKNUM(TODAY(), 1)
VAR __year = YEAR(TODAY())
VAR __maxWeekNum =
MAXX(
    FILTER( ALL(DateDimension), [Year] = __year - 1),
    [Week_Number]
)
RETURN
SWITCH(
    __weekNum = 1, CALCULATE( [Billed_total], FILTER( DateDimension, [Year] = __year - 1 && [Week_Number] = __maxWeekNum -3 ) ),
    __weekNum = 2, CALCULATE( [Billed_total], FILTER( DateDimension, [Year] = __year - 1 && [Week_Number] = __maxWeekNum -2 ) ),
    __weekNum = 3, CALCULATE( [Billed_total], FILTER( DateDimension, [Year] = __year - 1 && [Week_Number] = __maxWeekNum -1 ) ),
    __weekNum = 4, CALCULATE( [Billed_total], FILTER( DateDimension, [Year] = __year - 1 && [Week_Number] = __maxWeekNum ) ),
    CALCULATE( [Billed_total], FILTER( DateDimension, [Week_Number] = __weekNum-4 ) )
)
prevWEEK3 = 
VAR __weekNum = WEEKNUM(TODAY(), 1)
VAR __year = YEAR(TODAY())
VAR __maxWeekNum =
MAXX(
    FILTER( ALL(DateDimension), [Year] = __year - 1),
    [Week_Number]
)
RETURN
SWITCH(
    __weekNum = 1, CALCULATE( [Billed_total], FILTER( DateDimension, [Year] = __year - 1 && [Week_Number] = __maxWeekNum -2 ) ),
    __weekNum = 2, CALCULATE( [Billed_total], FILTER( DateDimension, [Year] = __year - 1 && [Week_Number] = __maxWeekNum -1 ) ),
    __weekNum = 3, CALCULATE( [Billed_total], FILTER( DateDimension, [Year] = __year - 1 && [Week_Number] = __maxWeekNum  ) ),
    CALCULATE( [Billed_total], FILTER( DateDimension, [Week_Number] = __weekNum -3 ) )
)
prevWEEK2 = 
VAR __weekNum = WEEKNUM(TODAY(), 1)
VAR __year = YEAR(TODAY())
VAR __maxWeekNum =
MAXX(
    FILTER( ALL(DateDimension), [Year] = __year - 1),
    [Week_Number]
)
RETURN
SWITCH(
    __weekNum = 1, CALCULATE( [Billed_total], FILTER( DateDimension, [Year] = __year - 1 && [Week_Number] = __maxWeekNum -1 ) ),
    __weekNum = 2, CALCULATE( [Billed_total], FILTER( DateDimension, [Year] = __year - 1 && [Week_Number] = __maxWeekNum  ) ),
    CALCULATE( [Billed_total], FILTER( DateDimension, [Week_Number] = __weekNum -2 ) )
)
prevWEEK1 = 
VAR __weekNum = WEEKNUM(TODAY(), 1)
VAR __year = YEAR(TODAY())
VAR __maxWeekNum =
MAXX(
    FILTER( ALL(DateDimension), [Year] = __year - 1),
    [Week_Number]
)
RETURN
SWITCH(
    __weekNum = 1, CALCULATE( [Billed_total], FILTER( DateDimension, [Year] = __year - 1 && [Week_Number] = __maxWeekNum) ),
    CALCULATE( [Billed_total], FILTER( DateDimension, [Week_Number] = __weekNum -1 ) )
)

 

Best regards,
Lionel Chen

If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

 

View solution in original post

8 REPLIES 8
v-lionel-msft
Community Support
Community Support

@atjt217 ,

 

According to my understanding, the formula should be like this,

 

prevWEEK4 = 
VAR __weekNum = WEEKNUM(TODAY(), 1)
VAR __year = YEAR(TODAY())
VAR __maxWeekNum =
MAXX(
    FILTER( ALL(DateDimension), [Year] = __year - 1),
    [Week_Number]
)
RETURN
SWITCH(
    __weekNum = 1, CALCULATE( [Billed_total], FILTER( DateDimension, [Year] = __year - 1 && [Week_Number] = __maxWeekNum -3 ) ),
    __weekNum = 2, CALCULATE( [Billed_total], FILTER( DateDimension, [Year] = __year - 1 && [Week_Number] = __maxWeekNum -2 ) ),
    __weekNum = 3, CALCULATE( [Billed_total], FILTER( DateDimension, [Year] = __year - 1 && [Week_Number] = __maxWeekNum -1 ) ),
    __weekNum = 4, CALCULATE( [Billed_total], FILTER( DateDimension, [Year] = __year - 1 && [Week_Number] = __maxWeekNum ) ),
    CALCULATE( [Billed_total], FILTER( DateDimension, [Week_Number] = __weekNum-4 ) )
)
prevWEEK3 = 
VAR __weekNum = WEEKNUM(TODAY(), 1)
VAR __year = YEAR(TODAY())
VAR __maxWeekNum =
MAXX(
    FILTER( ALL(DateDimension), [Year] = __year - 1),
    [Week_Number]
)
RETURN
SWITCH(
    __weekNum = 1, CALCULATE( [Billed_total], FILTER( DateDimension, [Year] = __year - 1 && [Week_Number] = __maxWeekNum -2 ) ),
    __weekNum = 2, CALCULATE( [Billed_total], FILTER( DateDimension, [Year] = __year - 1 && [Week_Number] = __maxWeekNum -1 ) ),
    __weekNum = 3, CALCULATE( [Billed_total], FILTER( DateDimension, [Year] = __year - 1 && [Week_Number] = __maxWeekNum  ) ),
    CALCULATE( [Billed_total], FILTER( DateDimension, [Week_Number] = __weekNum -3 ) )
)
prevWEEK2 = 
VAR __weekNum = WEEKNUM(TODAY(), 1)
VAR __year = YEAR(TODAY())
VAR __maxWeekNum =
MAXX(
    FILTER( ALL(DateDimension), [Year] = __year - 1),
    [Week_Number]
)
RETURN
SWITCH(
    __weekNum = 1, CALCULATE( [Billed_total], FILTER( DateDimension, [Year] = __year - 1 && [Week_Number] = __maxWeekNum -1 ) ),
    __weekNum = 2, CALCULATE( [Billed_total], FILTER( DateDimension, [Year] = __year - 1 && [Week_Number] = __maxWeekNum  ) ),
    CALCULATE( [Billed_total], FILTER( DateDimension, [Week_Number] = __weekNum -2 ) )
)
prevWEEK1 = 
VAR __weekNum = WEEKNUM(TODAY(), 1)
VAR __year = YEAR(TODAY())
VAR __maxWeekNum =
MAXX(
    FILTER( ALL(DateDimension), [Year] = __year - 1),
    [Week_Number]
)
RETURN
SWITCH(
    __weekNum = 1, CALCULATE( [Billed_total], FILTER( DateDimension, [Year] = __year - 1 && [Week_Number] = __maxWeekNum) ),
    CALCULATE( [Billed_total], FILTER( DateDimension, [Week_Number] = __weekNum -1 ) )
)

 

Best regards,
Lionel Chen

If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

 

It works. Thank you so much for your help! 

v-lionel-msft
Community Support
Community Support

Hi @atjt217 ,

 

Please try this formula again.

prevWEEK1 = 
VAR __weekNum = WEEKNUM(TODAY(), 1)
VAR __year = YEAR(TODAY())
VAR __maxWeekNum =
MAXX(
    FILTER( ALL(DateDimension), [Year] = __year - 1),
    [Week_Number]
)
RETURN
IF(
    __weekNum = 1,
    CALCULATE(
        [Billed_total],
        FILTER(
            DateDimension,
            [Year] = __year - 1 && [Week_Number] = __maxWeekNum
        )
    ),
    CALCULATE(
        [Billed_total],
        FILTER(
            DateDimension,
            [Week_Number]= __weekNum - 1
        )
    )
)

 

Best regards,
Lionel Chen

If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

 

 

 

 

Hello, Thank you for the reponse. It was working for Weeks 1-3 but week 4 is returning blank. 

 

atjt217_0-1611258055302.png

For week 4 here is what i used: 

prevWEEK4 =
VAR __weekNum = WEEKNUM(TODAY(), 1)
VAR __year = YEAR(TODAY())
VAR __maxWeekNum =
MAXX(
FILTER( ALL(DateDimension), [Year] = __year - 1),
[Week_Number]
)
RETURN
IF(
__weekNum = 1,
CALCULATE(
[Billed_total],
FILTER(
DateDimension,
[Year] = __year - 1 && [Week_Number] = __maxWeekNum
)
),
CALCULATE(
[Billed_total],
FILTER(
DateDimension,
[Week_Number]= __weekNum - 4
)
)
)
 
Is there something else i should have changed?
v-lionel-msft
Community Support
Community Support

Hi @atjt217 ,

 

When WEEKNUM(TODAY(), 1) is less than or equal to 4, the previous one week, two weeks, three weeks, and four weeks should be the last few weeks of the previous year.

Such as current week number is 1:

prevWEEK1 = 
VAR __weekNum = WEEKNUM(TODAY(), 2) 
VAR __year = YEAR(TODAY())
VAR __maxWeekNum = 
MAXX(
    FILTER( ALL(Sheet5), [Year] = __year - 1),
    [WeekNum]
)
RETURN
IF(
    __weekNum = 1,
    CALCULATE(
        SUM(Sheet5[Value]),
        FILTER(
            Sheet5,
            [Year] = __year - 1 && [WeekNum] = __maxWeekNum
        )
    ),
    CALCULATE(
        SUM(Sheet5[Value]),
        FILTER(
            Sheet5,
            [WeekNum] = __weekNum - 1
        )
    )
)

 

Best regards,
Lionel Chen

If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

 

Hi Lionel, 

 

I tried to use the formula: 

prevWEEK1 =
VAR __weekNum = WEEKNUM(TODAY(), 2)
VAR __year = YEAR(TODAY())
VAR __maxWeekNum =
MAXX(
FILTER( ALL(DateDimension), [Year] = __year - 1),
[Week_Number]
RETURN
IF(
__weekNum = 1,
CALCULATE(SUMX(vu_Bi_UnableToFill_2019ToCurrent,[Billed_total]),
FILTER(
DateDimension,
[Year] = __year - 1 && [Week_Number] = __maxWeekNum
)
),
CALCULATE(SUMX(vu_Bi_UnableToFill_2019ToCurrent,[Billed_total]),
FILTER(
DateDimension,
[Week_Number]= __weekNum - 1
)
)
)
But im getting an error. Did i happen to skip on something. Could you please advise? Thank you 
amitchandak
Super User
Super User

@atjt217 , refer my blog , have additional column on week rank in you date table and use those. If needed; you can have date table in power bi even in direct query mode

 

See if this can help

Power BI — Week on Week and WTD
https://medium.com/@amitchandak.1978/power-bi-wtd-questions-time-intelligence-4-5-98c30fab69d3
https://community.powerbi.com/t5/Community-Blog/Week-Is-Not-So-Weak-WTD-Last-WTD-and-This-Week-vs-La...
https://www.youtube.com/watch?v=pnAesWxYgJ8

 

Date table in power bi in Direct query https://www.youtube.com/watch?v=cQfJ0GmQ5os&list=PLPaNVDMhUXGbKatyDdOhGbTL3xW2Xy6pA&index=7

 

Share with Power BI Enthusiasts: Full Power BI Video (20 Hours) YouTube
Microsoft Fabric Series 60+ Videos YouTube
Microsoft Fabric Hindi End to End YouTube

I tried the formula on your blog as a calculated measure: 

Week Rank2 = RANKX(ALL(DateDimension[Date]),(DateDimension[Week Start date],,ASC,Dense))

But im getting an error that the syntax ASC is incorrect. 

Could you please tell me if i happen to miss anything? 

 

Thanks for you help amitchandak! 

 

 

Helpful resources

Announcements
Power BI DataViz World Championships

Power BI Dataviz World Championships

The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now!

December 2025 Power BI Update Carousel

Power BI Monthly Update - December 2025

Check out the December 2025 Power BI Holiday Recap!

FabCon Atlanta 2026 carousel

FabCon Atlanta 2026

Join us at FabCon Atlanta, March 16-20, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.