Olá, pessoal!

Hoje veremos o uso da função DATEDIFF no Power BI.
Antes de começarmos, abaixo o link da base que iremos utilizar:

Link Base de Dados

No exemplo, vamos utilizar um cenário muito comum no dia-a-dia, o uso de range de datas.

A empresa MR emite notas fiscais para seus clientes e a mesma precisa acompanhar quanto irá receber a curto prazo (próximos seis meses). Além disso, ela possui pagamentos que já venceram.

Portanto, precisa saber quantas e qual o valor dessas NFs.

Para isso, ela irá agrupar em ranges específicos para ter uma visão geral dos pagamentos.
Vejamos:

Vencer

  • A vencer em até 30 dias
  • A vencer entre 31 a 60 dias
  • A vencer entre 61 a 90 dias
  • A vencer entre 91 a 180 dias
  • A vencer a mais de 180 dias

Vencidos

  • Vencidos a 30 dias
  • Vencidos entre 31 a 60 dias
  • Vencidos entre 61 a 90 dias
  • Vencidos entre 91 a 180 dias
  • Vencidos a mais de 180 dias

Agora que classificamos os ranges, precisamos saber qual será a data base para realizar os cálculos.
No nosso caso verificaremos quantos dias a partir de hoje o boleto irá vencer ou já venceu.

Para obter a data de hoje, criaremos uma coluna utilizando a função Today ().


Agora, vamos criar uma tabela com a data do vencimento da NF e a data de hoje para conseguirmos validar se o que está sendo calculado está correto.

O próximo passo será saber quantos dias se passaram desde o vencimento até hoje. Precisaremos de uma coluna que calcule a diferença entre esses dias. A função que realiza esse cálculo é a DATEDIFF.

Diferença em Dias = DATEDIFF(dCalendario[Hoje];dCalendario[Data Vencimento];DAY)

Ao tentar realizar o cálculo, ele retorna um erro:

“In DATEDIFF function, the start date cannot be greater than the end date”
“Na função Datediff, a data inicial não poder ser maior que a data final”

O que isso quer dizer?

Quando a data do vencimento for maior que a data de referência, ele não conseguirá efetuar o cálculo.

Para contornar essa situação, é preciso entender que teremos datas menores e maiores que a data referência e, por isso, precisaremos criar condições no Power BI para que ele consiga realizar os cálculos em ambos os cenários.

Quando a Data Vencimento for maior que a data de Hoje, ele contará quantos dias faltam de hoje até lá e acrescentará o sinal de -, afinal, ainda não ocorreu o vencimento. Senão, ele contará quantos dias já passaram e retornará o valor.

Diferença em Dias =
IF(dCalendario[Data Vencimento] > dCalendario[Hoje];
– DATEDIFF(dCalendario[Hoje];dCalendario[Data Vencimento];DAY);
DATEDIFF(dCalendario[Data Vencimento];[Hoje];DAY))


Verificando na tabela de validação:


Agora vamos calcular o range de períodos para categorizar por faixa de pagamento e/ ou atraso.
Vamos utilizar o nosso bom e velho SWITCH, conforme abaixo:

Range = SWITCH(
TRUE()
// Vencidos
;dCalendario[Diferença em Dias] >= 0 &&  dCalendario[Diferença em Dias] <= 30 ;”Vencidos até 30 dias”
;dCalendario[Diferença em Dias] >= 31 && dCalendario[Diferença em Dias] <= 60 ;”Vencidos entre 31 a 60 dias”
;dCalendario[Diferença em Dias] >= 61 && dCalendario[Diferença em Dias] <= 90 ;”Vencidos entre 61 a 90 dias”
;dCalendario[Diferença em Dias] >= 91 && dCalendario[Diferença em Dias] <= 180;”Vencidos entre 91 a 180 dias”
;dCalendario[Diferença em Dias] >= 181 ;”Vencidos a mais de 180 dias”
// Vencer
;dCalendario[Diferença em Dias] <   0 &&  dCalendario[Diferença em Dias] >= -30 ;”A vencer em até 30 dias”
;dCalendario[Diferença em Dias] <= -31 && dCalendario[Diferença em Dias] >= -60 ;”A vencer entre 31 a 60 dias”
;dCalendario[Diferença em Dias] <= -61 && dCalendario[Diferença em Dias] >= -90 ;”A vencer entre 61 a 90 dias”
;dCalendario[Diferença em Dias] <= -91 && dCalendario[Diferença em Dias] >= -180;”A vencer entre 91 a 180 dias”
;dCalendario[Diferença em Dias] <= -181 ;”A Vencer a mais de 180 dias” )

Analisando  na tabela de validação:


Finalizado os cálculos e condições, podemos realizar as nossas análises, já que temos o range pronto. Vamos criar medidas com o total de NFs e o valor total por faixa.

Para obter a Quantidade, vamos assumir que cada linha da tabela seja uma NF, logo, a função COUNTROWS nos atenderá nessa condição.

Total Clientes = COUNTROWS (Range)

Para saber o Valor Total, vamos utilizar a função SUM

Valor Total = SUM(Range[Total])


Abaixo, como ficou o range:


Agora, precisamos saber quantos % os valores representa do total. Esse será o assunto do próximo post. Não perca!

Dúvidas? Deixe nos comentários!

Até a próxima.
Meirieli Ribeiro

Power BI – Usando a Função Datediff

25 ideias sobre “Power BI – Usando a Função Datediff

  • 8 de agosto de 2019 em 4:58 PM
    Permalink

    Ocorreu o seguinte erro de sintaxe durante a análise: Token inválido, Linha 4, Deslocamento 76, ”.

    Deu esse erro, na minha tabela RANGE vencidos – vencer, oque posso fazer neste caso?

    Resposta
    • 10 de agosto de 2019 em 3:04 PM
      Permalink

      Olaa Nadia

      Tudo bem?
      Conseguiria por a caso compartilhar um print ou o modelo de dados?
      Poderia subir isto em um drive e nos mandar.

      Abs
      Igor

      Resposta
  • 16 de julho de 2019 em 8:19 PM
    Permalink

    Olá, em minha empresa trabalhamos com período de fechamento de mensal diferente do mês do calendário. O período compreende entre os dias 26 e 25 do mês subsequente. Exemplo: Janeiro de 2019 (Faturamento entre 26/dez/2018 a 25/jan/2019). Como poderia resolver isso em DAX? No excel foi facil usando formula “Se”, mas no PBI estou apanhando. Obrigado

    Resposta
    • 10 de agosto de 2019 em 3:28 PM
      Permalink

      Bom dia Smilys
      Tudo bem?
      Eu acho melhor, elaborar isto no calendário em M.
      Lá poderíamos trabalhar com algum parametro na tabela calendário.
      Ja tentou?
      Tenta procurar sobre Fiscal Calendar PowerBI.

      Abss
      Igor

      Resposta
  • 25 de junho de 2019 em 2:05 AM
    Permalink

    Turma, como faço pra calcular colunas de datas (DATEDIFF) entre duas tabelas no Power BI?

    Tenho uma tabela gerada de uma planilha que tem uma coluna com a data de abertura de um processo, e em uma consulta de SQL tenho outra coluna com a data de fechamento desse processo. Ambas tem o código do cliente, onde posso relacioná-las.

    Resposta
    • 27 de junho de 2019 em 5:17 PM
      Permalink

      Olá, Thyego!

      Para considerar as informações de outra tabela, vc pode utilizar a função RELATED.

      Algo como DATEDIFF(DatadaSuaTabela01;RELATED(DatadaSuaTabela02);DAY)

      Teste e veja se funciona.

      Abs.

      Resposta
  • 6 de maio de 2019 em 3:25 PM
    Permalink

    Amigos Alguem poderia me ajudar a aplicar a formula, eu tenho minha tabela vendas com data solicitação queria pegar esse data como devo fazer?
    Obrigado

    Resposta
    • 9 de maio de 2019 em 5:22 AM
      Permalink

      Oi, Ronnie!

      Sua coluna está formatada como data? Uma opção para ter outra data na diferença, seria o today().

      Veja se funciona.

      Abs!

      Resposta
  • 24 de abril de 2019 em 4:53 PM
    Permalink

    Estou trabalhando em uma Planilha e nao consigo acessar a opção Média no minha medida, apenas contagem e Contagem (Distinta).
    Como resolvo isso?

    Resposta
    • 25 de abril de 2019 em 6:14 AM
      Permalink

      OI, Gabriel!

      Se for medida filter context, utilize a função Average.
      Se for row context, a Averagex.

      Se tiver dúvidas, me envie com mais detalhes do teu cenário que te ajudo.

      Abs! 🙂

      Resposta
  • Pingback:Power BI – Cálculo de % (porcentagem) – BI – Do Conceito à Prática

  • 5 de abril de 2019 em 3:30 AM
    Permalink

    Gentileza informar como coloco a as informações do Ranger de datas.

    Resposta
    • 15 de abril de 2019 em 11:35 PM
      Permalink

      Nesse caso, voce pode usar a linguagem M. Ordene a coluna de data, verifique se as datas estão como valores únicos (sem repetição na coluna) e add um índica na tabela. Assim, o seu rank será sempre por data.

      Veja se resolve e responde aqui depois! 🙂

      Resposta
  • 8 de março de 2019 em 8:08 PM
    Permalink

    Olá, do passo que você classificou o Range para o próximo que você conta os valores está faltando algum passo? Você criou outra tabela? Como colocou a coluna ordem e como colocou os valores unicos da coluna Range?
    Abs,

    Resposta
    • 8 de março de 2019 em 8:49 PM
      Permalink

      Olá, Maiara!

      Ali eu fiz um ranking, utilizando a RANKX, mas não fiz esse passo-a-passo no post.

      Os valores ficaram únicos pq a única coluna “quebrando” os valores era a faixa. Logo, ele agrupou dentro de todas as faixas os valores e quantidade de clientes. 🙂

      Att.
      Meirieli Ribeiro

      Resposta
  • 22 de fevereiro de 2019 em 3:09 PM
    Permalink

    Bom dia.
    por gentileza, utilizaei o exemplo:

    Diferença em Dias =
    IF(dCalendario[Data Vencimento] > dCalendario[Hoje];
    – DATEDIFF(dCalendario[Hoje];dCalendario[Data Vencimento];DAY);
    DATEDIFF(dCalendario[Data Vencimento];[Hoje];DAY))

    porem se o titulo estiver vencido mais a anos……o calculo permanece apenas ao DIA, como retornar corretamente?

    Resposta
    • 8 de março de 2019 em 12:43 AM
      Permalink

      Oi, Lealdo!

      Troca o DAY por YEAR na fórmula:

      Diferença em Anos =
      IF(dCalendario[Data Vencimento] > dCalendario[Hoje];
      – DATEDIFF(dCalendario[Hoje];dCalendario[Data Vencimento];YEAR);
      DATEDIFF(dCalendario[Data Vencimento];[Hoje];YEAR))

      Veja se funciona e me informe.

      Abs.

      Resposta
  • 16 de janeiro de 2019 em 4:23 PM
    Permalink

    Olá,
    Tenho uma situação onde há duas colunas de data (previsto e realizado).
    Quero montar um gráfico mas não consigo relacionar o campo Data da minha tabela Calendário com dois campos de Data. Como resolver isso?

    Resposta
    • 17 de janeiro de 2019 em 1:51 AM
      Permalink

      Olá, Marcos!
      Tudo bem?

      Um relacionamento de data você terá de deixar ativo e o outro inativo. Para ativar o funcionamento da data inativa, vc terá de utilizar a função USERELATIONSHIP.

      Ex:

      Medida usando data ativa:

      Count(DataAtiva)

      Medida usando data inativa:
      calculalate(count(DataInativa);USERELATIONSHIP(DataDCalendario,DataSuaTabela))

      O uso da Calculate fez-se necessário pela avaliação do contexto de data inativa da sua DCalendario.

      Se tiver dúvida, à disposição. 🙂

      Resposta
  • 26 de outubro de 2018 em 5:44 PM
    Permalink

    E se eu tiver o campo data da compra / o valor da parcela / e a quantidade de parcelas, como faço pra saber quanto tenho pra receber nos próximos meses?

    Resposta
    • 27 de outubro de 2018 em 8:45 PM
      Permalink

      Vc pode criar uam flag:

      Quando a data da parcela for menor que hoje, “Vencido”
      Quando a data da parcela for igual hoje “Vencendo Hoje”
      Quando a data da parcela for maior que hoje, “A vencer”

      Assim, vc tem categorizado a sua medida de valor por prazos, conforme acima.

      E ainda acompanha do seu total previsto X realizado, quanto já recebeu e quanto tem a receber. 🙂

      Abs.

      Resposta

Deixe uma resposta para RedViper Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *