Por: Rosario Gauna @rosariogaunag

Hace ya algunos meses atrás, @RodyZakovichnos preparó un reto que requería presentar tres niveles de DrillDown en una sola hoja, buscando brindar una mejor experiencia al usuario (UX).

Cuando se publicó este reto aún no se lanzaba la versión de Tableau 2018.3, por lo cual, era necesario la utilización de un conjunto de trucos avanzados, incluyendo el uso de modelación de datosy de“Actions Filters”para lograr resolver el retoLink al Blog

Con la llegada de los #SetActions con Tableau 2018.3, el manejo de Drill-Down en las Vizualizaciones se volvió mucho más sencillo.

Aunque en blogs previos he brindado pistas de los principales pasos requeridos para lograr este reto con #SetActions y dadas las preguntas que aún he recibido, consideré conveniente escribir un nuevo blog dedicado a detallar cada uno de los pasos para resolver este reto utilizando la funcionalidad de #SetActions

Primero recordemos los puntos principales del reto:

  • Se requiere trabajar con tres niveles de Drill Down: 1) Año, 2) Mes y 3) Día.
  • Inicialmente, se muestra una gráfica de barras con la información a nivel Año.
  • Posteriormente, al seleccionar uno o más de los años, se debe reemplazar la vista con una gráfica de barras con la información mensual que correspondan al año o años seleccionados.
  • Después, al seleccionar uno o más de los meses, se debe reemplazar la vista con una gráfica de líneas, con la información diaria que corresponde al mes o meses seleccionados.
  • Al terminar, se deberá mostrar nuevamente la gráfica de barras original con la información a nivel año.

A continuación comparto los pasos que utilicé, en esta nueva versión:

PARA EL NIVEL 1 DE LA JERARQUÍA (AÑO)

Paso 1: Crear un campo denominado “YEAR”.

Dado que los tres niveles de la jerarquía están implícitos en una sola dimensión: la fecha de orden, lo primero que realizaremos será tener un nuevo campo que contenga los valores de la primera jerarquía: Años.

El nuevo campo se calculará truncando a años el valor de la fecha original.

Year =

DATE(DATETRUNC(‘year’, [Order Date]))

 Paso 2: Crear el Set “Year Set”.

El Set se asociará a la dimensión creada en el paso previo.

picture02

Paso 3: Crear el Set Action “Year Set Action”

En este punto, vamos a definir el primer #SetActions.

Recordemos que la nueva funcionalidad de los #SetActions permite que los usuarios puedan actualizar los valores de un Set (es decir, que miembros del Set están: IN/OUT del Set), interactuando directamente con las “marks” de una Viz.

En la definición del #SetActions se debe indicar el Set que se actualizará o Target Set.  En este caso utilizaremos el “Year Set” definido en el paso previo.

Elegir la opción de que todos los valores del Set deberán ser removidos cuando la selección se limpie.

picture03

PARA EL NIVEL 2 DE LA JERARQUÍA (MES)

Paso 4: Crear una Drill-Down Dimension “Month-DD”.

En este paso se asignará a la nueva dimensión el valor de la fecha truncada a nivel mes cuando el año a que pertenece el registro esté definido “IN” del “Year Set”. En caso contrario, se le asignará el valor de NULL.

Es decir, contendrá el valor del mes, siempre y cuando corresponda a uno de los años seleccionados por el usuario en el nivel 1.

¿Cómo se logra esto? Con el uso combinado del Set y del #SetActions.

  • Recordemos que con los #SetActions, por primera vez, se permite al usuario modificar la definición original de un Set, al interactuar directamente con la Viz.
  • ¿Cómo es eso? Con el Set Action el usuario puede controlar con su interacción con las “marks” que miembros están IN o OUT con el Set asociado.
  • Es decir, el “Year Set Action” definido en el paso 3, actualizará que miembros están IN o OUT en el “Year Set” definido en el paso 2, conforme a las “marks” seleccionadas por el usuario en la Viz.

Es decir, la fórmula a definir evaluará para cada registro si el Año esta IN en el SET: “Year Set”. En caso afirmativo, se le asignará el valor del mes, en caso contrario se le asignará el valor de NULL.

Month DD=

IIF([Year Set], DATE(DATETRUNC(‘month’, [Order Date])), NULL)

Paso 5: Crear el Set “Month DD Set”.

El nuevo Set se asociará a la dimensión creada en el paso previo.

picture04

Paso 6: Crear el Set Action “Month Set Action”.

Definir que su Target Set es el “Month DD Set”, definido en el paso previo. Y elegir la opción de que todos los valores del Set deberán ser removidos, cuando la selección se limpie.

picture05

PARA EL NIVEL 3 DE LA JERARQUÍA (DIA)

Paso 7: Crear una Drill-Down Dimension “Day DD”.

En este paso, se asignará a la nueva dimensión el valor de la fecha de la orden, es decir a nivel día, cuando se cumple la condición que el año a que pertenece el registro esta definido “IN” en el “Year Set” y además se cumple la condición que el mes a que pertenece el registro esta definido “IN” en el “Month DD Set”. En caso contrario, se le asignará el valor de NULL.

Es decir, contendrá el valor del día siempre y cuando corresponda a uno de los años-meses seleccionados por el usuario.

Day DD =

IIF([Year Set] AND [Month DD Set], [Order Date], NULL)

PARA FILTRAR Y MOSTRAR SOLO LAS MARKS DE NIVEL MÁS DETALLADO

El Drill Down en una sola hoja implica utilizar un Drill Down con exclusión o filtro, es decir, se requiere mostrar solo las “marks” del siguiente nivel de jerarquía de acuerdo al nivel de jerarquía de las “marks” previamente seleccionadas por el usuario.

Esto quiere decir que, si el usuario selecciona una o más “marks” de años, la siguiente vista deberá mostrar solo “marks” a nivel mes. En cambio, cuando el usuario selecciona una o más “marks” de nivel de mes la siguiente vista deberá mostrará solo “marks” a nivel día.

Los siguientes dos pasos nos ayudarán con este requerimiento.

Paso 8: Crear la Dimension “Level”.

Esta variable nos ayudará a identificar el nivel máximo de jerarquía que se está manejando en cada registro de acuerdo a los valores de las dimensiones “Day DD” y “Month DD”.

Level =

IIF(NOT ISNULL([Day DD]), 3,

IIF(NOT ISNULL([Month DD]), 2, 1))

Paso 9: Crear la Dimension “Filter”.

Esta variable compara el nivel de cada registro vs. el nivel máximo en la tabla. (TRUE/FALSE)

Filter =

[Level] = {FIXED : MAX([Level])}

PARA CREAR UN EJE PERSONALIZADO POR NIVEL DE DETALLE

Aunque no es un requerimiento del reto original, decidí personalizar el eje de fechas para mostrar formatos de string dependiendo del nivel mostrado de los datos.

Paso 10: Crear una Dimension para el eje de las “X”: “Date Axis”

Para personalizar los letreros del eje de fechas de acuerdo al nivel mostrado del Drill-Down, se creará una dimensión tipo string.

Date Axis =

CASE [Level]

WHEN 1 THEN STR(DATEPART(‘year’, [Order Date]))

WHEN 2 THEN LEFT(DATENAME(“month”,[Month DD]),3) + “, ” + RIGHT(STR(DATEPART(‘year’, [Order Date])),2)

WHEN 3 THEN LEFT(DATENAME(“month”,[Month DD]),3) + ” ” + STR(DATEPART(‘day’, [Order Date])) + “, ” + RIGHT(STR(DATEPART(‘year’, [Order Date])),2)

END

Paso 11: Crear la Dimension “Sort”.

Esta nueva dimensión permitirá ordenar los valores de “Date Axis” de acuerdo a su orden cronológico.

Sort  =

CASE [Level]

WHEN 1 THEN [Year]

WHEN 2 THEN [Month DD]

WHEN 3 THEN [Day DD]

END

 CREAR LA GRÁFICA

Paso 12: Crear la gráfica de barras y de líneas.

Mover a los estantes de:

  • Columns ⬅  “Date Axis”y ordenar ascendentemente by “Sort”.
  • Rows ⬅  “Bar Sales” para la gráfica de barras y

“Line Sales” para la gráfica de línea.

  • Detail ⬅  “Year”, “Month DD” y “Day DD”

La gráfica utiliza un eje doble para las ventas. Se deben sincronizar ambos ejes y ocultar el eje del lado derecho de la gráfica.

Ajuste los tooltips y los formatos.

¡Listo! 

Link a Tableau Public 

pictureaa

A continuación comparto un resumen de los principales pasos relacionados con el uso de los  Set y los #SetActions en este ejercicio.

picture06

Espero que este blog les sea de utilidad.

Si tienen alguna pregunta sobre el blog, no duden en ponerse en contacto conmigo en twitter (@rosariogaunag)

¡Saludos!

Rosario Gauna

Advertisements