Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Olá Boa tarde! Tudo bem?
Veja se vocês conseguem me ajudar.
Preciso calcular o tempo de SLA de um determinado atendimento e quanto mais eu fuço mais eu me complico.
A situação é a seguinte.:
Dom | Seg | Ter | Qua | Qui | Sex | Sab |
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Inicio 12/01/2019 09:15:58
Fim 18/01/2019 17:05:30
Situação.: O atendimento foi criado dentro do Final de Semana e eu não posso considerar essa Data, usei a função "LastWorkDate" para considerar o próximo dia Útil.
Nesse cenário eu teria o caso abaixo.
Inicia <14/01/2019 00:00:00> | Fim 18/01/2019 17:05:30.
Meu problema está justamente quando eu utilizo a função, pois ele zera todas as horas das demais datas que não seja o FDS.
Date(lastWorkDate(Inicio,1),'DD/MM/YYYY hh:mm:ss')
Alguém tem uma solução para este caso.
Obrigado.
Jeff,
eu faria primeiro na carga identificar o que começa fim de semana e passar para o inicio da semana.
E na expressão de calculo do tempo, remover o fim de semana quando inicia antes e termina depois de um fim de semana (sem considerar os feriados também).
Assim, fiz este exercício.
Resta saber se esta certo
Assim ficou a carga:
//=======================================================================================
Feriado:
LOAD
date#(Feriados,'DD/MM/YYYY') as Feriados
INLINE [
Feriados
01/01/2019
];
DadosTmp:
LOAD
Chamado,
date#(DataIni,'DD/MM/YYYY hh:mm:ss') as DataIni_Real,
date#(DataFim,'DD/MM/YYYY hh:mm:ss') as DataFim
INLINE [
Chamado, DataIni , DataFim
1 , 12/01/2019 09:15:58 , 21/01/2019 17:05:30
];
Dados:
NoConcatenate
LOAD
Chamado,
DataIni_Real,
date(if(weekday(DataIni_Real)=5,DayStart(DataIni_Real,2),
if(weekday(DataIni_Real)=6,DayStart(DataIni_Real,1),DataIni_Real)),'DD/MM/YYYY hh:mm:ss') as DataIni,
DataFim
Resident DadosTmp;
//
DROP Table DadosTmp;
e assim ficou a expressão:
interval(
// horas entre inicio e final
RangeSum(DataFim - DataIni,0)
-
// Total de dias menos os dias da semana para descontar as horas de fim de semana e menos o primeiro e ultimo dia.....
(((Floor(DataFim)-Floor(DataIni))+1)-(NetWorkDays(DataIni,DataFim , $(vFeriado))))
,'hhh:mm:ss')
Boa tarde,
Então, acredito que você terá que fazer um teste pra ver se é final de semana primeiro
ex:
if(weekday('12/01/2019',0)>4
Veja se isso pode lhe ajudar.
if(lastWorkDate(Inicio,1)=Inicio,Inicio,lastWorkDate(Inicio,1))
Jeff,
eu faria primeiro na carga identificar o que começa fim de semana e passar para o inicio da semana.
E na expressão de calculo do tempo, remover o fim de semana quando inicia antes e termina depois de um fim de semana (sem considerar os feriados também).
Assim, fiz este exercício.
Resta saber se esta certo
Assim ficou a carga:
//=======================================================================================
Feriado:
LOAD
date#(Feriados,'DD/MM/YYYY') as Feriados
INLINE [
Feriados
01/01/2019
];
DadosTmp:
LOAD
Chamado,
date#(DataIni,'DD/MM/YYYY hh:mm:ss') as DataIni_Real,
date#(DataFim,'DD/MM/YYYY hh:mm:ss') as DataFim
INLINE [
Chamado, DataIni , DataFim
1 , 12/01/2019 09:15:58 , 21/01/2019 17:05:30
];
Dados:
NoConcatenate
LOAD
Chamado,
DataIni_Real,
date(if(weekday(DataIni_Real)=5,DayStart(DataIni_Real,2),
if(weekday(DataIni_Real)=6,DayStart(DataIni_Real,1),DataIni_Real)),'DD/MM/YYYY hh:mm:ss') as DataIni,
DataFim
Resident DadosTmp;
//
DROP Table DadosTmp;
e assim ficou a expressão:
interval(
// horas entre inicio e final
RangeSum(DataFim - DataIni,0)
-
// Total de dias menos os dias da semana para descontar as horas de fim de semana e menos o primeiro e ultimo dia.....
(((Floor(DataFim)-Floor(DataIni))+1)-(NetWorkDays(DataIni,DataFim , $(vFeriado))))
,'hhh:mm:ss')
Boa Tarde! Afurtado.
Desculpe pela demora.
Vou fazer alguns testes conforme sua orientação e depois volto aqui pra falar como foi.
Obrigado em ajudar.
Abs.
afurtado.
Funcionou, obrigado pelo HELP.