KEEPFILTERS
修改在评估 CALCULATE 或 CALCULATETABLE 函数时如何应用筛选器。
语法
KEEPFILTERS(<expression>)
参数
术语 | 定义 |
---|---|
expression |
任何表达式。 |
返回值
一个值表。
言论
在上下文 CALCULATE 和 CALCULATETABLE 函数中使用 KEEPFILTERS 来替代这些函数的标准行为。
默认情况下,函数(如 CALCULATE)中的筛选器参数用作计算表达式的上下文,并且 CALCULATE 筛选器参数替换同一列上的所有现有筛选器。 由筛选器参数影响的新上下文 CALCULATE 仅影响作为筛选器参数一部分的列的现有筛选器。 筛选 CALCULATE 或其他相关函数的参数中提到的列仍然有效且未更改。
KEEPFILTERS 函数允许修改此行为。 使用 KEEPFILTERS时,当前上下文中的任何现有筛选器都与筛选器参数中的列进行比较,并且这些参数的交集用作计算表达式的上下文。 任何一列的净效果都是两组参数都适用:CALCULATE 中使用的筛选器参数和 KEEPFILTER 函数的参数中的筛选器。 换句话说,CALCULATE 筛选器替换当前上下文,KEEPFILTERS 向当前上下文添加筛选器。
在计算列或行级别安全性 (RLS) 规则中使用时,不支持在 DirectQuery 模式下使用此函数。
例
以下示例将引导你完成一些常见方案,这些方案演示如何将 KEEPFILTERS 函数用作 CALCULATE 或 CALCULATETABLE 公式的一部分。
前三个表达式获取用于比较的简单数据:
华盛顿州的互联网销售。
华盛顿州和俄勒冈州的互联网销售(两个州合并)。
华盛顿州和不列颠哥伦比亚省(两个地区合并)的互联网销售。
第四个表达式计算华盛顿和俄勒冈州的互联网销售,而应用华盛顿和不列颠哥伦比亚省的筛选器。
下一个表达式计算华盛顿和俄勒冈州的 Internet 销售,但使用 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"
是计算表达式时应用的筛选器。