DAX学习-Filter函数

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

Filter

作用:根据条件筛选某张表再返回一张新表
语法:Filter=(表名,筛选条件)
定义:①表函数(返回一张表),②行上下文函数-具有迭代功能(逐行扫描进行筛选)

应用一

表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

问:筛选表中A区域的数据,并返回表

表2 = filter('表1','表1'[所属架构]="A区域")
工号归属架构入职日期评分
aa01A区域2023-01-0156
aa02A区域2022-04-0365

问:筛选表中A区域评分合格的数据,并返回表
1使用连接符&&

表2 = filter('表1','表1'[所属架构]="A区域" && '表1'[评分]>=60)

2使用and函数

表2 = filter('表1',and('表1'[所属架构]="A区域",'表1'[评分]>=60))

注:and只能连接2个条件,若条件3个或以上,则需要嵌套,如and(and(...))

3当筛选条件较多的情况下,使用var使表达式易读

表2 = 
    var tb1=filter('表1','表1'[所属架构]="A区域")
    return filter(tb1,'表1'[评分]>=60)
工号归属架构入职日期评分
aa02A区域2022-04-0365

PS:的连接符||,函数为or

应用二

表2:

工号科目基本补贴
aa01车费50
aa03车费50
aa06车费50
aa02车费50
aa08车费50
aa07车费50
aa01饭贴100
aa03饭贴100
aa06饭贴100
aa02饭贴100
aa08饭贴100
aa07饭贴100

问:给评分合格的员工,其饭贴+5
1使用filter将符合条件的数据拆分成表,再去计算
①由于是在表2中新增加列,先筛选表2 中的科目,赋值给tb1(表)
②再筛选tb1,且关联表1中评分合格的数据related(关系函数-前提是表1和表2之间有关系线)
③最后满足条件的数据中,基础补贴+5

新补贴 = calculate(
var tb1=filter('表2','表2'[科目]="饭贴")
var tb2=filter(tb1,related('表1'[评分])>=60)
return sumx(tb2,'表2'[基本补贴]+5)
)

通常情况下,多张表在多个条件的情况下计算,使用filter一层层的筛选,可以提升计算速度
但是碰到:一张大数量表中,某个条件的数据在该表只有几条的情况,那么filter也没法提升速度

工号科目基本补贴新补贴
aa01车费50
aa03车费50
aa06车费50
aa02车费50
aa08车费50
aa07车费50
aa01饭贴100
aa03饭贴100105
aa06饭贴100105
aa02饭贴100105
aa08饭贴100105
aa07饭贴100

方法二:可以使用if逻辑去判断
新补贴= if(and(RELATED('表1'[评分])>=60,'表2'[科目]="饭贴"),'表2'[基本补贴]+5,BLANK()) 逐行判断,不适用于大数据量

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jackie_Mina

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

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

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

打赏作者

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

抵扣说明:

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

余额充值