Ya estamos de nuevo con otro lunes de post. Aunque como algunos ya sabéis, he lanzado mi primera encuesta en LinkedIn (con una sorprendente participación en las primeras 24 horas) para ver cuales queréis que sean los siguientes temas a tratar. Cómo la duración de la misma es de 7 días, queda esperar para saber el resultado y escribir sobre otras funciones interesantes de DAX.

 

Hoy le toca a la función KEEPFILTERS. ¿Qué hace la función KEEPFILTERS? Según la web oficial de Microsoft KEEPFILTERS modifica el modo en que se aplican los filtros mientras se evalúa una función CALCULATE o CALCULATETABLE. La sintaxis de DAX es:

 

 

¿Qué quiere decir esa definición? Que con la función KEEPFILTERS, se puede ajustar el argumento de filtro de la función CALCULATE o CALCULATETABLE.  ¿Cómo podemos hacerlo? Vamos a verlo con unos ejemplos:

 

Tenemos la métrica Ventas Totales por Ciudad.



Y nos devuelve lo siguiente:

 


 

Queremos obtener las ventas totales para la ciudad Berlín. Por lo que, ¿si envolvemos la métrica anterior con un CALCULATE y como expresión de filtro le pasamos Berlín nos dará el resultado esperador? Vamos a verlo:

 


 

 

Pues parece que no nos lo está haciendo bien, ¿qué está ocurriendo? En el post sobre la función CALCULTE, vimos que los argumentos de filtro de CALCULATE sobrescriben cualquier filtro existente previamente en la misma columna. Por lo que para el ejemplo en cuestión nos está indicando las ventas de la ciudad de Berlín independientemente del filtro de ciudad que hay.

¿Y cómo podemos hacerlo? Con la función KEEPFILTERS, de la siguiente manera:

 


 


 

Ahora podemos ver que la medida sólo nos devuelve valor para la ciudad Berlín y no para el resto. ¿Qué es lo que hace? Truquito, si traducimos al castellano la función:

KEEP – mantener

FILTERS - Filtros

Pues hace exactamente lo que su nombre significa. En lugar de sobrescribir el filtro existente, mantiene el filtro existente y agrega el nuevo filtro al contexto del filtro, en este caso que el nombre de la ciudad sea Berlín.

Dado que la función KEEPFILTERS no sobrescribe el filtro existente, el nuevo filtro generado por el argumento de filtro de CALCULATE se agrega al contexto. ¿Qué quiero decir? Si observamos la fila de Pekín, la medida KEEPFILTERS, el contexto de filtro resultante contiene dos filtros: uno filtra la fila Pekín y el otro filtra la ciudad Berlín. La intersección de las dos condiciones da como resultado un conjunto vacío, lo que produce un resultado en blanco, de ahí que no aparezca nada en esa fila. ¿Me he explicado?

Bien, ¿y podemos hacer uso de la función KEEPFILTERS con dos elementos? La respuesta es sí, y se entiende mejor el funcionamiento de la función. Vamos a continuar con el ejemplo anterior:

 


Nota: las || es sinónimo de un OR

 


KEEPFILTERS sólo calcula los valores de cantidad de ventas para Berlín y para Pekín, dejando todas las demás categorías en blanco. Y la fila Total solo tiene en cuenta Berlín y Pekín ignorando Bethesda. 

En definitiva, KEEPFILTERS es una función sencilla, con un uso determinado pero que nos puede ser muy útil por lo que deberíamos tenerla localizada.

¡Nos vemos en los datos!