La función DATEADD devuelve una tabla conteniendo una columna de fechas que coinciden con las implicadas en el contexto de filtro actual desplazadas hacia adelante o hacia atrás un número de intervalos determinado.
DATEADD(
dates,
number_of_intervals,
interval
)
- dates: Columna conteniendo fechas.
- number_of_intervals: Número de intervalos a desplazar hacia adelante o hacia atrás en el tiempo el período implicado en el contexto actual.
- interval: Tipo de intervalo.
La función DATEADD devuelve una tabla.
El argumento dates puede ser una referencia a una columna conteniendo fechas, una expresión que devuelva una tabla con una única columna conteniendo fechas o una expresión booleana que defina una tabla con una única columna conteniendo fechas.
Si el argumento number_of_intervals es un número positivo, se considerará el intervalo indicado por el último argumento, interval, hacia adelante en el tiempo. Si es negativo, se considerará hacia atrás en el tiempo.
Los valores posibles para el argumento interval son: DAY, MONTH, QUARTER o YEAR, y deberán escribirse en mayúsculas y sin comillas.
El resultado devuelto por la función incluirá solo fechas presentes en la columna dates.
Si el argumento number_of_intervals no es un número entero, se redondea al entero más próximo. De esta forma, la expresión
DATEADD(DimDate[Datekey], -1.6, MONTH)
es equivalente a
DATEADD(DimDate[Datekey], -2, MONTH)
Si un año es bisiesto y, por lo tanto, su mes de febrero tiene 29 días, el mes correspondiente al año anterior o al siguiente solo tendrá 28 días (pues dicho año no será bisiesto). Algo semejante ocurre con un mes respecto del mes anterior o del siguiente: el número de días nunca es el mismo, aunque la función devuelve correctamente el mes entero.
Es de destacar que la función DATEADD puede mostrar un comportamiento especial cuando se trabaja con semanas: nos encontraremos cómo ni las semanas son todas de 7 días, ni a un período con un cierto número de días en el contexto inicial le corresponde un período con el mismo número de días una vez aplicada la función, ni considera los mismos días como parte de la misma semana antes y después de aplicar la función (así, el día 7 de enero de un año puede ser considerado parte de la semana 1 o parte de la semana 2 si se aplica la función DATEADD para añadir o restar un año al contexto).
La función DATEADD exige que el período de tiempo a considerar sea un conjunto continuo de días. Esto supone que en ciertos casos nos encontremos con errores inesperados: Un escenario en el que ocurre esto es cuando llevamos los años a las columnas de una matriz y los meses a las filas. En estas circunstancias, los subtotales también suponen el cálculo de la expresión, y los subtotales de filas estarían intentando aplicar la expresión al conjunto de meses de enero, al conjunto de meses de febrero, etc., períodos que no son continuos. La solución es, sencillamente, ocultar los subtotales de filas, cosa que deberá hacerse antes de agregar la expresión conteniendo la función DATEADD.
Si, dada una tabla con ventas, definimos la medida:
Ventas = SUM(FactSales[SalesAmount])
...definiendo el total de ventas, y la medida
Ventas mes anterior = CALCULATE(
[Ventas],
DATEADD(DimDate[Datekey], -1, MONTH)
)
...definiendo las ventas realizadas un mes antes, y llevamos ambas medidas a la cabecera de columnas en una matriz con los meses en filas, el resultado es el siguiente:
Puede observarse cómo la medida "Ventas mes anterior" devuelve, tal y como se espera, las ventas correspondientes al mes anterior al implicado en el contexto.