Ir para conteúdo
  • 0

Filtragem de registros com DATEADD


champanjonata
Ir para solução Solucionado por Michele ,

Pergunta

  • Alunos

Olá pessoal,

Estou com o seguinte problema:

Minha d_calendario além de outras colunas tem as colunas: data, dia_util (sim, não).
No exemplo abaixo se eu selecionar a data: 15/05/2023 precisa me retornar a data nos últimos 5 dias PORÉM sem considerar dia_util = não, ou seja, teria que me retornar dia 08/05/2023:

image.png.212ebef092855c121e77f3c030c84d68.png

Outro exemplo: selecionado a data 23/05/2023 teria que retornar: 16/05/2023.

image.png.697f4a16bc13f5558b39ceede6481005.png

 

Tentei com DATEADD(data, -5, DAY) e filtrei apenas dia_util = sim mas parece que essa função DATEADD vai de um em um não importa o filtro... enfim alguma ajuda seria bem vinda.

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
  • Alunos
  • Solução

Olá @champanjonata!

Em M eu filtraria os dias não úteis e simplesmente faria - 5 na sua data, mas considerando que vai precisar ter os dias não úteis por alguma razão, dessa forma aqui traz a sua data -5, baseado na data selecionada no filtro.

Testei aqui e funcionou, veja se lhe atende. A lógica que fiz foi:

  1. Pegar numa variável a data do Filtro/Segmentador.
  2. E em outra variável a data do Filtro -5.
  3. Em uma 3ª variável contei quantos dias entre essas duas datas são dias não úteis.
  4. Ee, com isso, cheguei ao resultado pegando a 2ª variável - essa quantidade de dias não úteis entre elas.

5 Dias Anteriores =
VAR vDataFiltro = SELECTEDVALUE(dCalendario[Data])
VAR v5DiasAntes = SELECTEDVALUE(dCalendario[Data]) - 5
VAR vDiasNaoUteisEntreDatas =
CALCULATE(
    COUNT(dCalendario[Data]),
       FILTER(
        ALL(dCalendario),
        dCalendario[Util] = "Não" &&
        dCalendario[Data] >= v5DiasAntes &&
        dCalendario[Data] <= vDataFiltro
        
    )
)

VAR vResultado =
    v5DiasAntes - vDiasNaoUteisEntreDatas

RETURN
vResultado

 

image.png.8d1331e93e0cb2f652867238fcaccdec.png

 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
15 minutos atrás, Michele disse:

Olá @champanjonata!

Você está tentando usar essa função em um FILTER, com a sua outra data vindo de um segmentador, é isso?

Se tiveres como anexar as imagens de como você está tentando usar, medida e visual, ajuda para sabermos exatamente o que você precisa.

O que eu preciso é exatamente como disse, pegar a data do filtro e diminuir 5 dias contanto que 'pule' os dias que não são úteis.

Outro exemplo:

Se no filtro fosse informado: 09/05/2023, essa data - 5 dias (desconsiderando dias úteis = não) teria que me retornar a data: 02/05/2023, pois:
08/05 conta 1 dia para trás
os dias 07 e 06/05 não contam
05, 04, 03 e 02/05 'somam' 4 dias, tenho a data que eu preciso. Acontece que com o DATEADD(data, -5, day) tá contando com os dias 06 e 07/05 e não pode...

image.png.f9e7bb0e38841df1cebef9afa92d7a28.png

 

Veja se ficou mais claro agora por favor.

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
4 minutos atrás, Michele disse:

Olá @champanjonata!

Em M eu filtraria os dias não úteis e simplesmente faria - 5 na sua data, mas considerando que vai precisar ter os dias não úteis por alguma razão, dessa forma aqui traz a sua data -5, baseado na data selecionada no filtro.

Testei aqui e funcionou, veja se lhe atende. A lógica que fiz foi:

  1. Pegar numa variável a data do Filtro/Segmentador.
  2. E em outra variável a data do Filtro -5.
  3. Em uma 3ª variável contei quantos dias entre essas duas datas são dias não úteis.
  4. Ee, com isso, cheguei ao resultado pegando a 2ª variável - essa quantidade de dias não úteis entre elas.

5 Dias Anteriores =
VAR vDataFiltro = SELECTEDVALUE(dCalendario[Data])
VAR v5DiasAntes = SELECTEDVALUE(dCalendario[Data]) - 5
VAR vDiasNaoUteisEntreDatas =
CALCULATE(
    COUNT(dCalendario[Data]),
       FILTER(
        ALL(dCalendario),
        dCalendario[Util] = "Não" &&
        dCalendario[Data] >= v5DiasAntes &&
        dCalendario[Data] <= vDataFiltro
        
    )
)

VAR vResultado =
    v5DiasAntes - vDiasNaoUteisEntreDatas

RETURN
vResultado

 

image.png.8d1331e93e0cb2f652867238fcaccdec.png

 

Excelente @Michele, muito obrigado!

  • Like 1
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
27 minutos atrás, JhonyDrake disse:

@champanjonata tranquilo?

Tenta esse cálculo.
-5D =
CALCULATE(
DATEADD([data],-5,DAY),
FILTER(dCalendario,
[DIAS_UTEIS] = "SIM")
)

Fala @JhonyDraketranquilo e você? Assim não funcionou, aliás era como eu estava fazendo... mas a solução da Michele deu certo, obrigado aos dois pela força.

Link para o comentário
Compartilhar em outros sites

Faça login para comentar

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



Entrar Agora
×
×
  • Criar Novo...