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

DP-600: implementar e optimizar hierarquias de data por níveis

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

Vou explicar como implementar e optimizar hierarquias de data por níveis (ano → trimestre → mês → dia) num modelo semântico Power BI/Fabric. Esta competência é importante para relatórios com drill-down eficiente e é frequentemente avaliada no exame DP-600 e útil em projectos reais para performance e usabilidade.

O que precisas de saber

Uma hierarquia de data por níveis organiza campos temporais em estruturas que permitem drill-down e roll-up nos relatórios (por exemplo: Year > Quarter > Month > Day). Para o motor de análise (VertiPaq / Fabric), o desenho correcto da dimensão de data melhora a usabilidade e o desempenho: usar colunas inteiras/integers para chaves, evitar alta cardinalidade desnecessária, garantir unicidade e ordenar colunas de texto por colunas numéricas quando necessário.

Exemplo: uma tabela Date com estas colunas úteis:

  • DateKey (int) — formato YYYYMMDD, chave única e primária.
  • Date (date) — valor calendarístico.
  • Year (int), Quarter (int), MonthNumber (int), Day (int).
  • MonthName (string) — exibido, mas ordenado por MonthNumber.
  • IsHoliday (bool) e campos fiscais se necessário.

Como funciona

Principais pontos técnicos e razões:

  • Chave inteira (DateKey): relacionamentos baseados em inteiros são mais eficientes do que em date/time ou texto.
  • Ordenação: colunas de texto usadas em eixos (ex.: "January") devem ser ordenadas por uma coluna numérica (MonthNumber) para garantir ordem correcta e performance na compressão.
  • Hierarquia física vs. hierarquia do modelo: constrói as colunas e depois cria a Hierarchy no modelo semântico (Power BI Desktop/Model in Fabric). A Hierarchy é uma conveniência para os visuais e não duplica dados.
  • Evitar colunas calculadas pesadas: sempre que possível, gera as colunas da tabela Date durante o processo de ingestão (Power Query, Dataflow, Spark) em vez de cálculos DAX que aumentam o tempo de carregamento do modelo.

Na prática

Passo a passo prático para criar uma hierarquia de data optimizada:

  1. Gerar a tabela Date fora do modelo (preferível): Power Query / Dataflow / Spark SQL — garante que as colunas são pré-computadas e compactadas eficientemente.
  2. Definir DateKey como inteiro e Date como tipo date. DateKey = YEAR(Date) * 10000 + MONTH(Date) * 100 + DAY(Date).
  3. Criar colunas Year, Quarter, MonthNumber, MonthName, DayOfMonth. Para MonthName, manter MonthNumber e depois definir ordenação: 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

Depois de carregar a tabela no modelo:

  • No modelo, seleccionar a coluna MonthName e definir Order By Column = MonthNumber.
  • Criar a Hierarchy: arrastar Year → Quarter → MonthName → Date (ou Day). Esta hierarquia facilita o drill-down nos visuais.
  • Relacionar DateKey com fact tables usando inteiros.

Erros comuns

Armadilhas típicas a evitar:

  • Usar texto (ex.: "Jan", "Feb") sem definir Order By Column — os visuais mostram ordem alfabética, confundindo os utilizadores.
  • Relacionar por colunas date/time com horários ou fusos, o que pode impedir a correspondência com a granularidade da fact table; preferir DateKey inteiro ou truncar a hora.
  • Criar colunas calculadas DAX pesadas para cada linha em vez de pré-computar na ingestão — aumenta o tempo de processamento e o tamanho do modelo.

Como praticar

Para treinar esta competência, usa o Practice Assessment OFICIAL e gratuito da Microsoft para DP-600 e o guia de estudo oficial (também gratuito). Ambos permitem verificar conhecimentos nas áreas de modelação semântica e optimização. Não uses dumps; utiliza os recursos oficiais para praticar e medir o progresso.

Em resumo

  • Cria uma tabela Date com DateKey inteiro e colunas de nível (Year, Quarter, MonthNumber, MonthName, Day).
  • Ordena colunas de texto por colunas numéricas (MonthName por MonthNumber) para garantir apresentação e compressão correctas.
  • Pré-computa campos na ingestão (Power Query/Dataflow/Spark) para melhor performance do modelo.
  • Relaciona fact tables por chaves inteiras e usa a Hierarchy do modelo para drill-down sem duplicar dados.