Función KEEPFILTERS

Hasta ahora hemos hablado de argumentos de CALCULATE dando por sentado que aquellos filtros que indiquemos van a sustituir a los que se estuviesen aplicando al modelo de datos. Por ejemplo, vimos que podíamos forzar que el país seleccionado en la tabla Geography fuese “Spain” sustituyendo la selección que existiese en el contexto de filtro inicial:

Sales Spain = 
CALCULATE(
    [Sales],
    Geography[Country] = "Spain"
)

Si llevábamos esta medida a una tabla que mostrase las ventas desagregadas por país, el resultado era el siguiente:
 

Función KEEPFILTERS

Sin embargo, reemplazar los filtros existentes en el contexto de filtro inicial por otros filtros no es la única opción. También podemos añadir a los filtros existentes los nuevos filtros, para lo que deberemos usar la función KEEPFILTERS. Por ejemplo, si, en el escenario anterior, quisiéramos añadir el filtro

Geography[Country] = "Spain"

al contexto de filtro existente (no sustituirlo), la medida debería rescribirse del siguiente modo:

Sales Filter Spain = 
CALCULATE(
    [Sales],
    KEEPFILTERS(Geography[Country] = "Spain")
)

En este caso, si en el contexto de filtro inicial se estaba filtrando la tabla de geografía según el criterio Geography[Country] = "France" (por ejemplo), nuestro nuevo filtro se añadiría  de forma que, en dicha tabla, solo las filas que cumpliesen simultáneamente las dos condiciones (que Country fuese igual a “France” y que Country fuese igual a “Spain”) serían visibles. Por supuesto, no hay ninguna fila en la tabla que cumpla esto, por lo que, si llevamos nuestra medida al objeto visual de tipo tabla creado, el resultado será el siguiente:
 

Función KEEPFILTERS

Para todas las filas de esta tabla (salvo para la de España y el total) se está imponiendo un filtro a la tabla Geography según el cual solo serán visibles aquellas filas que cumplan simultáneamente que el país sea el que figure en la cabecera de cada fila (“France”, “Germany”, “Ireland”, etc.) -condición impuesta por el contexto de filtro- y, simultáneamente, “Spain” -condición impuesta por nuestra medida-. Y como no hay ninguna fila que satisfaga ambas condiciones, nuestra medida [Sales Filter Spain] no devuelve nada (devuelve un blank).

Para la fila correspondiente a “Spain” de la imagen anterior (en rojo), el contexto de filtro inicial está filtrando la tabla de geografía según el criterio Geography[Country] = “Spain”, y nuestra medida está añadiendo a esta condición que Geography[Country] = “Spain” (misma condición)… ¿Qué filas cumplen ambas condiciones en la tabla Geography? Las de España, por supuesto. Por lo que son estas filas las que quedan visibles y nuestra medida devuelve las ventas para ellas.

En el caso del valor devuelto en el total de la imagen anterior (en verde) la situación es ligeramente diferente. En este caso el contexto de filtro inicial no está imponiendo ningún filtro (por lo que todas las filas de la tabla de geografía están visibles) y nuestra medida está añadiendo a este filtrado el hecho de que Geography[Country] = “Spain”. Una vez más ¿qué filas cumplen ambas condiciones? Las de España, por lo que la cifra mostrada en la imagen coincide con las ventas en este país.