KEEPFILTERS

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

修改在评估 CALCULATEorCALCULATETABLE 函数时如何应用 filters。

语法

DAX
KEEPFILTERS(<expression>)  

参数

术语 定义
expression 任何表达式。

返回 value

values表。

言论

  • 在上下文 CALCULATEandCALCULATETABLE 函数中使用 KEEPFILTERS 来替代这些函数的标准行为。

  • 默认情况下,函数(如 CALCULATE)中的 filter 参数用作用于计算表达式的上下文,and 例如,CALCULATEreplaceall 现有 filtersfilter 参数用于同一列。 由 CALCULATEfilter 参数影响的新上下文仅影响作为 filter 参数一部分的列的现有 filters。 Filters CALCULATE or 其他 related 函数参数中提到的列 Filters 保持不变 effectand。

  • KEEPFILTERS 函数允许修改此行为。 使用 KEEPFILTERS时,当前上下文中的任何现有 filters 与 filter 参数中的列进行比较,and 这些参数的交集用作计算表达式的上下文。 任何一列的 net effect 都是两组参数都适用:两个参数 filter 参数 CALCULATEand KEEPFILTER 函数的参数中的 filters。 换句话说,CALCULATEfiltersreplace 当前上下文,KEEPFILTERS 向当前上下文添加 filters。

  • 在计算列 or 行级别安全性 (RLS) 规则中使用时,not 支持在 DirectQuery 模式下使用此函数。

以下示例将引导你完成一些常见方案,这些方案演示如何将 KEEPFILTERS 函数用作 CALCULATEorCALCULATETABLE 公式的一部分。

first 三个表达式获取用于比较的简单数据:

  • 华盛顿州的互联网销售。

  • 华盛顿州 and 俄勒冈州的互联网销售(两个州合并)。

  • 华盛顿州互联网销售 and 不列颠哥伦比亚省(两个地区合并)。

第四个表达式计算华盛顿 and 俄勒冈州的互联网销售,而华盛顿 and 不列颠哥伦比亚省 filter 则适用。

next 表达式计算华盛顿 and 俄勒冈州的 Internet 销售,但使用 KEEPFILTERS;华盛顿 and 不列颠哥伦比亚省 filter 是先前背景的一部分。

DAX
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。 答案是,由于 filters 应用于同一列,CALCULATE 的默认行为会替代“地理”[省代码]中的外部 filters,and 替代其自己的 filter 参数。

Next,检查表达式,[$$ in WA !!]。 你可能想知道这个公式如何返回华盛顿的销售 valueand 别无他法,因为 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。

Filter 函数
CALCULATE 函数
CALCULATETABLE 函数