DAX中MAXX函数参数使用ALL与VALUES的区别是什么?
ALL(Product['Name']) 与 VALUES(Product['Name']) 在 MAXX 中的差异
1. 数据范围的核心区别
ALL(Product['Name']):完全无视当前的筛选上下文,返回整个Product表中所有不重复的Name值。不管页面上有没有切片器筛选、行级筛选,它都只认原始表的全部产品名称。VALUES(Product['Name']):严格遵循当前筛选上下文,返回筛选后剩余的不重复Name值。如果有筛选条件(比如选了某个产品类别),它只会返回符合条件的产品名称;没有筛选时,结果和ALL一致,但只要筛选变化,它的返回结果也跟着变。
2. 筛选上下文的响应差异
举个实际例子:假设Product表有「类别」和「名称」字段,且你在报表中筛选了类别为「电子产品」。
- 用
MAXX(ALL(Product['Name']), [销售额]):计算的是所有产品(包括非电子产品)的最高销售额,完全不受当前类别筛选的影响。 - 用
MAXX(VALUES(Product['Name']), [销售额]):计算的是仅电子产品范围内的最高单品销售额,只在筛选后的产品集合里找最大值。
3. 重复值与空白值的处理
两者都会返回不重复的Name值,但:
ALL是从原始全表去重,只要原表存在的Name(包括空白值)都会被返回;VALUES是从筛选后的结果去重,只有筛选后存在的Name(含空白值,如果筛选后有)才会被返回。
4. 适用场景差异
- 当你需要忽略当前筛选、计算全局维度的最大值时,用
ALL,比如做「当前类别销售额占全局最高销售额的比例」这类计算; - 当你需要在当前筛选范围内找最大值时,用
VALUES,比如展示「当前筛选条件下的Top1单品销售额」。
内容的提问来源于stack exchange,提问作者variable
相关产品推荐
相关产品推荐

