Etiqueta: fechas

Cómo calcular la diferencia de un valor entre la última fecha disponible y una fecha elegida

El pasado fin de semana me consultaron por email como podría hacerse en Tableau para mostrar un primer valor en la última fecha disponible en, el valor en una segunda fecha concreta que elija el usuario y un tercer valor con la diferencia entre ambos. Así que a continuación voy a detallar tres posibles formas de hacerlo.

Método 1: Un parámetro, varios cálculos y una sola hoja

Tal vez sea el método menos cómodo porque implica tener una hoja con el valor en las dos fechas y una segunda hoja con la diferencia, pero tal vez sea el que método que primero se le ocurre a mucha gente.

Lo primero vamos a crear un parámetro de tipo fecha con la fecha mínima y máxima que nosotros queramos. Por ejemplo:

A continuación vamos a crear dos campos calculados, uno que nos devuelva el valor (por ejemplo la suma de las ventas) en la fecha máxima de nuestra base de datos y en caso contrario que no nos devuelva ningún valor (o valor nulo tal como lo diríamos en Tableau):

Y otro campo calculado que nos devolverá el valor de la suma de ventas pero esta vez sólo cuando la fecha sea igual a la que escojamos en el parámetro que hemos creado anteriormente:

Por último creamos un valor con la diferencia de la suma de ambos cálculos:

Ahora tendríamos que utilizar Nombres de medida y Valores de medida (measure names y measure values) y crear una tabla:

y por último añadir dicha tabla a un dahsboard y asegurarnos de que incluimos el parámetro para poder modificar la fecha seleccionada para la comparación:

La desventaja de este método es que no podemos ver en la tabla el valor concreto de las dos fechas sin utilizar una segunda hoja en la que incluir las mismas. Veamos entonces un segundo método.

Método 2: Incluyendo las fechas concretas y una segunda hoja

Para este segundo método vamos a utiizar buena parte de los campos que hemos calculado en el método 1. Pero antes de nada, vamos a crear un nuevo campo calculado que nos devuelva la fecha de las ventas (o de los pedidos) solo para nuestras dos fechas de interés, y evitar así que Tableau nos muestre todas las hojas de nuestra base de datos. Para ello nos hará falta el parámetro que hemos creado en el método 1:

Vamos a utilizar este nuevo campo calculado como filtro y seleccionaremos Verdadero (True). De este modo, cuando utilicemos Order Date en nuestra visualización, Tableau sólo mostrará las fechas que cumplen dicha condición. Es decir es la fecha más reciente en nuestra base de datos o la fecha que coincide con la seleccionada en el parámetro. A continuación utilizaremos la fecha del pedido y la suma de ventas para crear una tabla:

Y a continuación, utilizaremos esos cálculos que hemos utilizado en el método 1 para crear una segunda tabla con la diferencia entre los valores para ambas fechas:

 Podríamos entonces crear un dashboard con ambas hojas. De este modo tendremos más libertad para situar el cálculo con la diferencia donde prefiramos, aunque tenemos la desventaja de utilizar varias hojas en el dashboard en lugar de una única hoja:

Método 3: Fechas y valores en una misma hoja

Un tercer método, y estoy seguro de que podríamos mostrar varios métodos más, sería utilizar un cálculo que incluya un cálculo de tabla. De esta forma podremos crear una tabla idéntica a la utilizada en el método 2, pero con una segunda columna que muestre la diferencia entre ambos valores. Dicho campo calculado sería así:

Es decir, cuando tengamos nuestra tabla con las ventas en ambas fechas, Tableau realizará la resta de las ventas una fila menos las ventas de la fila anterior de la tabla:

 

Ahora solo faltaría incluir la hoja en un dashboard junto al parámetro creado al inicio del método 1.

Como he dicho en muchas otras ocasiones. Una de las grandes ventajas de Tableau es que siempre hay varias formas de obtener el mismo resultado. Por lo que solo tenemos que buscar la forma que mejor se adapte a nosotros o nos sea más fácil de entender.

 

Como mostrar días para los que no hay registros en nuestra base de datos

Esta es una pregunta que me han hecho más de una vez en Londres, especialmente a la hora de realizar análisis de una variable para cada día del año. Supongamos que queremos analizar nuestras ventas día a día, pero algunos días no hemos realizado ninguna venta. Al no tener un registro de ese día, Tableau no lo mostrará por defecto, por lo que tendremos «saltos» al crear nuestra visualización, como en la siguiente imagen:
 
En este caso, no tenemos registros de los días 2, 9 y 16 de enero de 2011 ¿Cómo podemos entonces realizar un análisis de la variación de las ventas día a día? ¿O un día concreto respecto a la semana anterior? 
Muy sencillo, simplemente hacemos click derecho en la variable que estemos utilizando para la fecha (es importante que sea una variable de tipo fecha y no de tipo cadena), y veremos la opción «Show Missing Values» (Mostrar valores perdidos).
Haciendo click en dicha opción, ahora veremos todos los días del año entre la fecha inicial y final de nuestra base de datos:
Ahora tenemos todos los días en nuestra tabla, pero sin ningún valor para esos días que no figuraban en nuestra base de datos. Si queremos que en vez de ser un valor nulo Tableau compute un cero en esos días, podemos hacerlo también de manera muy sencilla, utilizando en vez de la medida que estemos utilizando, crear un campo calculado con la función ZN, que otorga un cero en los casos en los que hay un valor nulo. Es decir, si en nuestro ejemplo estábamos utilizando la suma de la variable Sales, el campo calculado sería: ZN(SUM([Sales])). Utilizando esta nueva medida en lugar de la anterior SUM([Sales]) obtendremos lo siguiente:
Ahora ya tenemos 0 en los días en los que no se han realizado ventas y para los cuales no teníamos registro en nuestra base de datos y podremos realizar cualquier análisis que implique cálculos con los días del año de forma mucho más cómoda.

Datediff: Cómo calcular la diferencia entre dos fechas en Tableau

Los campos calculados (Calculated Fields) son una de las funciones más interesantes y potentes de Tableau. En este post voy a hablar de uno de los cálculos más habituales cuando estamos utilizando fechas: DATEDIFF, es decir, la diferencia entre dos fechas. Especialmente útil para analizar, por ejemplo, el funcionamiento de un departamento logísitico de una tienda, y saber el tiempo desde que un cliente realiza un pedido hasta que este se envía al comprador.

La fórmula

La fórmula DATEDIFF requiere únicamente indicar 3 campos. El periodo en el que queremos que la diferencia se calcule, es decir, si queremos la diferencia en minutos, dias, meses, etc. La fecha de inicio del cálculo (la fecha de compra del artículo, en el ejemplo antes mencioonado) y la fecha final del cálculo (la fecha de envío del artículo, en nuestro ejemplo). La sintaxis a usar es por tanto la siguiente:
DATEDIFF («periodo»,[Fecha de inicio],[Fecha final])

Podemos añadir además un campo adicional al final de la fórmula, el inicio de la semana, que indicaríamos entre comillas después de la fecha final y separado de esta con una coma. Si no se indica Tableau utilizará como el inicio de la semana el predeterminado por la base de datos.

El periodo

A la hora de indicar el periodo en el que queremos la diferencia entre ambas fechas, tendremos que indicarlo en inglés, incluso si estamos utilizando español como el idioma predeterminado de Tableau, pudiendo optar por las siguientes alternativas:
  • Años: «year»
  • Cuatrimestres: «quarter»
  • Meses: «month»
  • Dias del año: «dayofyear»
  • Dias: «day»
  • Dias de la semana: «weekday»
  • Horas: «hour»
  • Minutos: «minute»
  • Segundos: «second»
Importante señalar que no debemos indicar el periodo en plural, es decir, no escribir nunca «years» porque entonces obtendremos un error en el campo calculado. En el caso de DATEDIFF, y tras varias pruebas, no he encontrado diferencias en calcular la diferencia utilizando días del año (donde, por ejemplo, el 1 de Febrero sería el día 32) o simplemente días, así que podríamos utilizar el periodo de días («day») sin problemas.
Siguiendo con nuestro ejemplo, vamos a calcular la diferencia en días entre la fecha de cada pedido y la fecha de envío utilizando la base de datos Superstore Sales de Tableau. La fórmula que tendríamos que indicar en el campo calculado sería por tanto:
Así de fácil, ya tenemos la diferencia entre ambas fechas calculada en días. Ahora nos quedaría visualizar el tiempo de envío para nuestros posibles análisis y nuestro seguimiento del funcionamiento del departamento logístico. Para ello podemos, por ejemplo:

Analizar el tiempo de envío de cada pedido utilizando un diagrama de Gantt

Para ello arrastramos nuestro identificador de cada pedido (Order ID) en filas, la fecha de realización del pedido o de compra en columnas (Order Date), nuestro campo calculado a la pestaña de Tamaño (Size) y en las marcas indicamos Barra Gant (Gant Bar). Podemos además filtrar nuestra visualización por mes, ordenar los pedidos de mayor a menor tiempo de envío y obtendríamos algo parecido a esto:

Analizar el tiempo de envío por código postal en un mapa

Si tenemos el código postal en nuesta base de datos y lo hemos definido como campo geográfico en Tableau, podríamos crear una visualización similar a esta:

 

Simplemente con la latitud y longitud en filas y columnas respectivamente (o aún más fácil, haciendo doble click en nuestro variable geográfica), nuestro campo calculado en Color y el número de pedidos en Tamaño,

Identificar códigos postales en los que el tiempo de envío está por encima de nuestro tiempo objetivo

Podemos crear un sencillo gráfico de barras en el que se muestre cada código postal y el tiempo medio de envío en cada uno. Para darle mayor valor, podemos añadir un parámetro en el que el manager o el analista pueda seleccionar el tiempo medio de envío objetivo, mostrarlo como una línea de referencia y crear un segundo campo para resaltar en distinto color aquellos códigos postales donde el tiempo de envío está por encima de nuestros estándares de calidad. Añadimos la región como un filtro rápido para que podamos filtrar entre las distintas regiones geográficas y obtendríamos algo similar a este ejemplo:
Y hasta aquí la función DATEDIFF. Como se puede ver bien sencilla de utilizar.

Cómo crear un calendario interactivo en Tableau

Una de los mayores puntos fuertes de Tableau es su gran versatilidad frente a otros programas de BI y visualización de datos, especialmente sin necesidad de tener conocimientos de programación ni picar código.
Esta versatilidad permite, por ejemplo, crear visualizaciones con la estética de un calendario con la ventaja añadida de su fácil lectura para la mayoría de personas gracias a lo familiarizados que estamos con este formato que vemos prácticamente a diario en nuestros teléfonos móviles, ordenadores, mesas de trabajo, páginas de reserva de vuelos u hoteles, etc. Además, podemos dar al calendario un valor extra añadiendo color que represente un valor, como en la imagen de abajo, donde podemos ver las ventas que ha realizado una empresa durante el mes de noviembre de 2014:

El filtro nos permite además ir visualizando cada uno de los meses del año, pudiendo añadir filtros y acciones adicionales, de forma que si pulsamos en un día concreto, podríamos ver por ejemplo la distribución de ventas de ese día entre las distintas tiendas, por producto  o lo que consideremos oportuno.

Aprendí a crear este tipo de visualización con Andy Kriebel durante mi formación en la Data School de The Information Lab. Podéis ver el blog original de Andy sobre cómo crear esta visualización en este enlace. El proceso es bastante sencillo y es también un buen ejercicio para aquellos que están iniciándose en Tableau ya que ayuda a comprender mejor como funcionan las fechas  y familiarizarse con el uso de los estantes de filas y columnas.
En el ejemplo he utilizado la base de datos de  Superstore Sales que viene con Tableau. Lo único esencial para crear esta visualización es contar con una variable que tenga formato de fecha y sea reconocido por Tableau. Si tenemos eso (Order Date en este ejemplo) seguimos estos pasos:
1) Filtrar por mes: Para ello la forma más rápida es hacer click con el botón derecho del ratón en el campo de fecha que queramos utilizar y arrastrarlo a la tarjeta de filtros. Aparecerá un menu como el que veis en la imagen de abajo, donde tenemos que elegir como queremos filtrar en base a dicha variable. Elegimos Month / Year para filtrar la visualización en base a cada mes de cada año disponible en la base de datos.
2) En la siguiente ventana seleccionamos todos los meses, y a continuación hacemos click con el botón derecho en la píldora de fecha que aparece en la tarjeta de filtros (o click normal en la pestaña que aparece en el extremo derecho de la píldora) y seleccionamos Show Quick Filter (mostrar filtro rápido). Nos aparecerá una nueva ventana a la derecha con todos los meses de cada año que tenemos en la base de datos donde podremos filtrar los que queremos visualizar. Para hacerla más amigable, pulsamos en la pestaña situada en la esquina superior derecha del filtro y seleccionamos Single Value (Slider) (Valor individual (barra deslizante)). De forma que el filtro pase a ser una barra que podemos desplazar para seleccionar el mes.
3) Tenemos ya nuestro filtro, ahora pasaremos a crear la visualización en si. Ahora tendremos que realizar varias veces pasos similares al primero. Pulsamos y arrastramos de nuevo con el botón derecho en nuestra variable fecha de la ventana de datos y la arrastramos al estante de columnas, nos aparecerá la misma ventana que vimos en el paso 1 y seleccionamos Month (Mes) de la primera sección de opciones, ya que queremos tratar el mes como una categoría y no crear un eje. Ahora en la visualización aparecerá el mes concreto que está seleccionado en nuestro filtro.
4) Arrastramos de nuevo con el botón derecho en nuestra variable de fecha y la volvemos a soltar en el estante de columnas y esta vez seleccionamos Weekday (día de la semana), también en la primera sección de opciones. Ahora tendremos en nuestra cabecera el mes y los días de la semana.
5) Arrastramos de nuevo nuestra variable del mismo modo que en los pasos 3) y 4) pero esta vez lo soltamos en el estante de filas y seleccionamos Week (Semana). Para tener así en cada fila las semanas de el mes concreto que hemos seleccionado en el filtro. Si todo ha ido bien, en este punto deberías tener algo similar a esto:
6) De nuevo seleccionamos y arrastramos nuestra variable con el botón derecho, igual que en los pasos anteriores, pero esta vez la soltamos en el icono Text (Texto) de la tarjeta de Marks (Marcas) y seleccionamos Day (Día) de la primera sección de opciones.
7) Nuestro calendario va cogiendo forma, ahora vamos a darle un poco de formato. Primero vamos a borrar el nombre de la variable de la parte superior de la visualización, ya que no aporta gran valor, para ello hacemos click derecho en el nombre de la variable y pulsamos Hide Field Labels for Columns (Ocultar etiquetas de campo para columnas).
8) A continuación hacemos click derecho en la píldora de semanas que tenemos en el estante de filas y desmarcamos Show Header (Mostrar encabezado), para que así no veamos el encabezado del número de la semana, pero seguimos teniendo esa partición en nuestra visualización.
9) Ahora vamos a cambiar el formato en el que aparecen los días de la semana, para que ocupen menos espacio y no se corte el texto. Para ello hacemos click derecho en un día de la semana y seleccionamos Format (Formatear). Aparecerá una nueva lista de opciones a la izquierda de la pantalla y donde pone Dates (Fechas) podemos hacer click y cambiar el formato de automático a Abbreviation (Abreviación), o First Letter (Primera letra) si lo preferimos.
10) Nuestro calendario está prácticamente listo. Ahora podemos continuar modificando el formato para darle aún mejor aspecto. Por ejemplo, en si vamos a la pestaña de Borders (Límites) del menú que ves en la imagen anterior, podemos incluir bordes en ca Cell (Celda), Pane (Panel) y Header (Encabezado) para darle un aspecto del típico calendario en papel. También podemos modificar la fuente, el tamaño y demás a nuestro gusto.
11) Por último y siguiendo nuestro ejemplo, arrastramos una de nuestras medidas a la pestaña de color de la tarjeta de marcas. Veremos que en vez de colorear el fondo en base a la suma de ventas realizada cada día, Tableau colorea tan sólo el número de día. Para modificarlo, cambiamos el tipo de marca de automático a Square (cuadrado) y tendremos nuestro calendario, que debería ser parecido a este:
Ahora sólo tendremos que utilizarlo ene un dashboard y añadir acciones para aprovecharlo al máximo. Un calendario es una forma muy intuitiva y cómoda a modo de filtro, como por ejemplo se puede ver en este dashboard que cree con datos mios de la aplicación Moves durante este verano. Si seleccionas un día del calendario puedes ver mi localización a lo largo de las 24 horas de dicho día. Haz click en la siguiente imagen para ver el dashboard en acción.