使用篩選修飾詞函式

已完成

使用 CALCULATE 函式時,您可以傳入篩選修改函式,讓您可以完成新增篩選以外的更多作業。

移除篩選條件

使用 REMOVEFILTERS DAX 函式做為 CALCULATE 篩選條件運算式,以從篩選內容中移除篩選條件。 其可以從單一資料表的一個或多個資料行或所有資料行中移除篩選條件。

注意

REMOVEFILTERS 函式相對較新。 在舊版的 DAX 中,您已使用 ALL DAX 函式或變化 (包括 ALLEXCEPTALLNOBLANKROW DAX 函式) 來移除篩選條件。 這些函式會當做篩選修飾詞和函式,以傳回相異值的資料表物件。 現在會提及這些函式,因為您可能會找到使用其移除篩選的文件和公式範例。

在下列範例中,您將新增量值到 Sales 資料表,以評估 Revenue 量值,但會藉由從 Sales Territory 資料表移除篩選條件來執行此動作。 請將量值格式設為兩個小數位數的貨幣值。

Revenue Total Region = CALCULATE([Revenue], REMOVEFILTERS('Sales Territory'))

現在,將 Revenue Total Region 量值新增至報表 Page 2 上的矩陣視覺效果。 矩陣視覺效果會依據資料列 [銷售領域] 資料表中的三個資料行進行分組:[群組]、[國家/地區] 和 [區域]。

圖中顯示標題為「轉售商收益」的矩陣,其 [群組]、[國家/地區] 和 [區域] 會在資料列上分組,以及 [收益] 和 [總區域收益] 摘要。針對每個資料列群組,[總區域收益] 的值都相同。

請注意,每個 Revenue Total Region 的值都相同。 這是總收益的值。

雖然此結果本身並不實用,但當其用做比率的分母使用時,會計算總計的百分比。 因此,您現在會使用下列定義來覆寫 Revenue Total Region 量值定義。 (這個新定義會變更量值名稱,並宣告兩個變數。請務必將量值格式化為具有兩個小數字數的百分比。)

Revenue % Total Region =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalRegionRevenue =
    CALCULATE(
        [Revenue],
        REMOVEFILTERS('Sales Territory')
    )
RETURN
    DIVIDE(
        CurrentRegionRevenue,
        TotalRegionRevenue
    )

確認 [矩陣] 視覺效果現在會顯示 Revenue % Total Region 值。

圖中顯示標題為「轉售商收益」的矩陣視覺效果,其 [群組]、[國家/地區] 和 [區域] 會在資料列上分組,以及 [收入] 和 [總區域收益 %] 摘要。

您現在會建立另一個量值,但這次您會計算某個區域的收益比率除以其國家/地區的收益。

在您完成這項工作之前,請注意,西南部區域的 Revenue % Total Region 值為 22.95%。 調查此資料格的篩選內容。 切換至 [資料檢視],然後在 [欄位] 窗格中,選取 Sales Territory 資料表。

套用下列資料行篩選:

  • 群組 - 北美洲
  • 國家/地區 - 美國
  • 區域 - 西南部

圖中顯示 [銷售領域] 資料表的 [Power BI Desktop 資料表] 篩選條件。篩選條件會套用至 (1) 群組 = 北美洲、(2) 國家/地區 = 美國和 (3) 區域 = 西南部。

請注意,篩選條件會將資料表縮減為只有一個資料列。 現在,當您考慮新的目標來建立區域收益超過其國家/地區收益的比率時,請清除 [區域] 資料行的篩選條件。

圖中顯示資料行操作功能表,而 [清除篩選條件] 命令則會反白顯示。

請注意,現在有五個資料列存在,每個資料列都屬於美國國家/地區。 因此,當您清除 [區域] 資料行篩選條件,同時保留 [國家] 和 [群組] 資料行的篩選條件時,將會有一個新的篩選內容,適用於該區域的國家/地區。

在下列量值定義中,請注意您可以如何從資料行中清除或移除篩選條件。 在 DAX 邏輯中,這是對 Revenue % Total Region 量值公式所做的小型且細微變更:REMOVEFILTERS 函式現在會從 [區域] 資料行中移除篩選條件,而不是 Sales Territory 資料表的所有資料行。

Revenue % Total Country =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalCountryRevenue =
    CALCULATE(
        [Revenue],
        REMOVEFILTERS('Sales Territory'[Region])
    )
RETURN
    DIVIDE(
        CurrentRegionRevenue,
        TotalCountryRevenue
    )

新增 Revenue % Total Country 量值到 Sales 資料表,然後將其格式化為具有兩個小數位數的百分比。 將新的量值新增至矩陣視覺效果。

圖中顯示標題為「轉售商收益」的矩陣視覺效果,其 [群組]、[國家/地區] 和 [區域] 會在資料列上分組,以及 [收益]、[總區域收益 %] 和 [總國家/地區收益 %] 摘要。只有美國的 [總國家/地區收益 %] 值不是 100%。

請注意,除了美國區域的值以外,所有值都是 100%。 原因是,在 Adventure Works 公司中,美國具有區域,而所有其他國家/地區則沒有。

注意

表格式模型不支援不完全階層,其為具有可變深度的階層。 因此,這是在階層較低層級重複父系 (或其他上階) 值的常見設計方法。 例如,澳洲沒有區域,因此國家/地區值會重複作為區域名稱。 最好是儲存有意義的值,而不是空白。

下一個範例是您將建立的最後一個量值。 新增 Revenue % Total Group 量值,然後將其格式化為具有兩個小數位數的百分比。 然後,將新的量值新增至矩陣視覺效果。

Revenue % Total Group =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalGroupRevenue =
    CALCULATE(
        [Revenue],
        REMOVEFILTERS(
            'Sales Territory'[Region],
            'Sales Territory'[Country]
        )
    )
RETURN
    DIVIDE(
        CurrentRegionRevenue,
        TotalGroupRevenue
    )

圖中顯示標題為「轉售商收益」的矩陣視覺效果,其 [群組]、[國家/地區] 和 [區域] 會在資料列上分組,以及 [收入]、[總區域收益 %]、[總國家/地區收益 %] 和 [總群組收益 %] 摘要。

當您從 Sales Territory 資料表中的 RegionCountry 資料行中移除篩選條件時,量值會將區域收益計算為其群組收益的比率。

保留篩選條件

您可以使用 KEEPFILTERS DAX 函式做為 CALCULATE 函式中的篩選條件運算式,以保留篩選條件。

若要觀察如何完成這項工作,請切換到報表的 Page 1。 然後,將 Revenue Red 量值定義修改為使用 KEEPFILTERS 函式。

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

圖中顯示出具有三個資料行的資料表視覺效果:色彩、收益和收益紅色。顯示九個資料列和總計。針對 [收益紅色],只有紅色資料列和總計不是空白。

在資料表視覺效果中,請注意,只有一個 Revenue Red 值存在。 原因是布林值篩選條件運算式會針對 Product 資料表中的 [色彩] 資料行保留現有的篩選條件。 紅色以外的色彩為空白的原因,是因為篩選內容和篩選條件運算式會針對這兩個篩選準則結合。 黑色和紅色是交集的,且因為兩者都不能同時為 TRUE,所以運算式不會依任何產品資料列進行篩選。 這兩個紅色篩選準則只能同時為 TRUE,以說明為什麼會顯示 [收益紅色] 值。

使用非使用中的關聯性

USERELATIONSHIP DAX 函式當做篩選條件運算式傳遞至 CALCULATE 函式時,非使用中模型關聯性只能傳播篩選條件。 當您使用此函式來互動非使用中的關聯性時,使用中的關聯性會自動變成非使用中。

檢閱使用非使用中關聯性來計算依出貨日期 Revenue 量值的量值定義範例:

Revenue Shipped =
CALCULATE (
    [Revenue],
    USERELATIONSHIP('Date'[DateKey], Sales[ShipDateKey])
)

修改關聯性行為

當評估運算式時,您可以將 CROSSFILTER DAX 函式當做篩選條件運算式傳遞給 CALCULATE 函式,以修改模型關聯性行為。 這是一項先進的功能。

CROSSFILTER 函式可以修改篩選方向 (從兩者到單一或從單一到兩者),甚至停用關聯性。