DATEDIFF

La función DATEDIFF devuelve la diferencia en la unidad que se indique entre dos fechas.

Sintaxis

DATEDIFF(
    período,
    fecha_comienzo,
    fecha_final,
    [primer_día_semana]
)

Parámetros
  • período: unidad en la que devolver el resultado
  • fecha_comienzo: fecha de comienzo del período a considerar
  • fecha_final: fecha de finalización del período a considerar
  • primer_día_semana: (opcional), día de la semana que se deberá considerar como primer día de la semana ("monday", "tuesday"...). Si se omite, el primer día de la semana vendrá determinado por la fuente de datos.
Valor devuelto

La función devuelve un número real con parte decimal nula.

Información adicional

La función devuelve la diferencia en períodos entre el último día y el primer día. Esto significa que si el último día es posterior al primer día el resultado será positivo, y viceversa (véase ejemplo más adelante).

La documentación de esta función en la web de Tableau (véase enlace) no especifica qué valores puede tomar el argumento período pero -como mínimo- puede tomar los siguientes valores:

  • "year"
  • "quarter"
  • "month"
  • "week"
  • "day"
  • "hour"
  • "minute"
  • "second"
Ejemplos

Para probar esta función se van a crear campos calculados que calculen la diferencia entre ciertas fechas (a leer de un fichero Excel) y la fecha actual (21 de septiembre de 2019). La tabla a leer es la siguiente:

Fechas

Los campos calculados van a realizar el cálculo tomando como unidad de medida los días, semanas, meses, trimestres y años. Es decir, se van a crear cinco campos calculados:

  • Campo calculado "Diferencia en días":

DATEDIFF("day", TODAY(), [Date])

Campo calculado "Diferencia en días"
  • Campo calculado "Diferencia en semanas":

DATEDIFF("week", TODAY(), [Date])

  • Campo calculado "Diferencia en meses":

DATEDIFF("month", TODAY(), [Date])

  • Campo calculado "Diferencia en trimestres":

DATEDIFF("quarter", TODAY(), [Date])

  • Campo calculado "Diferencia en años":

DATEDIFF("year", TODAY(), [Date])

Ahora llevamos la tabla leída al estante de filas (y expandimos la jerarquía) y los campos calculados a columnas:

Función DATEDIFF: Diferencias

Considerando la fecha actual (21 de septiembre de 2019, tal y como se ha comentado) vemos que la diferencia en días es la que podría esperarse: la diferencia con respecto a hoy mismo es de cero días, con ayer es de -1, y con mañana 1.

La diferencia en semanas no es tan obvia: se devuelve el valor de 0 salvo que el primer y último día pertenezcan a semanas distintas (para lo que se tiene en cuenta el parámetro opcional primer_día_semana). Véase en la tabla anterior, por ejemplo, que el día 16 pertenece a la misma semana que el 21 (si consideramos que la semana comienza el lunes, valor por defecto), por lo que la diferencia es de 0 semanas:

Calendario de septiembre de 2019

Por el contrario, el día 15 pertenece a la semana anterior, por lo que la diferencia es de 1 (en valor absoluto).

Con los meses (y trimestres y años) pasa algo semejante: la diferencia es de 0 si nos encontramos en el mismo mes (o trimestre o año) y de 1 (en valor absoluto) si estamos hablando del mes anterior o posterior. Es decir, la diferencia -sea cual sea la unidad usada- tiene en cuenta los valores en dicha unidad que tomen las fechas fecha_comienzofecha_final, no el período de tiempo real entre ambas fechas. Esto significa que la diferencia en años entre las 23:59:59 del 31 de diciembre de 2018 y las 00:00:00 del 1 de enero de 2019 es de 1.

Podemos realizar una prueba semejante con horas. Para ello partimos de la siguiente tabla:

Fechas y horas

Vamos a comparar estas tres horas con una de ellas que, para hacer el código más sencillo, introducimos en un campo calculado:

Ahora = MAKEDATETIME(#2019-9-21#, #11:44:05#)

Campo calculado "Ahora"

Ahora ya podemos crear campos calculados que calculen la diferencia entre las fechas y horas de la tabla de datos con respecto al campo calculado Ahora:

  • Campo calculado "Diferencia en horas":

DATEDIFF("hour", [Ahora], [Time])

Campo calculado "Diferencia en horas"
  • Campo calculado "Diferencia en minutos":

DATEDIFF("minute", [Ahora], [Time])

  • Campo calculado "Diferencia en segundos":

DATEDIFF("second", [Ahora], [Time])

Si llevamos el campo con los datos al lienzo junto con los campos calculados, obtenemos el siguiente resultado:

Función DATEDIFF: Diferencias

Nuevamente comprobamos que la diferencia es de 1 (obviemos el signo aquí) cuando las fechas comparadas pertenecen a períodos diferentes consecutivos. Por ejemplo, la diferencia en horas entre las 11:44:05 (siempre del 21 de septiembre de 2019) y las 10:00:00 es de -1 (la hora es "11" para el primer caso y "10" para el segundo). Pero la diferencia en horas con las 9:59:59 (apenas un segundo antes) es de -2.

Debemos tener cuidado al llevar un campo calculado con la diferencia entre dos fechas al lienzo. Por ejemplo, considérese el siguiente campo calculado "Diferencia en días":

DATEDIFF(
"day",
MAKEDATE(2019, 9, 22),
MAKEDATE(2019, 9, 20)
)

Campo calculado con la diferencia de dos días

Se trata de dos fechas separadas por 2 días. Sin embargo, si llevamos este campo calculado al lienzo, obtenemos lo siguiente:

Resultado erróneo de la función DATEDIFF

Este extraño comportamiento de Tableau al calcular la diferencia entre ambas fechas se debe a la función de agregación SUMA que se aplica por defecto. Para obtener el resultado correcto deberemos sustituir esta operación por el valor mínimo o máximo, por ejemplo:

Resultado de la función DATEDIFF tras cambiar la función de agregación

 

Para probar el parámetro primer_día_semana partamos de un campo calculado semejante al anterior en el que se calcule la diferencia en semanas entre hoy día 21/9/2019 (sábado) y ayer 20/9/2019 (viernes):

Diferencia en semanas =

DATEDIFF(
"week",
MAKEDATE(2019, 9, 21),
MAKEDATE(2019, 9, 20)
)

Función DATEDIFF

Si llevamos este campo calculado al lienzo obtenemos el siguiente resultado:

Función DATEDIFF

Es decir, obtenemos 0 pues ambas fechas pertenecen a la misma semana (si consideramos que ésta empieza el lunes).

Sin embargo, si modificamos el campo calculado para que considere que el primer día de la semana es el sábado:

Diferencia en semanas =

DATEDIFF(
"week",
MAKEDATE(2019, 9, 21),
MAKEDATE(2019, 9, 20),
"saturday"
)

...el resultado obtenido es de -1 pues ahora ambas fechas pertenecen a semanas diferentes:

Función DATEDIFF

 

Categoría
Fecha y hora
Enviado por admin el Sáb, 21/09/2019 - 11:10