Skip to main content
Woohoo! Qlik Community has won “Best in Class Community” in the 2024 Khoros Kudos awards!
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Criação de Nuvem de Dados

Boa tarde a todos.

Estou fazendo um desenvolvimento que envolve a área de controladoria da empresa e preciso trabalhar com os balancetes das empresas do grupo.

São 6 empresas e preciso fazer a primeira massa de dados com o periodo Janeiro de 2009 até Abril de 2011 de todas as empresas. E depois disso vou automatizar a carga para Mes Corrente -1 como base. mas isso é algo que ainda vai ser desenvolvido.

Uma das minhas duvidas é se existe a possibilidade de fazer isso com um loop.

A segunda é a parte incremental. Eu nunca fiz algo desse tipo. E pelo que consegui ver nas pesquisas o ideal é que se tenha uma chave primaria na tabela e uma coluna com a data de inserção.  Porém a tabela que eu vou trabalhar nasce a partir da execução de uma procedure. E a cada execução dessa procedure a tabela é renovada.

Se eu conseguir montar a parte incremental acho que ja consegui solucionar o meu problema.

Muito obrigado desde já.

Labels (2)
1 Solution

Accepted Solutions
Not applicable
Author

Para realizar este loop ficaria algo mais ou menos assim:

// Data inicial

LET vDtIni = DATE('01/08/2009', 'DD/MM/YYYY');    

// Data final
LET vDtFim = DATE('01/02/2011', 'DD/MM/YYYY');  

// Diferença de meses entre as datas
LET numMeses = (MONTH(vDtFim) - MONTH(vDtIni)) + ((YEAR(vDtFim) - YEAR(vDtIni)) * 12); 

 
LET pAnoMes = vDtIni;

// Variavel utilizada apenas para teste
LET j = 0;

// Inicio do LOOP Executará a de acordo com o valor gravado na variavel que verificou a diferença de meses

FOR i=1 TO $(numMeses)


pAnoMes = YEAR(vDtIni) & NUM(MONTH(vDtIni), '00');

// Chamada da sua procedure

//SQL CALL SP_BALAN ('AGRUPAMENTO',  2, 1,'1', NULL, $(pAnoMes),'    ', 'CONTA', 0, 5, 'N', 'N');
...
...

// Incrementa o mês da sua variável

pAnoMes = YEAR(ADDMONTHS(vDtIni, i)) & NUM(MONTH(ADDMONTHS(vDtIni, i)), '00');

// Final do LOOP

NEXT

View solution in original post

5 Replies
Not applicable
Author

Boa Tarde Mauricio,

Seguem suas duvidas:

1ª) Referente a primeira,não entendi o que você deseja rodar em loop;

2ª) Existem diversos conceitos para aplicar a carga incremental, o ideal é que sempre tenha uma data como referência para saber quais são os novos registros.

A idéia é quando for executar a primeira carga, estas informações sejam gravados em um arquivo QVD.

Quando rodar as próximas recargas, você deve utilizar dois LOADS onde o primeiro é feita a leitura dos dados antigos (*.qvd), é utilizado o comando "ADD" e em seguida o segundo LOAD com as novas informações.

Segue um exemplo de uma carga incremental.

Abraços

Not applicable
Author

Olá Eduardo

Muito obrigado pela ajuda. Já vou tentar implementar algo desse tipo e testar.

Quanto a primeira questão é o seguinte.

As informações que vou extrair partem da execução de uma procedure. Essa procedure exige um parametro de "Ano e Mes" (ex: 201104, 200901) e vou precisar fazer a carga desde 2009. E pra cada mes demanda uma execução da procedure.

O que eu tinha em mente era fazer um controle de fluxo para executar a procedure, fazer a select e incrementar no QVD.

Caso não seja dessa forma acredito que será preciso fazer uma execução do script para cada mes.

Not applicable
Author

Para realizar este loop ficaria algo mais ou menos assim:

// Data inicial

LET vDtIni = DATE('01/08/2009', 'DD/MM/YYYY');    

// Data final
LET vDtFim = DATE('01/02/2011', 'DD/MM/YYYY');  

// Diferença de meses entre as datas
LET numMeses = (MONTH(vDtFim) - MONTH(vDtIni)) + ((YEAR(vDtFim) - YEAR(vDtIni)) * 12); 

 
LET pAnoMes = vDtIni;

// Variavel utilizada apenas para teste
LET j = 0;

// Inicio do LOOP Executará a de acordo com o valor gravado na variavel que verificou a diferença de meses

FOR i=1 TO $(numMeses)


pAnoMes = YEAR(vDtIni) & NUM(MONTH(vDtIni), '00');

// Chamada da sua procedure

//SQL CALL SP_BALAN ('AGRUPAMENTO',  2, 1,'1', NULL, $(pAnoMes),'    ', 'CONTA', 0, 5, 'N', 'N');
...
...

// Incrementa o mês da sua variável

pAnoMes = YEAR(ADDMONTHS(vDtIni, i)) & NUM(MONTH(ADDMONTHS(vDtIni, i)), '00');

// Final do LOOP

NEXT

Not applicable
Author

Era basicamente isso que eu estava desenvolvendo.

O que eu tava quebrando a cabeça era essa parte da diferença dos meses porque como voce deve ter imaginado esse parametro de ano mes é uma string e se eu fizesse com o incremento de 1 ele faria algo do tipo "200913". Mas voce me ajudou a solucionar isso.

Mais uma vez obrigado Eduardo.

Vou fazer a implementação e já volto para dizer como ficou.

Not applicable
Author

olá Eduardo

Muito obrigado pela ajuda.

Fiz o que indicou com algumas pequenas adequações e funcionou perfeitamente.

Mais uma vez obrigado