Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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
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:
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.
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.
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?
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,
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?
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.
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
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!
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:
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.
Muito obrigado pela ajuda.
Atenciosamente