Ir para conteúdo
  • 0

próxima data Mês Anterior


Ir para solução Solucionado por champanjonata ,

Pergunta

  • Alunos
Postado

Olá pessoal.

Caso a medida com dateadd(datas, -1, month) não encontrar valor (nesse caso não tem 03/06/2023, como faria para pegar a próxima data maior que a do mês anterior (no caso 05/06/2023) ?

 

image.png.c91c25e8cf04c567c07e39e197f3c391.png

9 respostass a esta questão

Posts Recomendados

  • 0
  • Alunos
  • Solução
Postado
1 hora atrás, Leandro Del Rio disse:

Normalmente a dcalendario contempla todos os dias dos anos em que existem dados. Na própria dcalendario você pode caracterizar os dias como úteis ou não úteis.

Acredito que não consigo te ajudar.

Consegui resolver com a medida abaixo:

Basicamente a variável: vDataMaisProxima retorna o que eu preciso. Para 90% dos casos vValor vai ser útil mas caso não tenha valor aí uso o vAlternative...


image.png.7e158baf5e693fa2040545a72934e131.png

  • 0
  • Alunos
Postado (editado)

@champanjonata,
 

Você pode usar a função COALESCE para quando não retornar um valor para o DATEADD. A segunda parte da solução é utilizar a lógica para buscar a menor datam que seja  maior que a data do contexto.

Vê se consegue aplicando essa lógica.

Se não conseguir, retorna com a dúvida que ajudo com o código.

Editado por Leandro Del Rio
Correção
  • 0
  • Alunos
Postado
4 minutos atrás, Leandro Del Rio disse:

@champanjonata,
 

Você pode usar a função COALESCE para quando não retornar um valor para o DATEADD. A segunda parte da solução é utilizar a lógica para buscar a menor datam que seja  maior que a data do contexto.

Vê se consegue aplicando essa lógica.

Se não conseguir, retorna com a dúvida que ajudo com o código.

É justamente na lógica que estou quebrando cabeça... deveria ser data > (data - 30) ou pelo menos penso que seria assim....

  • 0
  • Alunos
Postado

@champanjonata,

segue fórmula:

Qtd Mes Anterior + 1 =
VAR vMesAnterior = CALCULATE(                                           // retorna data do mes anterior
                        MAX(dCalendario[ID DATA]),
                        DATEADD(dCalendario[ID DATA], -1, MONTH)
                    )
VAR vQtdMesAnterior =   CALCULATE(                                      // retorna a quantidade da data do mes anterior
                            [Qtd],
                            dCalendario[ID DATA] = vMesAnterior
                        )
VAR vDataComQtd = CALCULATE(                                            // retornar a primeira data posterior a data do mes anterior que tem quantidade
                    MIN(dCalendario[ID DATA]),
                    FILTER(
                        ALL(dCalendario),
                        dCalendario[ID DATA] > vMesAnterior &&
                        [Qtd]
                    )
                )
RETURN
    IF(
        vQtdMesAnterior > 0,  // se a quantidade da data do mês anterior for maior do que zero
        vMesAnterior,         // retorna data do mês anterior  
        vDataComQtd           // caso contrário, retorna a primeira data com quantidade  
    )
 

1.png

  • 0
  • Alunos
Postado
12 minutos atrás, Leandro Del Rio disse:

@champanjonata,

segue fórmula:

Qtd Mes Anterior + 1 =
VAR vMesAnterior = CALCULATE(                                           // retorna data do mes anterior
                        MAX(dCalendario[ID DATA]),
                        DATEADD(dCalendario[ID DATA], -1, MONTH)
                    )
VAR vQtdMesAnterior =   CALCULATE(                                      // retorna a quantidade da data do mes anterior
                            [Qtd],
                            dCalendario[ID DATA] = vMesAnterior
                        )
VAR vDataComQtd = CALCULATE(                                            // retornar a primeira data posterior a data do mes anterior que tem quantidade
                    MIN(dCalendario[ID DATA]),
                    FILTER(
                        ALL(dCalendario),
                        dCalendario[ID DATA] > vMesAnterior &&
                        [Qtd]
                    )
                )
RETURN
    IF(
        vQtdMesAnterior > 0,  // se a quantidade da data do mês anterior for maior do que zero
        vMesAnterior,         // retorna data do mês anterior  
        vDataComQtd           // caso contrário, retorna a primeira data com quantidade  
    )
 

1.png

Obrigado pela ajuda Leandro, mas não funcionou... só lembrando que minha dCalendario não tem os dias 3 e 4/06 igual no seu print, pois no meu caso ela contém apenas dias úteis...

Veja que copiei seu código e só substituí pelas minhas medidas/campos e mesmo assim não me retorna 05/06/2023:

image.png.75e15199c7d0879faae9e0dee2d84c90.png

  • 0
  • Alunos
Postado
11 minutos atrás, Leandro Del Rio disse:

Você pode mandar um pbix com exemplo? 

 

Poxa não posso, contém muita informação sensível... mas segue um arquivo txt com a minha dcalendario (somente as datas mesmo), se conseguir usar ela no seu exemplo pra ver se interfere... 

datas.txt

  • 0
  • Alunos
Postado
5 minutos atrás, champanjonata disse:

Consegui resolver com a medida abaixo:

Basicamente a variável: vDataMaisProxima retorna o que eu preciso. Para 90% dos casos vValor vai ser útil mas caso não tenha valor aí uso o vAlternative...


image.png.7e158baf5e693fa2040545a72934e131.png

Que bom que consegui ajudar! 

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
×
×
  • Criar Novo...