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

PL-300: como criar colunas de data inteligentes para análises temporais

João Barros 10 de September de 2026 4 min de leitura

Vou ensinar como criar e usar colunas de data (tabela de calendário) no Power BI — uma competência frequente no domínio "Modelar os dados" do PL-300. Saber construir um calendário correcto é essencial para análises temporais (período a período, YTD, comparações) e evita erros nos relatórios e nos cálculos DAX.

O que precisas de saber

Uma tabela de calendário (ou dimensão de data) contém uma linha para cada dia num intervalo e colunas com atributos como Ano, Trimestre, Mês, Dia da semana, além de flags como "É fim de mês" ou "É fim de semana". No Power BI, ela permite usar funções de inteligência temporal em DAX (por exemplo, TOTALYTD, SAMEPERIODLASTYEAR) e garante que relações entre datas e fact tables funcionem correctamente.

Exemplo simples: uma fact table de Vendas com a coluna Venda[OrderDate]. Para calcular Sales YTD correctamente precisas de uma tabela Date com uma coluna Date[Date] que inclui todas as datas do intervalo relevante e, idealmente, um campo que indique o primeiro dia do mês ou do ano.

Como funciona: criar uma tabela de calendário com DAX

Há várias formas de criar um calendário: em Power Query (M), como tabela física numa base de dados, ou com DAX (tabela calculada). Aqui mostro um método DAX que é prático para modelos em Power BI Desktop.

Calendar =
VAR MinDate = MINX(ALL('Sales'), 'Sales'[OrderDate])
VAR MaxDate = MAXX(ALL('Sales'), 'Sales'[OrderDate])
RETURN
ADDCOLUMNS(
    CALENDAR(MinDate, MaxDate),
    "Year", YEAR([Date]),
    "Quarter", "Q" & FORMAT([Date], "Q"),
    "MonthNum", MONTH([Date]),
    "MonthName", FORMAT([Date], "MMMM"),
    "YearMonth", FORMAT([Date], "YYYY-MM"),
    "DayOfWeekNum", WEEKDAY([Date], 2),
    "DayOfWeek", FORMAT([Date], "dddd"),
    "IsWeekend", IF(WEEKDAY([Date],2) >= 6, TRUE(), FALSE())
)

Explicação rápida das partes:

  • CALENDAR(MinDate, MaxDate) gera todas as datas entre o mínimo e máximo das vendas.
  • ADDCOLUMNS acrescenta colunas úteis: Year, Quarter, MonthName, etc.
  • WEEKDAY([Date], 2) com 2 faz segunda=1 ... domingo=7 — útil para ordenação.

Na prática: ligar a tabela de calendário e usar medidas

Passos práticos a seguir no Power BI Desktop:

  1. Criar a tabela de calendário (ex.: tabela calculada com DAX acima ou em Power Query).
  2. Assegurar que a coluna de data na tabela Calendar é do tipo Date e sem horas.
  3. Criar uma relação 1:* entre Calendar[Date] e Sales[OrderDate], com direção de filtro adequada (normalmente single direction de Calendar para Sales).
  4. Marcar a tabela como "Mark as Date table" (Modeling > Mark as date table) e indicar Calendar[Date]. Isto permite que as funções de inteligência temporal DAX funcionem correctamente.
  5. Usar medidas DAX de tempo. Exemplo: Sales YTD.
SalesAmount = SUM(Sales[Amount])

SalesAmount_YTD =
TOTALYTD(
    [SalesAmount],
    'Calendar'[Date]
)

SalesAmount_PY =
CALCULATE(
    [SalesAmount],
    SAMEPERIODLASTYEAR('Calendar'[Date])
)

Notas práticas: marcar a tabela de data é crucial; sem isto, TOTALYTD e funções semelhantes podem devolver resultados incorrectos. Ordena visualmente o mês por MonthNum se usares MonthName para evitar Janeiro, Fevereiro,... fora de ordem.

Erros comuns

  • Não marcar a tabela como "Date table" — causa falha das funções de inteligência temporal.
  • Datas com hora em Sales[OrderDate] não coincidem com Calendar[Date] (tipo DateTime vs Date) — resolver com truncamento ou transformar para Date.
  • Relações incorrectas (muitos-para-muitos ou direcção de filtro invertida) — a relação deve ser 1 (Calendar) → * (Fact) para funções temporais funcionarem bem.

Como praticar

Pratica este tema criando vários cenários: intervalos com lacunas, fact tables com múltiplas colunas de data (OrderDate, ShipDate), e usando filtros de slicer por mês/ano. Para preparação para o PL-300, utiliza o Practice Assessment oficial gratuito da Microsoft e a study guide oficial (ambos gratuitos) — estas são as formas apropriadas de te avaliares e verificares os conhecimentos sem recorrer a materiais proibidos.

Em resumo

  • Cria uma tabela de calendário completa e marca-a como "Date table" para habilitar funções de inteligência temporal em DAX.
  • Garante que a coluna de data tem apenas datas (sem hora) e que a relação é 1:*> entre Calendar e a tabela de factos.
  • Usa colunas adicionais (Year, MonthNum, DayOfWeek) para ordenar e agrupar correctamente nas visualizações.
  • Pratica com o Practice Assessment oficial e a study guide da Microsoft — ambos gratuitos — e experimenta calcular YTD, MTD e comparações ano a ano.