Nos preguntaba uno de nuestros clientes una duda que les había surgido sobre cómo implementar ciertos cálculos en Tableau para poder añadir cierto contexto en sus análisis. Y como en The Information Lab no sólo ofrecemos soporte gratuito a nuestros clientes, sino que también nos gusta compartir y ayudar con la comunidad de Tableau en general, hemos decidido escribir un blog tanto para que le sirva de referencia en el futuro a este cliente en particular como a otros usuarios.
Ayudando a un cliente con Tableau
El caso de uso es bastante útil e interesante y usaré Superstore Sales a modo de ejemplo: Tenemos una medida, por ejemplo nuestro Profit Ratio.
SUM([Profit]) / SUM([Sales])
Y lo analizamos por mes y año.
Hasta aquí nada complicado ni sorprendente. Ahora, nos gustaría poder filtrar por ciertas variables, por ejemplo la categoría de producto, la subcategoría o el fabricante.
No obstante, y aquí viene la clave, cuando seleccionamos una categoría de producto, nos gustaría tener una línea de referencia que indique el Profit Ratio total para cada mes y cada año, de forma que podamos tener ese dato a modo de contexto, y ver la situación de la categoría seleccionada respecto al total. Pero si seleccionamos una subcategoría de producto, nos gustaría tener dos líneas de referencia en cada barra: una para el total, y otra para la categoría a la que pertenece la subcategoría seleccionada. Y si seleccionamos un fabricante, nos gustaría tener tres líneas de referencia: el total, la categoría y la subcategoría.
La dificultad en este caso es que no nos basta símplementecon unos cálculos FIXED, porque si hacemos un FIXED por subcategoría, el número mostrado no tendrá sentido cuando estemos viendo todas las categorías, ya que Tableau calcularía el Profit Ratio por para subcategoría y posteriormente agregaría los datos, dando resultados que no cuadrarían.
Además, sería muy interesante que esas líneas de referencia apareciesen o desapareciesen del gráfico dependiendo de lo seleccionado en nuestros filtros: así, si no hemos seleccionado ningún filtro concreto, no veremos ninguna línea de referencia ¿Cómo podríamos hacerlo?
1º – Línea de referencia para el total
Calcular el total Profit Ratio para cada mes y cada año independientemente de cualquier filtro no es difícil. Basta con un sencillo cálculo LOD fijado por mes y año. No obstante para que sólo aparezca cuando hemos filtrado por alguna categoría, vamos a incluir una condición adicional, de forma que si el número de categorías en nuestra visualización es igual al número de categorías de producto en nuestra base de datos, entonces no mostraremos ningún valor, y si no se cumple esta condición, se mostrará el cálculo LOD. A este cálculo lo llamaremos Referencia Total:
IF SUM({COUNTD([Category])}) = COUNTD([Category]) THEN NULL ELSE
SUM({ FIXED DATEPART('year', [Order Date]),DATEPART('month', [Order Date]) : [Profit Ratio] }) END
Y lo añadiremos a nuestra visualización en Detalle, y posteriormente incluiremos una línea de referencia desde el menú de Análisis o Analítica.
Así, cuando se seleccionan todas las categorías, no se mostrará ninguna referencia y si se selecciona una categoría de producto aparecerá nuestra línea de referencia indicando el Profit Ratio para cada mes y cada año independientemente de la Categoría seleccionada.
2º – Línea de referencia para la categoría
Ahora viendo cuando el cálculo se complica un poco más, ya que queremos, si seleccionamos una sub-categoría de producto concreta, mostrar una segunda línea de referencia de la Categoría de producto a la que pertenece dicha sub-categoría.
Como comentábamos más arriba, el motivo por el que en este caso no basta con un simple FIXED por Categoría y Sub-categoría es que la agregación de resultados para cada sub-categoría nos va a dar resultados incorrectos y además queremos eliminar esa línea de referencia si no se selecciona ninguna Sub-categoría.
Lo que haremos por tanto es un condicional de tres niveles para que si no se ha filtrado ninguna subcategoría no se muestre nada, como en el caso 1, pero además que tampoco se muestre nada si el número de sub-categorías para la categoría seleccionada es idéntico que el número de subcategorías en el gráfico independientemente del mes y el año, por lo que tendremos que tener un cálculo LOD EXCLUDE en esta segunda condición. Finalmente, es decir, si se ha seleccionado alguna subcategoría concreta, queremos mostrar el Profit Ratio para cada año, mes y categoría. El cálculo en definitiva sería así. Lo llamaremos Referencia Categoría:
IF
SUM({COUNTD([Category])}) = COUNTD([Category])
THEN NULL
ELSEIF
SUM({ FIXED [Category] : COUNTD([Sub-Category]) }) = SUM({ EXCLUDE DATEPART('year', [Order Date]),DATEPART('month', [Order Date]) : COUNTD([Sub-Category])})
THEN NULL
ELSE
SUM({ FIXED DATEPART('year', [Order Date]),DATEPART('month', [Order Date]),[Category] : [Profit Ratio] })
END
Añadimos este cálculo como línea de referencia y queda así un gráfico que muestra ambas líneas de referencia cuando se seleccione en los filtros alguna subcategoría concreta:
3º – Línea de referencia para la sub-categoría
El tercer paso es similar al segundo pero añadiendo una condición adicional al cálculo para que tenga en cuenta si se han seleccionado sub-categorías o no y contar el número de fabricantes en nuestra visualización independientemente del mes y año. A este cálculo lo llamaremos Referencia Sub-categoría:
IF
SUM({COUNTD([Category])}) = COUNTD([Category])
THEN NULL
ELSEIF
SUM({ FIXED [Category] : COUNTD([Sub-Category]) }) = SUM({ EXCLUDE DATEPART('year', [Order Date]),DATEPART('month', [Order Date]) : COUNTD([Sub-Category])})
THEN NULL
ELSEIF
SUM({ FIXED [Category],[Sub-Category] : COUNTD([Manufacturer]) }) = SUM({ EXCLUDE DATEPART('year', [Order Date]),DATEPART('month', [Order Date]) : COUNTD([Manufacturer])})
THEN NULL
ELSE
SUM({ FIXED DATEPART('year', [Order Date]),DATEPART('month', [Order Date]),[Category],[Sub-Category] : [Profit Ratio] })
END
Añadiremos de nuevo este cálculo como una línea de referencia, como en los dos anteriores, y finalmente tendremos un cuadro de mando donde podremos filtrar por cada una de las variables y se mostrarán las líneas de referencia correspondientes según lo seleccionado: