前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Power Pivot中如何不使用Filter函数进行同样效果的筛选?

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

作者头像
逍遥之
发布2020-03-20 17:16:41
1.5K0
发布2020-03-20 17:16:41
举报
文章被收录于专栏:数据技巧数据技巧

1. TREATAS

A. 语法
代码语言:javascript
复制
TREATAS ( <Expression>, <ColumnName> [, <ColumnName> [, … ] ] )

B. 返回

C. 注意事项

第1参数必须是表表达式

D. 作用

只筛选对应关联值的数据

E. 案例

表1

1). 单个筛选:

筛选姓名为张三的数据

代码语言:javascript
复制
Fiter('表1', '表1'[姓名]="张三")

筛选成绩大85的数据

代码语言:javascript
复制
Fiter('表1', '表1'[成绩]>85)

2). 多个条件筛选

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

代码语言:javascript
复制
Fiter('表1',  '表1'[学科]="数学"  &&
              '表1'[成绩]>85 
      )

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

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

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

代码语言:javascript
复制
Calculate(Sum('表1'[成绩]),Filter('表1','表1'[姓名]="张三" ||
                                         '表1'[姓名]="李四" ||
                                         '表1'[姓名]="王五"
                                  )
          )

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

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

代码语言:javascript
复制
Calculate(Sum('表1'[成绩]),Treatas({"张三","李四","王五"},
                                  '表1'[姓名]
                                  )
         )

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

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

代码语言:javascript
复制
Calculate(Sum('表1'[成绩]),Treatas({("数学",90),
                                   ("英语",85)
                                   },
                                    '表1'[学科],'表1'[成绩]
                                  )
          )

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

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

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

表2

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

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

         )

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

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

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

代码语言:javascript
复制
Calculate(Sum('表1'[成绩]),Treatas(Values('表2'[成绩]),
                                   '表1'[成绩]
                                   )
          )

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据技巧 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. TREATAS
    • A. 语法
      • B. 返回
        • C. 注意事项
          • D. 作用
            • E. 案例
              • 1). 单个筛选:
                • 2). 多个条件筛选
                  • 3). 多个恒等条件的筛选
                    • 4). 使用TREATAS链接关系函数进行平行筛选
                      • 5). 使用TREATAS链接关系函数进行叠加筛选
                        • 6). 使用现有条件列或者条件表来进行筛选
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档