Usar 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. Puede escribir muchas de estas fórmulas inteligentes usando una función CALCULATE que modifique los filtros de fecha, pero que cree más trabajo.

Nota

Muchas funciones de inteligencia de tiempo de DAX funcionan con periodos de fecha estándar, como años, trimestres y meses. Si tiene periodos de tiempo irregulares, como meses financieros que no coinciden con el calendario, o si necesita trabajar con semanas o períodos de tiempo más cortos, las funciones DAX integradas no le ayudarán. En estos casos, utilice la función CALCULATE con filtros de tiempo o fecha personalizados.

Requisito de tabla de fechas

Para trabajar con las funciones de inteligencia de tiempo de DAX, debe cumplir con el requisito previo del modelo: tener al menos una tabla de fechas. Una tabla de fechas es una tabla que está marcada como tabla de fechas. Dicha tabla debe tener una columna de tipo de datos Fecha (o fecha/hora), conocida como columna de fecha. La columna de fecha debe cumplir las siguientes características:

  • Contener valores únicos.
  • Abarcar años completos.
  • No contener valores BLANK.
  • No pueden faltar fechas.

Para obtener más información, consulte Crear tablas de fecha 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 del año hasta la fecha en el contexto de filtro actual. Este grupo también incluye las funciones DATESMTD y DATESQTD para mes hasta la fecha y trimestre hasta la fecha. Puede pasar estas funciones como filtros a la función CALCULATE.
  • TOTALYTD: evalúa una expresión para el año hasta la fecha en el contexto de filtro actual. También se incluyen las funciones DAX trimestre hasta la fecha y mes hasta la fecha equivalentes de TOTALQTD y TOTALMTD.
  • DATESBETWEEN: devuelve una tabla que contiene una columna de fechas que comienza con una fecha de inicio determinada y continúa hasta una fecha de finalización determinada.
  • DATESINPERIOD: devuelve una tabla que contiene una columna de fechas que comienza con una fecha de inicio determinada y continúa para el número especificado de intervalos.

Nota

Aunque la función TOTALYTD es fácil de usar, estará limitado a pasar una expresión de filtro. Si necesita aplicar varias expresiones de filtro, use la función CALCULATE y luego, pase, la función DATESYTD como una de las expresiones de filtro.

En el siguiente ejemplo, creará su primer cálculo de inteligencia de tiempo, que utilizará 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 en todas las funciones de inteligencia de tiempo, una referencia a la columna de fecha de una tabla de fechas marcada. También 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, añada la siguiente definición de medida a la tabla Sales, que calcula los ingresos del año hasta la fecha. Dé formato a la medida como moneda con dos números decimales.

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

El valor para la fecha de fin de año de "6-30" representa el 30 de junio.

En la página 1 del informe, añada la medida Revenue YTD al objeto visual de matriz. Como puede ver, genera un resumen de los importes de los ingresos desde el comienzo del año hasta el mes filtrado.

Captura de pantalla de un objeto visual de matriz, con agrupación por Year y Month en las filas y con resúmenes de Revenue y Revenue YTD; los valores de YTD se han resaltado

Comparaciones a lo largo del tiempo

Otro grupo de las funciones de inteligencia de tiempo de DAX está relacionado con los cambios en los periodos de tiempo.

  • DATEADD: devuelve una tabla que contiene una columna de fechas, desplazadas hacia delante o hacia atrás en el tiempo por el número especificado de intervalos desde las fechas en el contexto de filtro actual.
  • PARALLELPERIOD: devuelve una tabla que contiene una columna de fechas que representa un período paralelo a las fechas de la columna de fechas especificadas, en el contexto de filtro actual, con las fechas desplazadas varios intervalos hacia delante o hacia atrás en el tiempo.
  • SAMEPERIODLASTYEAR: devuelve una tabla que contiene una columna de fechas desplazadas un año hacia atrás desde las fechas en la columna de fechas especificada, en el contexto de filtro actual.
  • Hay muchas funciones auxiliares de DAX para ir hacia atrás o hacia delante en periodos de tiempo específicos, y todas devuelven una tabla de fechas. Estas funciones auxiliares son NEXTDAY, NEXTMONTH, NEXTQUARTER, NEXTYEAR, PREVIOUSDAY, PREVIOUSMONTH, PREVIOUSQUARTER y PREVIOUSYEAR.

Ahora, añadirá una medida a la tabla Sales para calcular los ingresos del año anterior mediante 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

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

Captura de pantalla de un objeto visual de matriz con agrupación por Year y Month en las filas y con resúmenes de Revenue, Revenue YTD y Revenue PY; los valores mensuales de Revenue PY para el ejercicio fiscal 2019 son iguales a los valores mensuales de Revenue para el ejercicio fiscal 2018

Luego, modificará la medida cambiándole el nombre a Revenue YoY % y actualizando la cláusula RETURN para calcular el índice del cambio. Cambie el formato a un porcentaje con dos números decimales.

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

Como puede ver, la medida Revenue YoY % genera un factor de índice de cambio con respecto a los ingresos mensuales del año anterior. Por ejemplo, julio de 2018 representa un aumento del 106,53 % con respecto a los ingresos mensuales del año anterior, mientras que noviembre de 2018 representa una disminución del 24,22 % con respecto a los ingresos mensuales del año anterior.

Captura de pantalla de un objeto visual de matriz con agrupación por Year y Month en las filas y con resúmenes de Revenue, Revenue YTD y Revenue YoY %; los valores mensuales de Revenue YoY % para el ejercicio fiscal 2019 tienen el formato de porcentaje

Nota

La medida Revenue YoY % demuestra un buen uso de las variables 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 (devolviendo 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. La cláusula RETURN usa el valor de la variable dos veces, tras haberla almacenado una vez en una variable.