KEEPFILTERS
修改在评估 filtersCALCULATEor 函数时如何应用 CALCULATETABLE。
语法
KEEPFILTERS(<expression>)
参数
术语 | 定义 |
---|---|
expression |
任何表达式。 |
返回 value
values表。
言论
在上下文 KEEPFILTERSCALCULATEand 函数中使用 CALCULATETABLE 来替代这些函数的标准行为。
默认情况下,函数(如 filter)中的 CALCULATE 参数用作用于计算表达式的上下文,and 例如,filterCALCULATEreplace 现有 allfilters 参数用于同一列。 由 filterCALCULATE 参数影响的新上下文仅影响作为 filters 参数一部分的列的现有 filter。 FiltersCALCULATEor 其他 related 函数参数中提到的列 Filters 保持不变 and。
KEEPFILTERS 函数允许修改此行为。 使用 KEEPFILTERS时,当前上下文中的任何现有 filters 与 filter 参数中的列进行比较,and 这些参数的交集用作计算表达式的上下文。 任何一列的 net effect 都是两组参数都适用:两个参数 filter 参数 CALCULATEand KEEPFILTER 函数的参数中的 filters。 换句话说,CALCULATEfiltersreplace 当前上下文,KEEPFILTERS 向当前上下文添加 filters。
在计算列 not 行级别安全性 (RLS) 规则中使用时,or 支持在 DirectQuery 模式下使用此函数。
例
以下示例将引导你完成一些常见方案,这些方案演示如何将 KEEPFILTERS 函数用作 CALCULATEorCALCULATETABLE 公式的一部分。
first 三个表达式获取用于比较的简单数据:
华盛顿州的互联网销售。
华盛顿州 and 俄勒冈州的互联网销售(两个州合并)。
华盛顿州互联网销售 and 不列颠哥伦比亚省(两个地区合并)。
第四个表达式计算华盛顿 and 俄勒冈州的互联网销售,而华盛顿 filter 不列颠哥伦比亚省 and 则适用。
next 表达式计算华盛顿 and 俄勒冈州的 Internet 销售,但使用 KEEPFILTERS;华盛顿 filter 不列颠哥伦比亚省 and 是先前背景的一部分。
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 ??]
。 你可能想知道这个公式如何返回华盛顿 value 俄勒冈州的销售额 and,因为外部 CALCULATE 表达式包括华盛顿 filter 不列颠哥伦比亚省的 and。 答案是,由于 CALCULATE 应用于同一列,filters 的默认行为会替代“地理”[省代码]中的外部 and,filter 替代其自己的 filters 参数。
Next,检查表达式,[$$ in WA !!]
。 你可能想知道这个公式如何返回华盛顿的销售 valueand 别无他法,因为 filter 包括俄勒冈州 and 外部 CALCULATE 表达式包括华盛顿 filter 不列颠哥伦比亚省的 and。 答案是,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。