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

DP-600: implementar tabelas de tempo (date tables) eficientes

João Barros 12 de October de 2026 4 min de leitura

Vou ensinar como implementar uma tabela de tempo (date table) eficiente num modelo semântico para Power BI/Fabric — uma competência comum no DP-600. Tabelas de tempo bem concebidas são críticas para análises temporais, desempenho de medidas e funcionalidades como time intelligence.

O que precisas de saber

Uma tabela de tempo (date table) é uma tabela dedicada que contém uma linha por dia (ou outra granularidade) e colunas com atributos temporais: ano, trimestre, mês, dia da semana, flags de fim de semana, trimestres fiscais, períodos móveis de 12 meses, etc. No contexto do DP-600 importa porque:

  • Permite usar funções de time intelligence corretamente (por exemplo DAX CALCULATE com DATEADD, SAMEPERIODLASTYEAR).
  • Melhora a clareza do modelo e o desempenho quando bem indexada e ligada por chaves do tipo date.
  • Suporta filtros relativos, agrupamentos e hierarquias temporais que os relatórios exigem.

Exemplo simples: uma tabela Date com colunas DateKey (YYYYMMDD int), Date (date), Year, MonthNumber, MonthName, Quarter, IsWeekend, FiscalMonth, FiscalYear, YearMonth (YYYY-MM) e uma chave primária na coluna Date.

Na prática: passos para criar e integrar uma date table

Passo 1 — Escolher granularidade e âmbito

Decide se a granularidade será diária (mais comum) ou outra. Define o intervalo de datas com base nos dados: por exemplo, desde o primeiro Date nas fact tables até à data actual + 1 ano para planeamento. Evita criar intervalos demasiado amplos (anos desnecessários) para não inflacionar o modelo.

Passo 2 — Gerar a tabela (exemplo em Power Query / M)

// Exemplo M para criar uma date table diária
let
    StartDate = #date(2018,1,1),
    EndDate = Date.AddYears(Date.From(DateTimeZone.FixedUtcNow()), 1),
    DayCount = Duration.Days(EndDate - StartDate) + 1,
    Source = List.Dates(StartDate, DayCount, #duration(1,0,0,0)),
    TableFromList = Table.FromList(Source, Splitter.SplitByNothing(), {"Date"}),
    ChangedType = Table.TransformColumnTypes(TableFromList, {{"Date", type date}}),
    AddColumns = Table.TransformColumns(ChangedType, {}, (r) => r),
    AddAttrs = Table.TransformColumns(AddColumns, {}, (r) => r),
    AddFields = Table.AddColumn(AddCols, "Year", each Date.Year([Date]))
in
    AddFields

Notas: ajusta o script para incluir colunas MonthNumber, MonthName, Quarter, WeekOfYear, IsWeekend, FiscalMonth/Year. Podes também usar DAX (CALENDAR/CALENDARAUTO) para criar tabelas de data no próprio modelo ou usar soluções automáticas do Fabric.

Passo 3 — Marcar como Date Table

Depois de carregar a tabela no modelo, marca-a explicitamente como Date Table (Model view → Mark as Date Table) e escolhe a coluna de data. Isto garante que as funções de time intelligence usam essa tabela correctamente.

Passo 4 — Ligar às fact tables

Cria relações 1:* entre a coluna Date da date table e as colunas de data nas fact tables (por exemplo OrderDate, ShipDate). Mantém as relações activas e com direcção adequada (single cross filter geralmente). Evita ligar fact tables por colunas de data diferentes sem criar múltiplas relações ou usar role-playing date tables quando necessário.

Passo 5 — Optimização de desempenho

  • Usa tipos de dados compactos: date em vez de datetime quando possível; colunas chave inteiras (DateKey) para reduzir espaço e acelerar joins.
  • Cria colunas calculadas estáticas durante o processo de ETL/Power Query em vez de DAX quando possível — evita cálculo repetido em tempo de execução.
  • Remove colunas redundantes e indexa/chave primária ao nível da fonte quando uses DirectQuery sobre uma base externa.

Erros comuns

1) Não marcar a tabela como Date Table: leva a resultados errados com funções de time intelligence e a incompatibilidades com DAX.

2) Intervalo de datas demasiado pequeno ou demasiado amplo: curto demais impede análises históricas; longo demais aumenta o tamanho do modelo e afecta o desempenho.

3) Ligar múltiplas fact tables sem role-playing ou sem gerir relações inactivas: pode causar ambiguidade nos filtros e resultados inesperados em medidas.

Como praticar

Pratica criando várias date tables para cenários diferentes: calendário fiscal com início em mês arbitrário, tabelas role-playing (OrderDate vs ShipDate) e tabelas com granularidade mensal. Usa conjuntos de dados de exemplo (AdventureWorks, WideWorldImporters) e implementa as colunas necessárias via Power Query e DAX.

Para treino oficial, usa o Practice Assessment OFICIAL gratuito da Microsoft e a study guide da certificação DP-600 (ambos gratuitos) — estes recursos ajudam a verificar que cobres as skills measured sem recorrer a material proibido.

Em resumo

  • Uma date table bem desenhada é essencial para time intelligence e desempenho do modelo.
  • Gera a tabela com o intervalo correcto, inclui colunas úteis (Year, Month, Fiscal) e marca-a como Date Table.
  • Liga correctamente às fact tables (role-playing quando necessário) e optimiza com tipos compactos e pré-cálculo em ETL.
  • Pratica com datasets reais e valida os conhecimentos com o Practice Assessment oficial e a study guide da Microsoft.