Uso de las funciones de inteligencia de tiempo de DAX

Completado

DAX incluye varias funciones de inteligencia de tiempo para simplificar la tarea de modificar el contexto de filtro de fecha. Para escribir muchas de estas fórmulas de inteligencia, podría usar una función CALCULATE que modifica los filtros de fecha, pero eso crearía más trabajo.

Nota

Muchas de las funciones de inteligencia de tiempo de DAX están relacionadas con períodos de fechas estándar, específicamente años, trimestres y meses. Si tiene períodos de tiempo irregulares (por ejemplo, meses financieros que empiezan a mediados del mes natural) o necesita trabajar con semanas o períodos de tiempo (horas, minutos, etc.), las funciones de inteligencia de tiempo de DAX no serán útiles. En su lugar, deberá usar la función CALCULATE y pasar filtros de hora o fecha creados manualmente.

Requisito de tabla de fechas

Para trabajar con las funciones de inteligencia de tiempo de DAX, debe cumplir el requisito previo de modelo de tener al menos una tabla de fechas en el modelo. Una tabla de fechas es una tabla que cumple los requisitos siguientes:

  • Debe tener una columna de tipo de datos Fecha (o fecha y hora), conocida como la columna de fecha.
  • La columna de fecha debe contener valores únicos.
  • La columna de fecha no debe contener ESPACIOS EN BLANCO.
  • En la columna de fecha no debe faltar ninguna fecha.
  • La columna de fecha debe abarcar años completos. Un año no es necesariamente un año natural (de enero a diciembre).
  • La columna de fecha se debe indicar como tabla de fecha.

Para más información, consulte Creación de tablas de fechas en Power BI Desktop.

Resúmenes a lo largo del tiempo

Un grupo de las funciones de inteligencia de tiempo de DAX está relacionado con los resúmenes a lo largo del tiempo:

  • DATESYTD: devuelve una tabla de una sola columna que contiene las fechas para anual hasta la fecha (YTD) en el contexto de filtro actual. En este grupo también se incluyen las funciones DATESMTD y DATESQTD de DAX para mes hasta la fecha (MTD) y trimestre hasta la fecha (QTD). Puede pasar estas funciones como filtros en la función CALCULATE de DAX.
  • TOTALYTD: evalúa una expresión para YTD en el contexto de filtro actual. También se incluyen las funciones QTD y MTD de DAX de TOTALQTD y TOTALMTD.
  • DATESBETWEEN: devuelve una tabla que contiene una columna de fechas que empieza con una fecha de inicio determinada y sigue hasta una fecha de finalización concreta.
  • DATESINPERIOD: devuelve una tabla que contiene una columna de fechas que comienza con una fecha de inicio determinada y continúa con un número de intervalos especificado.

Nota

Si bien la función TOTALYTD es sencilla de usar, está limitado a pasar una expresión de filtro. Si necesita aplicar varias expresiones de filtro, use la función CALCULATE y pase la función DATESYTD como una de las expresiones de filtro.

En el ejemplo siguiente, creará el primer cálculo de inteligencia de tiempo que usará la función TOTALYTD. La sintaxis es la siguiente:

TOTALYTD(<expression>, <dates>, [, <filter>][, <year_end_date>])

La función requiere una expresión y, como es común a todas las funciones de inteligencia de tiempo, una referencia a la columna de fecha de una tabla de fechas marcada. De manera opcional, se puede pasar una expresión de filtro única o la fecha de finalización del año (solo es necesario cuando el año no finaliza el 31 de diciembre).

Descargue y abra el archivo Adventure Works DW 2020 M07.pbix. Luego, agregue la definición de medida siguiente a la tabla Sales que calcula los ingresos YTD. Dé formato a la medida como moneda con dos números decimales.

Revenue YTD =
TOTALYTD([Revenue], 'Date'[Date], "6-30")

El valor de fecha de finalización del año de "6-30" se refiere al 30 de junio.

En la Página 1 del informe, agregue la medida Revenue YTD (Ingresos anuales hasta la fecha) al objeto visual de matriz. Observe que genera un resumen de los importes de los ingresos desde el comienzo del año hasta el mes filtrado.

Una imagen muestra un objeto visual de matriz con agrupación en Year y Month en las filas y los resúmenes de Revenue y Revenue YTD. Los valores de YTD aparecen resaltados.

Comparaciones a lo largo del tiempo

Otro grupo de las funciones de inteligencia de tiempo de DAX se relaciona con el desplazamiento de períodos de tiempo:

  • DATEADD: devuelve una tabla que contiene una columna de fechas, desplazada cada una de ellas hacia delante o hacia atrás en el tiempo de acuerdo con el número especificado de intervalos de fechas en el contexto de filtro actual.
  • PARALLELPERIOD: devuelve una tabla que contiene una columna de fechas que representa un período que es paralelo a las fechas de la columna de fechas especificada, en el contexto de filtro actual, con las fechas desplazadas varios intervalos hacia adelante o hacia atrás en el tiempo.
  • SAMEPERIODLASTYEAR: devuelve una tabla que contiene una columna de fechas que se desplaza un año atrás con respecto a las fechas de la columna de fechas especificada en el contexto de filtro actual.
  • Muchas funciones auxiliares de DAX para ir hacia atrás o hacia delante en períodos de tiempo específicos, todas las cuales devuelven una tabla de fechas. Estas funciones auxiliares incluyen NEXTDAY, NEXTMONTH, NEXTQUARTER, NEXTYEAR y PREVIOUSDAY, PREVIOUSMONTH, PREVIOUSQUARTER y PREVIOUSYEAR.

Ahora, agregará una medida a la tabla Sales que calcula los ingresos correspondientes al año anterior mediante el uso de la función SAMEPERIODLASTYEAR. Dé formato a la medida como moneda con dos números decimales.

Revenue PY =
VAR RevenuePriorYear = CALCULATE([Revenue], SAMEPERIODLASTYEAR('Date'[Date]))
RETURN
    RevenuePriorYear

Agregue la medida Revenue PY (Ingresos del año anterior) al objeto visual de matriz. Tenga en cuenta que genera resultados similares a los importes de ingresos del año anterior.

Una imagen muestra un objeto visual de matriz con agrupación en Year y Month en las filas y los resúmenes de Revenue, Revenue YTD y Revenue PY. Los valores mensuales de Revenue PY para FY2019 son equivalentes a los valores mensuales de Revenue para FY2018.

A continuación, para modificar la medida, cámbiele el nombre a Revenue YoY % (% de ingresos del año anterior) y, luego, actualice la cláusula RETURN para calcular la relación de cambio. Asegúrese de cambiar el formato a un porcentaje con dos números decimales.

Revenue YoY % =
VAR RevenuePriorYear = CALCULATE([Revenue], SAMEPERIODLASTYEAR('Date'[Date]))
RETURN
    DIVIDE(
        [Revenue] - RevenuePriorYear,
        RevenuePriorYear
    )

Observe que la medida Revenue YoY % genera un factor de relación de cambio sobre los ingresos mensuales del año anterior. Por ejemplo, julio de 2018 representa un aumento del 106,53 por ciento con respecto a los ingresos mensuales del año anterior, mientras que noviembre de 2018 representa una disminución del 24,22 por ciento con respecto a los ingresos mensuales del año anterior.

Una imagen muestra un objeto visual de matriz con agrupación en Year y Month en las filas y los resúmenes de Revenue, Revenue YTD, Revenue PY y Revenue YoY %. Los valores mensuales de Revenue YoY % para FY2019 son valores que tiene formato de porcentajes.

Nota

La medida Revenue YoY % muestra un buen uso de las variables de DAX. La medida mejora la legibilidad de la fórmula y le permite hacer una prueba unitaria de parte de la lógica de la medida (al devolver el valor de la variable RevenuePriorYear). Además, la medida es una fórmula óptima porque no necesita recuperar dos veces el valor de los ingresos del año anterior. Como ya se almacenó una vez en una variable, la cláusula RETURN usa dos veces el valor de la variable.