天天看点

Power Pivot中如何不使用Filter函数进行同样效果的筛选?

1. TREATAS

A. 语法

TREATAS ( <Expression>, <ColumnName> [, <ColumnName> [, … ] ] )           

复制

B. 返回

C. 注意事项

第1参数必须是表表达式

D. 作用

只筛选对应关联值的数据

E. 案例

表1

Power Pivot中如何不使用Filter函数进行同样效果的筛选?

1). 单个筛选:

筛选姓名为张三的数据

Fiter('表1', '表1'[姓名]="张三")           

复制

Power Pivot中如何不使用Filter函数进行同样效果的筛选?

筛选成绩大85的数据

Fiter('表1', '表1'[成绩]>85)           

复制

Power Pivot中如何不使用Filter函数进行同样效果的筛选?

2). 多个条件筛选

筛选学科为数学,成绩大于85的。

Fiter('表1',  '表1'[学科]="数学"  &&
              '表1'[成绩]>85 
      )           

复制

多条件的我们可以用&&来链接实现。

3). 多个恒等条件的筛选

筛选姓名等于张三,李四,王五并求总成绩。

Calculate(Sum('表1'[成绩]),Filter('表1','表1'[姓名]="张三" ||
                                         '表1'[姓名]="李四" ||
                                         '表1'[姓名]="王五"
                                  )
          )           

复制

通过||来表达”或”的意思,也就是3个人的姓名是平行的。 不用filter函数是否也能计算出如上效果呢?

4). 使用TREATAS链接关系函数进行平行筛选

Calculate(Sum('表1'[成绩]),Treatas({"张三","李四","王五"},
                                  '表1'[姓名]
                                  )
         )           

复制

通过treatas函数把指定表的表达式对应到关系列上,然后通过关系筛选出关系列对应的值得数据来进行计算。{“张三”,”李四”,”王五”}实际上是一个列表,这个关系是并列的。

5). 使用TREATAS链接关系函数进行叠加筛选

Calculate(Sum('表1'[成绩]),Treatas({("数学",90),
                                   ("英语",85)
                                   },
                                    '表1'[学科],'表1'[成绩]
                                  )
          )           

复制

我们可以看到这里{(),()}的结构实际上是构成了2行2列的表。列的顺序对应了列字段的关系。也就是计算条件为:学科=数学,成绩=90以及学科=英语,成绩=85的成绩之和。 我们知道了,在筛选的时候可以通过列,也可以通过表来进行筛选,那是否可以有替代性的方案呢?

6). 使用现有条件列或者条件表来进行筛选

同理我们现在有一个条件表

表2

Power Pivot中如何不使用Filter函数进行同样效果的筛选?

那我们需要根据条件表的列或者条件表的整体来进行求和。

  • 根据表条件求和 我们可以直接在上面那个公式的基础上使用替换方式。
Calculate(Sum('表1'[成绩]),Treatas('表2',
                                   '表1'[学科],'表1'[成绩]
                                  )

         )           

复制

表2实际上就代表{(“数学”,100),(“语文”,90),(“英语”,80)} 返回的结果是360,因为语文有2个90分。

  • 根据列条件求和 如果只需要单列条件的话,通过Values或者SelectColumns都可以实现:
Calculate(Sum('表1'[成绩]),Treatas(SelectColumns('表2',"a",'表2'[成绩]),
                                   '表1'[成绩]
                                   )
         )           

复制

返回的结果是530。这里通过SelectColumns来实现成绩等于100,90和80的求和。因为这里100的有1个,90的有3个,80的也有2个,加起来是530。

Calculate(Sum('表1'[成绩]),Treatas(Values('表2'[成绩]),
                                   '表1'[成绩]
                                   )
          )           

复制

这里则使用的是values取单列的值。

如果觉得有帮助,那麻烦您进行转发,让更多的人能够提高自身的工作效率。