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

Be one of the first to start using Fabric Databases. View on-demand sessions with database experts and the Microsoft product team to learn just how easy it is to get started. Watch now

Reply
a_hawk
Frequent Visitor

DAX: Moving Range Average & Standard Deviation

Hello. 
I am trying to build I-MR charts on the month level and am having difficultly getting the average & standard deviation of my "Moving Range" measure.

 

Here is a sample of the excel data I start with. The "Date" column is a calculated column created in Power BI after the data is loaded:

 

MonthYearmetric_ametric_bDate
12020 5.51/1/2020 12:00:00 AM
12020 4.51/1/2020 12:00:00 AM
120206.2 1/1/2020 12:00:00 AM
22020 3.32/1/2020 12:00:00 AM
22020 6.72/1/2020 12:00:00 AM
220205.4 2/1/2020 12:00:00 AM
32020 2.23/1/2020 12:00:00 AM
32020 10.83/1/2020 12:00:00 AM
320207.8 3/1/2020 12:00:00 AM

 

The measure I am using for the I-MR charts is a ratio between the two metrics. The DAX formulas I used to create the ratio measures are:

 

 

Sum_A = SUM(Sheet1[metric_a])
Sum_B = SUM(Sheet1[metric_b])
Ratio = DIVIDE([Sum_A], [Sum_B])

 

 

 

I used the PREVIOUSMONTH() function to calculate the ratio value from the previous month and then subtract the two measures to get Moving Range:

 

 

Ratio Last Month = CALCULATE('Measures Table'[Ratio], PREVIOUSMONTH('Date Table'[Date]))
Moving Range = ABS([Ratio] - [Ratio Last Month])

 

 

 

Viewing a table of the results everything looks accurate: 

YearMonthRatioRatio Last MonthMoving Range
2020January62.00% 62.00%
2020February54.00%62.00%8.00%
2020March60.00%54.00%6.00%
2020April51.90%60.00%8.10%

 

To build the LCL and UCL lines for the I-MR charts I need the average and standard deviation of both "Ratio" and "Moving Range". I attempted to calculate these metrics with these measures:

 

 

Ratio Avg = AverageX(ALLSELECTED('Date Table'[Date]),[Ratio])
Ratio StdDev = STDEVX.P('Date Table',CALCULATE([Ratio]))
Moving Range Avg = AverageX(ALLSELECTED('Date Table'[Date]),[Moving Range])
Moving Range StdDev = STDEVX.P('Date Table',CALCULATE([Moving Range]))

 

 

 

I placed the average and standard deviation measures in a card. The average and standard deviation are correct for the Ratio measure but incorrect for the Moving Range measure:

a_hawk_0-1643729679739.png

 

According to Excel the average Moving Range is 8.88% with a standard deviation of 11.62%. Any idea what I need to change to get the correct results for Moving Range? Any help is greatly appreciated, thank you! 

 

Link to .pbix: https://drive.google.com/file/d/1CWtFiHCjNhANGD9XCwvyIo8dvaeerry-/view?usp=sharing

 

 

1 ACCEPTED SOLUTION
Whitewater100
Solution Sage
Solution Sage

Hello:

 

You can try this for your answer of 8.8%. 

 

Avg Range  =
VAR _mytable = SUMMARIZECOLUMNS(
'Date Table'[Month],'Date Table'[Year],
"ratio", [Ratio],
"LastMonthRatio", [Ratio Last Month])
return
AVERAGEX(_mytable,
ABS([ratio] - [Ratio Last Month])
)
 
I beleive the same approach will handle Standard Dev.
 
I hope this helps!

View solution in original post

3 REPLIES 3
Whitewater100
Solution Sage
Solution Sage

Hello:

 

You can try this for your answer of 8.8%. 

 

Avg Range  =
VAR _mytable = SUMMARIZECOLUMNS(
'Date Table'[Month],'Date Table'[Year],
"ratio", [Ratio],
"LastMonthRatio", [Ratio Last Month])
return
AVERAGEX(_mytable,
ABS([ratio] - [Ratio Last Month])
)
 
I beleive the same approach will handle Standard Dev.
 
I hope this helps!

Hello,

 

Thanks for your help. Using that DAX allowed me to correctly calculate Average and Standard Deviation for the Moving Range. 

 

I placed those measures on a visual and tried to use slicers with the visual but I got the following error: 

Calculation error in measure 'Measures Table'[Avg Range]: SummarizeColumns() and AddMissingItems() may not be used in this context.

 

This error appears whenever I try to use more than 1 slicer at once to filter the visuals. Any ideas for a workaround?

 

Thank you so much for your help so far.

Hi Hawk:

 

I think SummarizeColumns isn't fully supported so if you try this instead, it should work:

 

Avg Range2 =
VAR _mytable = SUMMARIZE('Date Table',
'Date Table'[Month],'Date Table'[Year],
"ratio", [Ratio],
"LastMonthRatio", [Ratio Last Month])
return
AVERAGEX(_mytable,
ABS([ratio] - [Ratio Last Month])
)
 
I dropped it into your table and it worked. Sorry about that!

Helpful resources

Announcements
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!

Dec Fabric Community Survey

We want your feedback!

Your insights matter. That’s why we created a quick survey to learn about your experience finding answers to technical questions.

ArunFabCon

Microsoft Fabric Community Conference 2025

Arun Ulag shares exciting details about the Microsoft Fabric Conference 2025, which will be held in Las Vegas, NV.

December 2024

A Year in Review - December 2024

Find out what content was popular in the Fabric community during 2024.