Qlik Community

Qlik Brasil

Group community for Brazil users. discussion only in Portuguese.

Highlighted
marcelvinicius
Contributor 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

Tags (1)
1 Solution

Accepted Solutions
mario_sergio_ti
Valued Contributor

Re: Excluir dados de um QVD

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.

10 Replies
thiago_mlg
Contributor II

Re: Excluir dados de um QVD

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
Contributor III

Re: Excluir dados de um QVD

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
Contributor II

Re: Excluir dados de um QVD

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
Contributor III

Re: Excluir dados de um QVD

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?

MCampestrini
Valued Contributor

Re: Excluir dados de um QVD

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
Contributor III

Re: Excluir dados de um QVD

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
Valued Contributor

Re: Excluir dados de um QVD

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
Valued Contributor

Re: Excluir dados de um QVD

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.

marcelvinicius
Contributor III

Re: Excluir dados de um QVD

Muito obrigado pela ajuda.

Atenciosamente