如何用DAX实现Excel的AVEDEV函数?计算180天内Fail Rate 2的平均绝对偏差
复现Excel AVEDEV函数的DAX度量值(计算过去180天「Fail Rate 2」的平均绝对偏差)
Excel的AVEDEV函数核心逻辑是计算数据点与平均值的绝对差的平均值,DAX中无直接等效内置函数,可通过组合DAX函数手动实现,以下分两种场景给出解决方案:
场景1:「Fail Rate 2」为数据表物理列
若「Fail Rate 2」是模型中某张表的物理列,使用如下度量值:
AVEDEV Fail Rate 2 (Last 180 Days) = VAR Last180DaysDates = DATESINPERIOD('Date'[Date], TODAY(), -180, DAY) VAR FailRateValues = CALCULATETABLE(VALUES('YourTable'[Fail Rate 2]), Last180DaysDates) VAR AvgFailRate = AVERAGE('YourTable'[Fail Rate 2]) VAR AbsoluteDeviations = ADDCOLUMNS(FailRateValues, "@AbsDev", ABS([Fail Rate 2] - AvgFailRate)) RETURN AVERAGEX(AbsoluteDeviations, [@AbsDev])
代码说明:
Last180DaysDates:通过DATESINPERIOD获取过去180天的日期范围(需模型包含标准日期表'Date')FailRateValues:筛选出过去180天内所有非重复的「Fail Rate 2」值AvgFailRate:计算该时间段内「Fail Rate 2」的平均值AbsoluteDeviations:为每个值计算与平均值的绝对偏差AVERAGEX:迭代计算所有绝对偏差的平均值,与ExcelAVEDEV结果一致
场景2:「Fail Rate 2」为DAX度量值
若「Fail Rate 2」本身是DAX度量值(非物理列),需调整代码以迭代每日度量值结果:
AVEDEV Fail Rate 2 (Last 180 Days) = VAR Last180DaysDates = DATESINPERIOD('Date'[Date], TODAY(), -180, DAY) VAR DailyFailRates = CALCULATETABLE( ADDCOLUMNS( VALUES('Date'[Date]), "@DailyFailRate", [Fail Rate 2] ), Last180DaysDates ) VAR AvgFailRate = AVERAGEX(DailyFailRates, [@DailyFailRate]) VAR AbsoluteDeviations = ADDCOLUMNS(DailyFailRates, "@AbsDev", ABS([@DailyFailRate] - AvgFailRate)) RETURN AVERAGEX(AbsoluteDeviations, [@AbsDev])
代码说明:
DailyFailRates:迭代过去180天的每个日期,计算当日「Fail Rate 2」度量值结果,生成包含日期与对应值的表- 后续步骤与场景1一致,基于每日度量值结果计算平均值和绝对偏差
内容的提问来源于stack exchange,提问作者dapm
相关产品推荐
相关产品推荐

