iT邦幫忙

2024 iThome 鐵人賽

DAY 27
1
AI/ ML & Data

華人市場資料打撈師求生指南系列 第 27

Day 27 - DAX 的兩種「語境」 (context) - 篩選語境 (Filter Context)

  • 分享至 

  • xImage
  •  

Context (語境)在 Power BI 的繁體中文官方文件中,被譯為上下文。但我自己認為語境相對有畫面感,而且我自己認為語境給人的感覺更加接近 使用者操作 Power BI 行程報表時,使用者腦袋中想的事情,以及 DAX evaluation 的方式,所以這邊以語境翻譯。

另外,因為討論 DAX,一定避不開資料模型,所以這裡先附上資料模型的圖。

https://ithelp.ithome.com.tw/upload/images/20241011/201631031WWVPJ0YmN.jpg

篩選語境 (Filter Context)

在微軟的文件中,語境被分為三種:列 (Row)、篩選 (Filter) 以及 查詢 (Query)。從表格的操作來歸納的話,後兩者其實都是在篩選列,因此我選擇把篩選語境跟查詢語境都放到篩選語境中。

(Power BI 權威 SQL BI的文章中 中也是放在一起,但他還提到了兩者其實有所差別,但我自己目前還沒有體會到實際的差別,因此還請大家小心使用)

篩選語境的用途,是篩選出表格中接下來有哪些列會參與運算。

透過視覺效果表達篩選語境

Sales Revenue = SUM( 'order'[total_amount]) 這個 DAX 以及下面的樞紐分析表為例。

https://ithelp.ithome.com.tw/upload/images/20241011/20163103fnmMVVj8fB.jpg

圖中的黃色數字那一格 7594在計算時,執行的順序是:

  1. 從 order 表格中篩選出產品種類屬於 catering 且 訂單日是在 2021 內的訂單(列)。
  2. 將找出來的列對著 total_amount 做加總。

其中第一步就是所謂的篩選語境。它關注的是使用者拖拉形成視覺效果時,使用者心中所想以及 DAX 計算彼此間的互動關係。

以 5794 這一格來說,使用者心中所預期的是「 catering2021 年的營收是多少」,DAX 便透過視覺效果傳來的值(2021, Catering) 形成篩選語境,在 order 這張表篩選出對應的列,傳到接下來的函數中做運算。這類透過視覺效果形成的篩選語境,正是 Power BI 官方文件中 所謂的查詢語境。

透過 DAX 表達篩選語境

除了透過視覺效果表達篩選語境外,也可以透過 DAX 表達篩選語境,這也為 DAX 帶來了更出色的表達能力。比方說,在看完 catering 的營收後,產品部門開始想知道 catering 的營收佔所有營收的多少百分比呢?這時使用者心中所希望看到的視覺效果如下:

Catering
year Sales revenue
2021 20%

其中 20 % = catering 的營收 / 所有產品的營收,其篩選語境如下:

  1. 分子計算時的篩選語境就如上面一樣,可以透過視覺效果充分表達。
  2. 分母的篩選語境,就需要設法排除來自 Catering 的篩選,讓分母在視覺效果中能呈現所有產品的營收。

這時就需要新增一個量值: Sales Revenue (Product Context Invariant) := Calculate ([Sales Revenue], ALL(Product)) 簡單來說,這個量值想表達,計算營收時,請排除所有來自 Product 這一張表的篩選。

從下面的樞紐分析表可以清楚看到 Sales Revenue (Product Context Invariant) 保留視覺效果中來自年份的篩選語境,但是排除了產品的篩選語境,所以 catering 跟 Meetings Essentials 的 Sales Revenue (Product Context Invariant) 量值相同。

https://ithelp.ithome.com.tw/upload/images/20241011/20163103bkRO3OCUrs.jpg

以 DAX 表達篩選語境還有很多其他的做法,像是 Filter(), USERELATIONSHIP, 和 CROSSFILTER 都是透過 DAX的方式 去強制篩選、換欄位篩選,或是逆向篩選 來表達篩選表格的不同方式。

小結

透過視覺效果表達的篩選語境,是使用者或是報表開發者在拖拉報表時產生的篩選語境。透過 DAX 表達的篩選語境則是語意模型開發者事前預測報表開發者會如何拖拉量值而事先設計好的篩選語境。

篩選語境介紹到這裡,接下來會介紹列語境 (Row Context)。


上一篇
Day 26 - DAX 時間智慧函數 (Time Intelligence Function)
下一篇
Day 28 - DAX 的兩種「語境」 (context) - 列語境 (Row Context)
系列文
華人市場資料打撈師求生指南30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言