10 Replies Latest reply: Jul 19, 2017 10:02 AM by MARIO SOARES RSS

    Excluir dados de um QVD

    Marcel Vinicius de Oliveira

      Bom dia amigos,

       

      Tenho um QVD montado e quero excluir os dados gravados no mês corrente e adicionar novamente, como faço?

      Exemplo:

      O QVD possui 10 itens com a data de hoje: 17/07/2017 - Quero excluir os 10 itens.

       

      Atenciosamente

        • Re: Excluir dados de um QVD
          Thiago Manoel Gonçalo

          Marcel, você tem algumas formas para fazer isso.

           

          Segue 2 possibilidades.

           

          1° Carregue o QVD colocando um where na carga para excluir esses 10 registros, logo abaixo carregue os 10 registros corretos.

           

          2° Carregue todo o QVD, crie no qlik, uma tabela contendo todos os campos e registros, através de filtros retire os 10 registros desejados, exporte a tabela e depois carregue o arquivo exportado gerando o qvd correto.

           

          Existem varias outras possibilidades.

           

          Caso não seja isso, nos de mais detalhes.

           

          Abraços.

          • Re: Excluir dados de um QVD
            Jonas Melo

            Marcel.

             

            Embora a solução imediata seja excluir do QVD e depois inclui-los, para evitar duplicidade, como disse. Vejo que há várias soluções compartilhadas pelos colegas.

             

            Portanto, eu daria uma sugestão para resolver o problema a longo prazo. Tal como criar uma chave composta logo que carregar de seu data source (procedure), de modo que o QVD destino tenha a mesma chave. Assim, faria uma carga incremental salvando os dados uma única vez sem duplicação.

             

            Bom! Quanto ao tipo da carga:  incremental com inserção, atualização e/ou exclusão, deve adequar-se ao objetivo do negócio.

             

            Um simples exemplo da carga incremental.:

            LET vrDataIni  = Date(MonthStart(Today()),'YYYY/MM/DD');

            LET vrDataFim  = Date(MonthEnd(Today()),'YYYY/MM/DD');

             

            Tabela:

            Load

            Autonumber(A & '_' & B & '_' & Date(DataIni)) AS %Key

            Field A,

            Field B

            ;

            SQL

             

            Execute dbo.wGetMovimentoEstoque '1', '1', '$(vrDataIni)','$(vrDataFim)';

             

            Concatenate

             

            Tabela:

            Load

            %Key,

            Field A,

            Field B

            from Tabela.qvd

            (qvd)

            where

            Not Exists(%Key);

             

            Store [Tabela] INTO [..\Tabela.qvd]  (qvd);

            Drop Table Tabela;

             

            Espero ter ajudado!

            • Re: Excluir dados de um QVD
              MARIO SOARES

              Olá Marcel, como vai?

               

              Vejo que é comum nos processos de negócios, existirem ajustes e apurações nos meses de fechamento;

              Para decidir realizar um incremental somente, recomendo analisar os processos e validar se existe estes casos;

               

              Uma alternativa caso não queira arriscar ou caso as áreas não tenham total domínio para te respondem, é realizar por exemplo um carga de atualização a partir de M-1 (mês anterior);

               

              Lembrando que para a carga incremental, não é recomendado utilizar AutoNumber(), pois esta função não é persistente, o que significa que para cada nova carga, haverá uma nova contagem para distinguir o conjunto interno declarado na função;

              Veja:

              https://help.qlik.com/pt-BR/sense/3.1/Subsystems/Hub/Content/Scripting/CounterFunctions/autonumber.htm

               

              O recomendado para gerar chave persistente em uma carga incremental é ou utilizar por exemplo o hash128 (22 caracteres) ou gerar uma chave direto no SQL concatenando alguns atributos ou na estrutura Load poderá concatenar atributos (Ex.: Load Campo1&'|'&Campo2 As 'SK_Key1', ...; SQL ... )...

              Se decidir concatenar os campos e perceber que será maior do que 22 caracteres, então é melhor utilizar hash128 para consumir menos espaço de armazenamento na tabela de Símbolos.

              Lembrando que ao utilizar Exists(), a função pesquisará na Tabela de Dados (binários de ponteiros) e não na Tabela de Símbolos (binários de string, representação) que refletem a Tabela Lógica (o que você enxerga no Visualizador do modelo de dados).

              Veja:

              Symbol Tables and Bit-Stuffed Pointers

               

              Abraço.