Power BI: desenvolva dimensão calendário com a linguagem M de forma prática
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:
Feito isso, basta transformar a lista em tabela.
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.
Nesse caso, adicionei as colunas Ano, Mês, Trimestre e Nome do dia, obtendo o seguinte resultado:
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: