Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
lcarlos_pe
Contributor III
Contributor III

Tratamento de Tabelas (Funções de script)

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:

Capturar.PNG

Existe alguma função de script que eu consiga preencher as lacunas?

1 Solution

Accepted Solutions
aderlanrm
Partner - Specialist
Partner - Specialist

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 Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)

View solution in original post

4 Replies
aderlanrm
Partner - Specialist
Partner - Specialist

Olá Carlos,

Dá uma olhada na resposta desse post: http://community.qlik.com/message/206083#206083

Vai resolver isso para você.

Abraço.

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)
lcarlos_pe
Contributor III
Contributor III
Author

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

aderlanrm
Partner - Specialist
Partner - Specialist

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 Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)
lcarlos_pe
Contributor III
Contributor III
Author

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!