此文档为学习笔记,原课程为孙兴华老师的DAX课程,详见:https://www.bilibili.com/video/BV1YE411E7p3?p=8&vd_source=b8364ea855575ea66b4a27d22ca3ae38
All
作用:返回表中所有行或列的所有值(忽略已应用到的任何筛选器)
语法:All(表名 或 列[,列1][,列2]...)
定义:①表函数,②与calculate使用,可移除当前筛选器
应用一 all表
表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 |
问:一共多少人数
未使用all的计算:
人数(未使用all) = count('表1'[工号])
使用all的计算
人数(使用all) = CALCULATE( count('表1'[工号]),all('表1'))
区别:
在当前未筛选的情况下,度量值(未使用all)=6,度量值(使用all)=6
在当前已筛选的情况下,度量值(未使用all)=2,度量值(使用all)=6,使用all
忽略了该表应用到的任何筛选器
应用二 all列
求:各区域,合格人数占总人数的占比
首先,新建列:是否合格 = if('表1'[评分]>=60,"合格","不合格")
all表:
人数(使用all) = CALCULATE( count('表1'[工号]),all('表1'))
当使用all表
的时候,由于忽略了该表的任何筛选器,所以导致不管是否合格,不管是哪个区域的总人数都=6
但这显然与逻辑不符,计算也会是错误的
要得到:既要固定合格和不合格
的值又能根据各区域
来筛选,则需要用到all列
all列:
人数(使用all-是否合格) = CALCULATE( count('表1'[工号]),all('表1'[是否合格]))
①all('表1'[是否合格])
这里的all固定是否合格
,字段。
①由于所属架构
没有被固定,所以所属架构
是具有筛选功能的,也就是各区域可以按照自己区域的人数而计算,而不是都=6。
③all固定了是否合格
,相当于无论筛选合格或不合格,该区域的人数都是固定的。
④因此,当一张表除了某几个字段需要固定值,而其他字段需要有筛选功能,就可以使用all(列[,列1][,列2])
与calculate
结合的方法。
Allexcept
作用:与all列
相反,表示:除…之外的其他列都固定
通常用于,当all(列1,列2,列3,...)
中需要固定的列太多,那么用allexcept,来反向排除筛选列
语法:Allexecpt(表名, 列[,列1][,列2]...)
如:
CALCULATE( count('表1'[工号]),ALLEXCEPT('表1','表1'[是否合格]))
其中ALLEXCEPT('表1','表1'[是否合格])
的意思是:在表中,除是否合格
是筛选列,其他列都是固定的。
①是否合格
是可以筛选的,在所有人数中合格
的人数=4
②其他列都是固定的,所以不管哪个区域的合格总人数都=4
③ 因此表达式的意思是:各区域合格的人数占所有合格总人数的占比
应用三
表2:
日期 | 产品类型 | 销量 |
---|---|---|
2023-01-01 | 产品1 | 3 |
2023-01-01 | 产品2 | 70 |
2023-01-10 | 产品1 | 28 |
2023-01-05 | 产品7 | 78 |
2023-01-05 | 产品5 | 68 |
2023-01-18 | 产品2 | 63 |
2023-01-01 | 产品4 | 47 |
2023-01-10 | 产品7 | 28 |
2023-01-18 | 产品1 | 55 |
2023-01-18 | 产品3 | 28 |
2023-01-07 | 产品3 | 14 |
2023-01-18 | 产品6 | 61 |
求:每日产品销量占比
公式: 每日各产品销量 / 每日总销量
① 每日各产品销量:相当于日期和产品分类都要筛选,不用固定任何字段 sum('表2'[销量])
②每日总销量:每一天总销量是不同的,不能固定为,所以日期可以应用筛选ALLEXCEPT('表2','表2'[日期])
③表达式:每日产品销量占比 = sum('表2'[销量])/calculate(sum('表2'[销量]),ALLEXCEPT('表2','表2'[日期]))
求:求各产品每天的销量变化
公式: 产品每日的销量 / 该产品总销量
① 产品每日的销量 :相当于日期和产品分类都要筛选,不用固定任何字段 sum('表2'[销量])
②该产品总销量:产品是不同的,所以产品类型可以应用筛选ALLEXCEPT('表2','表2'[产品类型])
③表达式:各产品占每日销量的比例 = sum('表2'[销量])/calculate(sum('表2'[销量]),ALLEXCEPT('表2','表2'[产品类型]))