Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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é.
Olá, é possível sim.
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:
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
Olá, é possível sim.
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:
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
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];
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];
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;
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.
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!
Obrigado, Tonial, Clever, Rodrigo Silvestre...