了解 CALCULATE 函式

已完成

在本單元結束時,您將能夠充分了解 CALCULATE 函式如何是 Power BI 中最具彈性的函式之一。

概括而言,您可以控制資料列和篩選內容。 使用 CALCULATE 函式,您可以新增、移除及更新篩選。 一個函式就能執行許多功能!

使用 CALCULATE 新增篩選

首先,看看如何使用 CALCULATE 函式新增篩選。

使用 CALCULATE 函式新增篩選時所要參考的資料表。

在上述資料表中,您有總銷售額:

Total Sales = SUM( [Sales Amount] )

您也有總銷售額篩選後的版本,其中您會評估總銷售額,並套用飛機篩選內容:

Airplane Sales = CALCULATE( [Total Sales], 'Product Details'[ItemGroup] = "Airplane" )

提示

與 TABLEAU 的關聯:下列程式碼片段示範如何在 Tableau 中進行相同的計算:Airplane Sales = IF [ItemGroup] = "Airplane" THEN SUM([Sales Amount] ELSE 0 END)

使用 CALCULATE 忽略篩選

接下來,看看如何使用 CALCULATE 函式忽略篩選。

使用 CALCULATE 函式忽略篩選時所要參考的資料表。

在上述資料表中,您有一個資料行列出各州的總銷售額,而下一個資料行則列出所有地理位置的總銷售額。 當想要分析每個州 (或資料列) 的總計百分比時,此資料行會很有用。

在 DAX 中執行總計百分比的最常見方式是透過 ALL 函式。

Total Sales All Geo = CALCULATE( [Total Sales], ALL( Geography ) )

在上述程式碼中,您想要查看 Geography 資料表並在其中包含所有值;請勿縮小篩選內容範圍。

提示

與 TABLEAU 的關聯:下列程式碼片段示範如何在 Tableau 中使用 EXCLUDE LOD 運算式進行相同的計算:Total Sales All Geo = { EXCLUDE [State], [City] : SUM([Total Sales]) }

另一個忽略篩選範例看起來如下所示:

使用 CALCULATE 函式忽略篩選時所要參考的資料表。

在上表中,您有各州的總銷售額、所有地理位置的總銷售額 (排除所有的地理位置篩選),最後您有所有州但仍套用城市篩選的總銷售額。

根據上圖,許多州都有 Alexandria 城市。 因此,您只想針對擁有 Alexandria 城市的州,找出這些州的總銷售額:

Total Sales All States = CALCULATE( [Total Sales], ALL( Geography[State] ) )

提示

與 TABLEAU 的關聯:您可以在 Tableau 中使用 EXCLUDE LOD 運算式進行相同的計算。 您會注意到此 LOD 運算式與另一個運算式在資料粒度方面不同。 使用此運算式,您只想要從檢視中排除州,而不是州和城市:Total Sales All States = { EXCLUDE [State] : SUM([Total Sales]) }

使用 CALCULATE 更新篩選

最後,我們將透過更新篩選進行最終逐步解說,以強調 CALCULATE 函式的實用性。

使用 CALCULATE 函式更新篩選時所要參考的資料表。

在上述資料表中,您有整體總銷售額 (忽略年份)、以視覺效果中交叉分析篩選器套用篩選內容所得的總銷售額,然後最後一個資料行是僅限 2018 年的總銷售額。

若要取得 [2018 Sales] 資料行,您必須撰寫如下的內容:

2018 Sales = CALCULATE( [Total Sales], DATE[Year] = 2018 )

提示

與 TABLEAU 的關聯:這段程式碼很有趣,因為似乎沒有直接的 Tableau 比較。 若要在 Tableau 中執行這項操作,您必須複製欄位、引進補充資料來源,或在每個資料行上執行計算。

Tableau:目前無法使用。Power BI:使用 CALCULATE 函式更新篩選,以控制篩選內容。

讓我們摘要說明您在此 CALCULATE 單元中所看到的內容:

  • 任何運算式都可以當作第一個引數置入。

  • 運算式會查看頁面上的所有篩選內容 (視覺效果的交叉分析篩選器)。

  • 如有篩選,則會加以新增。

  • 如果篩選已在篩選清單中並與頁面內容相同,則會覆寫該篩選。

  • 處理完上述所有細節 (以上所列) 之後,最後會評估運算式。

注意

很明顯地,在未檢查答案確認自己真正了解運算順序之前,您不應該執行這項操作。 您應該自問:「我的篩選是否被取消?」