Fundamentos de DAX: El contexto de filtro

Los ejercicios de este artículo se basan en el archivo “Contoso v2” publicado recientemente en este artículo.

En analítica de datos, no todo se reduce a revisar la suma de las ventas, o el margen contra el presupuesto. Hay muchos cálculos más complejos que se requieren (como acumulados anuales, desviaciones, recompras, etc) que al no ser triviales suelen requerir muchas horas de trabajo del analista. Power BI permite escribir fórmulas para realizar fácilmente esos cálculos de negocio. El lenguaje en el que se escriben estas fórmulas se denomina DAX (Data Analysis Expressions o Expresiones para el Análisis de Datos). De hecho, hace un tiempo escribí un artículo llamado “qué es DAX y por qué debería importarme” que podrían revisar.

Vamos a realizar un cálculo muy simple: calcular el monto vendido. En el modelo de datos, equivaldría a la suma de la columna “MontoVendido” de la tabla “Ventas”. Esto se deduce de ver el modelo de datos Contosov2 y recordar que cada fila de la tabla “Ventas” es una transacción.

Llamaremos “MV” (por Monto Vendido) a nuestro cálculo. Los pasos para crear una medida y la fórmula se observa en el siguiente gráfico:

Ventas[MontoVendido] es el “nombre completo” de la columna denominada “MontoVendido” ubicada en la tabla Ventas. Esta es la notación en Power BI. Ahora vamos a usar la medida para un gráfico. El gráfico que seleccionaremos será una tabla. Aquí los pasos:
(1) ir a la vista de reporte
(2) buscar MV
(3) seleccionar MV
(4) cambiar el tipo de gráfico. Inicialmente aparece una barra vertical pero lo cambiamos a tabla

Ese número (8 mil 300 millones) es la suma del monto vendido. Es la suma de todos los productos, de todas las tiendas, de todos los canales y de todas las fechas (es decir, todo lo que se vendió desde que se inició la empresa!). Es un número interesante pero inútil. Vamos a ver el monto por año:
(1) asegurarse que la tabla está seleccionada
(2) buscar la columna año
(3) seleccionar año (nota: el año que aparece debajo de “JFecha” es el mismo campo año pero está visualizado como una jerarquía año-trimestre-mes, por ejemplo, para ganar usabilidad.)
(4) el orden de los campos en este recuadro refleja el orden en que se muestran las columnas en la tabla de la izquierda. Pueden arrastrar “Año” y colocarlo encima de MV para que el orden de las columnas de la tabla se altere.

Luego de reordenar las columnas aparece la siguiente tabla a la que llamo su atención:

Inmediatamente, nuestro cálculo MV muestra un valor distinto en cada año. Si bien este comportamiento parece intuitivo para cualquier usuario de tablas dinámicas de Excel, vale la pena explicar qué pasó. Recordemos la fórmula: SUM( Ventas[MontoVendido] ) . Dijimos y demostramos líneas arriba que esta fórmula suma la columna MontoVendido de la tabla Ventas. Pero ya vemos que no suma toda la tabla. Lo que sucede es que Power BI, para calcular el valor MV del año 2007, revisa el modelo de datos y ve que 2007 es un valor del campo llamado Año;
(1) Año es un campo de la tabla Fecha
(2) la tabla Fecha tiene una relación con la tabla Ventas
(3) la flecha de la relación apunta hacia la tabla Ventas. Eso significa que si se selecciona cualquier registro de la tabla Fecha, esto provocará que la tabla Ventas se filtre, dejando visibles solamente las ventas que cumplan con el filtro impuesto por el registro seleccionado de fechas. En este caso particular, al seleccionar 2007 en la columna Año, se seleccionan los 365 registros de Fecha que pertenecen a ese año, y -producto del sentido de la relación entre Fecha y Ventas- automáticamente quedan visibles solamente aquellos registros de Ventas que cumplan con la condición impuesta por esos 365 registros. ¿Qué condición es esa? Notemos que la relación va de Ventas[CFecha] a Fecha[Fecha]. Entonces, la condición es que quedarán visibles solo aquellos registros de la tabla Ventas cuyo campo CFecha tenga un valor igual a uno de esos 365 valores seleccionados en la tabla Fecha.

Entonces, al quedar solamente visibles los registros que cumplen la condición explicada en el paso (3) arriba, la fórmula suma la columna MontoVendido de la tabla Ventas que solamente tiene visibles las ventas del 2007. El comportamiento de la fórmula se puede resumir diciendo que es la “suma de la columna MontoVendido de la tabla Ventas para el contexto de filtro actual”.

El contexto de filtro es el conjunto de filtros aplicados al modelo de datos antes de que se evalúe un cálculo.

En el gráfico siguiente, veamos el contexto de filtro de la celda marcada en rojo. Antes de que Power BI calcule el valor de la fórmula (esto es, antes de que sume la columna MontoVendido de la tabla Ventas), Power BI determina cuál es el contexto de filtro. Ese contexto de filtro es: Año: 2007 y Clase: Regular, Premium. En otras palabras, el contexto de filtro muestra el conjunto de valores permitidos para cada columna que tiene un filtro. Para el año es el valor 2007, y para Clase (de la tabla Producto) hay dos valores permitidos: Premium y Regular.

Bueno, finalmente, recordemos que toda expresión DAX está afectada por un contexto de filtro (cuando se usa en un gráfico) o por un contexto de fila (cuando se crea una columna calculada o se usa un iterador, por ejemplo): Del contexto de fila, hablaremos en otro artículo.

(*) La imagen que acompaña a este artículo corresponde a la pintura llamada “El camión” de Frida Kahlo. Retrata el momento previo a un tremendo accidente que casi mata a Frida y terminó marcando para siempre su vida y -por ello- su arte. La obra de un artista termina entendiéndose por el contexto en que se desarrolla su vida, este accidente es parte de ese contexto.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s