PL-300: criar e optimizar hierarquias de tempo em Power BI
Vou ensinar como criar e optimizar hierarquias de tempo (date/time hierarchies) no Power BI — uma competência prática que surge tanto no exame PL-300 como em cenários reais de análise temporal. Saber estruturar e melhorar hierarquias temporais permite explorar tendências, comparar períodos e garantir performance nos relatórios. Estas técnicas são usadas diariamente por analistas que precisam de relatórios interactivos capazes de agregar por ano, trimestre, mês ou dia, e por equipas que têm modelos com milhões de linhas.
O que precisas de saber
Uma hierarquia de tempo é uma estrutura que organiza componentes temporais (Year, Quarter, Month, Day, etc.) para permitir navegação e agregação natural nos visuais. O Power BI pode gerar automaticamente uma hierarquia quando tens uma coluna do tipo data, mas essa hierarquia automática é limitada: não inclui colunas fiscais, chaves compostas nem ordenações personalizadas. Um modelo robusto usa sempre uma tabela de datas (date table) dedicada. Esta tabela deve cobrir um intervalo lógico — por exemplo, se tens dados de 2018 a 2025, gerar a tabela de 2015 a 2026 evita lacunas e facilita análises de tendências e previsões.
Na prática, a tabela de datas inclui colunas calculadas úteis: Year, Quarter, MonthNumber, MonthName, Day, WeekOfYear, além de colunas fiscais (FiscalMonth, FiscalYear) quando o ano fiscal não coincide com o ano civil. Para ligar com as fact tables é recomendável ter chaves numéricas de baixa cardinalidade, como YearMonthKey (por exemplo, 202306 para Junho de 2023). Estes formatos melhoram compressão e performance: uma coluna INT com 1 000 valores distintos compõe-se melhor do que 1 000 valores textuais.
Como funciona
Passos essenciais para criar e optimizar uma hierarquia de tempo:
- Criar uma tabela de datas dedicada: usa CALENDAR ou CALENDARAUTO para gerar linhas contínuas. Por exemplo, CALENDAR(DATE(2015,1,1), DATE(2026,12,31)) gera ~4 018 linhas (dias) para 11 anos, o que é leve e suficiente para a maioria dos relatórios.
- Gerar colunas úteis: cria Year, Quarter, MonthNumber, MonthName, Day, WeekOfYear, FiscalYear, FiscalMonth, IsHoliday, IsWorkday. IsWorkday pode ser calculada com WEEKDAY e uma tabela externa de feriados para maior precisão.
- Definir ordenação de colunas: para evitar ordenação alfabética de MonthName, ordena-a por MonthNumber. Similarmente, se tiveres etiquetas textuais para Quarter ("Q1", "Q2"), garante que a ordenação reflete a sequência temporal.
- Marcar como Date Table: no Power BI Desktop, vai a Modelagem -> Mark as date table e selecciona a coluna de data. Isso activa funções de inteligência temporal em DAX (TOTALYTD, SAMEPERIODLASTYEAR, PARALLELPERIOD) e evita comportamentos inesperados.
- Construir a hierarquia: no modelo, cria a hierarquia arrastando Year > Quarter > MonthName > Date. Usa esta hierarquia em visuais para drill-down/roll-up automático e para melhorar a experiência do utilizador.
- Optimizar performance: reduz colunas desnecessárias, usa tipos de dados adequados (DATE para datas, INT para chaves), e prefere chaves numéricas pequenas para ligar fact tables (YearMonthKey INT). Evita colunas de texto com alta cardinalidade — elas aumentam o tamanho do modelo e diminuem a velocidade.
Na prática
Exemplo prático em DAX para criar colunas numa 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])
)
Depois de criar estas colunas, selecciona MonthName na vista de modelo e usa Modelagem -> Ordenar por coluna -> MonthNumber. Isto garante que os meses aparecem Jan, Fev, Mar, ... em vez de ordem alfabética (Abril, Agosto...).
Para cenários com ano fiscal diferente (por exemplo, ano fiscal que começa em Julho), adiciona colunas que desloquem o mês fiscal. Exemplo:
FiscalMonthNumber = MOD([MonthNumber] - 7 + 12, 12) + 1
FiscalYear = IF([MonthNumber] <= 6, [Year] - 1, [Year])
Cria a hierarquia arrastando as colunas na vista de modelo: Year > Quarter > MonthName > Date. Em visuais, usa essa hierarquia para permitir drill-down automático e para comparar, por exemplo, vendas do mês actual com o mesmo mês do ano anterior usando SAMEPERIODLASTYEAR ou para obter Year-to-date com TOTALYTD.
Erros comuns
1) Confiar na hierarquia automática do Power BI sem uma Date Table dedicada: essa abordagem limita o uso de funções de inteligência temporal e pode provocar lacunas nos eixos de tempo, especialmente em análises de séries temporais onde esperas ver datas sem transacções (zero values).
2) Não ordenar MonthName correctamente: se MonthName não for ordenado por MonthNumber, os visuais mostram meses alfabeticamente. Isto prejudica a leitura de tendências e confunde utilizadores finais.
3) Manter colunas desnecessárias ou tipos inadequados: por exemplo, usar YearMonthKey como texto em vez de INT. Em modelos com milhões de registos numa fact table, uma chave INT reduz espaço em disco e melhora velocidade de cálculo. Também evita criar relações com colunas de alta cardinalidade textuais.
Como praticar
Para praticar esta competência usa os recursos oficiais gratuitos da Microsoft: o Practice Assessment OFICIAL para o PL-300 e a Study Guide da certificação PL-300. No Power BI Desktop, cria uma Date Table com um intervalo amplo (p.ex. 2015–2026), adiciona colunas fiscais, sinais de trabalho/feriado e chaves numéricas. Testa cálculos DAX de inteligência temporal como TOTALYTD, SAMEPERIODLASTYEAR e PARALLELPERIOD contra a tua date table. Experimenta também modelos com diferentes tamanhos: uma fact table de 100k linhas vs. 5M linhas para ver o impacto das escolhas de chave e tipo de dados na performance.
Em resumo
- Cria sempre uma Date Table dedicada e marca-a como Date Table para suportar funções temporais em DAX.
- Inclui colunas de ordenação (MonthNumber) e ordena colunas textuais (MonthName) para evitar ordenação alfabética.
- Adiciona colunas fiscais quando necessário e usa chaves numéricas (YearMonthKey) para ligar fact tables com boa performance.
- Optimiza reduzindo colunas desnecessárias e escolhendo tipos de dados apropriados; testa os resultados usando o Practice Assessment OFICIAL e a Study Guide da Microsoft.