Reto, WorkoutWednesday, LOD Calc, Table Calc, Trellis Chart

Por: Rosario Gauna @rosariogaunag

El desafío que @LukeStanke nos preparó para la semana 50 de #WorkoutWednesday está recién salido del horno y definitivamente es un reto que prometía gran diversión.

Link al reto

El reto solicita crear un trellis-chart por “State” utilizando gráficas de Pie.

Un gráfico múltiple o una trellis-chart es una serie de gráficos o tablas similares que usan la misma escala y los mismos ejes para mostrar diferentes particiones de un conjunto de datos, lo que permite comparar y contrastar fácilmente los valores entre los gráficos.

El reto además requiere permitir al usuario seleccionar una de las “Sub-Categories”. En base a la selección del usuario, el Pie de cada uno de los “States” podrá dividirse hasta en tres partes:

  • El porcentaje de ventas de la “Sub-Category” seleccionada dentro de las ventas del State.
  • El porcentaje de ventas del resto de las “Sub-Categories” que corresponden a la misma “Category” a la que pertenece la “Sub-Category” seleccionada por el usuario.
  • El porcentaje de ventas restante para completar el 100%.

Para añadir un mayor grado de emoción, se le puede agregar los siguientes desafíos al reto: 1) No se debe definir la “Category” utilizando una codificación rígida de la “Sub-Category”; y 2) Ordenar los “States” en base al porcentaje de ventas de la “Sub-Category” seleccionada por el usuario.

A continuación, comparto el procedimiento que utilicé:

Paso 1: Calcular para cada “State”, su posición o coordenadas. Es decir, en qué columna y renglón debe desplegarse cada “State”.

El conjunto de datos de SuperStore tiene 49 “States” incluidos (no Alaska o Hawaii, pero se incluye el Distrito de Columbia) lo que brinda un conjunto de datos perfecto para una cuadrícula de 7 × 7. Porque el tamaño de la cuadrícula no cambiará, se puede utilizar una versión corta del cálculo de las coordenadas, dejando fijo el valor de 7 “States” graficados por renglón.

COLUMN =

INT( (Index() – 1) % 7)

ROW =

INT( (Index() – 1) / 7) 

Paso 2: Crear parámetro para que el usuario seleccione una “Sub-Category”.

Definir el parámetro con el nombre de “Choose Sub-Category” y sus valores se tomarán directamente del campo de “Sub-Category”.

Paso 3: Calcular la Categoría a la que pertenece la “Sub-Category” seleccionada por el usuario.

Se utilizará un cálculo LOD para fijar el valor de la “Category” a la que pertenece la “Sub-Category” seleccionada por el usuario.

Selected Category =

{FIXED :

MAX(IIF([Sub-Category] = [Choose Sub-Category],  [Category],  NULL))}

Paso 4: Crear una dimensión dinámica que represente cada una de las tres partes en que se subdivida el Pie.

Slice =

IIF([Category] = [Selected Category],

IIF([Sub-Category] = [Choose Sub-Category],  “1st”,  “2nd”),  “3rd”)

Paso 5: Calcular los valores de las ventas totales por “State” y las ventas totales por “State-Slice”.

Se utilizarán cálculos LOD para su definición.

Sales by State = {FIXED [State] : SUM([Sales])}
Sales by State & Slice = {FIXED [State], [Slice] : SUM([Sales])}

Paso 6: Calcular el Porcentaje de Ventas que se desplegará en el tooltips de la gráfica de Pie.

% Sales = SUM([Sales]) / SUM([Sales by State])

Paso 7: Calcular los porcentajes de ventas de la primera y segunda rebanada del Pie.

Estos dos campos se utilizarán para ordenar el desplegado de los “States”. Para su definición se usarán cálculos LOD.

% Sales 1st Slice =

{FIXED [State] :

AVG(IIF([Slice] = “1st”,

[Sales by State & Slice] / [Sales by State], NULL))}

% Sales 2nd Slice =

{FIXED [State] :

AVG(IIF([Slice] = “2nd”,

[Sales by State & Slice] / [Sales by State], NULL))}

Paso 8: Calcular el campo de “Sort”

Esta fórmula ayudará a desplegar en primer lugar, todos los “States” que tuvieron ventas en la “Sub-Category” seleccionada, ordenados por el porcentaje de ventas de la primera rebanada del Pie, es decir, por el porcentaje de ventas de la “Sub-Category” seleccionada.

Posteriormente, se desplegarán aquellos “States” que no cuentan con ventas en la Sub-Category seleccionada, ordenados por el porcentaje de ventas de la segunda rebanada.

Sort =

IIF(NOT ISNULL([% Sales 1st Slice]),

[% Sales 1st Slice] + 100,

[% Sales 2nd Slice])

Paso 9: Calcular el campo de Color

Color =

[Slice] +

IIF([Category] = [Selected Category],  “-” + [Selected Category],  “”)

Esta fórmula permitirá establecer colores independientes por “Category”, para la primera y segunda rebanada del Pie. En el caso de la tercera rebanada siempre se utilizará el color gris, independientemente de la categoría seleccionada.

Picture2

Paso 10: Definir la Trellis-Chart

Para la gráfica de PIE mover a los estantes de:

  • Columns   ⬅“Column” (convertir a discreto)
  • Rows   ⬅“Row” (utilizar escala inversa)
  • Detail   ⬅“State” ordenado por el campo de “Sort”
  • Color   ⬅Color
  • Angle   ⬅SUM(Sales)
  • Tooltips   ⬅AGG(% of Sales) y ATTR(Legend)

Para los cálculos de Tabla de las variables “Columns” y “Rows” se utilizará la siguiente definición:

Picture3

Para la gráfica de “Text” mover a los estantes de:

  • Rows   ⬅Row-0.5 (utilizar dual eje y sincronizado)
  • Detail   ⬅“State” ordenado por el campo de “Sort”
  • Detail   ⬅“Color”
  • Color   ⬅“Selected Category”
  • Text   ⬅“State” y “% Sales of 1stSlice”

Picture4

Paso 11: Calcular el campo de Legend

Esta fórmula permitirá calcular los letreros dinámicos que contengan el significado de cada uno de los tres colores utilizados en las gráficas de Pie.

Legend =

IIF([Category] = [Selected Category],

IIF([Sub-Category] = [Choose Sub-Category],

[Sub-Category],   “Rest of ” + [Category]),   “All others”)

Paso 12: Definir la gráfica secundaria para mostrar las leyendas dinámicas con lo que significa cada color en las gráficas de Pie.

Mover a los estantes de:

  • Columns   ⬅Color
  • Color   ⬅Color
  • Text   ⬅Legend

Paso 13: Ajustar los tooltips y los formatos.

¡Listo!  

Link a Tableau Public 

Picture1

Aprovecho para dar las gracias a @LukeStanke por compartirnos este reto que sobrepasó mis expectativas iniciales de diversión.

Si tiene alguna pregunta sobre el blog, no dudes en ponerte en contacto conmigo en twitter (@rosariogaunag)

¡Saludos!

Rosario Gauna

Advertisements