Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
jeff_tavares
Contributor II
Contributor II

Trabalhando com Data e Horas (Intervalos)

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

DomSegTerQuaQuiSexSab
  12345
6789101112
13141516171819
20212223242526
2728293031  

 

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.

1 Solution

Accepted Solutions
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

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.

2019-03-03 12_33_28-Window.png

2019-03-03 12_34_39-Window.png

2019-03-03 12_37_33-Window.png

Resta saber se esta certo  Smiley Very Happy

 

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')

 

 

 

 

 

 

furtado@farolbi.com.br

View solution in original post

5 Replies
Gabriel_Fernandes
Contributor III
Contributor III

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

joelnunesf
Contributor III
Contributor III

Veja se isso pode lhe ajudar.

 

if(lastWorkDate(Inicio,1)=Inicio,Inicio,lastWorkDate(Inicio,1))

afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

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.

2019-03-03 12_33_28-Window.png

2019-03-03 12_34_39-Window.png

2019-03-03 12_37_33-Window.png

Resta saber se esta certo  Smiley Very Happy

 

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')

 

 

 

 

 

 

furtado@farolbi.com.br
jeff_tavares
Contributor II
Contributor II
Author

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.

jeff_tavares
Contributor II
Contributor II
Author

afurtado.

 

Funcionou, obrigado pelo HELP.