Skip to main content
Woohoo! Qlik Community has won “Best in Class Community” in the 2024 Khoros Kudos awards!
Announcements
Nov. 20th, Qlik Insider - Lakehouses: Driving the Future of Data & AI - PICK A SESSION
cancel
Showing results for 
Search instead for 
Did you mean: 
mario_ti
Creator
Creator

Load incremental quando arquivo não existe

Pessoal

Depois de conseguir fazer o load incremental, agora a bronca esta na verificação se o arquivo existe.

O load ficou assim:

Load

FILIAL&DATA&PRODUTO AS CHAVE,

FILIAL,

DATA,

PRODUTO,

VALOR;

[TABLE]:

SQL

SELECT

DATA,

FILIAL,

PRODUTO,

VALOR

FROM TABELA

WHERE PRODUTO IN (75831,75880,75881,75898);

IF(NOT isnull(QVDCreateTime([ARQUIVO.qvd]))) THEN

Concatenate (ESTOQUE)

LOAD CHAVE,

DATA,

FILIAL,

PRODUTO,

VALOR

FROM ['ARQUIVO.qvd'] (qvd)

WHERE NOT Exists(CHAVE)

;

STORE TABLE INTO 'ARQUIVO.qvd';

ELSE

STORE TABLE INTO 'ARQUIVO.qvd';

Como esta ai em cima, toda hora subscreve o arquivo

Se eu tiro o IF funciona 100% .. insere as linhas qdo preciso (caso exista o registro não duplica)

1 Solution

Accepted Solutions
mario_ti
Creator
Creator
Author

Pedro,

Consegui aqui .. a bronca esta na validação da existencia do arquivo

Como eu uso concatenação para criar o QVD por algum motivo na hora da validação estava se perdendo, dai criei uma variavel do tipo SET e funcionou .. abaixo a solução:

SET CAMINHO = ['lib://QLIK\Arquivo_'$(MESCORRENTE)'_'$(ANOCORRENTE)'.qvd'];

IF filesize('$(CAMINHO)') > 0 THEN

Concatenate (TABELA)

LOAD CHAVE,

DATA,

PRODUTO,

VALOR

FROM ['lib://QLIK\Arquivo_'$(MESCORRENTE)'_'$(ANOCORRENTE)'.qvd'] (qvd)

WHERE NOT Exists(CHAVE)

;

STORE TABELA INTO 'lib://QLIK\Arquivo_'$(MESCORRENTE)'_'$(ANOCORRENTE)'.qvd';

else

STORE TABELA INTO 'lib://QLIK\Arquivo_'$(MESCORRENTE)'_'$(ANOCORRENTE)'.qvd';

View solution in original post

8 Replies
pedrobergo
Employee
Employee

Olá Mario,

Você pode tentar assim:

[ESTOQUE]:

Load FILIAL&DATA&PRODUTO AS CHAVE,

          FILIAL,

          DATA,

          PRODUTO,

          VALOR;

SQL SELECT

          DATA,

          FILIAL,

          PRODUTO,

          VALOR

FROM TABELA

WHERE PRODUTO IN (75831,75880,75881,75898);

If QvdCreateTime('ARQUIVO.qvd') <> Null() Then

     Concatenate(ESTOQUE)

     Load CHAVE,

               FILIAL,

               DATA,

               PRODUTO,

               VALOR

     FROM ['ARQUIVO.qvd']

     WHERE NOT EXISTS(CHAVE);

ENDIF;

STORE ESTOQUE INTO 'ARQUIVO.qvd' (qvd);

mario_ti
Creator
Creator
Author

Oi Pedro,

Mesma coisa, ainda continua subscrevendo os dados q já estão no QVD

pedrobergo
Employee
Employee

Olá Mário,

Voce pode tentar alterar a chave para o seguinte:

FILIAL&'|'&DATA&'|'&PRODUTO AS CHAVE

Abs

Pedro

mario_ti
Creator
Creator
Author

Oi Pedro,

Acho que o problema não esta ai e sim na criação do QVD ...

Pq se o arquivo já existe o incremental funciona perfeitamente, a bronca é como criar o arquivo caso não exista e se existir partir para o incremento do arquivo ..

pedrobergo
Employee
Employee

Olá Mario,

Pode ser, mas a gravação do arquivo.qvd está na primeira sentença. Preparei o exemplo a seguir para lhe auxiliar.

A fonte de dados é a planilha Estoque.xlsx, que possui 3 abas, 1 para cada teste.

Ao final de cada rodada, o Script le novamente o ARQUIVO.qvd gerado.

Abs,

Pedro

mario_ti
Creator
Creator
Author

Pedro,

Consegui aqui .. a bronca esta na validação da existencia do arquivo

Como eu uso concatenação para criar o QVD por algum motivo na hora da validação estava se perdendo, dai criei uma variavel do tipo SET e funcionou .. abaixo a solução:

SET CAMINHO = ['lib://QLIK\Arquivo_'$(MESCORRENTE)'_'$(ANOCORRENTE)'.qvd'];

IF filesize('$(CAMINHO)') > 0 THEN

Concatenate (TABELA)

LOAD CHAVE,

DATA,

PRODUTO,

VALOR

FROM ['lib://QLIK\Arquivo_'$(MESCORRENTE)'_'$(ANOCORRENTE)'.qvd'] (qvd)

WHERE NOT Exists(CHAVE)

;

STORE TABELA INTO 'lib://QLIK\Arquivo_'$(MESCORRENTE)'_'$(ANOCORRENTE)'.qvd';

else

STORE TABELA INTO 'lib://QLIK\Arquivo_'$(MESCORRENTE)'_'$(ANOCORRENTE)'.qvd';

Clever_Anjos
Employee
Employee

Bom dia, como você sempre vai armazenar, pode fazer assim

SET CAMINHO = ['lib://QLIK\Arquivo_'$(MESCORRENTE)'_'$(ANOCORRENTE)'.qvd'];

IF filesize('$(CAMINHO)') > 0 THEN

Concatenate (TABELA)

LOAD CHAVE,

DATA,

PRODUTO,

VALOR

FROM ['lib://QLIK\Arquivo_'$(MESCORRENTE)'_'$(ANOCORRENTE)'.qvd'] (qvd)

WHERE NOT Exists(CHAVE);

Endif ;

STORE TABELA INTO 'lib://QLIK\Arquivo_'$(MESCORRENTE)'_'$(ANOCORRENTE)'.qvd';

mario_ti
Creator
Creator
Author

Obrigado ...