Skip to main content
Announcements
NEW: Seamless Public Data Sharing with Qlik's New Anonymous Access Capability: TELL ME MORE!
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Deletar/Alterar Dados QVD

Bom dia.

Pessoal,

Estou gerando um QVD com os dados de um txt, e este QVD armazenas os novos dados sem alterar os antigos, quando vou gravar os novos dados no QVD eu verifico pela chave se existir não cria. Porem agora me surgiu um novo desafio, eu preciso manter somente os dados com a data do ultimo dia do mês anterior e os dias do mês atual.

exemplo.

Dados já existente no  QVD.

data              descricao

01/12/14        A

02/12/14        B 

.......             ....

......             ..... 

31/12/14      D

Na Gravação Atual eu iria pegar o txt com os dados de janeiro e gravar no qvd, então teria os dados com todos os dias do mês de dezembro e janeiro.

Nesta nova maneira eu gostaria de DELETAR os dias do mês anterior que são diferente do ultimo dia do próprio mês e gravar os dados do mês vigente. Então os dados do QVD ficaria desta forma.

data             descricao

31/12/14      D

01/01/15      A

02/01/15      B

.....................

....................

15/01/15      C

Estou fazendo desta forma atualmente;

DIRECTORY $(pasta_luiz_QVD);

IF NOT ISNULL (QvdCreateTime('$(pasta_luiz_QVD)\ST_PEDIDO_DIARIO.QVD')) THEN

  FILTRO_DATAEMI_PEDIDO:

  load Distinct KeyData as KeyDataNV Resident PEDIDOS;

  concatenate(PEDIDOS)

  LOAD  KeyData,

     KeyLoja,

   KeyVendedor,

       KeyProduto,

       KeyGrupo,

   [Data Emissao],

       [Vendedor Pedido],

       [Nota Fiscal],

       [QTD. Vendida],

       [Valor Total Item],

       [Codigo Produto Pedido],

       [Referencia Produto Pedido],

       [Grupo Pedido],

       [Sub Grupo Pedido],

       [#Dias]

    FROM

    ST_PEDIDO_DIARIO.QVD (QVD)

    WHERE NOT Exists(KeyDataNV, KeyData);

   

    DROP TABLE FILTRO_DATAEMI_PEDIDO;

ENDIF;

STORE PEDIDOS INTO ST_PEDIDO_DIARIO.QVD;

Labels (2)
1 Solution

Accepted Solutions
Not applicable
Author

Fiz desta forma e a principio funcionou bem.

DIRECTORY $(pasta_luiz_QVD);

IF NOT ISNULL (QvdCreateTime('$(pasta_luiz_QVD)\ST_PEDIDO_DIARIO.QVD')) THEN

  FILTRO_DATAEMI_PEDIDO:

  load Distinct KeyData as KeyDataNV,

     Date#(MonthEnd(KeyData)) as KeyFinal Resident PEDIDOS;

  concatenate(PEDIDOS)

  LOAD  KeyData,

     KeyLoja,

   KeyVendedor,

       KeyProduto,

       KeyGrupo,

   [Data Emissao],

       [Vendedor Pedido],

       [Nota Fiscal],

       [QTD. Vendida],

       [Valor Total Item],

       [Codigo Produto Pedido],

       [Referencia Produto Pedido],

       [Grupo Pedido],

       [Sub Grupo Pedido],

       [#Dias]

    FROM

    ST_PEDIDO_DIARIO.QVD (QVD)

    WHERE NOT Exists(KeyDataNV, KeyData) and  KeyData = Date#(MonthEnd(KeyData)) or (KeyData >= Date#(MonthStart(Today())) and KeyData <= Date#(MonthEnd(Today())));

       

    DROP TABLE FILTRO_DATAEMI_PEDIDO;

ENDIF;

STORE PEDIDOS INTO ST_PEDIDO_DIARIO.QVD;

Agradeço sua ajuda, foi de grande valor.

View solution in original post

8 Replies
Clever_Anjos
Employee
Employee

A rigor você não deleta ou altera registros em um QVD, toda vez que um comando STORE é executado o arquivo é sobreposto (todos registros anteriores destruídos) com os dados da nova tabela sendo gravada.

Para ter somente os registros de janeiro e dezembro seria algo semelhante a:

T:

LOAD * FROM ST_PEDIDO_DIARIO.QVD WHERE DATA >= '2014-12-01' AND DATA <= '2015-01-31';


STORE T INTO ST_PEDIDO_DIARIO.QVD;

Not applicable
Author

Entendi.

Então o meu problema é maior. Por que o txt que eu carrego contém somente os dados do dia. Então toda vez que ele carregar vai matar os dados do dia anterior que contém no QVD e substituir pelos novos.

Existe alguma maneira de manter estes dados. Preciso que este QVD armazene estes novos dados mantendo os anteriores.... e sempre que trocar o mês manter somente o ultimo dia do mês e incluir os dados próximo mês.

Tem como fazer isso ?

Clever_Anjos
Employee
Employee

Tem sim, procure no seu manual por carga incremental, existem exemplos que você pode adaptar

Not applicable
Author

Certo.

Obrigado Pela Ajuda.

Not applicable
Author

Mais uma dúvida, pela sua resposta eu entendi que o arquivo QVD toda vez que é criado ele deleta os dados anteriores e salva os novos.

Eu estou executando desta forma:

IF NOT ISNULL (QvdCreateTime('$(pasta_luiz_QVD)\ST_PEDIDO_DIARIO.QVD')) THEN

  FILTRO_DATAEMI_PEDIDO:

  load Distinct KeyData as KeyDataNV Resident PEDIDOS;

  concatenate(PEDIDOS)

  LOAD  KeyData,

     KeyLoja,

   KeyVendedor,

       KeyProduto,

       KeyGrupo,

   [Data Emissao],

       [Vendedor Pedido],

       [Nota Fiscal],

       [QTD. Vendida],

       [Valor Total Item],

       [Codigo Produto Pedido],

       [Referencia Produto Pedido],

       [Grupo Pedido],

       [Sub Grupo Pedido],

       [#Dias]

    FROM

    ST_PEDIDO_DIARIO.QVD (QVD)

    WHERE NOT Exists(KeyDataNV, KeyData);

   

    DROP TABLE FILTRO_DATAEMI_PEDIDO;

ENDIF;

STORE PEDIDOS INTO ST_PEDIDO_DIARIO.QVD;

E parece que ele esta incluindo os dados novos e mantendo os dados antigos. pois

quando carreguei o txt do dia 08/01 ele gravou os dados novos, quando rodei o txt do dia 09/01

ele manteve os dados do dia 08/01 e inclui os do dia 09/01.

Clever_Anjos
Employee
Employee

Quanto um comand STORE é executado ele apaga o arquivo e grava novamente.

Antes desse trecho você está carregando uma tabela pedidos, correto? Digo isso porque você faz um RESIDENT nela

  FILTRO_DATAEMI_PEDIDO:

  load Distinct KeyData as KeyDataNV Resident PEDIDOS;

Cole aqui o script todo que trata dessa tabela PEDIDOS

Not applicable
Author

Desculpa a demora.

Esse é o processo que faço para gerar o QVD.

$(Include=..\config_pastas.txt);

DIRECTORY $(pasta_luiz);

PEDIDOS:

LOAD [dt movimen] as KeyData,

  loja as KeyLoja,

  loja& '-' &vend as KeyVendedor,

     cod.produ& '-' &referencia  as KeyProduto,

     gr& '-' &sgr as KeyGrupo,

  [dt emissao] as [Data Emissao],

     vend as [Vendedor Pedido],

     [nro nfe] as [Nota Fiscal],

     [qt. vendida] as [QTD. Vendida],

     [total item] as [Valor Total Item],

     cod.produ as [Codigo Produto Pedido],

     referencia as [Referencia Produto Pedido],

     gr as [Grupo Pedido],

     sgr as [Sub Grupo Pedido],

     [dt movimen] - [dt emissao] as [#Dias]

   

FROM

[pedidos.txt]

(txt, codepage is 1252, embedded labels, delimiter is ';') ;

DIRECTORY $(pasta_luiz_QVD);

IF NOT ISNULL (QvdCreateTime('$(pasta_luiz_QVD)\ST_PEDIDO_DIARIO.QVD')) THEN

  FILTRO_DATAEMI_PEDIDO:

  load Distinct KeyData as KeyDataNV Resident PEDIDOS;

  concatenate(PEDIDOS)

  LOAD  KeyData,

     KeyLoja,

   KeyVendedor,

       KeyProduto,

       KeyGrupo,

   [Data Emissao],

       [Vendedor Pedido],

       [Nota Fiscal],

       [QTD. Vendida],

       [Valor Total Item],

       [Codigo Produto Pedido],

       [Referencia Produto Pedido],

       [Grupo Pedido],

       [Sub Grupo Pedido],

       [#Dias]

    FROM

    ST_PEDIDO_DIARIO.QVD (QVD)

    WHERE NOT Exists(KeyDataNV, KeyData) ;

   

   

    //Inner Join SQL SELECT KeyData FROM PEDIDOS;

   

    DROP TABLE FILTRO_DATAEMI_PEDIDO;

ENDIF;

STORE PEDIDOS INTO ST_PEDIDO_DIARIO.QVD;

Not applicable
Author

Fiz desta forma e a principio funcionou bem.

DIRECTORY $(pasta_luiz_QVD);

IF NOT ISNULL (QvdCreateTime('$(pasta_luiz_QVD)\ST_PEDIDO_DIARIO.QVD')) THEN

  FILTRO_DATAEMI_PEDIDO:

  load Distinct KeyData as KeyDataNV,

     Date#(MonthEnd(KeyData)) as KeyFinal Resident PEDIDOS;

  concatenate(PEDIDOS)

  LOAD  KeyData,

     KeyLoja,

   KeyVendedor,

       KeyProduto,

       KeyGrupo,

   [Data Emissao],

       [Vendedor Pedido],

       [Nota Fiscal],

       [QTD. Vendida],

       [Valor Total Item],

       [Codigo Produto Pedido],

       [Referencia Produto Pedido],

       [Grupo Pedido],

       [Sub Grupo Pedido],

       [#Dias]

    FROM

    ST_PEDIDO_DIARIO.QVD (QVD)

    WHERE NOT Exists(KeyDataNV, KeyData) and  KeyData = Date#(MonthEnd(KeyData)) or (KeyData >= Date#(MonthStart(Today())) and KeyData <= Date#(MonthEnd(Today())));

       

    DROP TABLE FILTRO_DATAEMI_PEDIDO;

ENDIF;

STORE PEDIDOS INTO ST_PEDIDO_DIARIO.QVD;

Agradeço sua ajuda, foi de grande valor.