KEEPFILTERS
修改評估 CALCULATE 或 CALCULATETABLE 函式時套用篩選的方式。
語法
KEEPFILTERS(<expression>)
參數
詞彙 | 定義 |
---|---|
expression | 任何運算式。 |
傳回值
值的資料表。
備註
您可以在 CALCULATE 和 CALCULATETABLE 函式內容中使用 KEEPFILTERS 來覆寫這些函式的標準行為。
根據預設,CALCULATE 等函式中的篩選引數會作為評估運算式的內容,因此 CALCULATE 的篩選引數會取代相同資料行上的所有現有篩選。 CALCULATE 篩選引數所影響的新內容只會影響篩選引數中所提及資料行上現有篩選。 CALCULATE 或其他相關函式引數中未提及資料行上的篩選則仍然有效且保持不變。
KEEPFILTERS 函式可讓您修改此行為。 當您使用 KEEPFILTERS 時,目前內容中任何現有篩選都會與篩選引數中的資料行進行比較,並使用這些引數交集作為評估運算式的內容。 對任何一個資料行的淨效應是這兩組引數皆適用:用於 CALCULATE 的篩選引數,以及 KEEPFILTER 函式引數中的篩選。 換句話說,CALCULATE 篩選會取代目前的內容,而 KEEPFILTERS 會將篩選新增至目前的內容。
在計算結果欄或資料列層級安全性 (RLS) 規則中使用時,不支援在 DirectQuery 模式中使用此函式。
範例
下列範例會引導您完成一些常見的案例,示範如何在 CALCULATE 或 CALCULATETABLE 公式中使用 KEEPFILTERS 函式。
前三個運算式會取得要用於比較的簡單資料:
華盛頓州的網際網路銷售額。
華盛頓州和奧勒岡州 (結合這兩州) 的網際網路銷售額。
華盛頓州和英國哥倫比亞省 (結合這兩個區域) 的網際網路銷售額。
第四個運算式會計算華盛頓州和奧勒岡州的網際網路銷售額,並套用華盛頓州和英國哥倫比亞省的篩選。
下一個運算式會計算華盛頓州和奧勒岡州的網際網路銷售額,但使用 KEEPFILTERS;華盛頓州和英國哥倫比亞省的篩選是部分先前內容。
EVALUATE ROW(
"$$ in WA"
, CALCULATE('Internet Sales'[Internet Total Sales]
, 'Geography'[State Province Code]="WA"
)
, "$$ in WA and OR"
, CALCULATE('Internet Sales'[Internet Total Sales]
, 'Geography'[State Province Code]="WA"
|| 'Geography'[State Province Code]="OR"
)
, "$$ in WA and BC"
, CALCULATE('Internet Sales'[Internet Total Sales]
, 'Geography'[State Province Code]="WA"
|| 'Geography'[State Province Code]="BC"
)
, "$$ in WA and OR ??"
, CALCULATE(
CALCULATE('Internet Sales'[Internet Total Sales]
,'Geography'[State Province Code]="WA"
|| 'Geography'[State Province Code]="OR"
)
, 'Geography'[State Province Code]="WA"
|| 'Geography'[State Province Code]="BC"
)
, "$$ in WA !!"
, CALCULATE(
CALCULATE('Internet Sales'[Internet Total Sales]
, KEEPFILTERS('Geography'[State Province Code]="WA"
|| 'Geography'[State Province Code]="OR"
)
)
, 'Geography'[State Province Code]="WA"
|| 'Geography'[State Province Code]="BC"
)
)
針對範例資料庫 AdventureWorks DW 評估此運算式時,會取得下列結果。
資料行 | 值 |
---|---|
[$$ in WA] | $ 2,467,248.34 |
[$$ in WA and OR] | $ 3,638,239.88 |
[$$ in WA and BC] | $ 4,422,588.44 |
[$$ in WA and OR ??] | $ 3,638,239.88 |
[$$ in WA !!] | $ 2,467,248.34 |
注意
基於教育目的,上述結果已格式化為資料表,而不是單一資料列。
首先,檢查運算式 [$$ in WA and OR ??]。 您可能會想知道,既然外部 CALCULATE 運算式包含華盛頓州和英國哥倫比亞省的篩選,那麼這個公式為何可以傳回華盛頓州和奧勒岡州的銷售額值。 答案是 CALCULATE 的預設行為會覆寫 'Geography'[State Province Code] 中外部篩選,並替代其本身的篩選引數,因為這些篩選會套用至相同的資料行。
接下來,檢查運算式 [$$ in WA !!]。 您可能會想知道,既然引數篩選包含奧勒岡州,且外部 CALCULATE 運算式包含華盛頓州和英國哥倫比亞省的篩選,那麼這個公式為何可以只傳回華盛頓州的銷售額值。 答案是 KEEPFILTERS 會修改 CALCULATE 的預設行為,並新增額外的篩選。 因為使用了篩選的交集,所以外部篩選 'Geography'[State Province Code]="WA" || 'Geography'[State Province Code]="BC" 現在會新增至篩選引數 'Geography'[State Province Code]="WA" || 'Geography'[State Province Code]="OR"。 因為這兩個篩選都會套用至相同的資料行,所以產生的篩選 'Geography'[State Province Code]="WA" 是評估運算式時所套用的篩選。