image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image
Daniel BINS
Daniel BINS27/06/2024 10:11
Compartilhe
Microsoft Certification Challenge #3 DP-100Recomendados para vocêMicrosoft Certification Challenge #3 DP-100

Como calcular dias úteis com Power BI

  • #Power BI

Neste artigo vamos ver como calcular os dias úteis entre duas datas no Power BI utilizando DAX.

Você vai utilizar neste artigo as seguintes funções DAX:

  • DATATABLE()
  • SELECTCOLUMNS()
  • WEEKDAY()
  • WEEKNUM()
  • TODAY()
  • DATEDIFF()
  • NETWORKDAYS()

Criando uma tabela

Primeiro vamos criar uma tabela que vai servir como exemplo. Vamos criar uma tabela para guardar os nomes de clientes e sua respectiva data de cadastro.

Ao abrir o Power BI, clique na guia "Modelagem" e depois clique no botão "Nova tabela".

image

Deverá aparecer na parte superior da tela um campo onde você vai escrever sua expressão DAX. Vai aparecer "Tabela = " e o cursor vai estar no final, aguardando você digitar a sua expressão. 

image

Você irá substituir tudo pela seguinte expressão, e no final pressionar ENTER.

Clientes =
DATATABLE(
"Nome", STRING,
"Email", STRING,
"DataCadastro", DATETIME,
{
{'João', 'joao@teste.com.br','2024-01-01'},
{'Lucas', 'lucas@teste.com.br','2024-01-17'},
{'Matheus', 'matheus@teste.com.br','2024-02-12'},
{'Thiago', 'thiago@teste2.com.br','2024-02-20'},
{'Madalena', 'madalena@teste.com.br','2024-03-02'},
{'Pedro', 'pedro@teste.com.br','2024-03-11'},
{'David', 'david@teste2.com.br','2024-03-29'},
{'Salomão', 'salomao@teste.com.br','2024-03-30'},
{'Zedebeu', 'zebedeu@teste.com.br','2024-04-06'},
{'Josue', 'josue@teste2.com.br','2024-06-05'}
}
)

image

Sua tabela deve aparecer na aba "Dados", localizada no lado direito da tela.

image

O comando DATATABLE recebe uma lista de campos (nome e tipo de dados), e na sequência uma lista de registros, que devem ser inseridos na mesma ordem em que os campos foram criados.

Os tipos de dados utilizados no DAX são os seguintes: Integer, Double, String, Boolean, Currency e DateTime.

O tipo de dados String se refere a textos, Integer, Double e Currency se referem a números, Boolean é do tipo verdadeiro/false e Datetime armazena datas e horas.

Para ver os dados da tabela que você criou, basta clicar no botão "Modo de exibição de tabela", localizado no lado esquerdo da tela

image

Exemplos de manipulação de datas

Com esta tabela criada, vamos explorar alguns recursos do DAX. Com base na data de cadastro, vamos retornar o dia da semana, o número da semana e a quantidade de dias entre a data de cadastro e a data atual.

Para isso, vamos criar uma nova tabela com base nesta tabela de clientes. Repita o processo anterior que você executou para criar a tabela de clientes, ou seja, clique no botão "Nova tabela" da aba "Modelagem"

ClientesDatas = 
SELECTCOLUMNS(
'Clientes',
"Nome",[Nome],
"Email", [Email],
"DataCadastro", [DataCadastro], 
"DiaCadastro", WEEKDAY([DataCadastro]),
"SemanaCadastro", WEEKNUM([DataCadastro]),
"DiasCadastrado", DATEDIFF([DataCadastro],TODAY(),DAY)
)

image

A função SELECTCOLUMNS retorna como resultado uma tabela. Ele recebe como primeiro parâmetro o nome da tabela, e como parâmetros seguintes as colunas que desejamos retornar. Primeiro informamos qual o alias (apelido) desejado e na sequência informamos o nome da coluna entre chaves. Podemos usar SELECTCOLUMNS para criar novas colunas, como foi o caso das colunas "DiaCadastro", "SemanaCadastro" e "DiasCadastrado", que não existiam em nossa tabela de Clientes.

A função WEEKDAY retorna um número inteiro que representa o dia da semana da data informada. Por padrão, o dia pode variar entre 1 (domingo) e 7 (sábado). Já a função WEEKNUM retorna um número que representa o número da semana no ano atual. 

E por último a função DATEDIFF permite retornar a quantidade de dias entre a data inicial, que é a data de cadastro, e a data final, representada pelo retorno da função TODAY. O terceiro parâmetro informa que o número inteiro retornado pelo DATEDIFF se refere a dias.

Criando uma tabela de feriados

Nosso objetivo é calcular os dias úteis entre duas datas. Para isso, precisamos calcular a diferença de dias entre duas datas e remover os finais de semana e os feriados.

Para implementar nossa solução, vamos precisar criar uma tabela contendo os feriados. Repita os passos que fizemos para criar a tabela Clientes e insira os seguintes dados:

Feriados = 
DATATABLE(
"Data", DATETIME,
{
{'2024-01-01'},
{'2024-03-29'},
{'2024-04-21'},
{'2024-05-01'},
{'2024-09-07'},
{'2024-10-12'},
{'2024-11-02'},
{'2024-11-15'},
{'2024-12-25'}
}
)

image

Com a tabela de Feriados criada, chegou a hora de calcular a diferença de dias úteis entre a data atual e a data de cadastro. Para isso, vamos utilizar a função NETWORKDAYS

Calculando dias úteis com a função NETWORKDAYS

A função NETWORKDAYS recebe quatro argumentos, que são:

1 - A data inicial

2 - A data final

3 - Um código representando os dias da semana que devem ser ignorados.

4 - Uma tabela contendo datas que devem ser ignoradas.

Em nosso exemplo, a data inicial é o campo DataCadastro da tabela Clientes. A data final é a data de hoje, ela pode ser obtida utilizando a função TODAY(). 

Os códigos que podem ser utilizados para ignorar certos dias da semana é o seguinte:

1 ou nada - Sábado e Domingo

2 - Domingo e Segunda

3 - Segunda e Terça

4 - Terça e Quarta

5 - Quarta e Quinta

6 - Quinta e Sexta

7 - Sexta e sábado

11 - Somente Domingo

12 - Somente Segunda

13 - Somente Terça

14 - Somente Quarta

15 - Somente Quinta

16 - Somente Sexta

17 - Somente Sábado

Por último, a tabela que contém as datas que devemos ignorar na contagem de dias úteis é a tabela Feriados, que foi criada por último.

Chegou a hora de implementar a nossa fórmula para calcular dias úteis. Vamos criar uma nova tabela com base em nossa tabela de Clientes e adicionar colunas para calcular a diferença de dias considerando a diferença de dias normal e a diferença de dias apenas considerando os dias úteis:

ClientesDiasUteis = 
SELECTCOLUMNS(
'Clientes',
"Nome",[Nome],
"Email", [Email],
"DataCadastro", [DataCadastro],
"DiasCadastrado", DATEDIFF ([DataCadastro],TODAY(),DAY),
"DiasUteisCadastrado", NETWORKDAYS([DataCadastro],TODAY(), 1, Feriados) 
) 

image

Nossa implementação ficou da seguinte forma:

NETWORKDAYS([DataCadastro],TODAY(), 1, Feriados) 

Perceba que no terceiro parâmetro informamos o código 1, que informa a função NETWORKDAYS que ela deve ignorar sábados e domingos.

Este é o nosso resultado final:

image

Referência

https://dax.guide/networkdays/

Compartilhe
Recomendados para você
Suzano - Análise de Dados com Power BI
XP Inc. - Cloud com Inteligência Artificial
Microsoft AI for Tech - Azure Databricks
Comentários (0)
Recomendados para vocêMicrosoft Certification Challenge #3 DP-100