Lección 8 de 16 · Nivel 2: Intermedio

Tabla de fechas e inteligencia de tiempo: YTD, año anterior y variaciones

  • ⏱ 9 min de lectura
  • ❓ 3 preguntas de repaso
  • ✍️ Ejercicio con solución
En esta lección
  1. Por qué necesitas una tabla de calendario
  2. Crear el calendario con DAX
  3. Las medidas de inteligencia de tiempo
  4. Promedio móvil y periodos personalizados
  5. El error de los periodos incompletos
  6. Resumen
Lo que lograrás en esta lección
  • Crear una tabla de calendario con DAX y marcarla como tabla de fechas.
  • Calcular el acumulado del año (YTD), el año anterior y la variación porcentual.
  • Comparar con el mes anterior y calcular promedios móviles.
  • Evitar los errores típicos al comparar periodos incompletos.

"¿Cuánto llevamos en el año?", "¿Cómo vamos frente al año pasado?", "¿Crecimos respecto al mes anterior?". Son las preguntas que se hacen en toda reunión de resultados. DAX tiene funciones de inteligencia de tiempo que las responden con una línea, pero necesitan una pieza previa: una buena tabla de fechas. Esta lección cierra el nivel intermedio.

Por qué necesitas una tabla de calendario

Las funciones de inteligencia de tiempo necesitan una tabla con todas las fechas de un periodo, sin huecos (aunque un día no haya ventas), relacionada con las fechas de tus tablas de hechos. Además, una tabla de calendario propia te permite:

  • Filtrar Ventas y Metas con la misma segmentación de fecha (ambas se relacionan con Calendario).
  • Tener columnas útiles: año, trimestre, mes, nombre del mes, semana, año fiscal, día laborable.
  • Ordenar los meses correctamente (enero, febrero… y no alfabéticamente).
Desactiva la fecha automática

Power BI crea por defecto una tabla de fechas oculta para cada columna de fecha. Cuando tienes tu propio calendario, desactívala en Archivo → Opciones y configuración → Opciones → Carga de datos → Fecha y hora automáticas (en el archivo actual): reduce el tamaño del modelo y evita confusiones.

Crear el calendario con DAX

En Modelado → Nueva tabla escribe:

Calendario =
ADDCOLUMNS (
    CALENDAR ( DATE ( 2025, 1, 1 ), DATE ( 2026, 12, 31 ) ),
    "Año", YEAR ( [Date] ),
    "Mes Num", MONTH ( [Date] ),
    "Mes", FORMAT ( [Date], "mmm" ),
    "Año-Mes", FORMAT ( [Date], "yyyy-mm" ),
    "Trimestre", "T" & QUARTER ( [Date] ),
    "Día Semana Num", WEEKDAY ( [Date], 2 ),
    "Es Fin de Semana", WEEKDAY ( [Date], 2 ) >= 6
)
  • CALENDAR genera una tabla con una columna llamada Date con todas las fechas entre las dos indicadas. Elige un rango que cubra todos tus datos (puedes calcularlo con MIN y MAX de Ventas[Fecha], o usar CALENDARAUTO()).
  • ADDCOLUMNS añade columnas calculadas a esa tabla.
  • WEEKDAY([Date], 2) devuelve 1 para el lunes y 7 para el domingo.
  • El idioma de los nombres de mes que devuelve FORMAT depende de la configuración regional del modelo.

También puedes crear el calendario en Power Query o importarlo de Excel. Lo importante es que tenga todas las fechas y las columnas que necesitas.

Tres pasos obligatorios

  1. Marcar como tabla de fechas: selecciona Calendario, Herramientas de tabla → Marcar como tabla de fechas y elige la columna Date.
  2. Relacionar Calendario[Date] con Ventas[Fecha] (1:*), y con la fecha de cualquier otra tabla de hechos (Metas, Pagos…).
  3. Ordenar el mes por su número: selecciona la columna Mes, Herramientas de columnas → Ordenar por columna → Mes Num. Si no, los meses salen en orden alfabético.

A partir de ahora, usa siempre las columnas de Calendario (Año, Mes) en los gráficos y segmentaciones, no la fecha de la tabla de hechos.

1. En tu gráfico los meses aparecen como "abr, ago, dic, ene…". ¿Qué haces?

  • Renombrar los meses con números delante.
  • Ordenar la columna Mes por la columna Mes Num.
  • Cambiar el tipo de gráfico.

"Ordenar por columna" indica a Power BI que use el número del mes para ordenar el nombre.

Las medidas de inteligencia de tiempo

Ventas YTD =
TOTALYTD ( [Ventas Totales], Calendario[Date] )

Ventas Año Anterior =
CALCULATE ( [Ventas Totales], SAMEPERIODLASTYEAR ( Calendario[Date] ) )

Var % Año Anterior =
DIVIDE ( [Ventas Totales] - [Ventas Año Anterior], [Ventas Año Anterior] )

Ventas YTD Año Anterior =
CALCULATE ( [Ventas YTD], SAMEPERIODLASTYEAR ( Calendario[Date] ) )

Var % YTD =
DIVIDE ( [Ventas YTD] - [Ventas YTD Año Anterior], [Ventas YTD Año Anterior] )

Ventas Mes Anterior =
CALCULATE ( [Ventas Totales], DATEADD ( Calendario[Date], -1, MONTH ) )

Todas usan CALCULATE (lección 7) para cambiar el contexto de fechas: SAMEPERIODLASTYEAR desplaza las fechas filtradas un año hacia atrás y DATEADD las desplaza el número de periodos que indiques.

El resultado, con números

Ventas de Distribuidora Andina (en miles de soles), con 2026 en las filas:

MesVentasVentas YTDAño anteriorVar % AAYTD año anteriorVar % YTD
ene11211210012,0%10012,0%
feb1182301107,3%2109,5%
mar13536512012,5%33010,6%
abr1264911159,6%44510,3%

Lectura: abril creció un 9,6% frente a abril del año anterior, y en lo que va del año se acumula un crecimiento del 10,3%. Frente al mes anterior, abril cayó un 6,7% (126 frente a 135), pero eso puede ser estacional: por eso la comparación con el mismo mes del año anterior suele ser más justa.

2. Con la tabla anterior, ¿cuál es la variación de marzo frente a febrero de 2026?

  • 12,5%
  • 14,4%
  • 10,6%

(135 − 118) ÷ 118 = 0,144 = 14,4%. El 12,5% es la variación frente a marzo del año anterior.

Promedio móvil y periodos personalizados

Un promedio móvil de 3 meses suaviza los altibajos y muestra la tendencia:

Ventas Últimos 3 Meses =
CALCULATE (
    [Ventas Totales],
    DATESINPERIOD ( Calendario[Date], MAX ( Calendario[Date] ), -3, MONTH )
)

Promedio Móvil 3M = DIVIDE ( [Ventas Últimos 3 Meses], 3 )

En abril de 2026: (118 + 135 + 126) ÷ 3 = 126,3. DATESINPERIOD toma las fechas que van desde la última fecha del contexto hacia atrás el número de periodos indicado.

Año fiscal

Si tu año contable termina en otra fecha (por ejemplo, el 30 de junio), indícalo en TOTALYTD: TOTALYTD([Ventas Totales], Calendario[Date], "6/30"). Añade también una columna "Año Fiscal" al calendario.

El error de los periodos incompletos

No compares un periodo a medias con uno completo

El 15 de mayo, "Ventas YTD" de 2026 incluye hasta el 15 de mayo, pero si filtras el año 2026 completo, "Ventas YTD Año Anterior" usa como referencia el 31 de diciembre y suma todo 2025. Resultado: una caída falsa. Una solución habitual es marcar en el calendario qué fechas tienen datos y usar solo esas en la comparación.

Añade una columna calculada a la tabla Calendario:

Fecha con Ventas = Calendario[Date] <= MAX ( Ventas[Fecha] )

Y crea la medida comparable:

Ventas YTD AA Comparable =
CALCULATE (
    [Ventas YTD],
    CALCULATETABLE (
        SAMEPERIODLASTYEAR ( Calendario[Date] ),
        Calendario[Fecha con Ventas] = TRUE ()
    )
)

CALCULATETABLE se queda con las fechas del contexto que tienen datos (por ejemplo, del 1 de enero al 15 de mayo de 2026), SAMEPERIODLASTYEAR las traslada a 2025 y el acumulado se calcula solo hasta el 15 de mayo de 2025. Así comparas el mismo tramo de ambos años.

3. ¿Qué requisito es imprescindible para que TOTALYTD y SAMEPERIODLASTYEAR funcionen bien?

  • Que la tabla de ventas tenga una fila por día.
  • Una tabla de fechas continua, marcada como tabla de fechas y relacionada con los hechos.
  • Que las fechas estén como texto.

Las funciones de inteligencia de tiempo trabajan sobre una columna de fechas sin huecos que cubra todo el periodo.

Ejercicio práctico: el informe de comparación

  1. Crea la tabla Calendario, márcala como tabla de fechas, relaciónala y ordena el mes por su número.
  2. Crea las medidas Ventas YTD, Ventas Año Anterior, Var % Año Anterior, Ventas Mes Anterior y Promedio Móvil 3M.
  3. Construye una matriz con Año-Mes en filas y estas medidas en valores, con formato condicional en las variaciones (verde si es positiva, rojo si es negativa).
  4. Crea un gráfico combinado: ventas del año en columnas y año anterior en línea.
Ver pistas
  • Si Ventas Año Anterior sale en blanco, revisa que la relación use Calendario[Date] y que el calendario incluya el año anterior completo.
  • Para el formato condicional de la variación: en la matriz, clic en la medida → Formato condicional → Color de fuente → Reglas: si el valor es ≥ 0, verde; si es < 0, rojo. Añade también un icono para no depender solo del color.
  • Si los totales de la matriz te parecen raros en Var %, recuerda que se recalculan con los totales, no promediando las filas (lección 6).

Resumen

  • Crea una tabla de calendario continua, márcala como tabla de fechas y relaciónala con todas las tablas de hechos.
  • Ordena el nombre del mes por su número y usa las columnas del calendario en los objetos visuales.
  • TOTALYTD, SAMEPERIODLASTYEAR, DATEADD y DATESINPERIOD resuelven acumulados, comparaciones y promedios móviles.
  • Calcula las variaciones con DIVIDE y cuida las comparaciones de periodos incompletos.

¡Completaste el nivel intermedio! En la próxima lección empieza el nivel avanzado: informes interactivos con obtención de detalles, información sobre herramientas, marcadores y parámetros de campo.

🎓 Guarda tu avance y obtén tu certificado gratis

Crea tu cuenta en 30 segundos, marca tus lecciones y descarga el certificado al terminar.

Inscribirme gratis