7 Replies Latest reply: Mar 20, 2015 11:54 AM by Luis Carlos Lorenzo RSS

    Como separar dados em ranges de horas

    Altamir Brun

      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
        • Re: Como separar dados em ranges de horas

          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

          • Re: Como separar dados em ranges de horas
            Aderlan Rodrigues

            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;

              • Re: Como separar dados em ranges de horas
                Altamir Brun

                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.

                  • Re: Como separar dados em ranges de horas
                    Aderlan Rodrigues

                    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!


                • Re: Como separar dados em ranges de horas
                  Luis Carlos Lorenzo

                  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.

                    • Re: Como separar dados em ranges de horas
                      Aderlan Rodrigues

                      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;

                       

                        • Re: Como separar dados em ranges de horas
                          Luis Carlos Lorenzo

                          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.