You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DAX中FILTER里的ALL为何返回唯一值?与VALUES有何区别?

关于DAX中ALL(列)返回唯一值及与VALUES(列)的区别

首先明确:ALL(列)本身返回的就是该列的所有唯一值构成的单列表,不是逐行的原始重复数据。所以你在FILTER里看到它返回唯一值,是这个函数的固有行为,不是特例。

为什么ALL(列)返回唯一值?

DAX里针对单列的ALL(列)函数,核心作用是清除该列的所有筛选上下文,同时返回该列在整个表中的所有唯一值集合。它不会保留原始列里的重复项,因为DAX的表函数返回的是去重后的结果(除非用ALL(表)返回整个表的所有行,包括重复)。

你的代码里ALL(Sheet1[Type])生成的是一个只包含Type列、且每个值唯一的表,FILTER遍历这个表的每一行(也就是每个唯一Type值),筛选出等于"Inbound Shipping"的项,最终作为CALCULATE的筛选条件。

ALL(列)和VALUES(列)的核心区别

两者都返回唯一值,但关键差异在是否受当前筛选上下文影响:

  • ALL(列):完全无视外部筛选,始终返回整个表中该列的所有唯一值。不管你在报表或其他计算里对Type列加了什么筛选,ALL(Sheet1[Type])都会返回所有Type的唯一值。
  • VALUES(列):严格遵循当前筛选上下文,返回的是在当前筛选范围内该列的唯一值。如果外部有筛选条件,它只会返回符合条件的唯一值;如果没有筛选,结果和ALL(列)一致。

举个实际例子

假设Sheet1的Type列数据是:Inbound Shipping, Inbound Shipping, Outbound Shipping, Outbound Shipping, Local Delivery

  • 无外部筛选时:ALL(Sheet1[Type])和VALUES(Sheet1[Type])都返回 {Inbound Shipping, Outbound Shipping, Local Delivery}
  • 当外部筛选Type = "Inbound Shipping"时:VALUES(Sheet1[Type])只返回 {Inbound Shipping},而ALL(Sheet1[Type])依然返回三个唯一值。

额外优化提示

你的代码其实可以简化,不需要用FILTER+ALL,直接在CALCULATE里写筛选条件即可:

Calculate Inbound = 
CALCULATE( [Total Cost], Sheet1[Type] = "Inbound Shipping" )

这段代码和原代码效果完全一致,因为CALCULATE会自动处理筛选上下文,不需要手动用ALL清除后再筛选。

内容的提问来源于stack exchange,提问作者variable

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 23:34:51