10 Replies Latest reply: Jul 14, 2014 6:38 PM by Felipe Dutra RSS

    Manter somente o último lido

    Ernesto Alves

      Caros,

       

      Preciso dar carga diariamente de uma planilha de chamados. Gostaria que no QVD ficasse apenas o ultimo registro do chamado.

      Exemplo :

      Arquivo Excel de 01072014 :

      CHAMADO ABERTURA FECHAMENTO   STATUS

      001              01072014        NULL             ABERTO

      002              01072014     01072014          FECHADO

      003              01072014        NULL             ABERTO

       

      Arquivo Excel de 02072014 :

      CHAMADO ABERTURA FECHAMENTO    STATUS

      001              01072014        NULL              ABERTO

      002              01072014     01072014           FECHADO

      003              01072014     02072014           FECHADO

       

      O que ocorre é que no QVD eu fico dessa forma :

      CHAMADO ABERTURA FECHAMENTO    STATUS

      001              01072014        NULL             ABERTO

      002              01072014     01072014          FECHADO

      003              01072014     02072014

      003              01072014     02072014          FECHADO

       

      E gostaria que ficasse assim :

      CHAMADO ABERTURA FECHAMENTO    STATUS

      001              01072014        NULL             ABERTO

      002              01072014     01072014          FECHADO

      003              01072014     02072014          FECHADO

       

      Já pesquisei e tentei diversas formas, mas nada deu o resultado esperado.

      Alguém sabe como posso fazer isso ?

       

      Desde já agradeço a atenção.

       

      Abraços,

       

      Ernesto Alves

        • Re: Manter somente o último lido
          Felipe Dutra

          Tente isto, Ernesto:

           

          //*** Início da leitura das planilhas ***
          
          
          Chamados_tmp:
          Load
               CHAMADO as CHAMADOTMP,//Só pra não concatenar. Também pode ser usado o NoConcatenate abaixo.
               ABERTURA,
               FECHAMENTO,
               STATUS
          From ...
          
          
          //*** Fim da leitura das planilhas ***
          
          
          Chamados:
          Load
               CHAMADOTMP as CHAMADO , ABERTURA, FECHAMENTO, STATUS
          Resident Chamados_tmp where STATUS like 'FECHADO';
          
          
          Load
               CHAMADOTMP as CHAMADO , ABERTURA, FECHAMENTO, STATUS
          Resident Chamados_tmp where Not Exists(CHAMADO, CHAMADOTMP);
          
          
          DROP Table Chamados_tmp;
          

           

          Abs,

          Felipe

            • Re: Manter somente o último lido
              Ernesto Alves

              Bom dia Felipe,

               

              Primeiramente, muito obrigado pela resposta.

               

              Não sei se entendi bem, mas deixe-me explicar melhor.   

              Imagino que ficaria assim, seguindo a sua dica.

               

              //*** Início da leitura das planilhas *** 

                   

                   

                  Chamados_tmp: 

                  Load 

                       CHAMADO as CHAMADOTMP,//Só pra não concatenar. Também pode ser usado o NoConcatenate abaixo. 

                       ABERTURA, 

                       FECHAMENTO, 

                       STATUS 

                  From Arquivo010720014.xls

               

                  Load 

                       CHAMADO as CHAMADOTMP,//Só pra não concatenar. Também pode ser usado o NoConcatenate abaixo. 

                       ABERTURA, 

                       FECHAMENTO, 

                       STATUS 

                  From Arquivo020720014.xls

                    ...

                  

                  //*** Fim da leitura das planilhas *** 

                         

                  Chamados: 

                  Load 

                       CHAMADOTMP as CHAMADO , ABERTURA, FECHAMENTO, STATUS 

                  Resident Chamados_tmp where STATUS like 'FECHADO'; 

                         

                  Load 

                       CHAMADOTMP as CHAMADO , ABERTURA, FECHAMENTO, STATUS 

                  Resident Chamados_tmp where Not Exists(CHAMADO, CHAMADOTMP); 

                   

                  STORE Chamados INTO Chamados.qvd (qvd) ;

                   

                  DROP Table Chamados_tmp; 

               

              É isso ?

               

              Abraços,

               

              Ernesto Alves

                • Re: Re: Manter somente o último lido
                  Felipe Dutra

                  Ficaria assim, Ernesto:

                   

                  //*** Início da leitura das planilhas *** 
                       
                      Chamados_tmp: 
                      Load 
                           CHAMADO as CHAMADOTMP,//Só pra não concatenar. Também pode ser usado o NoConcatenate abaixo. 
                           ABERTURA, 
                           FECHAMENTO, 
                           STATUS 
                      From [Arquivo*.xls]
                      (...)
                      ;
                      
                  //*** Fim da leitura das planilhas *** 
                             
                      Chamados: 
                      Load 
                           CHAMADOTMP as CHAMADO , ABERTURA, FECHAMENTO, STATUS 
                      Resident Chamados_tmp where STATUS like 'FECHADO'; 
                             
                      Load 
                           CHAMADOTMP as CHAMADO , ABERTURA, FECHAMENTO, STATUS 
                      Resident Chamados_tmp where Not Exists(CHAMADO, CHAMADOTMP); 
                  
                  
                      DROP Table Chamados_tmp; 
                       
                      STORE Chamados INTO Chamados.qvd (qvd) ;
                  

                   

                  Abs,

                  Felipe

              • Re: Manter somente o último lido
                Raphael Pacheco

                Boa noite!

                Existem muitas formas de fazer este trabalho, uma delas é:

                 

                Auxiliar:
                LOAD Distinct
                  AutoNumber(CHAMADO&'|'&
                             ABERTURA&'|'&
                             FECHAMENTO
                             ,'CHAVE') as Chave,
                  CHAMADO, 
                  ABERTURA,
                  FECHAMENTO,
                  STATUS
                FROM <Sua Base de Dados>;
                

                 

                Em seguida, leia os registros novamente ordenando-os de forma decrescente e incluindo uma flag de tratamento:

                 

                [Tratando Registros]:
                LOAD
                  *
                Where
                  Flag <> 'V';
                LOAD
                  If(CHAMADO = Peek(CHAMADO, -1), 'V', 'F') as Flag,
                  *
                Resident Auxiliar
                Order By 
                  Chave Desc;
                
                
                DROP Fields 
                  Flag,
                  Chave
                From [Tratando Registros];
                
                
                DROP Table Auxiliar;
                

                 

                Segue em anexo um exemplo.

                 

                Abraço!

                  • Re: Manter somente o último lido
                    Ernesto Alves

                    Bom dia Raphael,

                     

                    Muito obrigado pela resposta.

                     

                    Não entendi bem a sua dica.

                    Estou trabalhando com um QVW de carga de dados que gera um QVD e outro que faz a leitura desse QVD.

                    Essa sua sugestão eu deveria implementar no segundo QVW, o que lê o QVD, correto ?

                     

                    Abraços,

                     

                    Ernesto Alves

                      • Re: Manter somente o último lido
                        Raphael Pacheco

                        Bom dia Ernesto.

                         

                        Pelo que eu entendi, você quer os dados dos últimos registros lidos gravado em um QVD. Esta lógica que montei faz isso, só não coloquei o comando store no final.

                        Depois é só criar uma aplicação que leia esta informação e mostre os dados.

                          • Re: Manter somente o último lido
                            Ernesto Alves

                            Raphael,

                             

                            O código do QVW que lê o QVD que gerei ficaria assim ?

                               Auxiliar: 

                                LOAD Distinct 

                                  AutoNumber(CHAMADO&'|'& 

                                             ABERTURA&'|'& 

                                             FECHAMENTO 

                                             ,'CHAVE') as Chave, 

                                  CHAMADO,  

                                  ABERTURA, 

                                  FECHAMENTO, 

                                  STATUS 

                                ... //Existem outros campos.

                                FROM Chamado.qvd (qvd); 

                             

                                [Tratando Registros]: 

                                LOAD 

                                  * 

                                Where 

                                  Flag <> 'V'; 

                                LOAD 

                                  If(CHAMADO = Peek(CHAMADO, -1), 'V', 'F') as Flag, 

                                  * 

                                Resident Auxiliar 

                                Order By  

                                  Chave Desc; 

                                       

                                DROP Fields  

                                  Flag, 

                                  Chave 

                                From [Tratando Registros]; 

                                       

                                DROP Table Auxiliar; 

                             

                            Abraços,

                             

                            Ernesto Alves

                              • Re: Manter somente o último lido
                                Raphael Pacheco

                                Tem que ver quais as informações adicionais existem no seu modelo, mas a primeiro momento é isso mesmo!

                                Explicando passo a passo a lógica, Criei uma chave utilizando o AutoNumber() com os campos Chamado, Abertura e Fechamento. Após isto, li o conteúdo deste primeiro Load para utilizar a função Order By Desc (pois ela só funciona em tabela Resident). Assim, temos as chaves ordenadas do menor para o maior valor. O if() verifica se o chamado anterior é igual ao atual, se for ele inclui a flag 'V', senão 'F'. Depois fiz um load do load apenas excluindo os registros da flag com valor 'V' e dropei os campos flag e chave (não há necessidade em fazer isso).

                                Cheguei até a fazer 3 arquivos .xls para testar com um número maior de registros e funcionou aqui.

                                Verifique se com a sua estrutura irá funcionar e se houver algum problema retrate aqui!

                                Abraço!

                        • Re: Manter somente o último lido
                          Ernesto Alves

                          Boa noite,

                           

                          Apenas para dar um retorno e agradecer novamente.

                          Deu certo com a solução do Felipe e a do Rafael me pareceu sem resultado ou erro.

                          Acredito que as duas funcionem, mas como a do Felipe funcionou e me pareceu mais fácil, adotei esta.

                          Fica aqui o meu muito obrigado aos dois, me ajudaram muito !

                           

                          Abraços,

                           

                          Ernesto Alves