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!