DAX中两列按不同计算规则相除失效问题求助
解决DAX DIVIDE函数计算结果不符合预期的问题
问题分析
你当前的公式AVG = DIVIDE('Backlog items'[score],COUNTROWS(DISTINCT('Backlog items'[Category])))存在两个核心问题:
- 分子未做显式聚合:直接引用
'Backlog items'[score]列时,DAX会根据当前可视化的上下文返回单行的score值(而非所有score的总和),如果你的表格是逐行展示每个Backlog条目,分子就是当前行的小数值,除以类别数后自然得到类似0.01的结果。 - 上下文未明确:分母
COUNTROWS(DISTINCT('Backlog items'[Category]))的计算范围依赖可视化的上下文,如果是按Category分组展示,分母会返回1,结果就是该类别的单行score值。
修正方案
根据你预期的0.67结果(总分÷不同类别数),需要修改分子为显式聚合,并按需明确上下文:
方案1:计算当前上下文内的总分÷对应类别数
如果你的可视化是按整体或分组展示,需要聚合所有score值:
AVG = DIVIDE(SUM('Backlog items'[score]), COUNTROWS(DISTINCT('Backlog items'[Category])))
SUM('Backlog items'[score]):聚合当前上下文内所有条目的score总和COUNTROWS(DISTINCT('Backlog items'[Category])):统计当前上下文内的不同类别数量
方案2:计算全局总分÷全局不同类别数(不受可视化分组影响)
如果需要不管任何分组,始终用整个表的总分除以全局类别数,使用ALL函数清除上下文:
AVG = DIVIDE(SUM('Backlog items'[score]), COUNTROWS(DISTINCT(ALL('Backlog items'[Category]))))
额外排查点
- 确认
score列的数据类型为数值型,避免因格式错误导致计算异常 - 检查可视化的行/列分组设置,确保上下文符合你的计算逻辑
内容的提问来源于stack exchange,提问作者Cheries
相关产品推荐
相关产品推荐

