Las últimas semanas de #WorkoutWednesday han sido intensas y el reto de Lorna para la semana 15 no fue la excepción.

El desafío de la semana 15 trata sobre la creación de un gráfico que muestra en un área sombreada el rango entre los precios más bajos y los más altos alcanzados por la acción en cada semana. Adicionalmente, el valor de cierre semanal de la acción deberá ser mostrado como un círculo y una línea deberá unir los valores de cierre semanal.

El ejercicio está lleno de múltiples desafíos; entre ellos destacan:

  • La creación de un gráfico con tres tipos de “Marks”.
  • La utilización de las “SET ACTIONS” todopoderosas, como las califica Lorna, para lograr la funcionalidad solicitada.
  • La utilización de cálculos LOD.
  • La definición de líneas de referencias dinámicas de acuerdo a la preferencia del usuario por utilizar comparación vs. el promedio global o vs. el valor de la acción a una fecha seleccionada.

A continuación, comparto los pasos que seguí para construir el gráfico principal del reto.

PASOS PARA LA DEFINICIÓN DE VARIABLES BÁSICAS

Paso 1: Definir parámetro para que el usuario seleccione tipo de comparación.

  • Name:                          Compare Against
  • Data type:                    Integer
  • Allowable values:      List
  • Value:                           1 for Average Close and  2 for Date

Paso 2: Crear la variable de “Week”.

La gráfica muestra la información semanalmente, por lo cual se definiría una nueva variable que permita agrupar las fechas que pertenecen a una semana, asignando a la variable “Week” el valor de la fecha del primer día de semana.

Week = DATE(DATETRUNC(‘week’, [Date]))

El ejercicio considera que la semana empieza en lunes.

Para verificar que se está manejando el inicio de la semana en lunes, se puede revisar seleccionando la fuente de datos dentro del menú de “Data” y después seleccionar la opción de “Date Properties”.

Picture02

Paso 3: Crear la variable “Weekly Close”.

Utilizamos cálculos LOD.

Weekly Close =

{FIXED [Week] : MAX(IIF([Date] = {FIXED [Week] : MAX([Date])}, [Close], NULL))}

La fórmula {FIXED [Week] : MAX([Date])} nos permite obtener el valor máximo de la fecha original, dentro de cada semana. Es decir, la fecha del último día de la semana según los registros en la fuente datos.

Después se utiliza otro cálculo LOD a nivel semanal para obtener el valor de cierre, seleccionando únicamente el valor de cierre de la fecha que coincida con la fecha del último día de la semana, las demás fechas quedarán en nulo.

Paso 4: Definir la variable del área gris dentro del gráfico.

Como el área gris para mostrar los rangos entre los precios mínimos y máximos no empieza de cero, tenemos la necesidad de definir dos áreas: una gris y otra transparente. Para lo cual podemos utilizar cualquiera de las siguientes técnicas: 1) Técnica de área con “Stack On” y 2) Técnica de área con “Stack Off”, que ya hemos visto en blogs previos.

En lo personal, a mí me gusta utilizar la primera técnica, porque aunque ambas técnicas logran el mismo resultado visual en el gráfico, creo que al momento de seleccionar una “mark” del gráfico de área, la primera técnica ofrece una mejor experiencia visual, pero al final es cuestión de preferencias personales y ambas técnicas tienen sus seguidores.

Para conocer más sobre estas técnicas pueden consultar el blog de “Coloreado entre líneas”.

Gray Area = MAX([High]) – MIN([Low])

Paso 5: Crear la variable “Dot”.

Esta variable es esencial para un truco que se explicará más adelante. Se puede utilizar cualquiera de las siguientes formas para su definición.

Dot = CHAR(9679)
Dot =  “●”

PASOS PARA LA DEFINICIÓN DE LAS LINEAS DE REFERENCIA

Para la definición de las “Líneas de referencia” se debe tomar en consideración el valor del parámetro definido en el punto 1.

Si se selecciona la opción de “Promedio de cierre”, se debe usar el valor promedio de cierre SOLAMENTE (utilizaremos cálculos LOD).

Si se selecciona la opción de “fecha”, se deberá añadir una línea de referencia para la semana seleccionada y tener una línea de referencia que muestre el valor de cierre para esa semana (utilizaremos “Set Actions”).

Cualquier punto en el gráfico cambiará la línea de referencia de fecha para comparar arriba y abajo.

Si se seleccionan varios puntos, se establecerá de manera predeterminada la semana máxima en su selección (utilizaremos cálculos LOD).

Paso 6: Crear un Set asociado a la variable “Week”

Se selecciona la variable “Week” y con el click derecho seleccionar la opción de Create Set con el nombre “Set of Weeks”.

Paso 7: Crear un Set Actions

Recordemos que los “Set Actions” toman un “Set” existente, en este caso “Set of Weeks” y actualizan los valores contenidos en ese “Set” en función de la acción de un usuario en la visualización.

Picture03

También es posible definir el Set Action más adelante en el Dashboard. En este ejercicio, estoy utilizando la definición dentro del menú de “Worksheet”.

Paso 8: Calcular la máxima semana seleccionada por el usuario.

Cuando el usuario interactúa con la Viz, los Set Actions permiten seleccionar múltiples “marks”. En este reto Lorna nos indica que al seleccionarse varios puntos, se deberá establecer de manera predeterminada la semana máxima en su selección.

Max Week Selected =

{FIXED : MAX(IIF([Set of Weeks], [Week], NULL))}

En este punto del desafío, yo no pude evitar desear tener ya disponible Tableau 2019.2, el cual, se encuentra en su segunda versión beta, lo que significa que se está acercando cada vez más su lanzamiento. Me encantaría estar ya utilizando las acciones de los parámetros, una nueva y poderosa funcionalidad que nos ofrece nuevas posibilidades de interacción en la Viz. Pienso que en este desafío, vendrían como anillo al dedo, ya que solo la última “mark” seleccionada se tomaría en cuenta.

Paso 9: Calcular los valores para las líneas de referencia.

Ref Line for Price =
Si se selecciona la opción de “Promedio de cierre”, se debe usar el valor promedio de cierre IIF([Compare Against] = 1,

{ AVG([Weekly Close]) },

Si se selecciona la opción de “fecha”, se deberá añadir una línea de referencia que muestre el valor de cierre para esa semana. { MAX(

IIF([Week] = [Max Week Selected], [Weekly Close], NULL)) })

Ref Line for Week =
Si se selecciona la opción de “Promedio de cierre”, no se tendrá línea de referencia en el eje de “Week” IIF([Compare Against] = 1, NULL,
Si se selecciona la opción de “fecha”, se deberá añadir una línea de referencia que muestre la semana seleccionada. [Max Week Selected])

Paso 10: Calcular la variable color.

El color de los círculos está determinado en función a si el valor de cierre semanal está por arriba o por debajo del valor de la línea de referencia de precio.

Color =

[Weekly Close] >= [Ref Line for Price]

PASOS PARA LA DEFINICIÓN DEL GRÁFICO

Paso 12: Crear gráfico con eje doble sincronizado.

Seleccionar dentro del menú de “Analysis” la opción “Stack Marks On”.

Definir el primer eje para el gráfico de área:

  • Filter ⬅  “Measure Names” y seleccionar “Gray Area” y “Low”
  • Columns ⬅   “Week” utilizar “Exact Date” y “Continuous”
  • Rows ⬅   “Measure Values”
  • Color ⬅   “Measure Names”
  • Tooltips ⬅   “MIN(Low)”, “MAX(High)”, “MAX(Weekly Close)”,  “MAX(Ref Line for Price)” y “Max(Ref Line for Week)”

Ajustar los colores para mostrar en blanco el área “Low” y gris la variable “Gray Area”.

Definir el segundo eje para el gráfico de línea:

Para este segundo eje utilizaremos un truco, en donde la variable “Dot” creada en el paso 5 nos ayudará a colocar puntos en cada una de las “Marks” de un gráfico de líneas, dando el efecto solicitado en el reto.

  • Rows ⬅   “MAX(Weekly Close)”
  • Color ⬅   Sustituir “Measure Names” por “ATTR(Color)”
  • Tooltips ⬅   “MIN(Low)”, “MAX(High)”, “MAX(Weekly Close)”, “MAX(Ref Line for Price)” y “Max(Ref Line for Week)”
  • Label ⬅   “ATTR(Dot)”

Para utilizar las variables “Color” y “Dot” como atributos, seleccionar con el click derecho la opción de “Attribute”.

Aunque en reto original se trabaja con información a partir de mayo del 2013, las siguientes imágenes muestran únicamente los datos del año 2018 y 2019, con la finalidad de poder apreciar mejor las variaciones entre valores mínimos y máximos semanales.

Picture04¡Con esto concluimos el gráfico principal del reto!  

Nota: Para la construcción de la gráfica del tooltips, utilizo una lógica similar, sólo que en la de tooltips utilizo los tipos de marcas de: “Bar” y “Circle”.

Link a Tableau Public

Picture01Muchas gracias a @lorna_eden por compartirnos un divertido reto.

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

¡Saludos!

Rosario Gauna

 

Advertisements