Artigo escrito por: Pedro Eloy
Atualizado em 03/02/2025 por: Letícia Anacleto
Você já montou um relatório no Power BI que simplesmente não filtra por data direito? E aquela sensação desesperadora de ver “dezembro” saindo antes de “abril” no gráfico?
O problema quase nunca é o visual, é o modelo. Mais especificamente a ausência (ou má criação) de uma tabela dCalendário.
Neste post você vai aprender de uma vez por todas a montar a sua tabela calendário no Power BI usando Power Query do jeito certo.
O que são fatos e dimensões?
Fatos e dimensões são dois tipos de tabelas que podemos utilizar no Power BI. As tabelas-fato representam o dia a dia de uma operação. Ela funciona apresentando o que vem acontecendo na nossa empresa.
Por exemplo, vamos supor que tenhamos uma loja de açaí. Cada venda realizada possui um conjunto de características. A venda ocorre em data e hora específicas, para determinado cliente, variando o tamanho do copo, acompanhamentos, o local de consumo, que pode ser delivery, ou no próprio estabelecimento, etc.
Transferindo esse exemplo para o Power BI, podemos pensar da seguinte forma. A dimensão é uma tabela que lista os tipos de atributos que estão presentes na fato. A venda que acontece na fato informa o tamanho do copo que foi comprado. Mas é na dimensão que eu possuo a lista de copos que podem ser escolhidos. É na tabela dimensão que ficam armazenadas todas as características referentes ao atributo; no caso, o tamanho do copo do açaí.
Por questões de performance, na tabela fato só armazenamos o código, enquanto na respectiva dimensão, estão as informações referentes a ele.
O que é uma dCalendário no Power BI?
Agora que você já sabe o que são tabelas fatos e dimensões, está pronto(a) para entender o conceito da dCalendario.
A tabela calendário (ou dCalendario) é uma tabela de dimensão que concentra todas as datas do seu modelo e seus atributos de tempo, ano, número do mês, nome do mês, dia, dia da semana, e qualquer outra informação que for relevante de acordo com a regra de negócio.
É graças a dCalendário que o Power BI pode ser usado para entender o tempo de forma correta e consiga calcular
É ela que permite que o Power BI entenda o tempo de forma correta e consiga calcular coisas como:
- Year To Date (YTD) – uma métrica que calcula valores acumulados desde o início do ano corrente até uma data específica;
- Month To Date (MTD) – cálculo do acumulado de um valor desde o primeiro dia do mês atual até a data selecionada ou atual;
- Comparações entre períodos;
- Acumulados;
- Crescimento mês a mês.
Por que você NÃO deve usar a data da tabela fato
Tá, mas se já tem a opção de data lá na Tabela Fato, por que não usar ela direto? Esse é um erro clássico. E pode até funcionar por um tempo até o dia em que os dados estiverem dando errado e você não sabe o por quê.
Usar a coluna de data direto da tabela fato gera problemas como:
- Time intelligence quebrando do nada;
- Dificuldade para comparar períodos;
- Vários fatos com datas diferentes sem padrão;
- Relacionamentos confusos;
- Relatórios que só funcionam “na base da fé”.
Se você quer um modelo previsível e escalável, a regra é simples:
Toda análise temporal passa por uma única tabela dCalendário, e você vai aprender agora a montar uma da forma correta.
Criando a dCalendario no Power Query
Passo 1: Criar uma nova consulta em branco
No Power BI Desktop:
- Vá em Transformar dados
- Clique em “Nova fonte”
- Escolha “Consulta em branco”
- Abra o Editor Avançado

Passo 2: List Dates
Para começar a criar a dCalendário do zero use a função List.Dates. Ela tem os seguintes parâmetros:
- Data inicial
- Quantidade de registros que essa lista vai ter.
- Diferença entre cada registro.
Portanto, para criar a dCalendario, precisamos definir uma data válida no primeiro parâmetro, a quantidade de registros, e informar que a distância entre cada registro é um dia.

Informe os parâmetros a seguir e clique na opção de invocar função.

O resultado será a figura abaixo.

Nós temos uma lista que começa na data que especificamos, com a quantidade de registros informada e a diferença entre cada um da forma que definimos. A lista começa no dia 21/03/2012 e vai até o dia 30/03/2012. Um ponto a observar é que a quantidade de registros conta com a primeira data.
Passo 3: configurando a Query
Vamos reparar na barra de fórmulas e ver o código que essa função retornou.

O primeiro parâmetro é a data. Para isso, a função gerou uma constante de data utilizando a expressão #date.
O segundo parâmetro é a quantidade de registros, um número fixo de 10. E o terceiro é a distância temporal entre um registro e outro. Os formatos dessas expressões são:
- #date(ano, mês, dia);
- #duration(dia, hora, minuto, segundo)
Precisamos personalizar a nossa lista de datas, para isso, copie o código gerado e renomeie a consulta em branco para dCalendario. Abra o editor avançado e adicione o código de antes no parâmetro da função List.Dates, conforme a imagem abaixo:

Explore novas possibilidades. Altere a data e a quantidade de dias para entender o comportamento dessa função.
Passo 4: Construindo a tabela
Agora vamos transformar essa lista em uma tabela.
- Na aba “Transformar”, procure a opção “To Table” e clique em OK (o resultado será uma coluna com as datas);
Seu resultado será o seguinte:

Agora, vamos criar as demais colunas que representam os atributos dessa data. Com a coluna de data selecionada, clique na aba Adicionar Coluna e refaça os passos abaixo.

É possível renomear essa coluna assim que ela é criada. Basta editar a fórmula onde está escrito “Year”. Esse é o parâmetro que representa o nome dessa coluna. Altere-o para Ano.

Com a coluna de data selecionada novamente, crie a coluna que representa o número do mês.

Assim como fizemos para o ano, altere o nome da nova coluna para MesNum.
Seguindo os passos anteriores, replique-os para algumas novas colunas. Crie o nome do mês, o dia e o dia da semana. Renomeie cada coluna criada conforme fizemos anteriormente.
Por fim, dê um duplo clique no nome da coluna de data para renomeá-la e escreva Data.
Se você fizer tudo certo, seu resultado ficará assim.

Criando uma tabela automática com datas dinâmicas
Ótimo. Você agora já sabe criar uma tabela de dimensão do tipo calendário. Porém, a que criamos está com data de início fixa. Como fazer para que ela seja atualizada de forma dinâmica?
É um processo bem simples, e nós vamos aprendê-lo agora.
Na Página Inicial, clique na opção Inserir Dados.

Você vai colocar uma coluna de data com o nome e valor que quiser.

Dê um nome à tabela que está inserindo e clique em OK. Eu vou chamá-la de Vendas.
Na nossa dCalendario, queremos que ela comece no primeiro dia da tabela e termine no último dia dessa mesma tabela. Para isso, vá na dCalendario, e abra o editor avançado.
O código dela está bem maior agora, mas vamos focar somente na parte que importa.

Antes dessa etapa, vamos precisar criar uma variável que receba o valor da menor e da maior data da tabela que criamos. Faremos isso usando as funções List.Min e List.Max, respectivamente.

Bem, agora precisamos definir a quantidade de dias que separa uma data da outra.

Criamos a variável qtdDias que nos retorna justamente o valor que precisamos. Usamos a função Duration.TotalDays passando a diferença entre as datas como argumento. Ao final, somamos mais um para não perdermos nenhuma data entre esse intervalo.
Por exemplo, quantos números há entre 2 e 8? Você pode contar 2, 3, 4, 5, 6, 7, 8. Ou seja, sete. Mas e se fosse um número maior? Você não iria contar manualmente. De que outro jeito podemos obter essa resposta? Basta calcular 8 – 2 = 6 + 1 = 7. O maior número menos o menor; ao resultado, soma-se 1. É o mesmo processo com as nossas datas.
Bem, agora ficou fácil, basta substituir as variáveis que criamos no parâmetro da função List.Dates.

Depois, clique em OK.
Vamos alterar o tipo da nossa coluna de data. Clique no ícone da figura abaixo e escolha a opção Data.

A sua tabela deve ter ficado mais ou menos parecida com a da figura abaixo.

Faça um teste e altere o valor das datas que você inseriu na outra tabela e veja se a dCalendario irá atualizar. Se tudo estiver certo, clique em Fechar e Aplicar.
Configurações importantes
Ao fazer isso, as tabelas serão carregadas no modelo. Existem algumas configurações importantes que devemos fazer quando criamos uma dCalendario.
Por padrão, o nome do mês vem classificado em ordem alfabética, porque cada coluna é ordenada por si própria. Entretanto, o mês é relativo ao tempo, então deve ser classificado em ordem cronológica.
Conseguimos fazer isso ao classificar a coluna de nome do mês pela coluna de número do mês. Clique na coluna de MesNome e na opção Classificar por Coluna, escolha a coluna MesNum.

Agora, mas não menos importante. Precisamos definir que esta é uma tabela de datas. Isso, para que possamos utilizar as funções de inteligência de tempo com os demais atributos da tabela, e não só com a coluna de data.
Clique com o botão direito em cima da tabela e escolha a opção Marcar como uma tabela de data.

Na janela que se abre, escolha a coluna de data e, por fim, clique em OK.

Nossa tabela dCalendario está configurada.
Pronto! Agora você já tem uma tabela dCalendário prontinha dentro do seu Power BI usando Power Query.
Mas antes de sair usando, dá um check aqui para ver se você fez tudo direitinho:
- Existe apenas uma tabela calendário no modelo
- Ela está relacionada às tabelas fato
- A coluna de data está marcada corretamente
- Mês está ordenado pelo número do mês
- O intervalo de datas cobre todo o período necessário
Se tudo isso estiver ok, você está em um bom caminho.
A dCalendário é muito impotante
A tabela dCalendário parece um detalhe, mas é ela que separa um relatório que “até funciona” de um modelo de BI confiável.
Se você trabalha com Power BI, mais cedo ou mais tarde vai precisar dela. Melhor fazer direito desde o começo!
E se você quiser aprender a construir uma dCalendário e também a desenvolver outras funções no Power BI de forma um pouco mais aprofundada, a Xperiun tem um Minicurso Gratuito de Power BI te esperando aqui!
Nos siga nas redes sociais oficiais!

