Power BI

Inteligencia de tiempo en DAX: YTD, MTD y año contra año

Aprende inteligencia de tiempo en DAX: crea una tabla de fechas y escribe medidas YTD, MTD, año contra año y móviles de 12 meses con ejemplos reales.

Por Equipo editorial de DashCore HubActualizado 7 min de lectura

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:

  1. 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.
  2. Una columna de tipo Fecha con valores únicos.
  3. Una relación de uno a varios desde esa columna hacia la columna de fecha de tu tabla de hechos (por ejemplo, Sales[OrderDate]).
  4. 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.

Consejo: Usa siempre las columnas de la tabla Date en tus visuales y segmentaciones, nunca la columna de fecha de la tabla de hechos. Si filtras por 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

PreguntaFunciónMedida típica
Ventas acumuladas en lo que va del añoTOTALYTD / DATESYTDSales YTD
Ventas acumuladas del trimestre o mesTOTALQTD, TOTALMTDSales QTD, Sales MTD
Mismo periodo del año anteriorSAMEPERIODLASTYEARSales PY
Mover cualquier intervaloDATEADDSales Prev Month
Últimos N días o mesesDATESINPERIODSales Rolling 12M
Año o mes anterior completoPREVIOUSYEAR, PREVIOUSMONTHSales Full PY
Atajo con IA: Los asistentes de IA escriben bastante bien medidas de inteligencia de tiempo si les das los nombres exactos de tus tablas y columnas. Prueba un prompt como: "En Power BI tengo una tabla de hechos Sales con las columnas OrderDate y Amount, y una tabla de fechas marcada 'Date'[Date]. Mi año fiscal cierra el 30 de junio. Escribe medidas DAX para el YTD fiscal, el YTD fiscal del año anterior y el crecimiento YoY % usando DIVIDE, y explica cada una en una oración." Antes de confiar en el resultado, compáralo con un cálculo manual de un mes.

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

Funciones DAX de Inteligencia de Tiempo en Power BI | Domina el Análisis de Fechaspor KnowHow Academy Spanish · Ver en YouTube ↗
DAX for Power BI - MTD/YTD vs Previous Yearspor Parker Stevens - BI Elite · Ver en YouTube ↗Video en inglés — activa los subtítulos traducidos en YouTube si los necesitas.

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.

¿Aprendes con la Academia?
Marca esta lección como completada para seguir tu progreso.
Hacer el quiz