Power BI矩阵按行平均值设置条件格式的DAX实现方案
Power BI矩阵行级条件格式解决方案
核心问题出在原有平均值度量值的筛选逻辑和计数规则错误,修正后即可实现按行(Market/展开后的Retailer)计算动态平均值、响应切片器交互的需求。
修正行级平均值度量值
替换原有[Average Reviews]度量值为以下DAX代码:
Average Reviews = // 计算当前行(对应Market/展开后的Retailer)在选中时间范围内的评论总数 VAR TotalInCurrentRow = CALCULATE ( SUM ( Reviews_Table[Number_of_Reviews] ), ALLSELECTED ( Reviews_Table[Month] ) ) // 统计当前筛选范围内选中的月份总数,作为平均值计算的分母 VAR SelectedMonthCount = CALCULATE ( DISTINCTCOUNT ( Reviews_Table[Month] ), ALLSELECTED ( Reviews_Table[Month] ) ) RETURN DIVIDE ( TotalInCurrentRow, SelectedMonthCount, 0 )
代码逻辑说明:
- 仅移除矩阵列维度(Month字段)的筛选,保留行维度(Market、展开后的Retailer)的筛选上下文,同时完全响应外部时间切片器、其他筛选器的选择
- 修正原有度量值分母计数错误:原逻辑统计
Number_of_Reviews的非重复值属于逻辑错误,改为统计选中的月份数量,保证月均值计算准确 - 自动适配层级展开:点击矩阵的+按钮展开Retailer层级时,无需额外修改代码,度量值会自动切换为计算对应Retailer行的平均值
优化条件格式度量值
原有条件格式的判断框架可用,可简化冗余的AND判断(SWITCH函数按顺序匹配条件,前序条件不满足才会进入后续分支),优化后代码如下:
Conditional Formatting = VAR CurrentCellValue = SUM ( Reviews_Table[Number_of_Reviews] ) VAR RowAverage = [Average Reviews] RETURN SWITCH( TRUE(), CurrentCellValue >= 1.5 * RowAverage, "#008651", CurrentCellValue >= RowAverage, "#82ac2b", CurrentCellValue >= 0.5 * RowAverage, "#ff8100", "#FE2828" )
将该度量值设置为矩阵单元格背景色的条件格式规则依据即可。
效果验证
- 未展开Retailer时,每个Market行的平均值为该Market在切片器选中时段内的月均评论数,单元格颜色对比该行自身均值判定
- 展开Retailer层级后,条件格式自动适配为每个Retailer行的独立平均值
- 调整时间切片器范围时,行平均值、单元格颜色会实时动态重算
内容的提问来源于stack exchange,提问作者BlazarBlast
相关产品推荐
相关产品推荐

