DP-600: implementar e optimizar hierarquias de data por níveis
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:
- 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.
- Definir DateKey como inteiro e Date como tipo date. DateKey = YEAR(Date) * 10000 + MONTH(Date) * 100 + DAY(Date).
- 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.