DAX学习-Distinct与Values函数
此文档为学习笔记,原课程为孙兴华老师的DAX课程,详见:https://www.bilibili.com/video/BV1YE411E7p3?p=9&vd_source=b8364ea855575ea66b4a27d22ca3ae38
Distinct(列)
和Values(列)
Distinct(列)
作用:对指定表中的列去重,返回由一列组成的表,不考虑表之间的关系
语法:Distinct( 列 )
定义:表函数
Values
作用:对指定表中的列去重,返回由一列组成的表,考虑表之间的关系。若参照不匹配,会依据参照完整性,将不匹配的返回空行
语法:Values( 表 or 列 )
定义:表函数
Distinct和Values的区别
如:表1和表3是一对多的关系,而表3的aa10不存在表1中,查看Distinct和Values的区别
表1:
工号 | 归属架构 | 入职日期 | 评分 |
---|---|---|---|
aa01 | A区域 | 2023-01-01 | 56 |
aa03 | G区域 | 2022-12-14 | 100 |
aa06 | C区域 | 2022-10-24 | 80 |
aa02 | A区域 | 2022-04-03 | 65 |
aa08 | G区域 | 2021-12-25 | 70 |
aa07 | B区域 | 2023-01-18 | 13 |
表3:
工号 | 科目 | 补贴 |
---|---|---|
aa01 | 饭贴 | 100 |
aa06 | 车费 | 50 |
aa02 | 饭贴 | 100 |
aa02 | 车费 | 50 |
aa01 | 车费 | 50 |
aa03 | 饭贴 | 100 |
aa08 | 饭贴 | 100 |
aa07 | 车费 | 50 |
aa10 | 车费 | 50 |
aa10 | 车费 | 50 |
使用distinct和values分别返回表:
Distinct1 = DISTINCT('表1'[工号])
Distinct3 = DISTINCT('表1'[工号])
distinct不考虑表关系,返回指定列去重后的表
Values1 = VALUES('表1'[工号])
Values3 = VALUES('表3'[工号])
Values,也返回指定列去重后的表,但是会考虑表关系,会依据参照完整性,将不匹配的参照返回空
注:当表没有关系的时候,values和distinct返回的结果一样
Distinct、Values、All和Allnoblankrow 的区别
求:表1的行数
distinct_rows = countrows(distinct('表1'[工号])) --=6
values_rows = countrows(Values('表1'[工号])) --=7
all_rows = countrows(all('表1'[工号])) --=7
allnoblank_rows = COUNTROWS(ALLNOBLANKROW('表1'[工号])) --=6
①实际上表1是6行,而values和all函数返回的是7行,这就需要在实际工作中,表规范、建立正确的表关系,否则会导致错误
②values如果要避免上述问题,那么可以用distinct代替,而all则用allnoblankrow来代替
allnoblankrow,返回除空值外的所有行或列,且去重
Distinct(表)
和Values(表)
Distinct(table)
作用:对指定的表,返回一张去重后的新表,只有表中行上所有的数据完全相同才会去重
语法:Distinct( 表 )
定义:表函数
distinct:去重、不考虑表关系
distinct_tab1 = Distinct('表1')
distinct_tab3 = Distinct('表3')
Values
作用:不去重,复制一张表。会考虑表关系,若参照不匹配,会依据参照完整性,将不匹配的返回空行
语法:Values( 表 or 列 )
定义:表函数
values:不去重、会考虑表关系,若参照不匹配,会依据参照完整性,补充空行
values_tab1 = values('表1')
values_tab3 = values('表3')
Queenie Ye: 讲解清晰,通俗易懂,点赞👍