此文档为学习笔记,原课程为孙兴华老师的DAX课程,详见:https://www.bilibili.com/video/BV1YE411E7p3?p=10&vd_source=b8364ea855575ea66b4a27d22ca3ae38
度量值可以返回标量
一、单行单列
在DAX中,单行单列
的表可以用作标量值输出
如:
表3中aa01和aa02有2种补贴
其他员工只有1中补贴
表1和表3是一对多的关系
表3:
工号 | 科目 | 补贴 |
---|---|---|
aa01 | 饭贴 | 100 |
aa06 | 车费 | 50 |
aa02 | 饭贴 | 100 |
aa02 | 车费 | 50 |
aa01 | 车费 | 50 |
aa03 | 饭贴 | 100 |
aa08 | 饭贴 | 100 |
aa07 | 车费 | 50 |
表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 |
求:若员工只有1种补贴,则标记出该补贴的科目
方法1:
①求:每个员工各有补贴数
②对于补贴种类,返回一张去重后的表
③如果补贴数量=1,则显示补贴科目,否则显示空,度量值将返回标量
科目 =
var qty=countrows(distinct('表3')) --取表3中的所有行,取得补贴数
var obj=values('表3'[科目]) --返回表3中科目去重后的表
return if(qty=1,obj,"") --如果补贴数量=1,则返回对应的科目
方法2:
求唯一值也可以使用HASONEVALUE
科目 = if(HASONEVALUE('表3'[科目]),values('表3'[科目]),"")
方法3:
也可以使用SELECTEDVALUE来判断该列,如果某一列的上下文仅剩下一个非重复值,则返回该值
科目 = selectedvalue('表3'[科目])
二、多行多列
求:将员工的补贴科目,以度量值输出标量
科目 = selectedvalue('表3'[科目],concatenatex(values('表3'[科目]),'表3'[科目],"、"))
意思是:如果"科目"这一列的上下文仅剩下一个非重复值,则返回该值,否则利用concatenatex将"科目"上下文的多条数据,用"、"拼接成一个字符串
求:不要在总计这里显示科目
①求每个员工的人数,那么每个员工只会是1个个体
②如果员工人数=1,才会显示补贴科目,否则就显示空
③以上,就会排除总计
科目 = if(HASONEVALUE('表1'[工号]),CONCATENATEX(values('表3'[科目]),'表3'[科目],"、"),"")