VALUES()
是 Power BI / DAX 中一个非常重要的函数,常用于处理 上下文中的唯一值集合 。它既可以作为一种"上下文探测工具",也常用于配合 CALCULATE()
、COUNTROWS()
等函数实现一些高级逻辑。
✅ 一、VALUES 函数的定义
VALUES()
返回当前上下文中指定列的唯一值集合(去重后) ,并以"表"的形式返回。
它也可以写成:
DAX
VALUES(Table[Column])
🧠 二、VALUES 的作用总结
用途 | 说明 |
---|---|
获取当前上下文中的唯一值 | 可以知道当前筛选了哪些维度(如哪些客户/产品) |
给 CALCULATE() 提供筛选器 |
配合 IN 使用,批量筛选 |
统计去重后的数量 | 配合 COUNTROWS() 计算去重数量 |
判断是否只有一个唯一值 | 配合 IF() 判断是否是单个上下文 |
📘 三、VALUES 的常见使用场景举例
✅ 1. 获取去重后的客户数量
DAX
客户数量 = COUNTROWS(VALUES(Sales[客户]))
📌 意思是:统计当前筛选条件下,有多少个不重复的客户。
✅ 2. 用于 IN
多值筛选(配合 CALCULATE)
DAX
产品销售额 =
CALCULATE(
SUM(Sales[销售额]),
Products[产品] IN VALUES(TopProducts[产品])
)
📌 意思是:只计算属于 TopProducts
表中产品的销售额。
✅ 3. 判断当前上下文是否只有一个唯一值
DAX
当前产品名称 =
IF(
HASONEVALUE(Products[产品]),
VALUES(Products[产品]),
"多个产品"
)
📌 意思是:如果当前上下文只有一个产品,就显示它的名字;否则提示"多个产品"。
✅ 4. 与 SELECTEDVALUE()
对比
SELECTEDVALUE()
实际上就是 IF(HASONEVALUE(), VALUES(), default)
的简写:
DAX
-- 等价于
SELECTEDVALUE(Products[产品], "多个产品")
⚠️ 四、注意事项
点 | 说明 |
---|---|
返回值是"表" | VALUES() 返回的是一张一列的表,而不是单个值 |
用在 IF() 时需配合 HASONEVALUE() |
避免 VALUES() 返回多行时报错 |
不等于 DISTINCT() |
DISTINCT() 会保留空值;VALUES() 在无上下文时返回所有值,包含空 |
✅ 五、总结一句话:
VALUES()
是获取当前上下文中唯一值集合的万能工具,适合做判断、去重、动态筛选等,是 DAX 中非常核心的函数之一。