Power BI: desenvolva dimensão calendário com a linguagem M de forma prática

Power BI: desenvolva dimensão calendário com a linguagem M de forma prática
David Neves
David Neves

Compartilhe

Em todo escopo de projeto onde se faz necessária a manipulação de datas em diversas tabelas, é de suma importância ter uma dimensão calendário para enriquecer as análises em níveis temporais de forma comparativa, segmentada e centralizada.

Dentro do Microsoft Power BI, existem duas linguagens que nos possibilitam manipular dados: M e DAX. Elas são capazes de desenvolver uma tabela calendário e não afetar a performance do projeto por conta de sua criação. Caso queira conhecê-las e entender suas diferenças, deixo este artigo como sugestão de leitura.

Neste artigo, vamos entender as possibilidades de criação dentro da linguagem M com toda a sua praticidade de desenvolvimento e quando devemos utilizar dado que existem duas estruturas de calendário. Abaixo, veremos os modelos que podemos desenvolver e quais seriam os momentos de aplicá-los. Vamos lá?!

Calendário Estático

Imagine que um projeto necessite de uma dimensão calendário referente aos primeiros 60 dias de 2022. Neste caso, um calendário estático faz sentido pois as datas de início e fim são fixas.

Sendo assim, utilizaremos a função List.Dates() da seguinte forma:

List.Dates(Data de início {tipo data}, quantidade de dias {tipo numérico}, valor a ser incrementado {tipo duração})

Sabendo a estrutura da função, vamos configurá-la com a função #date() para a data de início e a função #duration() pra incrementar um dia em cada linha da tabela.

Ao criar uma Consulta Nula, o seguinte código foi adicionado dentro do Editor Avançado.

let
listaDatas = List.Dates(#date(2022, 01, 01), 60, #duration(1, 0, 0, 0))
in
listaDatas

Teremos como resultado a seguinte lista:

Print da lista de datas exibidas dentro do Editor do Power Query.

Feito isso, basta transformar a lista em tabela.

Print da aba “transformar”. Nela é apresentado de forma destacada, por um retângulo vermelho, o botão de conversão da lista de datas em tabela dentro do Power Query. Print da tabela com uma coluna contendo as datas da lista criada dentro do Power Query.
Banner da Escola de Data Science: Matricula-se na escola de Data Science. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!

Calendário Dinâmico

Seguindo o nosso pensamento, imagine que surgiu uma nova demanda onde precisa-se de uma dimensão calendário trazendo os dados de 01/01/2022 até o dia corrente.

Nessas situações ainda podemos utilizar a função List.Dates(), porém precisamos fazer algumas alterações por conta do resultado ser dinâmico, como: identificar quantos dias existem desde a data inicial até o dia corrente.

Dessa forma, vamos atribuir os valores das datas inicial e final em suas respectivas variáveis. Para a data final, utilizaremos duas funções: DateTime.LocalNow() para trazer a data e o horário do dia corrente e a função Datetime.Date() para extrair somente a data da função anterior.

dataInicial = #date(),
dataFinal = DateTime.Date(DateTime.LocalNow()) 

Em seguida, vamos calcular o número de dias fazendo a diferença entre as datas final e inicial através da função Duration.Days().

numeroDias = Duration.Days(dataFinal - dataInicial) 

Por fim, vamos popular a função List.Dates() com seus parâmetros.

let
dataInicial = #date(2022, 01, 01),
dataFinal = DateTime.Date(DateTime.LocalNow()) ,
numeroDias = Duration.Days(dataFinal - dataInicial),
listaDatas = List.Dates(dataInicial, numeroDias, #duration(1, 0, 0, 0))
in
listaDatas

Assim, basta transformar a lista de datas em tabela da mesma forma que foi feito no exemplo estático.

Melhorando a tabela

Aproveitando que a dimensão foi criada dentro do Power Query, podemos fazer alguns ajustes que vão agregar valor analítico, como adicionar colunas referente ao nome do dia, mês, ano e trimestre. Para isso, precisamos definir a coluna de datas como tipo de data antes de qualquer alteração.

Feito isso, basta acessarmos as opções de Datas através da guia Adicionar Coluna e escolher qual tipo de informação temporal gostaríamos de obter.

Print da aba “adicionar colunas”. Essa opção está destacada juntamente com a opção “data” no topo do editor do Power Query.

Nesse caso, adicionei as colunas Ano, Mês, Trimestre e Nome do dia, obtendo o seguinte resultado:

Print da tabela com 5 colunas possuindo dados de data, ano, mês, trimestre e nome do dia, seguindo a ordem da esquerda para direita.

Indo além

As possibilidades de criação são quase infinitas quando se entende a estrutura das funções. Então, deixo como sugestão de leitura da documentação referente as funções de datas para que você conheça outras formas de manipulação.

Por ser uma linguagem de tratamento, nos possibilita a manipulação de datas de forma mais detalhada. Como exemplo, podemos criar uma coluna que não só identifica os feriados de acordo com a data avaliada como também traz informações referente a esses feriados.

Caso tenha interesse em se aventurar no mundo do tratamento de dados dentro do Power Query, o curso Power BI Desktop: tratamento de dados no Power Query é um bom ponto de partida.


Créditos:

Escrita e produção técnica:

Produção didática:

David Neves
David Neves

Com uma trajetória versátil que percorre front-end, back-end e infraestrutura, descobri minha paixão por desvendar o potencial dos dados. Hoje, como um especialista em Business Intelligence, com foco no Power BI, encontro minha motivação na disseminação de conhecimento de alta qualidade.

Veja outros artigos sobre Data Science