Ir para conteúdo
  • 0

Filtragem de registros com DATEADD


champanjonata
Ir para solução Solucionado por Michele ,

Pergunta

  • Membros

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
  • Membros
  • 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
  • Membros
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
  • Membros
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!

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

  • 0
  • Membros
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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...