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

DP-600: implementar y optimizar jerarquías de fecha por niveles

João Barros 05 de November de 2026 4 min de lectura

Voy a explicar cómo implementar y optimizar jerarquías de fecha por niveles (año → trimestre → mes → día) en un modelo semántico Power BI/Fabric. Esta competencia es importante para informes con drill-down eficiente y se evalúa con frecuencia en el examen DP-600 y es útil en proyectos reales para rendimiento y usabilidad.

Qué necesitas saber

Una jerarquía de fecha por niveles organiza campos temporales en estructuras que permiten drill-down y roll-up en los informes (por ejemplo: Year > Quarter > Month > Day). Para el motor de análisis (VertiPaq / Fabric), el diseño correcto de la dimensión de fecha mejora la usabilidad y el rendimiento: usar columnas enteras/integers para claves, evitar alta cardinalidad innecesaria, garantizar unicidad y ordenar columnas de texto por columnas numéricas cuando sea necesario.

Ejemplo: una tabla Date con estas columnas útiles:

  • DateKey (int) — formato YYYYMMDD, clave única y primaria.
  • Date (date) — valor calendarístico.
  • Year (int), Quarter (int), MonthNumber (int), Day (int).
  • MonthName (string) — mostrado, pero ordenado por MonthNumber.
  • IsHoliday (bool) y campos fiscales si es necesario.

Cómo funciona

Puntos técnicos principales y razones:

  • Clave entera (DateKey): relaciones basadas en enteros son más eficientes que en date/time o texto.
  • Ordenación: columnas de texto usadas en ejes (ej.: "January") deben ordenarse por una columna numérica (MonthNumber) para garantizar orden correcto y rendimiento en la compresión.
  • Jerarquía física vs. jerarquía del modelo: construye las columnas y luego crea la Hierarchy en el modelo semántico (Power BI Desktop/Model in Fabric). La Hierarchy es una conveniencia para los visuales y no duplica datos.
  • Evitar columnas calculadas pesadas: siempre que sea posible, genera las columnas de la tabla Date durante el proceso de ingestión (Power Query, Dataflow, Spark) en lugar de cálculos DAX que aumentan el tiempo de carga del modelo.

En la práctica

Paso a paso práctico para crear una jerarquía de fecha optimizada:

  1. Generar la tabla Date fuera del modelo (preferible): Power Query / Dataflow / Spark SQL — garantiza que las columnas están precomputadas y compactadas eficazmente.
  2. Definir DateKey como entero y Date como tipo date. DateKey = YEAR(Date) * 10000 + MONTH(Date) * 100 + DAY(Date).
  3. Crear columnas Year, Quarter, MonthNumber, MonthName, DayOfMonth. Para MonthName, mantener MonthNumber y después definir ordenación: ordenar MonthName por MonthNumber.
// Exemplo simples em M (Power Query) para criar MonthNumber e MonthName
let
  Source = List.Dates(#date(2020,1,1), Duration.Days(#date(2023,12,31) - #date(2020,1,1)) + 1, #duration(1,0,0,0)),
  Table = Table.FromList(Source, Splitter.SplitByNothing(), {"Date"}),
  AddDateParts = Table.TransformColumns(Table, {{"Date", DateTime.Date}}),
  AddKeys = Table.AddColumn(AddDateParts, "DateKey", each Date.Year([Date]) * 10000 + Date.Month([Date]) * 100 + Date.Day([Date])),
  AddYear = Table.AddColumn(AddKeys, "Year", each Date.Year([Date])),
  AddMonthNum = Table.AddColumn(AddYear, "MonthNumber", each Date.Month([Date])),
  AddMonthName = Table.AddColumn(AddMonthNum, "MonthName", each Date.ToText([Date], "MMMM")),
  AddQuarter = Table.AddColumn(AddMonthName, "Quarter", each Date.QuarterOfYear([Date]))
in
  AddQuarter

Después de cargar la tabla en el modelo:

  • En el modelo, seleccionar la columna MonthName y definir Order By Column = MonthNumber.
  • Crear la Hierarchy: arrastrar Year → Quarter → MonthName → Date (o Day). Esta jerarquía facilita el drill-down en los visuales.
  • Relacionar DateKey con las fact tables usando enteros.

Errores comunes

Trampas típicas a evitar:

  • Usar texto (ej.: "Jan", "Feb") sin definir Order By Column — los visuales muestran orden alfabético, confundiendo a los usuarios.
  • Relacionar por columnas date/time con horarios o zonas horarias, lo que puede impedir la correspondencia con la granularidad de la fact table; preferir DateKey entero o truncar la hora.
  • Crear columnas calculadas DAX pesadas para cada fila en lugar de precomputar en la ingestión — aumenta el tiempo de procesamiento y el tamaño del modelo.

Cómo practicar

Para entrenar esta competencia, usa el Practice Assessment OFICIAL y gratuito de Microsoft para DP-600 y la guía de estudio oficial (también gratuita). Ambos permiten verificar conocimientos en las áreas de modelado semántico y optimización. No uses dumps; utiliza los recursos oficiales para practicar y medir el progreso.

En resumen

  • Crea una tabla Date con DateKey entero y columnas de nivel (Year, Quarter, MonthNumber, MonthName, Day).
  • Ordena columnas de texto por columnas numéricas (MonthName por MonthNumber) para garantizar presentación y compresión correctas.
  • Precomputa campos en la ingestión (Power Query/Dataflow/Spark) para mejor rendimiento del modelo.
  • Relaciona las fact tables por claves enteras y usa la Hierarchy del modelo para drill-down sin duplicar datos.