【自记】Power BI 中 VALUES 和 DISTINCT 在可接收的参数类型上的区别。
在 DAX 中,VALUES
和 DISTINCT
虽然都用于处理数据集中的唯一值,但在可接收的参数类型上存在明确且关键的区别,结合之前的讨论(尤其是 VALUES
处理表参数的行为),重新梳理如下:
一、核心参数类型差异
函数 | 可接收的参数类型 | 关键限制 |
---|---|---|
VALUES | 1. 单个列(如 '表'[列名] )2. 整个表(如 '表' ) | 处理表时不支持去重(返回所有可见行,包括重复行) |
DISTINCT | 1. 单个列(如 '表'[列名] )2. 整个表(如 '表' ) | 1. 不支持 “表达式动态生成的临时列” 2. 处理表时强制去重(仅返回唯一行) |
二、参数类型的详细对比
1. 对 “单个列” 的支持
两者共同点:都支持传入模型中已定义的列(如
'销售表'[货号]
),返回该列的唯一值(去重)。
dax示例:VALUES('销售表'[货号]) // 正确,返回[货号]的唯一值(去重) DISTINCT('销售表'[货号]) // 正确,返回[货号]的唯一值(去重)
关键差异:
VALUES
支持 “表达式动态生成的临时列”,而DISTINCT
不支持。
dax示例:VALUES(INT('销售表'[单价] * 2)) // 正确:先计算“单价×2”,再返回结果的唯一值 DISTINCT(INT('销售表'[单价] * 2)) // 错误:DISTINCT 不支持表达式生成的临时列
2. 对 “整个表” 的支持
VALUES('表')
:- 接收整个表作为参数时,返回表中所有可见行(包括重复行),不进行去重。
- 本质是 “返回当前筛选上下文下该表的所有行”,保留原始数据的完整性(包括重复记录)。
DISTINCT('表')
:- 接收整个表作为参数时,返回表中所有不重复的行(完全相同的行会被合并为一行)。
- 本质是 “返回表中唯一行的子集”,强制去除重复记录。
三、总结:参数类型的核心区别
- 动态列支持:
VALUES
可以处理表达式生成的临时列,DISTINCT
仅支持模型中已定义的列。 - 表参数处理:
VALUES(表)
返回所有行(含重复),DISTINCT(表)
返回去重后的唯一行。