Módulo 6: Calendário e inteligência temporal

Aula 1 de 4

Criando a dCalendario definitiva

Uma tabela, todos os atributos, pronta para copiar e colar em qualquer projeto.

18 minutos de leitura


A dCalendario é a dimensão mais reaproveitável do Power BI. Construa uma vez com capricho e leve para todos os projetos. Ela precisa ser contínua (sem dias faltando) e cobrir todo o período da fato.

DAXdCalendario completa em DAX
dCalendario =VAR DataMin = MIN( fVendas[Data] )VAR DataMax = MAX( fVendas[Data] )VAR Base =    CALENDAR( DATE( YEAR(DataMin), 1, 1 ), DATE( YEAR(DataMax), 12, 31 ) )RETURNADDCOLUMNS(    Base,    "Ano",            YEAR( [Date] ),    "NumMes",         MONTH( [Date] ),    "Mes",            FORMAT( [Date], "mmm", "pt-BR" ),    "MesCompleto",    FORMAT( [Date], "mmmm", "pt-BR" ),    "AnoMes",         FORMAT( [Date], "yyyy-mm" ),    "AnoMesTexto",    FORMAT( [Date], "mmm/yy", "pt-BR" ),    "Trimestre",      "T" & FORMAT( QUARTER([Date]), "0" ),    "AnoTrimestre",   YEAR([Date]) & "-T" & FORMAT( QUARTER([Date]), "0" ),    "Semestre",       "S" & IF( MONTH([Date]) <= 6, "1", "2" ),    "NumDiaSemana",   WEEKDAY( [Date], 2 ),    "DiaSemana",      FORMAT( [Date], "ddd", "pt-BR" ),    "EhFimDeSemana",  WEEKDAY( [Date], 2 ) > 5,    "InicioMes",      EOMONTH( [Date], -1 ) + 1,    "FimMes",         EOMONTH( [Date], 0 ),    "AnoAtual",       YEAR([Date]) = YEAR( TODAY() ),    "MesAtual",       EOMONTH([Date],0) = EOMONTH( TODAY(), 0 ),    "OffsetMes",      DATEDIFF( TODAY(), [Date], MONTH ),    "OffsetAno",      YEAR([Date]) - YEAR( TODAY() ),    "PassadoOuHoje",  [Date] <= TODAY())

Ordenação de mês e dia da semana

Sem ajuste, o gráfico ordena os meses em ordem alfabética (abr, ago, dez...). Selecione a coluna Mes → Ferramentas de Coluna → Classificar por coluna → NumMes. Faça o mesmo para DiaSemana usando NumDiaSemana.

Marcar como tabela de datas

  1. 1Selecione a dCalendario no painel de dados.
  2. 2Ferramentas de Tabela → Marcar como tabela de datas.
  3. 3Escolha a coluna Date.
  4. 4O Power BI valida: valores únicos, sem nulos e sem intervalos faltando.

Feriados e dias úteis

DAXColuna de dia útil considerando a tabela de feriados
EhDiaUtil =VAR Dia = dCalendario[Date]VAR FimDeSemana = WEEKDAY( Dia, 2 ) > 5VAR EhFeriado = Dia IN VALUES( dFeriados[Data] )RETURN NOT ( FimDeSemana || EhFeriado )

Exercício prático

Crie a dCalendario completa no seu modelo, marque-a como tabela de datas, ajuste a ordenação de mês e dia da semana e traga os feriados da API que você conectou no Módulo 2 para criar a coluna EhDiaUtil.