Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
marcelvinicius
Creator III
Creator III

Excluir dados de um QVD

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

1 Solution

Accepted Solutions
mario_sergio_ti
Partner - Specialist
Partner - Specialist

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.h...

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.

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti

View solution in original post

10 Replies
thiago_mlg
Creator II
Creator II

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.

marcelvinicius
Creator III
Creator III
Author

Bom dia Thiago,

Seria quase isso. Eu busco esses 10 registros por uma procedure, onde passo o parâmetro de Data Inicial e Data Final. Queria poder excluir por esses parâmetros, será que tem como?

thiago_mlg
Creator II
Creator II

Marcel,

todos os itens são da data 17/07/2017, na procedure, basta colocar uma clausula where filtrando a data.


Mais ou menos assim


SELECT CAMPO1 , CAMPO2 FROM TABELA1 where data <> '17/07/2017'


Caso continue com dúvidas, pode postar a sua procedure, para que possamos te ajudar melhor.


Att,

marcelvinicius
Creator III
Creator III
Author

Obrigado pelas dicas Thiago,

Minha procedure:

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

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

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

E faço um Store para um QVD.

Preciso que seja excluído do QVD as informações de acordo com o DataIni e DataFim, para que eu possa colocar novamente as informações, entenderam?

Marcio_Campestrini
Specialist
Specialist

Marcel

Se as informações estão no QVD, pode seguir o processo mencionado pelo thiago.mlg‌.

Se as informações estão no retorno da procedure, selecione os dados das demais datas e salve no QVD.

Márcio Rodrigo Campestrini
marcelvinicius
Creator III
Creator III
Author

Amigo Mario,

Esse QVD é uma carga que eu faço do banco. Quero excluir os dados pela data para inserir novamente os dados, pra não haver duplicação de informações, conseguiu entender minha dúvida?

Grato

jonas_rezende
Specialist
Specialist

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!

mario_sergio_ti
Partner - Specialist
Partner - Specialist

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.h...

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.

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti
marcelvinicius
Creator III
Creator III
Author

Muito obrigado pela ajuda.

Atenciosamente