DAX学习-All和Allexcept函数

此文档为学习笔记,原课程为孙兴华老师的DAX课程,详见:https://www.bilibili.com/video/BV1YE411E7p3?p=8&vd_source=b8364ea855575ea66b4a27d22ca3ae38

All

作用:返回表中所有行或列的所有值(忽略已应用到的任何筛选器)
语法:All(表名 或 列[,列1][,列2]...)
定义:①表函数,②与calculate使用,可移除当前筛选器

应用一 all表

表1:

工号归属架构入职日期评分
aa01A区域2023-01-0156
aa03G区域2022-12-14100
aa06C区域2022-10-2480
aa02A区域2022-04-0365
aa08G区域2021-12-2570
aa07B区域2023-01-1813

问:一共多少人数

未使用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结合的方法。
![在这里插入图片描述](https://img-blog.csdnimg.cn/3b44421c30534816b84b20db8fcc7b01.png

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产品13
2023-01-01产品270
2023-01-10产品128
2023-01-05产品778
2023-01-05产品568
2023-01-18产品263
2023-01-01产品447
2023-01-10产品728
2023-01-18产品155
2023-01-18产品328
2023-01-07产品314
2023-01-18产品661

求:每日产品销量占比
公式: 每日各产品销量 / 每日总销量
① 每日各产品销量:相当于日期和产品分类都要筛选,不用固定任何字段 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'[产品类型]))
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jackie_Mina

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值