Las funciones de inteligencia de tiempo en DAX te permiten calcular el acumulado del año (YTD), el acumulado del mes (MTD) y la comparación año contra año (YoY) en Power BI con muy pocas líneas de código. El verdadero secreto no está en las fórmulas, sino en tener una buena tabla de fechas: una vez que la tienes, medidas como TOTALYTD y SAMEPERIODLASTYEAR funcionan casi solas. En esta guía verás la configuración y los patrones más útiles, con DAX listo para copiar.
Qué es la inteligencia de tiempo en DAX
La inteligencia de tiempo es un grupo de funciones DAX que mueven o amplían las fechas del contexto de filtro actual. Cuando un visual muestra marzo de 2026, una medida YTD reemplaza en silencio "marzo de 2026" por "del 1 de enero al 31 de marzo de 2026" antes de sumar. Una medida del año anterior lo reemplaza por "marzo de 2025". Escribes la medida una sola vez y se adapta a cualquier segmentación, fila o columna que elija el usuario.
En el fondo, todas estas funciones son atajos de CALCULATE, que es la función que modifica el contexto de filtro. Si CALCULATE todavía te confunde, lee primero nuestra guía de la función CALCULATE; el resto de este artículo te resultará mucho más claro.
Paso 1: crea y marca una tabla de fechas
Las funciones de inteligencia de tiempo esperan una tabla de fechas dedicada que cumpla con lo siguiente:
- Una fila por día, sin huecos, cubriendo años completos (del 1 de enero al 31 de diciembre) para cada año de tus datos.
- Una columna de tipo Fecha con valores únicos.
- Una relación de uno a varios desde esa columna hacia la columna de fecha de tu tabla de hechos (por ejemplo,
Sales[OrderDate]). - La tabla debe estar marcada como tabla de fechas: selecciónala y usa Herramientas de tabla > Marcar como tabla de fechas, eligiendo la columna de fecha.
Puedes crearla en Power Query o como tabla calculada en DAX. Esta es una versión sencilla en DAX:
Date =
ADDCOLUMNS (
CALENDAR ( DATE ( 2022, 1, 1 ), DATE ( 2026, 12, 31 ) ),
"Year", YEAR ( [Date] ),
"Month Number", MONTH ( [Date] ),
"Month", FORMAT ( [Date], "MMM" ),
"Year Month", FORMAT ( [Date], "YYYY-MM" ),
"Quarter", "Q" & QUARTER ( [Date] )
)
Ordena la columna Month por Month Number (Herramientas de columna > Ordenar por columna) para que los meses salgan en orden de calendario y no alfabético. Luego desactiva la opción de fecha y hora automática en la configuración de Power BI Desktop (Opciones > Carga de datos > Inteligencia de tiempo) para no cargar tablas de fechas ocultas por cada columna de fecha.
Sales[OrderDate], tus medidas de inteligencia de tiempo pueden dar resultados inesperados, porque el filtro no pasa por la tabla de fechas marcada.Esta tabla es el centro de un esquema estrella. Si tu modelo es una sola tabla plana, revisa cómo modelar tus datos en esquema estrella antes de continuar.
Paso 2: medidas YTD, QTD y MTD
Empieza con una medida base sencilla y construye sobre ella las versiones acumuladas:
Total Sales = SUM ( Sales[Amount] )
Sales YTD = TOTALYTD ( [Total Sales], 'Date'[Date] )
Sales QTD = TOTALQTD ( [Total Sales], 'Date'[Date] )
Sales MTD = TOTALMTD ( [Total Sales], 'Date'[Date] )
Coloca Year y Month en las filas de una matriz y agrega estas medidas. Sales MTD será igual a Total Sales a nivel de mes (porque ya está seleccionado el mes completo), pero se vuelve útil en visuales por día o en tarjetas filtradas a una fecha concreta. Sales YTD se va acumulando mes a mes y se reinicia cada enero.
El equivalente con CALCULATE y los años fiscales
TOTALYTD es una forma corta de escribir CALCULATE con DATESYTD. Conocer la forma larga te sirve cuando necesitas agregar filtros adicionales. Ambas aceptan una fecha de cierre opcional para años fiscales, escrita como texto "mes/día":
Sales YTD (CALCULATE) =
CALCULATE ( [Total Sales], DATESYTD ( 'Date'[Date] ) )
Sales Fiscal YTD =
TOTALYTD ( [Total Sales], 'Date'[Date], "6/30" )
Con "6/30", el acumulado se reinicia cada 1 de julio, que corresponde a un año fiscal que cierra el 30 de junio.
Paso 3: comparaciones año contra año
El análisis año contra año responde la pregunta que todo gerente hace: "¿Vamos mejor que el año pasado?". La función principal es SAMEPERIODLASTYEAR, que mueve las fechas actuales exactamente un año hacia atrás.
Sales PY =
CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) )
Sales YoY Change = [Total Sales] - [Sales PY]
Sales YoY % = DIVIDE ( [Total Sales] - [Sales PY], [Sales PY] )
Sales PY YTD =
CALCULATE ( [Sales YTD], SAMEPERIODLASTYEAR ( 'Date'[Date] ) )
Dale formato de porcentaje a Sales YoY %. DIVIDE es más seguro que el operador / porque devuelve un valor en blanco en lugar de un error cuando las ventas del año anterior son cero o están vacías, por ejemplo en el primer año de datos.
La última medida, Sales PY YTD, compara el acumulado de este año con el acumulado del año pasado para el mismo periodo. Normalmente es una comparación más justa que enfrentar el año pasado completo contra un año actual que va a la mitad.
Paso 4: periodos móviles y mes contra mes
No todas las preguntas respetan los límites del calendario. Los totales móviles de 12 meses suavizan la estacionalidad, y la vista mes contra mes detecta cambios de corto plazo:
Sales Rolling 12M =
CALCULATE (
[Total Sales],
DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -12, MONTH )
)
Sales Prev Month =
CALCULATE ( [Total Sales], DATEADD ( 'Date'[Date], -1, MONTH ) )
DATESINPERIOD parte de la última fecha visible y retrocede 12 meses. DATEADD es el primo flexible de SAMEPERIODLASTYEAR: cambia el intervalo a DAY, MONTH, QUARTER o YEAR y el número a cualquier valor positivo o negativo.
Referencia rápida: qué función usar
| Pregunta | Función | Medida típica |
|---|---|---|
| Ventas acumuladas en lo que va del año | TOTALYTD / DATESYTD | Sales YTD |
| Ventas acumuladas del trimestre o mes | TOTALQTD, TOTALMTD | Sales QTD, Sales MTD |
| Mismo periodo del año anterior | SAMEPERIODLASTYEAR | Sales PY |
| Mover cualquier intervalo | DATEADD | Sales Prev Month |
| Últimos N días o meses | DATESINPERIOD | Sales Rolling 12M |
| Año o mes anterior completo | PREVIOUSYEAR, PREVIOUSMONTH | Sales Full PY |
Errores comunes y cómo corregirlos
- El YTD muestra el mismo valor que el total mensual. Lo más probable es que estés filtrando por la columna de fecha de la tabla de hechos, o que la tabla de fechas no esté marcada ni relacionada. Revisa la relación en la vista de modelo.
- Los valores del año anterior salen en blanco. La tabla de fechas no cubre ese año, o tus datos simplemente empiezan después. Amplía el rango de
CALENDAR. - Los meses futuros muestran una línea YTD plana. Como la tabla de fechas llega hasta el 31 de diciembre, el YTD arrastra el último valor a meses que todavía no tienen ventas. Una solución común es envolver la medida:
IF ( ISBLANK ( [Total Sales] ), BLANK (), [Sales YTD] ). - Los totales parecen incorrectos. En el total general, el "periodo actual" es todo el rango visible, así que el total de un YTD equivale al YTD de la última fecha en contexto. Es el comportamiento esperado, no un error.
Microsoft sigue ampliando DAX, incluyendo opciones más nuevas basadas en calendarios personalizados, como los calendarios comerciales 4-4-5. Consulta la referencia oficial de DAX en Microsoft Learn para ver las funciones más recientes disponibles en tu versión de Power BI.
Próximos pasos
Crea hoy mismo una tabla de fechas en tu propio informe, márcala y agrega las cuatro medidas clave: Total Sales, Sales YTD, Sales PY y Sales YoY %. Ponlas en una matriz por año y mes y comprueba algunos números a mano. Cuando funcionen, agrega un gráfico de líneas con el total móvil de 12 meses. Si todavía eres nuevo con las medidas en general, empieza por nuestra guía básica de DAX y luego regresa aquí para sumar la inteligencia de tiempo.
Mira: lecciones en video


Preguntas frecuentes
¿Por qué mi medida YTD en DAX no se acumula?
Normalmente el visual usa la columna de fecha de la tabla de hechos en lugar de la tabla de fechas, o la tabla de fechas no está relacionada ni marcada. Usa columnas de 'Date' en tus visuales y confirma la relación en la vista de modelo.
¿Necesito una tabla de fechas para la inteligencia de tiempo en Power BI?
Sí. Funciones como TOTALYTD y SAMEPERIODLASTYEAR necesitan una tabla de fechas continua con una fila por día. Se recomienda mucho marcarla como tabla de fechas.
¿Qué diferencia hay entre SAMEPERIODLASTYEAR y DATEADD?
SAMEPERIODLASTYEAR siempre retrocede exactamente un año. DATEADD puede mover cualquier cantidad de días, meses, trimestres o años, hacia adelante o hacia atrás.
¿Cómo calculo un YTD de año fiscal en DAX?
Indica el cierre del año fiscal como último argumento, por ejemplo TOTALYTD([Total Sales], 'Date'[Date], "6/30") para un año que termina el 30 de junio.
Marca esta lección como completada para seguir tu progreso.