Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Want to see what's currently in public preview? We've pulled it all together in one place. Check it out here
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.