¡Hola a todos! Bienvenidos a La Data Web y a este nuevo post relacionado a visualizaciones customizadas.
Me presento, soy Jonathan Muñoz y trabajo hace aproximadamente 2 años en Pi Data Strategy & Consulting como BI & Analytics Consultant, y además hace 3 años que me encuentro inmerso en el mundo de los datos.
Me gusta mucho la música, toco la guitarra en mis tiempos libres y me encanta viajar. En un futuro espero seguir creciendo en este apasionante mundo llamado Big Data porque creo fervientemente que los datos bien representados y con el significado apropiado aportan valor a la toma de decisiones de cualquier individuo u organización.
¡Pero hasta aquí la presentación! Vamos a los que nos compete hoy. En esta oportunidad vamos a tratar un requerimiento puntual que me tocó desarrollar con un usuario para el cual trabajé. Este artículo nos ayudará a pintar una línea entre dos líneas en un mismo gráfico que quedan cortadas por ser distintas medidas de análisis como por ejemplo "monto actual" y "Predicción" para así poder mejorar la experiencia del usuario.
Sabemos de la capacidad de los gráficos de líneas para mostrar tendencias a lo largo del tiempo y la variación cuantitativa de algo que queremos analizar (compras, ventas, población, costos de productos o costos de manufacturación, etc), y también sabemos que podemos representar más de una línea en una visualización "Line Chart" que nos ofrece Power BI por default, como por ejemplo en el siguiente gráfico:

Pasemos en limpio la idea, si pretendemos saber cuál es la caída o el crecimiento entre la "Facturación" (que es lo que realmente se facturó en la empresa) y la "Previsión" (aquello que se supone que pasará los próximos meses) de manera visual, deberíamos tener la posibilidad de marcar alguna línea punteada. Por ejemplo, pintar entre el valor final de la facturación y el valor inicial de la previsión del mes que sigue. Para este caso puntual de Agosto, todavía no tenemos facturación pero si una previsión de lo que se espera vender. De esta manera el gráfico nos podría quedar algo parecido a lo siguiente

Nos podría suceder el caso de que tengamos valores mas lejanos entre facturación o previsión, o también que tengamos más líneas de facturación en un mismo gráfico, por lo tanto, esta línea punteada nos ayudaría mucho mas a visualizar esta diferencia.
Entonces, ¡manos a la obra! Vamos a resolverlo con el poderoso lenguaje DAX, de la siguiente manera:
Realizaremos una nueva medida llamada "Diferencia Fact – Prev", y en primer lugar tomaremos en una variable la máxima fecha de nuestra tabla calendario en la cual hubo facturación. Recordemos que la función ALL devuelve todas las filas de una tabla, o todos los valores de una columna, ignorando cualquier filtro que se haya aplicado con anterioridad.
Diferencia Fact - Prev =
VAR ultima_facturacion =
CALCULATE (
MAX ( Calendario[Fecha]),
FILTER ( ALL ( Calendario ), NOT ( ISBLANK ( 'Facturacion_Previsión'[Facturacion] ) ) )
)
Al hacer esto, vemos que nos devuelve efectivamente la fecha de ultima facturación:

A continuación, realizaremos la misma lógica, pero tomando el mínimo valor que tiene la previsión para el próximo mes:
VAR primera_prevision =
CALCULATE (
MIN ( Calendario[Fecha] ),
FILTER ( ALL ( Calendario ), NOT ( ISBLANK ( 'Facturacion_Previsión'[Previsión] ) ) )
)

Una
vez que tenemos ambas variables con las respectivas fechas guardadas, ya
tenemos el 50% del trabajo realizado, ahora lo que deberíamos hacer es guardar
el periodo seleccionado que nos servirá como filtro para consultar el mágico
Switch que resolverá nuestra visualización:
VAR PeriodoSeleccionado =
SELECTEDVALUE ( Calendario[Fecha])
RETURN
SWITCH (
PeriodoSeleccionado,
ultima_facturacion, 'Facturacion_Previsión'[Facturacion],
primera_prevision, 'Facturacion_Previsión'[Previsión],
BLANK()
)
Cómo podemos observar, en el switch comparamos el periodo guardado en la variable PeriodoSeleccionado, con la variable ultima_facturacion y primera_prevision. En ambos casos, cuando el switch encuentra coincidencia en las fechas procederá a otorgar el valor correspondiente a mostrar; en nuestro caso la facturación o la previsión anteriormente calculadas. De esta manera, si visualizamos ahora nuestra tabla de datos obtendremos algo así:

Ahora
procederemos a armar nuestro gráfico de líneas, tomando como una tercera línea
la medida "Diferencia Fact-Prev":

¡Y lo logramos! De esta manera podemos "Forzar" a la visualización a crear esa relación entre líneas. Ahora podemos customizar un poco esta línea para dejarla en formato punteado, y podemos agregar un punto o un espacio al nombre del campo en la visualización para que las categorías del gráfico no generen una confusión en el usuario (ya que al fin y al cabo, no pretendemos analizar esta diferencia como una nueva variable sino marcarla a nivel visual).

Ahora sí, nuestra visualización quedará de la siguiente manera:

Y bien, gracias a esta DAX logramos mejorar la experiencia del usuario. Espero les haya gustado esta solución y sobre todo que les haya servido. Pueden revisar en github un archivo de Power Bi Desktop de ejemplo. Fue un gusto compartir este tip de conocimiento en la comunidad y en este querido Blog, de ¡La Data Web!
¡Hasta la próxima!
Escrito por Jonathan Muñoz