KEEPFILTERS

适用于:计算列计算表Measure视觉计算

修改在评估 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。

Filter 函数CALCULATE 函数CALCULATETABLE 函数