No, DATEADD no es lo mismo que PARALLELPERIOD

Time Intelligence facilita mucho la construcción de medidas que permitan hacer comparaciones paralelas de periodos.

Las funciones DAX más utilizadas para este propósito suelen ser DATEADD, su equivalente SAMEPERIODLASTYEAR, y PARALLELPERIOD y su equivalente PREVIOUSYEAR. Se pueden usar indistintamente según el caso.

Pero vamos a ver que no es lo mismo

Veamos la siguiente tabla, que muestra el importe de un periodo y 4 medidas DAX que hacen el cálculo del importe de mismo periodo del año anterior usando diferente fórmulas:

Y la siguiente tabla que muestra las fórmulas DAX de cada una de las medidas:

Importe N-1 DateAdd =CALCULATE(SUM(VentaDiariaHoteles[Importe]); DATEADD(Fechas[Date];-1;year))
Importe N-1 SamePeriodLast =CALCULATE(SUM(VentaDiariaHoteles[Importe]); SAMEPERIODLASTYEAR(Fechas[Date]))
Importe N-1 ParallelPeriod =CALCULATE(SUM(VentaDiariaHoteles[Importe]); PARALLELPERIOD(Fechas[Date];-1;year))
Importe N-1 Previousyear = CALCULATE(SUM(VentaDiariaHoteles[Importe]); PREVIOUSYEAR(Fechas[Date]))

La estructura de la fórmula es idéntica, pero el segundo parámetro, que es la parte “condicionante”, aparentemente tienen el mismo significado: Saca los valores del mismo periodo del año anterior.

SAMEPERIODLASTYEAR y DATEADD

Las dos primeras, SAMEPERIODLASTYEAR y DATEADD (con parámetro “-1 year“) son equivalentes. Y devuelven el mismo resultado. SAMEPERIODLASTYEAR  sólo sirve para año paralelo mientras que DATEADD permite agregar parámetros para calcular otros periodos paralelos: Meses, dias…

Los posibles valores del tercer parámetro son “year”, “quarter”, “month” y “day” (day está deliberadamente destacado). En el segundo parámetro especificamos de cuántos periodos atrás (<0) o en adelante (>0) hay que devolver valores. Mucho más flexible.

Hay que destacar que ambas respetan el periodo elegido como filtro para el periodo actual y extraen el mismo periodo, en este ejemplo, un año atrás. O sea, si has seleccionado del día 2/3/2018 al 15/5/2018, los valores del año anterior serán de 2/3/2017 al 15/5/2017. Y ahí está la principal diferencia con las 2 siguientes funciones.

PARALLELPERIOD y PREVIOUSYEAR

PARALLELPERIOD es similar a DATEADD. Pero la segunda permite especificar periodos paralelos hasta nivel día (“day“, ahora entiendes, no?). Mientras que la primera sólo admite “year”, “quarter”, “month”  como tercer parámetro. Por eso, cuando has seleccionado del día 2/3/2018 al 15/5/2018, PARALLELPERIOD devuelve en este caso el importe del año anterior completo. Lo mismo que PREVIOUSYEAR. Pero ojo, que esta función no admite más parámetros y sólo traerá el año inmediatamente anterior al del periodo seleccionado.

Si cambiamos el parámetro a “-12” “month”, o sea, 12 meses atrás:

Importe N-1 ParallelPeriod 12 Month =CALCULATE(SUM(VentaDiariaHoteles[Importe]); PARALLELPERIOD(Fechas[Date];-12;month))

El periodo paralelo será del 1/3/2017 al 31/5/2017, los meses completos.

En las siguientes imágenes se ve más clara la diferencia.

En este caso coinciden por que se selecciona enero completo:

Pero si seleccionamos mes incompleto vemos que cambia:

Conocer esta diferencia no permitirá construir las fórmulas DAX que requiramos con mayor acierto.

A diferencia de lo que puedas pensar tras lo leído, PREVIOUSMONTH, función en la línea de PREVIOUSYEAR, devolvería los valores del mes anterior al actual (No del año anterior). Si estás viendo días de Febrero 18, devolvería Enero 18 (completo!).

Espero haber resuelto dudas.

Si quieres ver en acción alguna de estás funciones puedes ver el siguiente artículo en este blog: Comparar periodos NO paralelos en Power BI.

Te puede interesar...

Un comentario en «No, DATEADD no es lo mismo que PARALLELPERIOD»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *