KEEPFILTERS
修改評估 CALCULATE 或 CALCULATETABLE 函式時套用篩選的方式。
語法
KEEPFILTERS(<expression>)
參數
術語 | 定義 |
---|---|
expression |
任何表達式。 |
傳回值
值的數據表。
言論
您可以在內容 CALCULATE 和 CALCULATETABLE 函式中使用 KEEPFILTERS 來覆寫這些函式的標準行為。
根據預設,CALCULATE 等函式中的篩選自變數會當做評估表達式的內容使用,而 CALCULATE 篩選自變數會取代相同數據行上的所有現有篩選。 CALCULATE 篩選自變數所影響的新內容只會影響篩選自變數中提及之數據行的現有篩選。 篩選 CALCULATE 自變數或其他相關函式中所提及的數據行仍然有效且未變更。
KEEPFILTERS 函式可讓您修改此行為。 當您使用 KEEPFILTERS時,目前內容中的任何現有篩選都會與篩選自變數中的數據行進行比較,而這些自變數的交集會當做評估表達式的內容使用。 任何一個數據行的凈效果是,這兩組自變數都適用:CALCULATE 中使用的篩選自變數,以及 KEEPFILTER 函式自變數中的篩選條件。 換句話說,CALCULATE 篩選會取代目前的內容,KEEPFILTERS 會將篩選新增至目前的內容。
在匯出數據行或數據列層級安全性 (RLS) 規則中使用時,不支援在 DirectQuery 模式中使用此函式。
例
下列範例會引導您完成一些常見案例,示範如何使用 KEEPFILTERS 函式作為 CALCULATE 或 CALCULATETABLE 公式的一部分。
前三個表示式會取得要用於比較的簡單數據:
華盛頓州的互聯網銷售。
華盛頓州和俄勒岡州(兩個州合併)的互聯網銷售。
華盛頓州和不列顛哥倫比亞省(兩個地區合併)的互聯網銷售。
第四個表達式會計算華盛頓和俄勒岡州的因特網銷售,而套用華盛頓和不列顛哥倫比亞省的篩選。
下一個表達式會計算華盛頓和俄勒岡州的因特網銷售,但使用 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"
是評估表達式時所套用的篩選條件。