DAX en Power BI: Diferencias entre TOTALYTD y DATESYTD y cómo aplicar filtros correctamente

Written by:

Cuando trabajamos con Power BI y queremos calcular valores acumulados, las funciones TOTALYTD y DATESYTD en DAX juegan un papel clave. Ambas permiten obtener acumulados anuales, pero tienen diferencias importantes en su uso y en la forma en la que manejan los filtros.

En este artículo, basado en el vídeo que he publicado en YouTube, veremos en profundidad cómo funcionan estas funciones, cómo se diferencian y en qué casos es mejor utilizar DATESYTD en combinación con CALCULATE en lugar de TOTALYTD. Al final del artículo, también encontrarás los archivos descargables con los ejemplos utilizados.

🔗 Archivos descargables:
Puedes descargar los archivos utilizados en este vídeo desde aquí:
👉 Descargar archivos TOTALYTD y DATESYTD en Power BI


¿Qué es TOTALYTD en DAX?

La función TOTALYTD (Total Year-To-Date) se usa para calcular el acumulado anual de una medida específica dentro de un intervalo de tiempo, comenzando desde el inicio del año fiscal hasta la fecha actual.

Sintaxis de TOTALYTD

TOTALYTD(<expresión>, <columna de fechas>[, <filtro opcional>, <fin de año opcional>])
  • <expresión>: la medida que queremos calcular (por ejemplo, suma de ventas).
  • <columna de fechas>: una columna de tipo fecha de una tabla de calendario.
  • <filtro opcional>: un filtro adicional (por ejemplo, solo considerar ciertos productos).
  • <fin de año opcional>: fecha de finalización del año fiscal si no es el 31 de diciembre.

Ejemplo de TOTALYTD

Si queremos calcular el total acumulado de pedidos en un año, podríamos escribir:

Pedidos YTD = TOTALYTD(SUM(Pedidos[Cantidad]), Calendario[Fecha])

Esto devolverá la suma de pedidos acumulados desde el inicio del año hasta la fecha actual.


¿Qué es DATESYTD en DAX y por qué es una mejor opción?

La función DATESYTD devuelve un conjunto de fechas sin evaluar una expresión. Esto significa que por sí sola no calcula nada, sino que devuelve un rango de fechas dentro del año en curso. Para hacer cálculos, debemos usarla junto con CALCULATE.

Sintaxis de DATESYTD

DATESYTD(<columna de fechas>[, <fin de año opcional>])
  • <columna de fechas>: la columna de fechas sobre la que queremos calcular.
  • <fin de año opcional>: si el año fiscal no termina el 31 de diciembre.

Ejemplo de DATESYTD con CALCULATE

Pedidos YTD = CALCULATE(
SUM(Pedidos[Cantidad]),
DATESYTD(Calendario[Fecha])
)

Esta fórmula hace lo mismo que TOTALYTD, pero con una ventaja clave: nos permite agregar más filtros fácilmente.


Diferencias clave entre TOTALYTD y DATESYTD

FunciónEvalúa la expresiónPermite múltiples filtrosSe usa con CALCULATE
TOTALYTDNoNo es necesario
DATESYTDNoObligatorio

Como vemos, TOTALYTD evalúa directamente la expresión y solo permite un filtro, mientras que DATESYTD nos da más flexibilidad porque trabaja dentro de CALCULATE.


Ejemplo con filtros: calcular el acumulado de períodos cerrados

Imaginemos que queremos calcular el total acumulado de pedidos solo en los períodos cerrados de nuestra empresa. Para esto, creamos una columna en la tabla de calendario que indique si un período está cerrado o abierto.

Solución con TOTALYTD (Limitada)

Pedidos YTD Cerrados = TOTALYTD(
SUM(Pedidos[Cantidad]),
Calendario[Fecha],
Calendario[Estado] = "Cerrado"
)

Aquí solo podemos aplicar un filtro: Calendario[Estado] = "Cerrado". Si quisiéramos filtrar también por producto o cliente, TOTALYTD no lo permitiría.

Solución con DATESYTD + CALCULATE (Flexible)

Pedidos YTD Cerrados = CALCULATE(
SUM(Pedidos[Cantidad]),
DATESYTD(Calendario[Fecha]),
Calendario[Estado] = "Cerrado",
Pedidos[Producto] = "XYZ"
)

Gracias a CALCULATE, podemos incluir múltiples filtros sin problema.


Error común con TOTALYTD: el tercer parámetro malinterpretado

En el artículo de SQLBI se menciona un problema frecuente al usar TOTALYTD con el tercer parámetro (año fiscal).
Por ejemplo:

Pedidos YTD 2022 = TOTALYTD(
SUM(Pedidos[Cantidad]),
Calendario[Fecha],
2022
)

Aquí Power BI no interpreta «2022» como el año, sino como un valor numérico de fecha.
Este valor se convierte internamente en una fecha específica del año 1905, lo que genera errores en los cálculos.

Solución correcta:

Pedidos YTD 2022 = CALCULATE(
SUM(Pedidos[Cantidad]),
DATESYTD(Calendario[Fecha]),
YEAR(Calendario[Fecha]) = 2022
)

Esto asegura que realmente estamos filtrando por el año correcto.


Conclusión: ¿Cuál es la mejor opción?

Si bien TOTALYTD es útil y fácil de usar en cálculos simples, DATESYTD con CALCULATE es una mejor alternativa porque:

  • Nos permite aplicar múltiples filtros.
  • Tiene una sintaxis más intuitiva.
  • Evita errores de interpretación con los parámetros de TOTALYTD.

📂 Descarga los archivos con los ejemplos

Si quieres practicar con estas funciones en Power BI, aquí tienes los archivos descargables:
🔗 Descargar ejemplos de TOTALYTD y DATESYTD

Si quieres seguir aprendiendo sobre Power BI, no te pierdas este artículo sobre optimización.

Deja un comentario

Descubre más desde Blog de Alex Ayala

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo