Capa do Ebook gratuito Power BI para Pequenos Negócios: Dashboards de Vendas, Caixa e Estoque com Indicadores que Importam

Power BI para Pequenos Negócios: Dashboards de Vendas, Caixa e Estoque com Indicadores que Importam

Novo curso

25 páginas

Calendário e inteligência de tempo para análise diária, semanal e mensal

Capítulo 7

Tempo estimado de leitura: 13 minutos

Audio Icon

Ouça em áudio

0:00 / 0:00

Por que um calendário bem feito muda a qualidade da análise

Quando você analisa vendas, caixa e estoque ao longo do tempo, a tabela de datas (calendário) é o “eixo” que permite comparar períodos, somar corretamente por dia/semana/mês e criar indicadores como acumulado no mês, comparação com o mês anterior e média móvel. Sem um calendário consistente, você fica preso a filtros manuais, comparações imprecisas e visuais que “quebram” quando muda o período selecionado.

Ilustração estilo flat e profissional de um painel de análise no Power BI com um calendário central conectado a gráficos de vendas, caixa e estoque; linhas ligando datas a KPIs; aparência limpa, cores sóbrias, sem texto legível

No Power BI, a inteligência de tempo (time intelligence) depende de uma tabela de datas contínua, com uma coluna de data sem buracos, marcada como tabela de datas, e relacionada às tabelas de fatos (por exemplo, vendas e recebimentos) por uma coluna de data no mesmo tipo (Date). A partir disso, você consegue criar medidas que respeitam o contexto do relatório (filtros e segmentações) e respondem automaticamente a seleções diárias, semanais e mensais.

Diagrama conceitual de modelagem de dados: uma tabela DimCalendario contínua conectada por relacionamentos a tabelas fato de vendas e recebimentos; estilo infográfico limpo, ícones de calendário e banco de dados, sem texto legível

Conceitos essenciais de calendário e inteligência de tempo

1) Tabela de datas (DimCalendario)

É uma dimensão que contém uma linha por dia, cobrindo todo o intervalo necessário (do menor ao maior dia presente nos seus dados, e geralmente um pouco além). Ela deve ter colunas auxiliares para facilitar agrupamentos e ordenações: ano, mês, nome do mês, ano-mês, trimestre, semana, dia da semana, etc.

2) Coluna de data “limpa” e contínua

A coluna principal deve ser do tipo Date (sem hora). Se suas tabelas de fatos tiverem DateTime (com hora), você deve criar uma coluna apenas com a data (por exemplo, DataVenda = DATE(YEAR([DataHora]), MONTH([DataHora]), DAY([DataHora]))), para garantir relacionamento correto.

3) Marcar como tabela de datas

No Power BI, ao marcar a DimCalendario como “tabela de datas”, você habilita comportamentos esperados de funções de time intelligence e evita ambiguidades quando há múltiplas colunas de data.

Continue em nosso aplicativo

Você poderá ouvir o audiobook com a tela desligada, ganhar gratuitamente o certificado deste curso e ainda ter acesso a outros 5.000 cursos online gratuitos.

ou continue lendo abaixo...
Download App

Baixar o aplicativo

4) Contexto de filtro e medidas

Time intelligence funciona melhor com medidas (DAX) e não com colunas calculadas. Medidas se recalculam conforme o usuário filtra por período, loja, categoria, vendedor etc. O calendário fornece o contexto temporal; as medidas interpretam esse contexto para calcular “mês atual”, “mês anterior”, “acumulado no ano”, e assim por diante.

5) Semanas: cuidado com padrão e início da semana

“Semana” pode significar coisas diferentes: semana ISO (padrão internacional), semana começando no domingo, ou semana começando na segunda. Para pequenos negócios, o mais importante é escolher um padrão e manter consistente. Se você usa metas semanais e rotina de fechamento às segundas, semana iniciando na segunda costuma ser mais natural. Se seu negócio opera com relatórios de domingo a sábado, ajuste para domingo.

Passo a passo: criando um calendário robusto no Power BI

Passo 1: Defina o intervalo de datas

Você pode criar um calendário que cobre automaticamente o intervalo existente nas tabelas de fatos. Exemplo: usar a menor e a maior data de vendas/recebimentos. Em muitos cenários, é útil adicionar uma “margem” (por exemplo, mais 1 ano) para permitir planejamento e metas futuras.

Passo 2: Crie a tabela de calendário em DAX

Uma forma prática é criar uma tabela calculada. No Power BI Desktop: Modelagem > Nova tabela. Exemplo de calendário básico com colunas úteis:

DimCalendario = VAR DataMin = DATE(2023,1,1) VAR DataMax = DATE(2026,12,31) RETURN ADDCOLUMNS( CALENDAR(DataMin, DataMax), "Ano", YEAR([Date]), "MesNumero", MONTH([Date]), "MesNome", FORMAT([Date], "mmmm"), "AnoMes", FORMAT([Date], "yyyy-MM"), "Trimestre", "T" & FORMAT([Date], "Q"), "Dia", DAY([Date]), "DiaSemanaNumero", WEEKDAY([Date], 2), "DiaSemanaNome", FORMAT([Date], "dddd") )

Observações práticas: (1) Use WEEKDAY([Date], 2) para semana começando na segunda (1=segunda, 7=domingo). (2) MesNome e DiaSemanaNome dependem do idioma/região do arquivo; se você precisa padronizar, pode mapear manualmente com SWITCH.

Passo 3: Crie colunas para ordenação correta

Em visuais, “Janeiro, Fevereiro…” pode aparecer fora de ordem se o Power BI ordenar alfabeticamente. Para resolver, ordene o nome do mês pelo número do mês. O mesmo vale para dia da semana.

  • Ordenar MesNome por MesNumero
  • Ordenar DiaSemanaNome por DiaSemanaNumero

No Power BI: selecione a coluna (ex.: MesNome) > Ferramentas de coluna > Ordenar por coluna > MesNumero.

Passo 4: Crie colunas de “início do mês” e “início da semana” (muito úteis)

Essas colunas ajudam a agrupar e também a criar comparações consistentes.

InicioMes = DATE(YEAR(DimCalendario[Date]), MONTH(DimCalendario[Date]), 1)
InicioSemana = DimCalendario[Date] - (DimCalendario[DiaSemanaNumero] - 1)

Com InicioSemana, você consegue criar um eixo semanal que não depende de “número da semana” (que muda conforme o padrão) e evita confusão em viradas de ano.

Passo 5: Marque a tabela como tabela de datas

No Power BI: selecione a DimCalendario > Ferramentas de tabela > Marcar como tabela de datas > escolha a coluna [Date].

Passo 6: Relacione a DimCalendario às tabelas de fatos

Crie relacionamentos 1:* da DimCalendario para cada fato que tenha data relevante (vendas, recebimentos, despesas, movimentação de estoque). Boas práticas para evitar confusão:

  • Use uma coluna “Data” do tipo Date em cada fato (sem hora).
  • Se uma tabela tiver múltiplas datas (ex.: data do pedido e data do pagamento), mantenha um relacionamento ativo para a data principal do relatório e use relacionamentos inativos para datas alternativas, ativando-os em medidas com USERELATIONSHIP quando necessário.

Inteligência de tempo na prática: medidas para dia, semana e mês

As medidas abaixo assumem que você já tem uma medida base de valor, por exemplo:

Vendas (R$) = SUM(FatoVendas[ValorTotal])

A partir dela, você cria medidas de comparação e acumulados. O padrão é: uma medida base bem definida e medidas derivadas para cada necessidade temporal.

1) Análise diária: hoje, ontem e variação

Para análise diária, é comum querer “Hoje”, “Ontem” e diferença. Porém, em relatórios, “hoje” depende do último dia com dados (nem sempre é o dia atual do calendário). Uma abordagem prática é usar o último dia com vendas no contexto atual.

UltimaDataComVendas = CALCULATE( MAX(DimCalendario[Date]), FILTER( ALL(DimCalendario[Date]), NOT ISBLANK([Vendas (R$)]) ) )
Vendas no Ultimo Dia = VAR d = [UltimaDataComVendas] RETURN CALCULATE( [Vendas (R$)], DimCalendario[Date] = d )
Vendas no Dia Anterior = VAR d = [UltimaDataComVendas] RETURN CALCULATE( [Vendas (R$)], DATEADD(DimCalendario[Date], -1, DAY), DimCalendario[Date] = d )

Observação: dependendo do modelo, você pode simplificar “dia anterior” usando apenas DATEADD no contexto do dia selecionado. A versão acima força a comparação com base no último dia com dados, útil para cartões (cards) sem filtro de data.

2) Análise semanal: semana atual, semana anterior e acumulado na semana

Para semana, você pode trabalhar com “início da semana” como agrupador. Em um gráfico, use InicioSemana no eixo e a medida de vendas como valor. Para comparar semana a semana:

Vendas Semana Anterior = CALCULATE( [Vendas (R$)], DATEADD(DimCalendario[Date], -7, DAY) )

Se você quer “acumulado na semana” (do início da semana até o dia selecionado), crie:

Vendas Acumuladas na Semana = VAR DataAtual = MAX(DimCalendario[Date]) VAR Inicio = DataAtual - (WEEKDAY(DataAtual, 2) - 1) RETURN CALCULATE( [Vendas (R$)], DATESBETWEEN(DimCalendario[Date], Inicio, DataAtual) )

Isso é útil para acompanhar o andamento da semana em tempo real, especialmente em negócios com metas semanais.

3) Análise mensal: MTD, mês anterior e comparação percentual

Para mês, os padrões mais usados são MTD (Month-to-Date) e comparação com o mês anterior.

Vendas MTD = TOTALMTD( [Vendas (R$)], DimCalendario[Date] )
Vendas Mes Anterior = CALCULATE( [Vendas (R$)], DATEADD(DimCalendario[Date], -1, MONTH) )
Vendas MTD Mes Anterior = CALCULATE( [Vendas MTD], DATEADD(DimCalendario[Date], -1, MONTH) )
Vendas Var % vs Mes Anterior = DIVIDE( [Vendas (R$)] - [Vendas Mes Anterior], [Vendas Mes Anterior] )

Exemplo prático de uso: em um cartão, mostre “Vendas MTD” e ao lado “Vendas MTD Mês Anterior” para comparar o ritmo do mês atual até o mesmo ponto do mês anterior (comparação mais justa do que comparar mês fechado com mês em andamento).

4) Análise mensal com “mesmo dia do mês” (comparação justa)

Se hoje é dia 10, comparar o MTD atual (1 a 10) com o mês anterior inteiro distorce. Uma forma simples é comparar MTD com MTD do mês anterior (medida acima). Outra opção é comparar até o mesmo “dia do mês” do período anterior, que é exatamente o que o MTD do mês anterior faz quando o contexto é o mesmo dia.

5) Acumulado no ano (YTD) e comparação com ano anterior

Vendas YTD = TOTALYTD( [Vendas (R$)], DimCalendario[Date] )
Vendas Ano Anterior = CALCULATE( [Vendas (R$)], DATEADD(DimCalendario[Date], -1, YEAR) )
Vendas YTD Ano Anterior = CALCULATE( [Vendas YTD], DATEADD(DimCalendario[Date], -1, YEAR) )

Em pequenos negócios, YTD é útil para enxergar sazonalidade e entender se o ano está “à frente” ou “atrás” do ritmo do ano anterior.

Calendário para caixa e recebimentos: datas diferentes, perguntas diferentes

Em vendas e caixa, a “data” pode significar coisas distintas: data da venda (competência) e data do recebimento (caixa). Para análise diária/semanal/mensal correta, você precisa escolher qual data está respondendo à pergunta do visual.

Ilustração conceitual de duas linhas do tempo paralelas: uma para venda (competência) e outra para recebimento (caixa), com ícones de carrinho e dinheiro; estilo infográfico simples, cores neutras, sem texto legível
  • Se a pergunta é “quanto vendi?”, use a data da venda.
  • Se a pergunta é “quanto entrou no caixa?”, use a data do recebimento.

Quando uma mesma tabela possui duas datas, o padrão é: um relacionamento ativo com a data mais usada e outro relacionamento inativo com a data alternativa. Em medidas específicas, você ativa o relacionamento inativo com USERELATIONSHIP.

Recebimentos (R$) = SUM(FatoRecebimentos[ValorRecebido])
Recebimentos por Data de Pagamento = CALCULATE( [Recebimentos (R$)], USERELATIONSHIP(DimCalendario[Date], FatoRecebimentos[DataPagamento]) )

Assim, você pode ter um painel mensal de “Vendas (competência)” e “Recebimentos (caixa)” usando o mesmo calendário, mas cada medida apontando para a data correta.

Semanas e meses em visuais: como montar e evitar armadilhas

Eixo diário

Use DimCalendario[Date] no eixo. Para evitar “buracos” em dias sem movimento, mantenha a DimCalendario contínua e, no visual, habilite a opção de mostrar itens sem dados quando fizer sentido (por exemplo, para ver dias zerados).

Eixo semanal

Prefira InicioSemana no eixo. Se você usar “Número da semana”, pode ter problemas na virada do ano (semana 1 aparece junto com semana 52 sem distinção). Se ainda quiser número da semana, crie também um identificador do tipo Ano-Semana.

AnoSemana = FORMAT(DimCalendario[Date], "yyyy") & "-S" & FORMAT( WEEKNUM(DimCalendario[Date], 2), "00" )

Se usar AnoSemana, ordene por uma coluna numérica equivalente (por exemplo, Ano*100 + Semana) para manter a ordem correta.

Eixo mensal

Use AnoMes no eixo para evitar misturar meses de anos diferentes. Exemplo: “2025-01, 2025-02…”. Se preferir exibir “Jan/2025”, crie uma coluna de rótulo e ordene por uma coluna numérica (Ano*100 + Mês).

AnoMesNum = YEAR(DimCalendario[Date]) * 100 + MONTH(DimCalendario[Date])
AnoMesLabel = FORMAT(DimCalendario[Date], "mmm/yyyy")

Depois, ordene AnoMesLabel por AnoMesNum.

Exemplo guiado: construindo um painel de análise diária, semanal e mensal

Objetivo do exemplo

Você quer um relatório com: (1) um gráfico diário das vendas dos últimos 30 dias, (2) um gráfico semanal das últimas 12 semanas, (3) um gráfico mensal dos últimos 12 meses, e (4) cartões com MTD e variação vs mês anterior.

Passo 1: Segmentação de data (filtro)

Adicione uma segmentação usando DimCalendario[Date]. Configure como “Entre” ou “Relativo” (por exemplo, últimos 30 dias) dependendo do layout. Se você usar filtros relativos, garanta que o calendário cobre até a data atual.

Passo 2: Gráfico diário (últimos 30 dias)

  • Eixo: DimCalendario[Date]
  • Valores: [Vendas (R$)]
  • Filtro do visual: data nos últimos 30 dias (ou use segmentação)

Se o gráfico ficar “serrilhado”, isso é normal em varejo; para suavizar a leitura, você pode adicionar uma média móvel de 7 dias.

Vendas Media Movel 7d = AVERAGEX( DATESINPERIOD(DimCalendario[Date], MAX(DimCalendario[Date]), -7, DAY), [Vendas (R$)] )

Passo 3: Gráfico semanal (últimas 12 semanas)

  • Eixo: DimCalendario[InicioSemana]
  • Valores: [Vendas (R$)]
  • Filtro do visual: últimas 12 semanas (você pode filtrar por data usando um intervalo de 84 dias)

Se você quiser comparar semana atual vs semana anterior em colunas lado a lado, use duas medidas: [Vendas (R$)] e [Vendas Semana Anterior]. Em muitos casos, um gráfico de linhas com as duas séries facilita a leitura.

Passo 4: Gráfico mensal (últimos 12 meses)

  • Eixo: DimCalendario[AnoMesLabel] (ordenado por AnoMesNum)
  • Valores: [Vendas (R$)]
  • Filtro do visual: últimos 12 meses

Para destacar sazonalidade, você pode adicionar uma linha de referência com a média dos 12 meses.

Vendas Media 12m = AVERAGEX( DATESINPERIOD(DimCalendario[Date], MAX(DimCalendario[Date]), -12, MONTH), [Vendas (R$)] )

Passo 5: Cartões mensais (MTD e variação)

  • Cartão 1: [Vendas MTD]
  • Cartão 2: [Vendas MTD Mes Anterior]
  • Cartão 3: [Vendas Var % vs Mes Anterior]

Formate a variação percentual como porcentagem e use regras de cor (condicional) para facilitar leitura (positivo/negativo), se o seu padrão visual permitir.

Erros comuns e como evitar

1) Usar a data da fato diretamente no eixo

Isso funciona em casos simples, mas você perde consistência quando precisa comparar períodos, mostrar dias sem movimento, ou usar funções de time intelligence. Prefira sempre o eixo vindo da DimCalendario.

2) Ter datas com hora e relacionamentos falhando

Se a fato tem DateTime e o calendário tem Date, o relacionamento pode não casar corretamente. Solução: crie uma coluna somente com a data na fato e relacione por ela.

3) Mês e dia da semana fora de ordem

Resolva com “Ordenar por coluna” (mês por número do mês, dia da semana por número do dia).

4) Comparar mês em andamento com mês fechado

Use MTD vs MTD do mês anterior para comparar “ritmo” do mês. Isso evita interpretações erradas como “este mês caiu”, quando na verdade o mês ainda não terminou.

5) Semana sem padrão definido

Defina se a semana começa no domingo ou segunda e aplique em todas as colunas/medidas. Se você usa WEEKNUM, escolha o parâmetro correto e mantenha consistente com WEEKDAY.

Checklist rápido para validar seu calendário

  • A DimCalendario tem uma linha por dia, sem buracos, cobrindo todo o período necessário.
  • A coluna principal é do tipo Date e a tabela está marcada como tabela de datas.
  • Meses e dias da semana estão ordenados por colunas numéricas.
  • Existe uma coluna de AnoMes (e/ou AnoMesNum) para eixos mensais.
  • Existe uma coluna de InicioSemana (ou AnoSemana) para eixos semanais consistentes.
  • Todas as tabelas de fatos se relacionam à DimCalendario por colunas Date (sem hora).
  • Medidas de MTD/YTD e comparações usam a DimCalendario[Date] como referência.

Agora responda o exercício sobre o conteúdo:

Em um relatório no Power BI, qual prática melhora a análise de períodos (dia, semana e mês) e evita comparações imprecisas quando o usuário muda filtros?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Uma DimCalendario contínua, marcada como tabela de datas e relacionada por colunas Date, fornece o contexto temporal correto para medidas e funções de inteligência de tempo, evitando que visuais quebrem e reduzindo comparações imprecisas.

Próximo capitúlo

Relacionamentos corretos e prevenção de duplicidade e ambiguidade

Arrow Right Icon
Baixe o app para ganhar Certificação grátis e ouvir os cursos em background, mesmo com a tela desligada.