Step line, LOD calc, Running_sum

By: Rosario Gauna @rosariogaunag

Una de las novedades que Tableau 2018.1 nos ofrece, es la capacidad de visualizar datos no continuos a un solo click, al permitir convertir cualquier gráfica lineal en una gráfica de Step Line.

Una gráfica Step Line es similar a una gráfica de líneas tradicional, pero en lugar de unir puntos, se unen líneas que representan cada período, utilizando líneas verticales en ángulos de 90 grados para conectar cada línea horizontal.

Si aún no tienes la nueva versión de Tableau 2018.1 y requieres contar con una gráfica de Step Line existen diversas técnicas para lograr este tipo de gráfica.

La técnica que a continuación presento brinda los siguientes beneficios:

  • Exactitud en la ubicación de los puntos al presentar líneas horizontales en cada uno de los períodos.
    • Incluyendo las líneas horizontalesen el período inicial y el período final.
    • Opción muy útil cuando los períodos evaluados son pocos, por ejemplo, cuando se trabaja con los doce meses del año.
  • Permite consultar los tooltips tanto al inicio, como al final de cada línea horizontal.
  • Flexibilidad para intercambiar la consulta de montos del período a los montos acumulados (RUNNING SUM).

Picture1

En este ejemplo, para consultar los datos de Superstore el usuario tiene  las siguientes opciones para definir la gráfica:

  • Seleccionar el período para el Step Line: Anual, trimestral o mensual.
  • Seleccionar ventas mensuales o ventas acumuladas.
  • Seleccionar ventas totales o por categoría o región o segmento.

Es importante indicar que para crear cada línea horizontal de cada período se requieren de dos puntos o “marks”. ¿Por qué? Porque la primera “mark” es el punto de inicio de la línea y la segunda “mark” es el fin de la línea de la métrica del período analizado.

Una de las formas para lograr contar con los dos puntos necesarios para construir cada línea, es con la técnica de “Union” que ya utilizamos en un ejercicio previo visto en el blog de Mi Primer Gráfico Radial , en donde unimos la tabla de Superstore consigo misma, para poder contar con las dos marks necesarias.

En este ejercicio utilizamos una técnica de crear las dos “marks” en función de una dimensión existente, con el beneficio de que no requiere duplicar los registros de la tabla logrando el mismo efecto que la técnica de “Union”.

Paso 1: Definir los parámetros para que el usuario seleccione entre las opciones permitidas. Los parámetros son tres: “Acumulated Sales?”, “Detail?” y “Type Period?”

Picture2

Paso 2: Crear una dimensión con dos valores para identificar el punto inicial y final de cada línea horizontal.  

El truco consiste en generar la nueva variable con solo dos valores posibles en base a otra dimensión existente, en este caso la nueva variable se deriva del día del “Order Date”.

  • Para los días paresa la nueva variable se le da el valor de Cero
  • Para los días imparesa la nueva variable se le da el valor de Uno
Points = DATEPART(‘day’, [Order Date]) % 2

Este cálculo se basa en el supuesto de que siempre se tiene al menos un día par y un día impar en cada período para disponer de las dos marks requeridas para cada línea horizontal. En caso de que no se cumpla esta condición se puede utilizar la técnica de “Union” para definir las dos marks.

Convertir a dimensiónla nueva variable de “Points”.

Paso 3: Calcular la fecha de inicio de cada período. Se calcula en función de la opción seleccionada por el usuario en el parámetro del tipo período: Anual, Trimestral o Mensual.

Initial Date of the Period = DATETRUNC([Type Period?],[Order Date]) 

Paso 4: Calcular el valor de fecha de cada uno de los dos puntos de cada período. Este cálculo permite determinar los valores de la fecha de inicio y de fin de cada línea horizontal en el eje de las x.

Condición Date Axis =
Primer punto o Punto Inicial

Se asigna el valor de la fecha del primer día del período analizado.

 

IIF([Points] = 0, [Initial Date of the Period],
Segundo Punto o Punto Final

Se asigna el valor de la fecha del primer día del siguienteperíodo.

 

DATEADD([Type Period?],1,[Initial Date of the Period]))

Paso 5: Calcular el nivel de detalle para determinar el color de las líneas. Se calcula en función de la opción seleccionada por el usuario.

Detail  =

CASE [Detail?]

WHEN 1 THEN “Total”

WHEN 2 THEN [Category]

WHEN 3 THEN [Region]

WHEN 4 THEN [Segment]

END

Paso 6: Calcular el valor de las ventas por período y nivel de detalle.

Sales by Period & Detail =

{FIXED [Initial Date of the Period], [Detail] : SUM([Sales])}

Es importante resaltar que el resultado del cálculo LOD nos da el valor de las ventas totales de cada período (anual, trimestral o anual) y el nivel de detalle seleccionado. No importa si las ventas se realizan en un día par o en un día impar.

 Paso 7: Obtener el valor de las ventas a graficar. Se calcula en función a la opción seleccionada por el usuario.

Sales Axis =  IIF([Accumulated Sales?]=FALSE,

SUM([Sales by Period & Detail]), RUNNING_SUM(SUM([Sales by Period & Detail])))

 Paso 8: Calcular la variable “path” para unir los puntos en el orden correcto y modificar el nivel de agregación de la nueva variable a “Average”.

Path =  INT(DATETRUNC([Type Period?], [Order Date])) + [Points]

Esta fórmula suma al valor de la fecha inicial del período un valor de cero para el primer punto y el valor de uno para el segundo punto. De tal forma que el segundo punto de cada período tendrá el valor de +1 con respecto al primer punto del período.

Y al incluir el valor de la fecha inicial, cada punto en la gráfica tendrá un valor mayor al anterior lo cual permitirá unir los puntos en el orden correcto.

 Paso 9: Seleccione el gráfico de líneas y mover a los estantes de:

  • Columns ➔la variable “Date Axis” y modificar a “Exact Date”
  • Rows ➔la variable “Sales Axis” y aplicar la opción de cálculo de tabla de Computing by “Date Axis”
  • Color ➔ la variable “Detail”
  • Detail ➔la variable “Points”
  • Path ➔la variable “AVG(Path)”

 Paso 10: Ajuste colores y formatos. Listo!

Link a Tableau Public

Picture0

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

¡Saludos!

Rosario Gauna

Advertisements