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

PL-300: crear y optimizar jerarquías de tiempo en Power BI

João Barros 17 de August de 2026 5 min de lectura

Te enseñaré cómo crear y optimizar jerarquías de tiempo (date/time hierarchies) en Power BI — una competencia práctica que aparece tanto en el examen PL-300 como en escenarios reales de análisis temporal. Saber estructurar y mejorar jerarquías temporales permite explorar tendencias, comparar periodos y garantizar rendimiento en los informes. Estas técnicas se usan diariamente por analistas que necesitan informes interactivos capaces de agregar por año, trimestre, mes o día, y por equipos que tienen modelos con millones de filas.

Qué necesitas saber

Una jerarquía de tiempo es una estructura que organiza componentes temporales (Year, Quarter, Month, Day, etc.) para permitir navegación y agregación natural en los visuales. Power BI puede generar automáticamente una jerarquía cuando tienes una columna del tipo fecha, pero esa jerarquía automática es limitada: no incluye columnas fiscales, claves compuestas ni ordenaciones personalizadas. Un modelo robusto usa siempre una tabla de fechas (date table) dedicada. Esta tabla debe cubrir un intervalo lógico — por ejemplo, si tienes datos de 2018 a 2025, generar la tabla de 2015 a 2026 evita huecos y facilita análisis de tendencias y previsiones.

En la práctica, la tabla de fechas incluye columnas calculadas útiles: Year, Quarter, MonthNumber, MonthName, Day, WeekOfYear, además de columnas fiscales (FiscalMonth, FiscalYear) cuando el año fiscal no coincide con el año civil. Para enlazar con las fact tables es recomendable tener claves numéricas de baja cardinalidad, como YearMonthKey (por ejemplo, 202306 para junio de 2023). Estos formatos mejoran compresión y rendimiento: una columna INT con 1 000 valores distintos se comporta mejor que 1 000 valores textuales.

Cómo funciona

Pasos esenciales para crear y optimizar una jerarquía de tiempo:

  1. Crear una tabla de fechas dedicada: usa CALENDAR o CALENDARAUTO para generar filas continuas. Por ejemplo, CALENDAR(DATE(2015,1,1), DATE(2026,12,31)) genera ~4 018 filas (días) para 11 años, lo que es ligero y suficiente para la mayoría de los informes.
  2. Generar columnas útiles: crea Year, Quarter, MonthNumber, MonthName, Day, WeekOfYear, FiscalYear, FiscalMonth, IsHoliday, IsWorkday. IsWorkday puede calcularse con WEEKDAY y una tabla externa de festivos para mayor precisión.
  3. Definir ordenación de columnas: para evitar la ordenación alfabética de MonthName, ordénala por MonthNumber. De igual modo, si tienes etiquetas textuales para Quarter ("Q1", "Q2"), asegúrate de que la ordenación refleje la secuencia temporal.
  4. Marcar como Date Table: en Power BI Desktop, ve a Modelado -> Mark as date table y selecciona la columna de fecha. Esto activa funciones de inteligencia temporal en DAX (TOTALYTD, SAMEPERIODLASTYEAR, PARALLELPERIOD) y evita comportamientos inesperados.
  5. Construir la jerarquía: en el modelo, crea la jerarquía arrastrando Year > Quarter > MonthName > Date. Usa esta jerarquía en visuales para drill-down/roll-up automático y para mejorar la experiencia del usuario.
  6. Optimizar rendimiento: reduce columnas innecesarias, usa tipos de datos adecuados (DATE para fechas, INT para claves), y prefiere claves numéricas pequeñas para enlazar fact tables (YearMonthKey INT). Evita columnas de texto con alta cardinalidad — aumentan el tamaño del modelo y disminuyen la velocidad.

En la práctica

Ejemplo práctico en DAX para crear columnas en una Date Table (usando CALENDAR):

Dates =
ADDCOLUMNS(
  CALENDAR(DATE(2020,1,1), DATE(2026,12,31)),
  "Year", YEAR([Date]),
  "MonthNumber", MONTH([Date]),
  "MonthName", FORMAT([Date], "MMMM"),
  "Quarter", "Q" & FORMAT([Date], "Q"),
  "YearMonthKey", YEAR([Date]) * 100 + MONTH([Date])
)

Después de crear estas columnas, selecciona MonthName en la vista de modelo y usa Modelado -> Ordenar por columna -> MonthNumber. Esto garantiza que los meses aparecen Ene, Feb, Mar, ... en lugar de orden alfabético (Abril, Agosto...).

Para escenarios con año fiscal distinto (por ejemplo, año fiscal que comienza en julio), añade columnas que desplacen el mes fiscal. Ejemplo:

FiscalMonthNumber = MOD([MonthNumber] - 7 + 12, 12) + 1
FiscalYear = IF([MonthNumber] <= 6, [Year] - 1, [Year])

Crea la jerarquía arrastrando las columnas en la vista de modelo: Year > Quarter > MonthName > Date. En visuales, usa esa jerarquía para permitir drill-down automático y para comparar, por ejemplo, ventas del mes actual con el mismo mes del año anterior usando SAMEPERIODLASTYEAR o para obtener Year-to-date con TOTALYTD.

Errores comunes

1) Confiar en la jerarquía automática de Power BI sin una Date Table dedicada: ese enfoque limita el uso de funciones de inteligencia temporal y puede provocar huecos en los ejes de tiempo, especialmente en análisis de series temporales donde esperas ver fechas sin transacciones (zero values).

2) No ordenar MonthName correctamente: si MonthName no se ordena por MonthNumber, los visuales muestran los meses alfabéticamente. Esto perjudica la lectura de tendencias y confunde a los usuarios finales.

3) Mantener columnas innecesarias o tipos inadecuados: por ejemplo, usar YearMonthKey como texto en lugar de INT. En modelos con millones de registros en una fact table, una clave INT reduce espacio en disco y mejora la velocidad de cálculo. También evita crear relaciones con columnas de alta cardinalidad textuales.

Cómo practicar

Para practicar esta competencia usa los recursos oficiales gratuitos de Microsoft: el Practice Assessment OFICIAL para el PL-300 y la Study Guide de la certificación PL-300. En Power BI Desktop, crea una Date Table con un intervalo amplio (p.ej. 2015–2026), añade columnas fiscales, indicadores de trabajo/festivo y claves numéricas. Prueba cálculos DAX de inteligencia temporal como TOTALYTD, SAMEPERIODLASTYEAR y PARALLELPERIOD contra tu date table. Experimenta también con modelos de distintos tamaños: una fact table de 100k filas vs. 5M filas para ver el impacto de las elecciones de clave y tipo de datos en el rendimiento.

En resumen

  • Crea siempre una Date Table dedicada y márcala como Date Table para soportar funciones temporales en DAX.
  • Incluye columnas de ordenación (MonthNumber) y ordena columnas textuales (MonthName) para evitar ordenación alfabética.
  • Añade columnas fiscales cuando sea necesario y usa claves numéricas (YearMonthKey) para enlazar fact tables con buen rendimiento.
  • Optimiza reduciendo columnas innecesarias y eligiendo tipos de datos apropiados; prueba los resultados usando el Practice Assessment OFICIAL y la Study Guide de Microsoft.