KEEPFILTERS
修改評估 CALCULATEorCALCULATETABLE 函式時套用 filters 的方式。
語法
KEEPFILTERS(<expression>)
參數
術語 | 定義 |
---|---|
expression |
任何表達式。 |
傳回 value
values的數據表。
言論
您可以使用內容 CALCULATEandCALCULATETABLE 函式內的 KEEPFILTERS 來覆寫這些函式的標準行為。
根據預設,CALCULATE 等函式中的 filter 自變數會當做評估表達式的內容使用,and 例如 CALCULATEreplaceall 相同數據行上現有 filters 的 filter 自變數。 CALCULATE 之 filter 自變數所影響的新內容只會影響作為 filter 自變數一部分所提及之數據行的現有 filters。 Filters CALCULATE or 其他 related 函式自變數中所提及之數據行上的 Filters 會維持在 effectand 不變。
KEEPFILTERS 函式可讓您修改此行為。 當您使用 KEEPFILTERS時,目前內容中的任何現有 filters 會與 filter 自變數中的數據行進行比較,and 這些自變數的交集做為評估表達式的內容。 任何一個數據行上的 net effect 都是套用這兩組自變數:在 KEEPFILTER 函式的自變數 CALCULATEandfilters 中使用的 filter 自變數。 換句話說,CALCULATEfiltersreplace 目前的內容,KEEPFILTERS 會將 filters 新增至目前的內容。
在匯出數據行中使用 or 數據列層級安全性 (RLS) 規則時,支援此函式 not 用於 DirectQuery 模式。
例
下列範例會引導您完成一些常見案例,示範如何使用 KEEPFILTERS 函式作為 CALCULATEorCALCULATETABLE 公式的一部分。
first 三個運算式會取得用於比較的簡單數據:
華盛頓州的互聯網銷售。
華盛頓州 and 俄勒岡州(兩州合併)的互聯網銷售。
華盛頓州互聯網銷售 and 不列顛哥倫比亞省(兩個地區合併)。
第四個表達式計算華盛頓 and 俄勒岡州的因特網銷售,而華盛頓 and 不列顛哥倫比亞省的 filter 則適用。
next 表達式會計算華盛頓 and 俄勒岡州的因特網銷售,但會使用 KEEPFILTERS;華盛頓 and 不列顛哥倫比亞省的 filter 是先前內容的一部分。
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"
)
)
針對 sample 資料庫 AdventureWorks DW 評估此運算式時,會取得下列結果。
列 | Value |
---|---|
[$$ 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 |
注意
上述結果已格式化為數據表,而不是單一數據列,以供教育之用。
First,檢查表示式,[$$ in WA and OR ??]
。 您可能想知道此公式如何傳回俄勒岡州華盛頓 and 銷售 value,因為外部 CALCULATE 表達式包括華盛頓 and 不列顛哥倫比亞省的 filter。 答案是,CALCULATE 的預設行為會覆寫 'Geography'[State Province Code] 中的外部 filters,and 取代自己的 filter 自變數,因為 filters 會套用至相同的數據行。
Next,檢查表示式,[$$ in WA !!]
。 您可能想知道這個公式如何傳回華盛頓銷售 value,and 別無他法,因為自變數 filter 包括俄勒岡州 and 外部 CALCULATE 表達式包括華盛頓 and 不列顛哥倫比亞省的 filter。 答案是,KEEPFILTERS 修改 CALCULATEand 的預設行為會新增額外的 filter。 由於使用了 filters 的交集,因此 now 外部 filter'Geography'[State Province Code]="WA" || 'Geography'[State Province Code]="BC")
會新增至 filter 自變數 'Geography'[State Province Code]="WA" || 'Geography'[State Province Code]="OR"
。 由於這兩個 filters 都套用至相同的數據行,因此產生的 filter'Geography'[State Province Code]="WA"
是評估表達式時所套用的 filter。