Ir para conteúdo
  • 0

Soma de dias sem somar os fins de semana


LGustavo
Ir para solução Solucionado por Tiago Craici - Xperiun ,

Pergunta

  • Alunos
Postado (editado)

Bom dia pessoal. Eu estou com uma demanda de soma de dias para ter uma data final, mas estou tendo problemas com os fins de semana. O que me acontece é o seguinte, o meu cliente quer saber por exemplo, se eu somar a quantidade que está em produção no setor mais a quantidade que vai chegar no setor e dividir pela capacidade do setor, qual seria a data que terminaria toda essa produção. A minha medida é a que estou usando abaixo:

Finalização Corte =
VAR vCapacidadeTotal = [Na Fase Corte] + [Chegando Corte]  //Soma da quantidade que está e vai chegar no setor
VAR vQtdDias = DIVIDE(vCapacidadeTotal, [Capacidade Diaria Corte])  //Quantidade de dias para acabar toda a demanda
VAR vSomaDias = CALCULATE(TODAY()+vQtdDias)-1 //Data que daria, caso fosse contar os fins de semana
VAR vDataInicial = TODAY() //Data inicial da contagem
VAR vFimDeSemana = COUNTROWS(
    FILTER(CALENDAR(vDataInicial, vSomaDias),
    WEEKDAY([Date],2) >5)) //Qtde de dias do fim de semana
VAR vDataFinal = vSomaDias + vFimDeSemana // Data final sem os fins de semana
RETURN
vDataFinal

O que acontece é o seguinte, tomando como o dia de hoje eu vou colocar o valor de cada variável para vocês terem uma ideia do que eu preciso fazer.
A variável vCapacidadeTotal teria o valor de 837.430 que é a soma do que eu tenho e o que está chegando no setor. A vQtdDias é a quantidade de dias que eu gastaria para acabar toda a demanda do setor, eu calculo ele dividindo a vCapacidadeTotal pela capacidade diária que seria 38.000, que nesse caso daria 22 dias. 

O meu problema começa daqui para frente. Na vSomaDias, eu sempre começo a soma contando o dia atual mais a vQtdDias -1, porém essa variável conta também os fins de semana, o que não pode porque a empresa em questão, não trabalha nos fins de semana. Para acertar isso eu uso a variável vFimDeSemana para contar quantos dias não úteis tem entre a data inicial (dia atual) e a data final (vSomaDias) e somo esses dias na vDataFinal.

Porém o que acontece é o seguinte, contando 22 dias com os fins de semana a partir de hoje (03/04/2024), a data final que seria a da variável vSomaDias seria o dia 24/04/2024, entre o dia de hoje e o dia 24/04/2024 teria 6 dias não úteis que é o resultado da variável vFimDeSemana que seria somado com a vSomaDias. Aí é que está o problema, nessa soma a data final ficaria no dia 30/04/2024, porém entre os dias 24 e 30 tem mais dois dias do fim de semana que eu não tenho ideia de como colocar na conta. 

Eu havia pensado em colocar outra variável para fazer outra conta dos fins de semana em usando a vDataFinal, mas acho que vai acabar virando uma bola de neve de variável em cima de variável.

Editado por LGustavo
Correção de português
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
  • Admin
  • Solução

@LGustavo favor validar a medida abaixo:


 

Finalização Corte =
VAR vCapacidadeTotal = [Na Fase Corte] + [Chegando Corte] //Soma da quantidade que está e vai chegar no setor
VAR vQtdDias = DIVIDE ( vCapacidadeTotal, [Capacidade Diaria Corte] ) //Quantidade de dias para acabar toda a demanda

var _Tabela =   //tabela virtual desconsiderando final de semana (sáb/dom) 
CALCULATETABLE(
    ADDCOLUMNS(dCalendario,
    "@Data", dCalendario[Data]
    ),
    NOT WEEKDAY ( dCalendario[Data] ) IN { 1, 7 },
    dCalendario[Data] >= TODAY()
)

RETURN 

MINX(
    INDEX(
        vQtdDias,  // retorna a posição do dia da tabela virtual (valor da variável vQtdDias)
        _Tabela,
        ORDERBY(dCalendario[Data], ASC)
    ),
    dCalendario[Data])

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
11 minutos atrás, Thiago Michels disse:

Cria uma coluna na tabela dCalendario se é final de semana como TRUE, ai só conta q quantidade de dias se essa coluna for FALSE.

Eu já fiz isso. A medida conta só os dias úteis, mas na hora de mostrar a data, ela mostra a data contando os fins e semana também.

Link para o comentário
Compartilhar em outros sites

  • 0
  • Admin

@LGustavo

Veja se a medida abaixo atende:



Finalização Corte =
VAR vCapacidadeTotal = [Na Fase Corte] + [Chegando Corte] //Soma da quantidade que está e vai chegar no setor
VAR vQtdDias =
    DIVIDE ( vCapacidadeTotal, [Capacidade Diaria Corte] ) //Quantidade de dias para acabar toda a demanda
VAR QtdDiasFimSemana =
    COUNTROWS (
        CALCULATETABLE (
            VALUES ( dCalendario[Data] ),
            WEEKDAY ( dCalendario[Data] ) IN { 6, 7 },
            DATESINPERIOD ( dCalendario[Data], TODAY (), + vQtdDias, DAY )
        )
    )
VAR vDataFinal =
    MAXX (
        CALCULATETABLE (
            VALUES ( dCalendario[Data] ),
            NOT WEEKDAY ( dCalendario[Data] ) IN { 6, 7 },
            DATESINPERIOD (
                dCalendario[Data],
                TODAY (),
                + vQtdDias + QtdDiasFimSemana,
                DAY
            )
        ),
        dCalendario[Data]
    )
RETURN
    vDataFinal

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
2 horas atrás, Tiago Craici - Xperiun disse:

@LGustavo

Segue medida que retorna hoje + 22 dias fora final de semana:

 

Data Futura = 
MAXX
(
    CALCULATETABLE(
    VALUES(dCalendario[Data]),
    not WEEKDAY(dCalendario[Data]) in {6,7},
    DATESINPERIOD(dCalendario[Data], TODAY(), +22, DAY)
),
dCalendario[Data]
)


Veja se a medida abaixo atende:

Finalização Corte =
VAR vCapacidadeTotal = [Na Fase Corte] + [Chegando Corte]  //Soma da quantidade que está e vai chegar no setor
VAR vQtdDias = DIVIDE(vCapacidadeTotal, [Capacidade Diaria Corte])  //Quantidade de dias para acabar toda a demanda

VAR vDataFinal = 
MAXX(
    CALCULATETABLE(
    VALUES(dCalendario[Data]),
    not WEEKDAY(dCalendario[Data]) in {6,7},
    DATESINPERIOD(dCalendario[Data], TODAY(), + vQtdDias, DAY)
    ),
    dCalendario[Data]
)
RETURN
vDataFinal



 

@Tiago Craici - Xperiun, eu usei a medida que você colocou lá no discord, porém a data fica no dia 30/04 quando o correto seria o dia 02/05. Ele ta dando isso, pq, contando os 22 dias corridos, a data cai no dia 24/04 que é numa quarta-feira + os 6 dias dos fins e semana vai pro dia 30/04. Porém entre os dias 24 e 30 tem outro fim de semana que ta entrando na data final.

 

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...