CALCULATE

適用於:匯出數據行計算數據表量值視覺計算

評估已修改篩選內容中的表達式。

注意

還有 CALCULATETABLE 函式。 除了修改套用至傳回 數據表對象的表示式 篩選內容之外,它會執行完全相同的功能。

語法

CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])

參數

術語 定義
expression 要評估的運算式。
filter1, filter2,… (選擇性)定義篩選條件或篩選修飾詞函式的布爾表達式或數據表表達式。

你用來作為第一個參數的表達式就像一個測度。

篩選可以是:

  • 布爾篩選表達式
  • 數據表篩選表達式
  • 篩選修改函式

當你使用多個濾波器時,可以用 (&&) 邏輯運算子來評估它們AND,表示所有條件都必須是 TRUE,或用 OR (||) 邏輯運算子來計算,這表示任一條件都可能為真。 欲了解更多資訊,請參見 DAX 運算子邏輯 > 運算子

布爾篩選表達式

布爾表達式篩選條件是評估為 TRUEFALSE的表達式。 必須遵守幾項規則:

  • 它可以參考單一資料表的欄位。

  • 它無法參考度量。

  • 它不能使用巢 CALCULATE 狀函式。

  • 它無法使用掃描或回傳資料表的函式,除非你把它們當作聚合函式的參數。

  • 它可以包含一個彙總函數,回傳一個純量值。 例如:

    Total sales on the last selected date =
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] )
    )
    

數據表篩選表達式

數據表表達式篩選條件會將數據表物件套用為篩選。 它可以是模型數據表的參考,但更有可能是傳回數據表物件的函式。 你可以用這個 FILTER 函式套用複雜的濾波條件,包括那些布林濾子表達式無法定義的條件。

篩選修飾詞函式

過濾修改器功能讓你做的不只是新增篩選器。 它們在修改濾鏡上下文時能給你額外的控制權。

功能 目的
REMOVEFILTERS 從數據表的一或多個數據行,或從單一數據表的所有數據行中移除所有篩選或篩選。
ALL 1ALLEXCEPTALLNOBLANKROW 從一或多個數據行移除篩選,或從單一數據表的所有數據行中移除篩選。
KEEPFILTERS 新增篩選,而不移除相同數據行上的現有篩選。
USERELATIONSHIP 若在相關欄位間建立非活躍關係,則該活躍關係自動變成非活躍狀態。
CROSSFILTER 修改篩選方向(從兩者到單一,或從單一到兩者)或停用關聯性。

1ALL 函式及其變體會同時做為篩選修飾詞和傳回數據表物件的函式。 如果你的工具支援這個 REMOVEFILTERS 功能,可以用它來移除過濾器。

傳回值

由該表達式產生的數值。

言論

  • 當你提供濾嘴表達式時,函 CALCULATE 式會修改濾波器上下文來評估表達式。 對於每個濾波器表達式,當該濾波器表達式未被函式包裹時 KEEPFILTERS ,存在兩個標準結果:

    • 如果欄位或資料表不在篩選條件中,則會新增篩選條件以評估表達式。
    • 如果欄位或資料表已經在篩選條件中,現有的篩選器會被新的篩選器覆蓋以評估表達式 CALCULATE 。
  • 使用CALCULATE無濾條件的函數可達成特定需求。 它會轉換數據列內容以篩選內容。 當需要在列上下文中評估一個總結模型資料的表達式(非模型指標)時,此轉換是必要的。 此案例可能發生在計算結果列公式中,或在評估反覆運算器函式中的運算式時發生。 當你在列上下文中使用模型度量時,上下文轉換是自動發生的。

  • 在匯出數據行或數據列層級安全性 (RLS) 規則中使用時,不支援在 DirectQuery 模式中使用此函式。

例子

本文中的範例可以搭配範例 Adventure Works DW 2020 Power BI Desktop 模型使用。 若要取得模型,請參閱 DAX 範例模型

下列 Sales 數據表量值定義會產生收益結果,但僅適用於色彩為藍色的產品。

Blue Revenue =
CALCULATE ( SUM ( Sales[Sales Amount] ), 'Product'[Color] = "Blue" )
類別 銷售金額 藍色營收
輔料 $1,272,057.89 $165,406.62
自行車 $94,620,526.21 $8,374,313.88
服裝 $2,117,613.45 $259,488.37
元件 $11,799,076.66 $803,642.10
總計 $109,809,274.20 $9,602,850.97

CALCULATE 函式會評估已修改篩選內容中 Sales 數據表 Sales Amount 數據行的總和。 新的篩選條件會新增至 Product 數據表,Color 數據行;或者,篩選條件會覆寫已套用至數據行的任何篩選。

下列 Sales 數據表量值定義會產生所有銷售通路銷售額的比率。

Revenue % Total Channel =
DIVIDE (
    SUM ( Sales[Sales Amount] ),
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        REMOVEFILTERS ( 'Sales Order'[Channel] )
    )
)
管道 銷售金額 總頻道收入 %
網際網路 $29,358,677.22 26.74%
轉銷商 $80,450,596.98 73.26%
總計 $109,809,274.20 100.00%

函式會將 sales 數據表 總和 Sales Amount 數據行值(在篩選內容中)除以修改篩選內容中的相同表達式。 這是使用篩選修飾詞函式 CALCULATE 函式來修改篩選內容的 REMOVEFILTERS 函式。 它會從 Sales Order 數據表 Channel 數據行中移除篩選。

下列 Customer 數據表匯出數據行定義會將客戶分類為忠誠類別。 這是一個非常簡單的案例:當客戶產生的收入低於 2500 美元時,它們會分類為 Low;否則會 High

Customer Segment =
IF (
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        ALLEXCEPT ( Customer, Customer[CustomerKey] )
    ) < 2500,
    "Low",
    "High"
)
客戶群 客戶數量 銷售金額
4,637 $102,670,663.09
13,848 7,138,611.11美元
總計 18,485 $109,809,274.20

在此範例中,數據列內容會轉換成篩選內容。 它稱為 內容轉換ALLEXCEPT 函式會移除所有 Customer 數據表數據行的篩選,但 CustomerKey 數據行除外。