Skip to main content
Announcements
Live today at 11 AM ET. Get your questions about Qlik Connect answered, or just listen in. SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Load incremental

Bom dia.

Pessoal, tenho alguns painéis que buscam informações do ERP da empresa, principalmente um painel financeiro...

Já ouvi dizer, que na versão do qlikview (server) que tenho, não tenho como fazer carga incremental (automática), e como minha base de dados (oracle 11) é gigantesca, cada dia a carga demora mais, devido ao crescimento...

A pergunta é, existe alguma outra forma, via código, de eu pegar informações somente de 5 dias atrás até a atual, sem zerar o que tenho?

Não quero ler a base toda todas as vezes, são anos de informação... Creio que D -5, seria suficiente, para caso tenha sido feita alguma alteração nos dados.

A carga de dados é feita diariamente, na madrugada, via server, sendo que sempre da forma que relatei.

Estou desenvolvendo novos qvw's (primeiro gero QVDs), e em todos é esta luta, queria saber se tenho como fazer da forma que cito, só que não posso pegar dados de apenas 5 dias, mas atualizar com o que já havia no qvd...

Das formas que tentei (sou iniciante), quando puxo apenas 5 dias, tudo que havia antes vai para o espaço, o arquivo zera e pega somente os 5 dias.

Obrigado mais uma vez.

Marcos André.

Labels (1)
1 Solution

Accepted Solutions
fernando_tonial
Partner - Specialist
Partner - Specialist

Olá, é possível sim.

Inserir e Atualizar (Sem Excluir)

O caso seguinte se aplica quando os dados nos registros carregados anteriormente são alterados entre as execuções de script. As seguintes condições se aplicam:

  • A fonte de dados pode ser qualquer base de dados. 
  • O QlikView carrega os registros inseridos ou atualizados na base de dados após a execução do último script
  • É necessário um campo de Data da Modificação (ou semelhante) para que o QlikView reconheça os registros novos. 
  • É necessário um campo chave primário para que o QlikView classifique os registros atualizados do arquivo QVD.
  • Esta solução forçará a leitura do arquivo QVD no modo padrão (em vez do otimizado), que ainda será consideravelmente mais rápido do que carregar a base de dados inteira.

Exemplo de Script:

Tabela_QV:

SQL SELECT ChavePrimária, X, Y FROM DB_TABLE

WHERE HoraModificação >= #$(HoraÚltExec)#;

Concatenate LOAD ChavePrimária, X, Y FROM Arquivo.QVD

WHERE NOT Exists(ChavePrimária);

STORE Tabela_QV INTO Arquivo.QVD;

Esta informação foi retirada do Help do QlikView.

Abraços.

Tonial

Don't Worry, be Qlik.

View solution in original post

7 Replies
fernando_tonial
Partner - Specialist
Partner - Specialist

Olá, é possível sim.

Inserir e Atualizar (Sem Excluir)

O caso seguinte se aplica quando os dados nos registros carregados anteriormente são alterados entre as execuções de script. As seguintes condições se aplicam:

  • A fonte de dados pode ser qualquer base de dados. 
  • O QlikView carrega os registros inseridos ou atualizados na base de dados após a execução do último script
  • É necessário um campo de Data da Modificação (ou semelhante) para que o QlikView reconheça os registros novos. 
  • É necessário um campo chave primário para que o QlikView classifique os registros atualizados do arquivo QVD.
  • Esta solução forçará a leitura do arquivo QVD no modo padrão (em vez do otimizado), que ainda será consideravelmente mais rápido do que carregar a base de dados inteira.

Exemplo de Script:

Tabela_QV:

SQL SELECT ChavePrimária, X, Y FROM DB_TABLE

WHERE HoraModificação >= #$(HoraÚltExec)#;

Concatenate LOAD ChavePrimária, X, Y FROM Arquivo.QVD

WHERE NOT Exists(ChavePrimária);

STORE Tabela_QV INTO Arquivo.QVD;

Esta informação foi retirada do Help do QlikView.

Abraços.

Tonial

Don't Worry, be Qlik.
Not applicable
Author

Consegui montar quase tudo mas não sei como fazer o esquema das datas:

tipo, consegui fazer a consulta no banco e ele traz as informações, gravei o qvd e dropei a tabela.

Agora tenho o qvd com um campo datahora e tenho a consulta para atualizar esse qvd mas como fazer para a consulta verificar a maxdate dentro do qvd e usar como parametro na consulta para incrementar o qvd sem excluir nada e atualizar o periodo mais recente?

segue meu script

[HISTORICO_CCF]:

SELECT * FROM HISTORICO H

WHERE

h.his_pro_cod ='CCF'

and h.his_datahora >= 'O QUE DEVO COLOCAR AQUI ?? NO MEU QVD ATUALIZEI ATÉ 04/10/2016 ENTÃO O QUE COLOCAR AQUI PARA GERAR A CONSULTA OLHANDO ESSA DATA NO QVD ABAIXO E PEGAMNDO OS REGISTROS SUPERIORES A ESTA DATA'

Concatenate

LOAD HIS_COD,

     HIS_DEV_COD,

     HIS_COMPLEMENTO,

     HIS_DATAHORA,

     HIS_DURACAOLIGACAO,

     HIS_AGENDA,

     HIS_LIGACAOPAGA,

     HIS_NROTELEFONE,

     HIS_UNI_COD,

     HIS_THT_COD,

     HIS_USU_COD,

     HIS_MOC_COD,

     HIS_RETORNODISCADOR,

     HIS_VALIDO,

     HIS_REP_COD,

     TROCA,

     HIS_OCO_COD,

     HIS_PRO_COD,

     HIS_PEF_COD,

     HIS_TEL_COD

FROM

(qvd);

STORE [HISTORICO_CCF] INTO C:\Users\jeferson.vargas\Desktop\HISTORICO_CCF.QVD (qvd);

DROP TABLE [HISTORICO_CCF];

fernando_tonial
Partner - Specialist
Partner - Specialist

Olá, você pode fazer assim:

// Início - Está buscando no QVD a última data e hora que vc possui informação no arquivo

[TMP_DATAHORA]:

LOAD HIS_COD,

      Max(HIS_DATAHORA) AS MAXDATAHORA

FROM

(qvd);

SET vMaxDataHora = Peek('MAXDATAHORA');

DROP TABLE [TMP_DATAHORA];

// Fim - Está buscando no QVD a última data e hora que vc possui informação no arquivo

[HISTORICO_CCF]:

SELECT * FROM HISTORICO H

WHERE

h.his_pro_cod ='CCF'

and h.his_datahora >= $(vMaxDataHora)

Concatenate

LOAD HIS_COD,

     HIS_DEV_COD,

     HIS_COMPLEMENTO,

     HIS_DATAHORA,

     HIS_DURACAOLIGACAO,

     HIS_AGENDA,

     HIS_LIGACAOPAGA,

     HIS_NROTELEFONE,

     HIS_UNI_COD,

     HIS_THT_COD,

     HIS_USU_COD,

     HIS_MOC_COD,

     HIS_RETORNODISCADOR,

     HIS_VALIDO,

     HIS_REP_COD,

     TROCA,

     HIS_OCO_COD,

     HIS_PRO_COD,

     HIS_PEF_COD,

     HIS_TEL_COD

FROM

(qvd);

STORE [HISTORICO_CCF] INTO C:\Users\jeferson.vargas\Desktop\HISTORICO_CCF.QVD (qvd);

DROP TABLE [HISTORICO_CCF];

Don't Worry, be Qlik.
Not applicable
Author

Obrigado Fernando por responder,

Tchê funcionou quase tudo...estudei isso final de semana e até agora ainda estou apanhando...quando não é uma coisa é outro kkk...mas não vou desistir assim no mais... assim esta meu scrip agora, a diferença é que a variavel criei com LET, tem problema?Qual a diferença do SET? O que esta acontecendo é:Consigo ler a MAX data, a variavel é carregada e tudo ocorre bem até chegar no SELECT dai diz que falhou mas no oracle roda de boa...ja tirei JOIN coloquei JOIN coloquei TO_char na data, tirei, mas sempre da erro na consulta...o qlikview tem restrições para query?

Já estou com dor de cabeça com essa query...help

bom segue o scrip:

tmp:

load

date(max(DATA),'dd/mm/yyyy') as DATA

FROM

(qvd)

where

DATA > now()-10;

let vData = date(peek('DATA',0,tmp),'dd/mm/yyyy hh:mm:ss');

drop table tmp;

//

//------------------------------------------------------

//conexão com o oracle

OLEDB CONNECT TO [Provider=OraOLEDB.Oracle.1];

//------------------------------------------------------

//

ATUALIZAR:

SELECT H.HIS_NROTELEFONE AS TELHSITORICO,T.TEL_DDD AS DDD, T.TEL_NUMERO AS TELEFONE, H.HIS_DEV_COD, H.HIS_THT_COD, H.HIS_DATAHORA,

E.END_UF, DV.DIV_TOP, H.HIS_USU_COD, U.USU_NOME, D.DEV_ORIGEM, DV.DIV_VALORTOTAL, DV.DIV_REDE, DV.DIV_ATRASO, DV.DIV_CODLOJA, H.HIS_DEV_COD, D.DEV_CPF

FROM HISTORICO H, DEVEDOR D, ENDERECO E, DIVIDA DV, USUARIO U, TELEFONE T

WHERE

D.DEV_COD = H.HIS_DEV_COD

AND E.END_DEV_COD = D.DEV_COD

AND DV.DIV_DEV_COD = D.DEV_COD

AND U.USU_COD = H.HIS_USU_COD

AND T.TEL_COD = H.HIS_TEL_COD

AND H.HIS_UNI_COD = 'POA'

AND DV.DIV_VALIDO = 1

AND H.HIS_PRO_COD = 'DLP'

AND H.HIS_DATAHORA > $(vData)

GROUP BY(H.HIS_NROTELEFONE,T.TEL_DDD, T.TEL_NUMERO,H.HIS_DEV_COD, H.HIS_THT_COD, H.HIS_DATAHORA, E.END_UF, DV.DIV_TOP, H.HIS_USU_COD, U.USU_NOME, D.DEV_ORIGEM, DV.DIV_VALORTOTAL, DV.DIV_REDE, DV.DIV_ATRASO, DV.DIV_CODLOJA, H.HIS_DEV_COD, D.DEV_CPF)

HAVING h.HIS_THT_COD IN ('ACIONAMENTOS','BOLCONF','BOLNCONF','COMPREV','SPREV','ALTENDE','NALTEND','INCTELOP','NINCTEL','RTERC','RELIG','DEALER','NSCONF','V-TERC','V-CLI','COMPREV','SPREV','RELIGCPC');

STORE ATUALIZAR INTO E:\ATUALIZAR.QVD (qvd);

DROP TABLE ATUALIZAR;

fernando_tonial
Partner - Specialist
Partner - Specialist

Olá, me enganei, realmente era o LET no lugar do SET.
A diferença em LET e SET.
SET o  valor atribuído na variável é a informação de esta depois do igual, no caso Peek('MAXDATAHORA');
LET o valor atribuído é o resultado do comando que está depois do igual.

Coloque a variável que está no SQL entre aspas simples.

AND H.HIS_DATAHORA > '$(vData)'

e veja se funciona.

Don't worry, be Qlik.

Tonial.

Don't Worry, be Qlik.
Not applicable
Author

Nossa depois uma semana ou duas de muita peleia e muita leitura, muitos videos, e principalmente com a ajuda de vocês aqui do forum achei o erro ou melhor achei varios erros e varios acertos e principalmente aprendi mais do que imaginava aprender MUITO OBRIGADO MESMO A TODOS QUE TIVERAM PACIENCIA COM MINHAS DUVIDAS e generosamente ajudaram!

Bom galera primeiro:

Quando vou buscar a data(max date) dentro do qvd, preciso formatar para timestamp porque no QVD assim como no meu oracle o formato é DD/MM/YYYY HH24:MM:SS e isso vai ser jogado dentro da variavel vDATA, esse foi o primeiro erro...

Segundo quando declaro a variavel não preciso passar o formato novamente pois ja passei no load quando busco  no QVD e isso estava gerando o erro de literal blablabla...ufa

Terceiro depois de passar a variavel para a query buscar no oracle as informações repeitando a variavel, tambem precisa formatar o tipo de data, vocês me ajudaram certo quanto ao usar o TO_DATE mas uma unica letra estava ferrando com a minha vida aqui e por isso não funcionava direito trazendo valores de datas erradas...resumindo no Oracle é diferente do Qlik...DD/MM/YYYY HH24:MI:SS  esse "I" passou batido por mim e por isso não funcionava...

Então fica a dica, no Oracle DD/MM/YYYY HH24:MI:SS no Qlik DD/MM/YYYY HH:MM:SS

Obrigado a todos vou ficar fera nesse Qlik com a ajuda de vocês!

Not applicable
Author

Obrigado, Tonial, Clever, Rodrigo Silvestre...