天天看點

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取單列的值。

如果覺得有幫助,那麻煩您進行轉發,讓更多的人能夠提高自身的工作效率。