(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

DP-600: implementar tablas de tiempo (date tables) eficientes

João Barros 12 de October de 2026 4 min de lectura

Voy a explicar cómo implementar una tabla de tiempo (date table) eficiente en un modelo semántico para Power BI/Fabric — una competencia habitual en el DP-600. Las tablas de tiempo bien diseñadas son críticas para análisis temporales, rendimiento de medidas y funcionalidades como time intelligence.

Lo que necesitas saber

Una tabla de tiempo (date table) es una tabla dedicada que contiene una fila por día (u otra granularidad) y columnas con atributos temporales: año, trimestre, mes, día de la semana, indicadores de fin de semana, trimestres fiscales, periodos móviles de 12 meses, etc. En el contexto del DP-600 es importante porque:

  • Permite usar funciones de time intelligence correctamente (por ejemplo DAX CALCULATE con DATEADD, SAMEPERIODLASTYEAR).
  • Mejora la claridad del modelo y el rendimiento cuando está bien indexada y enlazada por claves del tipo date.
  • Soporta filtros relativos, agrupaciones y jerarquías temporales que los informes requieren.

Ejemplo simple: una tabla Date con columnas DateKey (YYYYMMDD int), Date (date), Year, MonthNumber, MonthName, Quarter, IsWeekend, FiscalMonth, FiscalYear, YearMonth (YYYY-MM) y una clave primaria en la columna Date.

En la práctica: pasos para crear e integrar una date table

Paso 1 — Elegir granularidad y alcance

Decide si la granularidad será diaria (más común) u otra. Define el intervalo de fechas en función de los datos: por ejemplo, desde la primera Date en las fact tables hasta la fecha actual + 1 año para planificación. Evita crear intervalos excesivamente amplios (años innecesarios) para no inflar el modelo.

Paso 2 — Generar la tabla (ejemplo en Power Query / M)

// Exemplo M para criar uma date table diária
let
    StartDate = #date(2018,1,1),
    EndDate = Date.AddYears(Date.From(DateTimeZone.FixedUtcNow()), 1),
    DayCount = Duration.Days(EndDate - StartDate) + 1,
    Source = List.Dates(StartDate, DayCount, #duration(1,0,0,0)),
    TableFromList = Table.FromList(Source, Splitter.SplitByNothing(), {"Date"}),
    ChangedType = Table.TransformColumnTypes(TableFromList, {{"Date", type date}}),
    AddColumns = Table.TransformColumns(ChangedType, {}, (r) => r),
    AddAttrs = Table.TransformColumns(AddColumns, {}, (r) => r),
    AddFields = Table.AddColumn(AddCols, "Year", each Date.Year([Date]))
in
    AddFields

Notas: ajusta el script para incluir columnas MonthNumber, MonthName, Quarter, WeekOfYear, IsWeekend, FiscalMonth/Year. También puedes usar DAX (CALENDAR/CALENDARAUTO) para crear tablas de fecha en el propio modelo o usar soluciones automáticas de Fabric.

Paso 3 — Marcar como Date Table

Tras cargar la tabla en el modelo, márcala explícitamente como Date Table (Model view → Mark as Date Table) y elige la columna de fecha. Esto garantiza que las funciones de time intelligence usen esa tabla correctamente.

Paso 4 — Enlazar con las fact tables

Crea relaciones 1:* entre la columna Date de la date table y las columnas de fecha en las fact tables (por ejemplo OrderDate, ShipDate). Mantén las relaciones activas y con dirección adecuada (single cross filter generalmente). Evita enlazar fact tables por columnas de fecha distintas sin crear múltiples relaciones o usar role-playing date tables cuando sea necesario.

Paso 5 — Optimización de rendimiento

  • Usa tipos de datos compactos: date en lugar de datetime cuando sea posible; columnas clave enteras (DateKey) para reducir espacio y acelerar joins.
  • Crea columnas calculadas estáticas durante el proceso de ETL/Power Query en lugar de DAX cuando sea posible — evita cálculo repetido en tiempo de ejecución.
  • Elimina columnas redundantes e indexa/define clave primaria a nivel de la fuente cuando uses DirectQuery sobre una base externa.

Errores comunes

1) No marcar la tabla como Date Table: conduce a resultados erróneos con funciones de time intelligence y a incompatibilidades con DAX.

2) Intervalo de fechas demasiado pequeño o demasiado amplio: demasiado corto impide análisis históricos; demasiado largo aumenta el tamaño del modelo y afecta al rendimiento.

3) Enlazar múltiples fact tables sin role-playing o sin gestionar relaciones inactivas: puede causar ambigüedad en los filtros y resultados inesperados en medidas.

Cómo practicar

Practica creando varias date tables para escenarios diferentes: calendario fiscal con inicio en mes arbitrario, tablas role-playing (OrderDate vs ShipDate) y tablas con granularidad mensual. Usa conjuntos de datos de ejemplo (AdventureWorks, WideWorldImporters) e implementa las columnas necesarias vía Power Query y DAX.

Para entrenamiento oficial, usa el Practice Assessment OFICIAL gratuito de Microsoft y la study guide de la certificación DP-600 (ambos gratuitos) — estos recursos ayudan a verificar que cubres las skills measured sin recurrir a material prohibido.

En resumen

  • Una date table bien diseñada es esencial para time intelligence y el rendimiento del modelo.
  • Genera la tabla con el intervalo correcto, incluye columnas útiles (Year, Month, Fiscal) y márcala como Date Table.
  • Enlaza correctamente con las fact tables (role-playing cuando sea necesario) y optimiza con tipos compactos y pre-cálculo en ETL.
  • Practica con datasets reales y valida los conocimientos con el Practice Assessment oficial y la study guide de Microsoft.