Cómo crear una tabla calendario en Power BI con DAX
Una tabla calendario (date table) es la base de cualquier análisis temporal en Power BI: sin ella, las funciones de time intelligence — como comparar ventas año tras año o calcular acumulados — no funcionan de forma fiable. La buena noticia es que crear una tabla calendario con DAX lleva pocos minutos y luego sirve a todo el modelo. La construirás desde cero, la conectarás a tus datos y la marcarás correctamente como tabla de fechas.
Requisitos previos
- Power BI Desktop instalado (cualquier versión reciente sirve).
- Un modelo con, al menos, una tabla de hechos que tenga una columna de fecha — por ejemplo,
Vendas[Data]. - Nociones básicas de DAX ayudan, pero no son obligatorias: solo copiarás el código.
Paso 1: Crear la tabla con CALENDAR
En la pestaña Modeling, haz clic en New table. Usarás la función CALENDAR, que genera una fila por cada día entre dos fechas, dentro de ADDCOLUMNS, que añade columnas útiles como año, mes y trimestre. Pega el código siguiente y ajusta las fechas al intervalo de tus datos:
Calendario =
ADDCOLUMNS(
CALENDAR(DATE(2023,1,1), DATE(2026,12,31)),
"Ano", YEAR([Date]),
"NumeroMes", MONTH([Date]),
"Mes", FORMAT([Date], "mmmm"),
"Trimestre", "T" & ROUNDUP(MONTH([Date])/3, 0),
"AnoMes", FORMAT([Date], "yyyy-mm"),
"DiaSemana", FORMAT([Date], "dddd")
)
La columna [Date] la crea automáticamente CALENDAR; las demás derivan de ella. Cada columna tiene un propósito: Ano y Trimestre sirven para agrupar, AnoMes es ideal para ordenar series temporales, y DiaSemana ayuda a analizar patrones semanales. Si prefieres que el intervalo se ajuste solo a los datos, cambia CALENDAR(...) por CALENDARAUTO(), que lee las fechas mínima y máxima del modelo.
Paso 2: Ordenar el mes correctamente
De forma predeterminada, Power BI ordena la columna Mes alfabéticamente — abril aparece antes que enero, lo que desordena cualquier gráfico. Selecciona la columna Mes, ve a Column tools y usa Sort by column para ordenarla por la columna NumeroMes. A partir de ahí, los meses aparecen siempre en orden cronológico, de enero a diciembre.
Paso 3: Marcar como tabla de fechas
Este paso es esencial y muchos usuarios lo olvidan. Con la tabla seleccionada, ve a Table tools y haz clic en Mark as Date Table; elige la columna [Date] como columna de fechas. Así garantizas que las funciones de time intelligence, como TOTALYTD o SAMEPERIODLASTYEAR, se apoyen en un calendario continuo y correcto.
Una tabla de fechas debe ser continua, sin días faltantes entre la primera y la última fecha. La función CALENDAR lo garantiza automáticamente.
Paso 4: Crear la relación con tus datos
Abre la vista Model y arrastra el campo [Date] de la tabla Calendario hasta la columna de fecha de tu tabla de hechos — por ejemplo, Vendas[Data]. Obtienes una relación de uno a varios, con el calendario en el lado "uno". Este vínculo es lo que hace que los filtros de tiempo se propaguen a todos los objetos visuales del informe.
Verificar el resultado
Para confirmar que todo está bien, crea una medida sencilla y colócala en una tabla junto al campo Calendario[AnoMes]:
Vendas YTD = TOTALYTD(SUM(Vendas[Valor]), Calendario[Date])
Si los valores se acumulan a lo largo del año y se reinician en enero, tu tabla calendario funciona. Comprueba además dos detalles: que los meses aparezcan en orden cronológico y que la relación en la pestaña Model esté activa (representada por una línea sólida).
Conclusión
Con una tabla calendario bien construida y marcada como tabla de fechas, tu modelo queda listo para análisis temporales fiables y fáciles de mantener. El siguiente paso natural es explorar funciones como SAMEPERIODLASTYEAR y DATEADD para comparar periodos con pocas líneas de DAX. Y tú, ¿qué otra columna te resultaría útil en tu calendario — quizás una para marcar festivos o fines de semana?