Olá a todos!
Estou com problema no tratamento de uma tabela. Estou trabalhando na montagem de um balancete e o banco da aplicação só grava informação se houver movimento.
Com isto quando preciso gerar informações de uma determinada competência o minha nuvem não me mostra todas as informações porque a aplicação não grava a posição do mês atual em todas as contas.
Eis minha situação:
Existe alguma função de script que eu consiga preencher as lacunas?
Olá Carlos, tudo bem?
O autogenerete seria um passo anterior, apenas um auxilio confome você fez, alias, parabéns pelo seu código, para quem é formado em administração você tem muita vocação para programador, está, sem dúvida, no caminho certo com o QlikView.
Fiz alguns ajustes do código e completei a lógica, dá uma olhada, para incluir mais campos pode acrecentar no LEFT e repetir o tratamento "se for vazio preencher com o anterior" em todos os campos que você precisar.
Abraço.
Segue o código:
Let v_anomes_ini = MakeDate(2000,1,1);
Let v_anomes_fim = Today();
Let v_ncompetencia = (v_anomes_fim - v_anomes_ini) + 1;
Temp:
LOAD Date((MakeDate(2000,1,1) + RecNo())-1,'yyyyMM') as anomes
AutoGenerate $(v_ncompetencia);
Left Join (Temp)
LOAD * INLINE [
conta, anomes
17451, 200802
17451, 201201
17452, 201201
];
Contas:
NoConcatenate
LOAD *
Resident Temp
Order By anomes, conta;
STORE Contas into Autogenerete.qvd (qvd);
DROP Table Temp;
DROP Table Contas;
Contas:
LOAD @1 as anomes,
@2 as conta
FROM
Autogenerete.qvd
(qvd, filters(
Replace(2, top, StrCnd(null))
));
Olá Carlos,
Dá uma olhada na resposta desse post: http://community.qlik.com/message/206083#206083
Vai resolver isso para você.
Abraço.
Aderlan, Muito obrigado pela resposta.
Entendi a idéia, mas não consigo visualizar a execução (talvez porque minha formação seja em administração, rsrsrs) eu posso casar o autogenerate dentro da tabela em questão?
esse autogenerate teria de enxergar dois campos que serveriam para quebra que são: filial e conta,
ou seja, se não houver registro para a competencia distinta nas conta e ou nas filiais existentes o autogenerate iria incrementar para mim ?
Let v_anomes_ini = Year(MakeDate(2000,1,1)&num(month(MakeDate(2000,1,1)),'00'));
Let v_anomes_Fim = Year(Today())&Num(Month(today()),'00');
Let v_ncompetencia = $(v_anomes_Fim) - $(v_anomes_ini) + 1;
[anomes_aux]:
LOAD Date($(v_anomes_ini) + RecNo()) as ANOMES_TESTE
AutoGenerate $(v_ncompetencia);
[PCR_SALDO]:
LOAD PCR_SaldoAcm.SeqConta,
PCR_SaldoAcm.SeqFilial,
PCR_SaldoAcm.AnoMes,
PCR_SaldoAcm.SaldoInicial,
PCR_SaldoAcm.SomaDebito,
PCR_SaldoAcm.SomaCredito,
PCR_SaldoAcm.SaldoFinal
Olá Carlos, tudo bem?
O autogenerete seria um passo anterior, apenas um auxilio confome você fez, alias, parabéns pelo seu código, para quem é formado em administração você tem muita vocação para programador, está, sem dúvida, no caminho certo com o QlikView.
Fiz alguns ajustes do código e completei a lógica, dá uma olhada, para incluir mais campos pode acrecentar no LEFT e repetir o tratamento "se for vazio preencher com o anterior" em todos os campos que você precisar.
Abraço.
Segue o código:
Let v_anomes_ini = MakeDate(2000,1,1);
Let v_anomes_fim = Today();
Let v_ncompetencia = (v_anomes_fim - v_anomes_ini) + 1;
Temp:
LOAD Date((MakeDate(2000,1,1) + RecNo())-1,'yyyyMM') as anomes
AutoGenerate $(v_ncompetencia);
Left Join (Temp)
LOAD * INLINE [
conta, anomes
17451, 200802
17451, 201201
17452, 201201
];
Contas:
NoConcatenate
LOAD *
Resident Temp
Order By anomes, conta;
STORE Contas into Autogenerete.qvd (qvd);
DROP Table Temp;
DROP Table Contas;
Contas:
LOAD @1 as anomes,
@2 as conta
FROM
Autogenerete.qvd
(qvd, filters(
Replace(2, top, StrCnd(null))
));
Aderlan,
Muito obrigado, pela 'mãozona', consegui o resultado que esperava. Sua ajuda foi fundamental!!!!
Estava tentando montar um balancete de verificação.
Consegui fazer funcionar através de um outer join, muito semelhante a sua instrução, quanto aos saldos, utilizei a função peek (crédito para o blog 'falar de ovos fritos') para que complete o espaços em branco. Antes disso, havia encontrado valores relevantes, através da função firstsortedvalue, muito interessante.
Te devo essa!