PL-300: cómo crear columnas de fecha inteligentes para análisis temporales
Te enseñaré cómo crear y usar columnas de fecha (tabla de calendario) en Power BI — una competencia frecuente en el dominio "Modelar los datos" del PL-300. Saber construir un calendario correcto es esencial para análisis temporales (periodo a periodo, YTD, comparaciones) y evita errores en los informes y en los cálculos DAX.
Qué necesitas saber
Una tabla de calendario (o dimensión de fecha) contiene una fila para cada día en un intervalo y columnas con atributos como Año, Trimestre, Mes, Día de la semana, además de flags como "Es fin de mes" o "Es fin de semana". En Power BI, permite usar funciones de inteligencia temporal en DAX (por ejemplo, TOTALYTD, SAMEPERIODLASTYEAR) y garantiza que las relaciones entre fechas y fact tables funcionen correctamente.
Ejemplo simple: una fact table de Ventas con la columna Venta[OrderDate]. Para calcular Sales YTD correctamente necesitas una tabla Date con una columna Date[Date] que incluya todas las fechas del intervalo relevante y, idealmente, un campo que indique el primer día del mes o del año.
Cómo funciona: crear una tabla de calendario con DAX
Hay varias formas de crear un calendario: en Power Query (M), como tabla física en una base de datos, o con DAX (tabla calculada). Aquí muestro un método DAX que es práctico para modelos en Power BI Desktop.
Calendar =
VAR MinDate = MINX(ALL('Sales'), 'Sales'[OrderDate])
VAR MaxDate = MAXX(ALL('Sales'), 'Sales'[OrderDate])
RETURN
ADDCOLUMNS(
CALENDAR(MinDate, MaxDate),
"Year", YEAR([Date]),
"Quarter", "Q" & FORMAT([Date], "Q"),
"MonthNum", MONTH([Date]),
"MonthName", FORMAT([Date], "MMMM"),
"YearMonth", FORMAT([Date], "YYYY-MM"),
"DayOfWeekNum", WEEKDAY([Date], 2),
"DayOfWeek", FORMAT([Date], "dddd"),
"IsWeekend", IF(WEEKDAY([Date],2) >= 6, TRUE(), FALSE())
)
Explicación rápida de las partes:
- CALENDAR(MinDate, MaxDate) genera todas las fechas entre el mínimo y máximo de las ventas.
- ADDCOLUMNS añade columnas útiles: Year, Quarter, MonthName, etc.
- WEEKDAY([Date], 2) con 2 hace lunes=1 ... domingo=7 — útil para ordenación.
En la práctica: vincular la tabla de calendario y usar medidas
Pasos prácticos a seguir en Power BI Desktop:
- Crear la tabla de calendario (ej.: tabla calculada con DAX anterior o en Power Query).
- Asegurar que la columna de fecha en la tabla Calendar es del tipo Date y sin horas.
- Crear una relación 1:* entre Calendar[Date] y Sales[OrderDate], con dirección de filtro adecuada (normalmente single direction de Calendar a Sales).
- Marcar la tabla como "Mark as Date table" (Modeling > Mark as date table) e indicar Calendar[Date]. Esto permite que las funciones de inteligencia temporal DAX funcionen correctamente.
- Usar medidas DAX de tiempo. Ejemplo: Sales YTD.
SalesAmount = SUM(Sales[Amount])
SalesAmount_YTD =
TOTALYTD(
[SalesAmount],
'Calendar'[Date]
)
SalesAmount_PY =
CALCULATE(
[SalesAmount],
SAMEPERIODLASTYEAR('Calendar'[Date])
)
Notas prácticas: marcar la tabla de fecha es crucial; sin esto, TOTALYTD y funciones similares pueden devolver resultados incorrectos. Ordena visualmente el mes por MonthNum si usas MonthName para evitar Enero, Febrero,... fuera de orden.
Errores comunes
- No marcar la tabla como "Date table" — provoca fallo de las funciones de inteligencia temporal.
- Fechas con hora en Sales[OrderDate] no coinciden con Calendar[Date] (tipo DateTime vs Date) — resolver con truncamiento o transformar a Date.
- Relaciones incorrectas (muchos-a-muchos o dirección de filtro invertida) — la relación debe ser 1 (Calendar) → * (Fact) para que las funciones temporales funcionen bien.
Cómo practicar
Practica este tema creando varios escenarios: intervalos con huecos, fact tables con múltiples columnas de fecha (OrderDate, ShipDate), y usando filtros de slicer por mes/año. Para preparación para el PL-300, utiliza el Practice Assessment oficial gratuito de Microsoft y la study guide oficial (ambos gratuitos) — estas son las formas apropiadas de evaluarte y verificar los conocimientos sin recurrir a materiales prohibidos.
En resumen
- Crea una tabla de calendario completa y márcala como "Date table" para habilitar funciones de inteligencia temporal en DAX.
- Asegura que la columna de fecha tiene solo fechas (sin hora) y que la relación es 1:*> entre Calendar y la tabla de hechos.
- Usa columnas adicionales (Year, MonthNum, DayOfWeek) para ordenar y agrupar correctamente en las visualizaciones.
- Practica con el Practice Assessment oficial y la study guide de Microsoft — ambos gratuitos — y prueba a calcular YTD, MTD y comparaciones año a año.