1. TREATAS
A. 文法
TREATAS ( <Expression>, <ColumnName> [, <ColumnName> [, … ] ] )
複制
B. 傳回
表
C. 注意事項
第1參數必須是表表達式
D. 作用
隻篩選對應關聯值的資料
E. 案例
表1

1). 單個篩選:
篩選姓名為張三的資料
Fiter('表1', '表1'[姓名]="張三")
複制
篩選成績大85的資料
Fiter('表1', '表1'[成績]>85)
複制
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
那我們需要根據條件表的列或者條件表的整體來進行求和。
- 根據表條件求和 我們可以直接在上面那個公式的基礎上使用替換方式。
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取單列的值。
如果覺得有幫助,那麻煩您進行轉發,讓更多的人能夠提高自身的工作效率。