Fala pessoal! Tudo bom?
Em algum momento já se depararam com a possibilidade de cálculo do tempo de atendimento (SLA)? Considerando apenas o tempo útil da empresa?
Parece simples, mas não é!
Esse cálculo envolve muitas condicionais e tratativas. Confesso que a primeira vez que fui desenvolver, fiquei um bom tempo (MUIIITO TEMPO) pensando em todas as possibilidades do cálculo!
Vou citar algumas:
1 – Abre dentro do horário e fecha no mesmo dia dentro do horário
2 – Abre dentro do horário e fecha no mesmo dia fora do horário
3 – Abre fora do horário e fecha no mesmo dia dentro do horário
4 – Abre fora do horário e fecha no mesmo dia fora do horário
5 – Abre dentro do horário e fecha em outro dia dentro do horário
6 – Abre dentro do horário e fecha em outro dia fora do horário
7 – Abre fora do horário e fecha em outro dia dentro do horário
8 – Abre fora do horário e fecha em outro dia fora do horário
9 – Abre dentro do horário e fecha em outro dia dentro do horário
10 – Abre dentro do horário e fecha em outro dia fora do horário
11 – Abre fora do horário e fecha em outro dia dentro do horário
12 – Abre fora do horário e fecha em outro dia fora do horário
13 – Abre antes do final de semana dentro do horário e fecha no final de semana
14 – Abre antes do final de semana dentro do horário e fecha no próximo dia útil dentro do horário
15 – Abre antes do final de semana fora do horário e fecha no final de semana
16 – Abre antes do final de semana fora do horário e fecha no próximo dia útil fora do horário
17 – Abre antes do feriado dentro do horário e fecha no feriado
18 – Abre antes do feriado dentro do horário e no próximo dia útil após o feriado antes do horário
19 – Abre antes do feriado dentro do horário e no próximo dia útil após o feriado dentro do horário
20 – Abre antes do feriado fora do horário e no próximo dia útil após o feriado dentro do horário
E acredite, existem mais condicionais.
Vamos ao que interessa, a prática!
Funções
Para este exemplo, utilizaremos as seguintes funções:
- FRAC
- FLOOR
- MakeTime
- NetWorkDays
- LastWorkDate
- FABS
- Interval
Manual!! Me ajude…
FRAC
Utilização: frac(x)
Descrição: Retorna a parte fracionária de um número.
Exemplos:
frac( 11,43 ) retorna 0,43
FLOOR
Utilização: floor(x [ , base [ , offset ]])
Descrição: Arredondamento de x para baixo até o múltiplo mais próximo de base com um deslocamento de offset. O
resultado é um número.
Exemplos:
floor( 2,4 ) retorna 2
floor(11,43) retorna 11
MakeTime
Utilização: MakeTime( hh [, mm [, ss [.fff ]]] )
Descrição: Retorna uma hora calculada a partir da hora hh, do minuto mm, do segundo ss com uma fração fff até um
valor em milissegundos.
Se nenhum minuto for indicado, 00 será assumido.
Se nenhum segundo for indicado, 00 será assumido.
Se nenhuma fração de segundo for indicada, 000 será assumido.
Exemplos:
maketime( 22 ) retorna 22:00:00
maketime( 22, 17 ) retorna 22:17:00
maketime( 22, 17, 52 ) retorna 22:17:52
NetWorkDays
Utilização: networkdays (data_inicial, data_final {, feriado})
Descrição: Retorna o número de dias úteis (segunda-sexta) entre e incluindo a data_inicial e a data_final,
levando em conta quaisquer feriados opcionais listados. Todos os parâmetros devem ser datas ou
datas/horas válidas.
Exemplos:
networkdays (‘2007-02-19’, ‘2007-03-01’) retorna 9
networkdays (‘2006-12-18’, ‘2006-12-31’, ‘2006-12-25’, ‘2006-12-26’) retorna 8
LastWorkDate
Utilização: lastworkdate(data_inicial, nº_de_dias_úteis {, feriado})
Descrição: Retorna a data final mais recente para obter o número_de_dias_úteis (segunda-sexta) se o início for
na data_inicial, considerando-se os feriados listados opcionalmente. Data_inicial e feriado devem
ser datas ou datas/horas válidas.
Exemplos:
lastworkdate (‘2007-02-19’, 9) retorna ‘2007-03-01’
lastworkdate (‘2006-12-18’, 8, ‘2006-12-25’, ‘2006-12-26’) retorna ‘2006-12-29’
FABS
Utilização: fabs(x)
Descrição: É o valor absoluto de x. O resultado é um número positivo.
Exemplos:
fabs( 2,4 ) retorna 2,4
fabs( -3.8 ) retorna 3.8
Interval
Utilização: interval( expressão [ , código de formato ])
Descrição: A função interval formata a expressão como um intervalo de tempo, de acordo com o caracter fornecido
como código de formato. Se o código de formato for omitido, será utilizado o formato de hora definido no
sistema operacional. Os intervalos podem ser formatados como hora, dia ou como uma combinação de dias,
horas, minutos, segundos e frações de segundos.
Exemplos:
Os exemplos abaixo supõem as seguintes configurações do sistema operacional:
Formato de data abreviada: YY-MM-DD
Formato de hora: hh:mm:ss
Separador de número decimal: .
interval( A ) em que A=0.375 retorna:
Caracter 09:00:00
Número 0.375
interval( A ) em que A=1.375 retorna:
Caracter 33:00:00
Número 1.375
Vamos ao código
Nosso exemplo vai calcular o tempo útil de SLA de uma empresa que possui como horário de trabalho das 08:00 até as 18:00 de Segunda à Sexta. Nessa empresa a hora do almoço é contabilizada!
Calcularemos o tempo de fechamento de chamados, ou seja, nossa tabela possui uma data de abertura e data de encerramento.
Vamos lá….
Em primeiro lugar crio uma variável chamada Feriado e cadastro os possíveis feriados, mas lembre-se de cadastrar esses feriados com os valores entre apóstrofes e delimitados por virgula “,”.
Segue exemplo:
SET Feriados = ’09/06/2015′,’10/06/2015′;
Em segundo, devo tratar a data de abertura e data de encerramento.
Para a coluna de data de abertura:
- Se a abertura é antes das 08 horas, então passa a ser as 08 horas do mesmo dia
- Se a abertura é após as 18 horas, então passa a ser as 08 horas do próximo dia útil (considerando feriados e finais de semana).
Para a coluna de data de encerramento:
- Se o encerramento é antes das 08 horas, então passa a ser 18 horas do dia útil anterior
- Se o encerramento é depois das 18 horas, então passa a ser 18 horas do mesmo dia
Em terceiro, faço os cálculos finais, com as condições:
- Se a data de encerramento é igual ao dia de abertura, então faço uma coluna menos a outra e assim temos o tempo útil
- Se a data de encerramento é diferente ao dia de abertura, então faço preciso fazer o seguinte cálculo:
- A – uma coluna menos a outra para contabilizar a quantidade de horas no intervalo
- B – Verifico a quantidade de dias que existe dentro desse intervalo e multiplico por 14 (14 horas não úteis dentro de um dia de 10 horas úteis). Lembre-se que das 08:00 até as 18:00 temos 10 horas, logo se o dia possui 24 horas, então neste dia temos 14 horas não úteis.
- C – Verifico a quantidade de dias não uteis dentro do intervalo e multiplico por 24 (Esses dias não úteis são os Sáb, Dom e Feriados)
- A conta final fica: A – B – C
Ufa!!
Bem chatinho né? Isso porque não estamos desconsiderando a hora de almoço!! Mas isso fica para um próximo post!
Desta vez não irei colar o código, mas peço que façam o download da aplicação de exemplo. Opa, Só clicar aqui para fazer o download!
Espero que gostem!
Até a próxima semana!
Muito bom o tópico Yuri, mas no exemplo que você postou não está sendo considerado os dias, exemplo: no chamado 19, a abertura no dia 8/6 as 15h00 e fechamento dia 11/06 as 9h50, com as regras que vc montou, sem contar a passagem dos dias o calculo da certo, no entanto o valor correto a aparecer seria de 24h 50 min de SLA?
Obrigado pelo comentário Daniel.
Na verdade o correto é o valor de 04h 50min mesmo, pois estamos considerando os dias 9 e 10 como feriado
Refazendo a conta:
08/06/2015 15:00 – 3 horas
09/06/2015 – 0 horas (feriado)
10/06/2015 – 0 horas (feriado)
11/06/2015 09:50 – 1 hora e 50 minutos
Na soma temos 4 horas e 50 minutos.
Yuri, bom dia. Seu código parece ser muito bom, porém não consegui fazer o download. Será que poderia enviar para meu email? esther-franca@hotmail.com
Pode clicar e solicitar a permissão, que irei liberar pra você. Infelizmente estou com problema de armazenamento de arquivos
Tem razão Yuri, confusão minha, muito bom.
Faltou eu reforçar a questão dos feriados!
De qualquer maneira eu agradeço muito pela sua participação. É somente dessa forma que melhoramos o conteúdo 🙂
Yuri, tudo bem?
Muito bom o post, retrata bem o trabalho que estou tendo para efetuar alguns cálculos aqui na empresa.
No entanto, não estou conseguindo fazer o download do exemplo. Consegue enviar por e-mail?
Obrigado.
Abraços.
Tiago
Tiago, qual a mensagem que aparece? Ao clicar no link deve aparecer uma mensagem “Download” no centro da tela
Oi Yuri,
Apresenta a mensagem abaixo, como se o arquivo não estivesse mais disponível.
“Esta página da web não está disponível
ERR_TUNNEL_CONNECTION_FAILED”
Yuri, boa tarde.
Seu código parece ser muito bom, porém não consegui fazer o download.
Será que poderia enviar para meu email?
Oi Glauco, me passe seu e-mail que encaminho
Olá … poderia enviar para jaumxd@gmail.com também ?? obrigado
Te envio a noite
Yuri, nossa…Não vi o e-mail seu comentário pedindo meu e-mail, e agora depois de 3 anos, revisitei minhas assinaturas e achei….Já fiz minhas funções de SLA 🙂 Mas a minha maior dificuldade é saber o feriado dos locais….Minhas funções de SLA dependem da cidade que o serviço está sendo executado, então são feriados Locais. Achei um site que se chama feriados.com, e tem uma API.
Importante é que conseguiu 😉
Bom dia Yuri !
Muito obrigado pelas dicas. Tem me ajudado bastante.
Abs.
Que bom Gilson! Fico feliz em ajudar
Bom dia!
Não consegui fazer o download. Por gentileza envie para valeriomsantos@hotmail.com. Obrigado.
Olá Yuri. Não consigo fazer o download do arquivo. Acho que o proxy da empresa está a barrar. Pode enviar para o e-mail valeriomsantos@hotmail.com por favor? No aguardo, obrigado.
Enviado 🙂
Boa tarde!
Recebí o arquivo Yuri, obrigado. Se eu tivesse que considerar os dias úteis com atendimento de 24 hs, tirar os Domingos, Feriados e considerar o Sábado com tempo de atendimento das 8 às 14 hs, como ficaria o scritp?
Boa noite! Não consegui fazer o download pois o proxy da empresa barra. Por favor envie para valeriomsantos@hotmail.com. No aguardo, obrigado.
Não consegui fazer o download. Por favor me envie para valeriomsantos@hotmail.com. No aguardo, obrigado.
Não consegui fazer o download. Por favor envie para valeriomsantos@hotmail.com. Obrigado.
Bom dia Yuri!
Não consegui fazer o download. Pode enviar para valeriomsantos@hotmail.com por favor? No aguardo, obrigado.
Por favor, envie o código para mim também.
Muito obrigado e ÓTIMO POST.
No post tem o link de download do material
Parabéns pelo post…tentei fazer o download mas não consegui.. pode me enviar??
danilocos@gmail.com
desde já agradeço..
Opa Danilo, tudo bom?
Qual o erro esta recebendo ao tentar fazer o download?
Boa tarde yuri,
acredito que seja o proxy da empresa…
ótimo post, poderia me enviar por email ? O material esta com extensão qvw. email hb-santos@hotmail.com
Hebert, qual o erro esta dando ao tentar fazer download?
Excelente o seu POST. Em que formato está esse arquivo? Desejo colocá-lo para rodar em MYSQL. Pode me enviar o código, por favor: zecosmo@outlook.com.
Muito Obrigado.
O arquivo é QVW, independe do tipo de base de dados.
O link esta disponível no post, para download
Muito obrigado
Yuri tudo bem?
Foi muito util sua dica, agradeço, uma consulta, como fazo para incluir sábado? A funçado networkdays so parametriza de segunda a sexta como dias laborais
Olá Marco, tudo bem?
Realmente a função Networkdays não considera o sábado. Para fazer da forma que deseja, terá que tentar uma solução sem esta função. Tente iniciar com essa dica: https://community.qlik.com/message/53342
Olá! tudo bem. Não consegui abrir o arquivo mesmo usando o QlikView, pois não é o mesmo usuário e ele exige isto. Caso for possível me enviar em outro formato ficarei muito agradecido.
Henrique, isso acontece devido ao seu Qlikview não estar licenciado
Boa Tarde! Yuri, tudo bem?
Aqui na empresa os conteúdo do GoogleDrive são bloqueados, você consegue enviar essa aplicação no meu e-mail.
jeluiz@gmail.com
Boa tarde Yuri, tudo bem??
Parabéns pelo post, muito raciocínio lógico, show de bola.
Eu estou tentando desconsiderar o SLA no horário de almoço (das 11:30 as 13:00) e não estou tendo sucesso. Você conseguiu fazer? pode me ajudar??
Desde ja te agradeço….
Olá, isso é tudo que estou precisando para resolver um problema no SLA aqui da empresa. Parabéns. Porém não estou conseguindo baixar o arquivo. pode me enviar por email? luizfreire.eng@gmail.com
Olá, não estou conseguindo baixar o arquivo, podes me enviar por email? rodrigo.menna@outlook.com.br
Yuri, vê se você consegue me ajudar por favor!!!
Preciso fazer uma fórmula no excel que de segunda a sexta só podem ser utilizados 10 horas úteis (de 8h as 18h) de SLA.
Se a pessoa chegou as 17 horas, de segunda, contasse 1h desse dia e continua a contagem na terça as 8h, terminando o prazo de SLA as 17h.
Nos sábados o SLA são de 6h (de 8h as 14h)
Nos domingos e feriados não são contados o SLA, ou seja se a pessoa abriu o chamado as 10h de sábado são condados 2h de SLA de sábado e o restante na segunda.
Obs: Não consegui fazer download da sua planilha