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

应用一

表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

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

表2 = filter('表1','表1'[所属架构]="A区域")

工号

归属架构

入职日期

评分

aa01

A区域

2023-01-01

56

aa02

A区域

2022-04-03

65

问:筛选表中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)

工号

归属架构

入职日期

评分

aa02

A区域

2022-04-03

65

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

饭贴

100

105

aa06

饭贴

100

105

aa02

饭贴

100

105

aa08

饭贴

100

105

aa07

饭贴

100

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