KEEPFILTERS

Se aplica a:Columna calculadaTabla calculadaMedidaCálculo visual

Modifica el modo en que se aplican los filtros mientras se evalúa una función CALCULATE o CALCULATETABLE.

Sintaxis

KEEPFILTERS(<expression>)  

Parámetros

Término Definición
expression Cualquier expresión.

Valor devuelto

Una tabla de valores.

Notas

  • Puede usar KEEPFILTERS en las funciones de contexto CALCULATE y CALCULATETABLE para invalidar el comportamiento estándar de esas funciones.

  • De forma predeterminada, los argumentos de filtro en funciones como CALCULATE se usan como contexto para evaluar la expresión y, por tanto, los argumentos de filtro de CALCULATE reemplazan todos los filtros existentes en las mismas columnas. El nuevo contexto que ha realizado el argumento de filtro para CALCULATE solo afecta a los filtros existentes en las columnas mencionadas como parte del argumento de filtro. Los filtros en columnas distintas de las mencionadas en los argumentos de CALCULATE u otras funciones relacionadas permanecen en vigor y sin modificar.

  • La función KEEPFILTERS permite modificar este comportamiento. Si usa KEEPFILTERS, todos los filtros existentes en el contexto actual se comparan con las columnas de los argumentos de filtro y la intersección de esos argumentos se usa como contexto para evaluar la expresión. El efecto real en cualquier columna es que se aplican ambos conjuntos de argumentos: los argumentos de filtro que se usan en CALCULATE y los filtros en los argumentos de la función KEEPFILTER. En otras palabras, mientras que los filtros de CALCULATE reemplazan el contexto actual, KEEPFILTERS agrega filtros al contexto actual.

  • Esta función no se admite para su uso en el modo DirectQuery cuando se utiliza en columnas calculadas o en reglas de seguridad de nivel de fila (RLS).

Ejemplo

En el ejemplo siguiente se muestran algunos escenarios comunes en los que se muestra el uso de la función KEEPFILTERS como parte de una fórmula CALCULATE o CALCULATETABLE.

Las tres primeras expresiones obtienen datos simples que se usarán para las comparaciones:

  • Ventas por Internet del estado de Washington.

  • Ventas por Internet de los estados de Washington y Oregón (ambos estados combinados).

  • Ventas por Internet del estado de Washington y la provincia de Columbia Británica (ambas regiones combinadas).

La cuarta expresión calcula las ventas por Internet de Washington y Oregón, mientras que se aplica el filtro de Washington y Columbia Británica.

La siguiente expresión calcula las ventas por Internet de Washington y Oregón, pero usa KEEPFILTERS; el filtro de Washington y Columbia Británica forma parte del contexto anterior.

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"  
      )  
)  

Cuando esta expresión se evalúa en la base de datos de ejemplo AdventureWorks DW, se obtienen los siguientes resultados.

Columna Valor
[$$ in WA] 2 467 248,34 USD
[$$ in WA and OR] 3 638 239,88 USD
[$$ in WA and BC] 4 422 588,44 USD
[$$ in WA and OR ??] 3 638 239,88 USD
[$$ in WA !!] 2 467 248,34 USD

Nota:

Los resultados anteriores tenían el formato de una tabla, en lugar de una sola fila, con fines educativos.

En primer lugar, examine la expresión [$$ in WA and OR ??] . Tal vez se pregunte cómo esta fórmula puede devolver el valor de las ventas en Washington y Oregón, ya que la expresión CALCULATE externa incluye un filtro para Washington y Columbia Británica. La respuesta es que el comportamiento predeterminado de CALCULATE invalida los filtros externos de 'Geography'[State Province Code] y sustituye sus propios argumentos de filtro, porque los filtros se aplican a la misma columna.

Después, examine la expresión [$$ in WA !!] . Tal vez se pregunte cómo esta fórmula puede devolver el valor de las ventas en Washington y nada más, ya que el filtro de argumentos incluye Oregón y la expresión CALCULATE externa incluye un filtro en Washington y Columbia Británica. La respuesta es que KEEPFILTERS modifica el comportamiento predeterminado de CALCULATE y agrega un filtro adicional. Dado que se usa la intersección de filtros, ahora se agrega el filtro externo 'Geography'[State Province Code]="WA" || 'Geography'[State Province Code]="BC") al argumento de filtro 'Geography'[State Province Code]="WA" || 'Geography'[State Province Code]="OR" . Dado que ambos filtros se aplican a la misma columna, el filtro resultante 'Geography'[State Province Code]="WA" es el que se aplica al evaluar la expresión.

Funciones de filtro
CALCULATE, función
Función CALCULATETABLE