修改篩選內容

已完成

您可以使用 CALCULATE DAX 函式來修改公式中的篩選內容。 CALCULATE 函式的語法如下:

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

函式需要傳入運算式,其可傳回純量值和您所需的多個篩選條件。 運算式可以是量值 (也就是命名運算式) 或任何可在篩選內容中進行評估的運算式。

篩選條件可以是布林運算式或資料表運算式。 當您修改篩選內容時,也可以傳入篩選修改函式,以提供額外的控制。

當您有多個篩選器時,會使用 AND 邏輯運算子來進行評估,這表示所有條件都必須同時為 TRUE

注意

CALCULATETABLE DAX 函式會執行與 CALCULATE 函式完全相同的功能,但其會修改套用至傳回資料表物件運算式的篩選內容。 在此課程模組中,說明和範例會使用 CALCULATE 函式,但請記住,這些案例也適用於 CALCULATETABLE 函式。

套用布林運算式篩選條件

布林運算式篩選條件是評估為 TRUEFALSE 的運算式。 布林值篩選條件必須遵守下列規則:

  • 其只能參考單一資料行。
  • 其不可參考量值。
  • 其不能使用掃描或傳回包含彙總函式 (例如 SUM) 資料表的函式。

在此範例中,您將建立量值。 首先,下載並開啟 Adventure Works DW 2020 M06.pbix 檔案。 然後,新增下列量值到 Sales 資料表,以使用紅色產品的布林運算式篩選條件來篩選 [收益] 量值。

Revenue Red = CALCULATE([Revenue], 'Product'[Color] = "Red")

Revenue Red 量值新增至報表 Page 1 上的資料表視覺效果。

圖中顯示出具有三個資料行的資料表:區域、收益和收益紅色。資料表會顯示 10 個資料列和總計。

在下一個範例中,下列量值會依多個色彩篩選 Revenue 量值。 請注意,使用 IN 運算子,後面接著色彩值的清單。

Revenue Red or Blue = CALCULATE([Revenue], 'Product'[Color] IN {"Red", "Blue"})

下列量值會依昂貴的產品來篩選 Revenue 量值。 昂貴的產品是標價大於 1000 美元的產品。

Revenue Expensive Products = CALCULATE([Revenue], 'Product'[List Price] > 1000)

套用資料表運算式篩選條件

資料表運算式篩選條件會套用資料表物件做為篩選條件。 其可以是模型資料表的參考;不過,這可能是傳回資料表物件的 DAX 函式。

通常,您會使用 FILTER DAX 函式來套用複雜的篩選條件,包括無法由布林值篩選條件運算式定義的條件。 FILTER 函式會歸類為迭代器函式,因此您會傳入資料表或資料表運算式,以及評估該資料表每個資料列的運算式。

FILTER 函式會傳回資料表物件,其結構與資料表傳入的結構完全相同。 其資料列是所傳入資料列的子集,表示運算式評估為 TRUE 的資料列。

下列範例顯示使用 FILTER 函式的資料表篩選條件運算式:

Revenue High Margin Products =
CALCULATE(
    [Revenue],
    FILTER(
        'Product',
        'Product'[List Price] > 'Product'[Standard Cost] * 2
    )
)

在此範例中,FILTER 函式會篩選 [產品] 資料表中的所有資料列 (位於篩選內容中)。 產品的每個資料列如果其清單價格超過其標準成本,則會顯示為已篩選資料表的資料列。 因此,會針對 FILTER 函式傳回的所有產品評估 Revenue 量值。

傳入 CALCULATE 函式的所有篩選條件運算式都是資料表篩選條件運算式。 布林值篩選條件運算式是一個簡短的標記法,用來改善撰寫和閱讀體驗。 就內部而言,Microsoft Power BI 會將布林值篩選條件運算式轉譯為資料表篩選條件運算式,這就是其轉譯您 Revenue Red 量值定義的方式。

Revenue Red =
CALCULATE(
    [Revenue],
    FILTER(
        'Product',
        'Product'[Color] = "Red"
    )
)

篩選行為

當您將篩選條件運算式新增至 CALCULATE 函式時,會發生兩種可能的標準結果:

  • 如果資料行 (或資料表) 不在篩選內容中,則會將新的篩選條件新增至篩選內容,以評估 CALCULATE 運算式。
  • 如果資料行 (或資料表) 已在篩選內容中,則新的篩選條件將會覆寫現有的篩選條件,以評估 CALCULATE 運算式。

下列範例示範如何將篩選條件運算式新增至 CALCULATE 函式。

注意

在每個範例中,不會對資料表視覺效果套用任何篩選條件。

如同先前的活動,Revenue Red 量值已新增至依區域分組並顯示收益的資料表視覺效果。

圖中顯示出具有三個資料行的資料表:區域、收益和收益紅色。資料表會顯示 10 個資料列和總計。

因為不會對 [產品] 資料表中的 [色彩] 資料行套用任何篩選條件,所以量值的評估會新增新的篩選條件來篩選內容。 在第一個資料列中,$2,681,324.79 的值是針對在澳洲區域銷售的紅色產品。

將資料表視覺效果的第一個資料行從 [區域] 切換為 [色彩] 會產生不同的結果,因為 [產品] 資料表中的 [色彩] 資料行現在是在篩選內容中。

圖中顯示出具有三個資料行的資料表:色彩、收益和收益紅色。資料表會顯示 10 個資料列和總計。針對每個資料列,[收益紅色] 的值都相同。

Revenue Red 量值公式會在 Product 資料表的 Color 資料行上新增篩選,藉以評估 Revenue 量值。 因此,在此視覺效果中,會依色彩分組,量值公式會以新的篩選條件覆寫篩選內容。

此結果不一定是您想要的。 下一個單元會介紹 KEEPFILTERS DAX 函式,這是一種篩選修改函式,可讓您用來保留篩選條件,而不是將其覆寫。