按类别(项目)获取最大单价失败,求解决方案
按项目获取最大单价却返回最小值的DAX问题解决
问题描述
需要按「项目」类别提取对应最大单价,但现有DAX公式始终返回最小值(实际得到1.79,预期为3.58)。当前使用的DAX代码如下:
Max of Unit Price max per Project = MAXX( KEEPFILTERS(VALUES('Table1'[Project])), CALCULATE(MAX('Table1'[Unit Price])) )
注:示例数据仅包含一个项目类别(对应列未显示)。
问题原因
KEEPFILTERS 会强制保留当前行上下文的筛选条件,导致 CALCULATE(MAX('Table1'[Unit Price])) 只能计算当前行上下文范围内的单价最大值,而非整个项目组的全局最大值。由于视觉对象的行上下文限制,最终返回的是当前行对应的小值,而非项目级的最大值。
解决方案
推荐使用 ALLEXCEPT 清除无关筛选,仅保留「项目」列的分组逻辑,确保计算每个项目的全局最大单价:
Max of Unit Price max per Project = CALCULATE(MAX('Table1'[Unit Price]), ALLEXCEPT('Table1', 'Table1'[Project]))
如果需要保留 MAXX 的写法,可移除 KEEPFILTERS 并添加 ALLSELECTED 清除行上下文筛选:
Max of Unit Price max per Project = MAXX( VALUES('Table1'[Project]), CALCULATE(MAX('Table1'[Unit Price]), ALLSELECTED('Table1')) )
说明
ALLEXCEPT('Table1', 'Table1'[Project]):仅保留「项目」列的筛选,清除表中其他所有列的行上下文筛选,确保计算的是每个项目分组内的最大单价。- 上述两种写法均能摆脱行上下文限制,正确返回项目对应的最大单价3.58。
内容的提问来源于stack exchange,提问作者HamiltonPharmD
相关产品推荐
相关产品推荐

