Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Como separar dados em ranges de horas

Feras.

Eu tenho dados de horário de impressão de documentos conforme a tabela abaixo.

Como minha equipe trabalha em turnos, eu preciso saber quais impressões foram feitas nestes turnos.

Então, eu preciso separar em ranges de impressão feitas das 06h31 às 12h30, 12h31 às 18h30, 18h31 às 00h30 e 00h31 às 06h30.

Percebam que os dados da data e hora estão juntos numa mesma coluna. Se tiver como separar em duas colunas, melhor ainda.

Se não der, pelo menos que o Clikview pegue apenas o string com a hora e que eu possa separar em turnos como citei acima.

Aceito sugestões.

Antecipadamente obrigado.

         HORA
8/4/2013 13:25:11
8/4/2013 13:25:11
8/4/2013 13:25:10
8/4/2013 13:25:08
8/4/2013 13:25:07
8/4/2013 13:25:07
8/4/2013 13:25:07
8/4/2013 13:25:06
8/4/2013 13:25:06
8/4/2013 12:55:02
8/4/2013 12:55:01
8/4/2013 12:55:01
8/4/2013 12:40:02
8/4/2013 12:40:01
8/4/2013 12:40:00
8/4/2013 12:25:05
8/4/2013 12:25:04
8/4/2013 12:25:04
8/4/2013 12:25:04
8/4/2013 12:25:03
8/4/2013 12:25:01
8/4/2013 12:10:05
8/4/2013 12:10:04
8/4/2013 12:10:04
8/4/2013 12:10:03
1 Solution

Accepted Solutions
aderlanrm
Partner - Specialist
Partner - Specialist

Olá Luis,

Estou sem tempo de responder na community, infelizmente.

Dá uma olhada no código abaixo, não testei muito, espero que seja útil, abraço.

Turnos:

LOAD * INLINE [

    Ini, Fim, Início, Término, Descrição

    0030, 0630, 00:30, 06:30, Turno 1

    0630, 1230, 06:30, 12:30, Turno 2

    1230, 1830, 12:30, 18:30, Turno 3

    1830, 2430, 18:30, 00:30, Turno 4

];

Marcações:

LOAD *,

    If(KeepChar(Hora,'0123456789')<30,

        2400+KeepChar(Hora,'0123456789'),

        KeepChar(Hora,'0123456789')

    ) as Hor

INLINE [

Hora, Post, Usuário

00:35, 0, Altamir Brun

08:45, 1, Altamir Brun

08:54, 2, Rebeca Gums

13:15, 3, Aderlan Rodrigues

16:47, 4, Altamir Brun

18:31, 5, Luiz Carlos Lorenzo

00:20, 6, Aderlan Rodrigues

];

IntervalMatch (Hor) LOAD Ini, Fim Resident Turnos;

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)

View solution in original post

7 Replies
Not applicable
Author

Bom dia!

Se os turno forem definidos, use um if mesmo. Se o que te interessar for apenas o turno, faça isso na extração dos dados mesmo.

Att.

Rebeca Gums

aderlanrm
Partner - Specialist
Partner - Specialist

Bom dia Brunpipo,

Dá uma olhada no anexo.

Primeiro você extrai o serial da hora, depois usa os ifs para determinar os turnos.

Essa é minha sugestão, espero que sejá útil.

Abraço.

Para quem usa o QlikView Personal Edition:

DataHora:

LOAD DataHora,

    Date(DataHora,'HH:mm') as Hora,

    Frac(Date(DataHora)) as HoraSerial

INLINE [

    DataHora

    1/1/2013 00:31:00

    1/1/2013 06:31:00

    1/1/2013 12:31:00

    1/1/2013 18:31:00

    7/3/2013 13:25:10

    9/3/2013 13:25:08

    8/4/2013 13:25:07

    8/4/2013 13:25:07

    8/4/2013 13:25:07

    8/4/2013 13:25:06

    8/4/2013 13:25:06

    8/4/2013 12:55:02

    8/4/2013 12:55:01

    8/4/2013 12:55:01

    8/4/2013 12:40:02

    8/4/2013 12:40:01

    8/4/2013 12:40:00

    8/4/2013 12:25:05

    8/4/2013 12:25:04

    8/4/2013 12:25:04

    8/4/2013 12:25:04

    8/4/2013 12:25:03

    8/4/2013 12:25:01

    8/4/2013 12:10:05

    8/4/2013 12:10:04

    8/4/2013 12:10:04

    8/4/2013 12:10:03

];

LOAD DataHora,

    if(HoraSerial<=0.27152,

        '1º Turno',

        if(HoraSerial<=0.52152,

            '2º Turno',

            if(HoraSerial<=0.77152,

                '3º Turno',

                '4º Turno'

            )

        )

    ) as Turno

Resident DataHora;

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)
Not applicable
Author

Aderlan.

Funcionou.

O único problema é que eu fui infeliz em não mencionar que aquela tabela era apenas um pedaço dela. Nós fazemos mais de 1.500 impressões por dia. Então o comando INLINE neste caso, não dará para usar. Vou tentar substituir por um LOAD FROM 'arquivo' mesmo. Depois te conto.

Mesmo por enquanto, valeu a dica. A ideia de separar os turnos por um string serial foi legal. Não tinha pensado nisso.

Abraços.

aderlanrm
Partner - Specialist
Partner - Specialist

Olá brunpipo,

A carga INLINE é apenas para demonstração, você tem mesmo que mudar para from, não tem como eu criar um exemplo "pronto" para você, não conheço tua estrutura e regras de negócio. Rsrsrs...

Para chegar a 1.000.000 de impressões por ano, vocês vão ter que imprimir ~2.740 impressões por dia, isso é pouco, se mesmo assim tiver problemas de desempenho, use carga incremental.

Abraço.

* se foi útil, marque como ajuda, se resolvolveu, marque como resposta, tem mais gente com dúvidas parecidas procurando respostas!


Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)
luis_lorenzo
Contributor III
Contributor III

Boa Tarde,

Temos apenas um Problema nisso tudo...

como pode ver s classificação das 18h31 às 00h30  pelo que sei vai pegar o proximo dia ja....no exemplo que vc anexou se eu selecionar o dia de ontem por exemplo, ele dele pegar das 18:31 de ontem ate à 00:31 de hoje...

Como posso tratar isso ...tenho o mesmissimo problema com essa separação aqui na Empresa.

Agradeço muito se alguem puder ajudar, ou souber de uma solução para isso!

Abr.

aderlanrm
Partner - Specialist
Partner - Specialist

Olá Luis,

Estou sem tempo de responder na community, infelizmente.

Dá uma olhada no código abaixo, não testei muito, espero que seja útil, abraço.

Turnos:

LOAD * INLINE [

    Ini, Fim, Início, Término, Descrição

    0030, 0630, 00:30, 06:30, Turno 1

    0630, 1230, 06:30, 12:30, Turno 2

    1230, 1830, 12:30, 18:30, Turno 3

    1830, 2430, 18:30, 00:30, Turno 4

];

Marcações:

LOAD *,

    If(KeepChar(Hora,'0123456789')<30,

        2400+KeepChar(Hora,'0123456789'),

        KeepChar(Hora,'0123456789')

    ) as Hor

INLINE [

Hora, Post, Usuário

00:35, 0, Altamir Brun

08:45, 1, Altamir Brun

08:54, 2, Rebeca Gums

13:15, 3, Aderlan Rodrigues

16:47, 4, Altamir Brun

18:31, 5, Luiz Carlos Lorenzo

00:20, 6, Aderlan Rodrigues

];

IntervalMatch (Hor) LOAD Ini, Fim Resident Turnos;

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)
luis_lorenzo
Contributor III
Contributor III

Boa Tarde Aderlan,

Então fiz da seguinte forma após varios testes

usai na minha tabela principal um IF

IF(HOUR(DT_ENTRADA) < 7 ,MakeDate(YEAR(DT_ENTRADA),Month(DT_ENTRADA),DAY(DT_ENTRADA))-1,MakeDate(YEAR(DT_ENTRADA),Month(DT_ENTRADA),DAY(DT_ENTRADA))) AS [Dt. Entrada Turno]

Assim toda hora menor que 7 horas desconta para ser apresentada como sendo relativo ao turno anterior por isso IF(HOUR(DT_ENTRADA) < 7 ,MakeDate(YEAR(DT_ENTRADA),Month(DT_ENTRADA),DAY(DT_ENTRADA))-1, caso contrario deixe na data atual MakeDate(YEAR(DT_ENTRADA),Month(DT_ENTRADA),DAY(DT_ENTRADA)). Isso tudo na Geração do meu .QVD

Ai depois na Aplicaçao eu apliquei junto o INLINE abaixo e relacionei o campo Hora com minha tabela do QVD que possuia as informações.

TURNO:

LOAD * INLINE [

Hora_Entrada, Turno, Desc_Turno

1,'19:00-07:00', 'Noite'

2,'19:00-07:00', 'Noite'

3,'19:00-07:00', 'Noite'

4,'19:00-07:00', 'Noite'

5,'19:00-07:00', 'Noite'

6,'19:00-07:00', 'Noite'

7,'07:00-13:00', 'Manha'

8,'07:00-13:00', 'Manha'

9,'07:00-13:00', 'Manha'

10,'07:00-13:00', 'Manha'

11,'07:00-13:00', 'Manha'

12,'07:00-13:00', 'Manha'

13,'13:00-19:00', 'Tarde'

14,'13:00-19:00', 'Tarde'

15,'13:00-19:00', 'Tarde'

16,'13:00-19:00', 'Tarde'

17,'13:00-19:00', 'Tarde'

18,'13:00-19:00', 'Tarde'

19,'19:00-07:00', 'Noite'

20,'19:00-07:00', 'Noite'

21,'19:00-07:00', 'Noite'

22,'19:00-07:00', 'Noite'

23,'19:00-07:00', 'Noite'

0,'19:00-07:00', 'Noite'];

Dados_Turno.jpg

Funcionou perfeitamente.

Obrigado.