按月份计算75%最短处理时长平均值的DAX实现问题
按月份计算75%最短处理时长平均值的解决方法
问题根源
你当前的度量值是基于全局数据计算75%的条目数,而非每个月份独立计算,导致最终平均值不符合预期。需要让DAX计算时锁定「月份」的筛选上下文,确保每个月单独统计75%最短数据的平均值。
解决方案
方法1:创建单一整合度量值
直接在一个度量值中完成月度条目数计算、取数数量确定、平均值计算三个步骤,逻辑更清晰:
月度75%最短时长平均值 = VAR 当月总条目数 = CALCULATE(COUNT('data'[col1]), ALLEXCEPT('data', 'data'[月份列])) VAR 需取条目数 = ROUNDDOWN(当月总条目数 * 0.75, 0) RETURN CALCULATE( AVERAGE('data'[value]), TOPN(需取条目数, 'data', 'data'[value], ASC), ALLEXCEPT('data', 'data'[月份列]) )
说明:
ALLEXCEPT('data', 'data'[月份列])的作用是保留当前月份的筛选条件,移除其他无关筛选,确保所有计算都仅针对当前月份的数据。
方法2:修改现有度量值适配月度上下文
如果你想保留原有的75% shortest度量值,先修改它使其响应月份筛选:
75% shortest = ROUNDDOWN(CALCULATE(COUNT('data'[col1]), ALLEXCEPT('data', 'data'[月份列])) * 0.75, 0)
然后调整平均值度量值,确保计算范围锁定在当前月份:
average = CALCULATE( AVERAGE('data'[value]), TOPN([75% shortest], 'data', 'data'[value], ASC), ALLEXCEPT('data', 'data'[月份列]) )
后续操作
- 在Power BI的可视化组件(如矩阵、表格)中,将「月份列」拖入行/列区域,上述度量值拖入值区域,即可看到每个月份的75%最短时长平均值。
- 如果需要计算所有月度平均值的整体均值(即你提到的期望结果2.42),可以再创建一个度量值:
整体月度均值 = AVERAGEX(VALUES('data'[月份列]), [月度75%最短时长平均值])
内容的提问来源于stack exchange,提问作者Kevin Piochon
相关产品推荐
相关产品推荐

