Don't miss your chance to take the Fabric Data Engineer (DP-600) exam for FREE! Find out how by attending the DP-600 session on April 23rd (pacific time), live or on-demand.
Learn moreNext up in the FabCon + SQLCon recap series: The roadmap for Microsoft SQL and Maximizing Developer experiences in Fabric. All sessions are available on-demand after the live show. Register now
I have a measure ([Total Sales]) that I want to compute a 6-week rolling average on. The "date" grain of my data model is week. So, I am unable to use the quick measure feature to auto-generate a rolling average. My week labeling is unusual (e.g., "FY 1 W1"); this is stored in column [Week Label]. So, I have created a [Week Number] column to get the proper ordering. My newest [Week Number] is 52; my oldest [Week Number] is 1. I have tried the following in a visual with axis [Week Label], but it's returning the [Total Sales] for each week, not the 6-week rolling average. How can I resolve this?
Rolling 6 Weeks Average of Total Sales =
//get the given week
VAR __given_week =
SELECTEDVALUE('Dimension Week'[Week Number])
//calculate total sales for each week
VAR __table =
ADDCOLUMNS(
SUMMARIZE(
'Dimension Week'
,'Dimension Week'[Week Number]
)
,"Total Sales Value"
,[Total Sales]
)
RETURN
AVERAGEX(
FILTER(
__table
,[Week Number] <= __given_week
&& [Week Number] > __given_week - 6
)
,[Total Sales]
)
Solved! Go to Solution.
I solved my problem with the following:
Rolling 6 Weeks Average of Total Sales =
//get the given week
VAR __given_week =
SELECTEDVALUE('Dimension Week'[Week Number])
//number of weeks in rolling average
VAR __duration =
6
//create a table of weekly ranges per week
VAR __calculation_range =
FILTER(
ALL('Dimension Week')
,[Week Number] <= __given_week
&& [Week Number] > __given_week - __duration
)
RETURN
IF(
COUNTROWS(__calculation_range) = __duration //only return the result when there are the desired number of weeks in the range (e.g., week 5 doesn't have 6 weeks in it)
,CALCULATE(
AVERAGEX(
'Dimension Week'
,[Total Sales]
)
,__calculation_range
)
,BLANK()
)
Hi, @Anonymous
Glad to hear that you have solved your problem by yourself and thank you for the experience sharing.😊
Would you like to mark your own reply as a solution so that others can learn from it too?
Thanks in advance!
How to Get Your Question Answered Quickly
Best Regards,
Community Support Team _Robert Qin
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
I solved my problem with the following:
Rolling 6 Weeks Average of Total Sales =
//get the given week
VAR __given_week =
SELECTEDVALUE('Dimension Week'[Week Number])
//number of weeks in rolling average
VAR __duration =
6
//create a table of weekly ranges per week
VAR __calculation_range =
FILTER(
ALL('Dimension Week')
,[Week Number] <= __given_week
&& [Week Number] > __given_week - __duration
)
RETURN
IF(
COUNTROWS(__calculation_range) = __duration //only return the result when there are the desired number of weeks in the range (e.g., week 5 doesn't have 6 weeks in it)
,CALCULATE(
AVERAGEX(
'Dimension Week'
,[Total Sales]
)
,__calculation_range
)
,BLANK()
)
If you have recently started exploring Fabric, we'd love to hear how it's going. Your feedback can help with product improvements.
A new Power BI DataViz World Championship is coming this June! Don't miss out on submitting your entry.
| User | Count |
|---|---|
| 45 | |
| 43 | |
| 38 | |
| 19 | |
| 15 |
| User | Count |
|---|---|
| 67 | |
| 66 | |
| 31 | |
| 28 | |
| 24 |