Qlik Community

Qlik Brasil

Group community for Brazil users. discussion only in Portuguese.

Highlighted
rvsilvestre
Contributor III

Ajuda com formula.

dados_teste.pngdashboard_teste.png

Olá a todos,

estou com uma dificuldade e gostaria de ver se alguém aqui poderia me ajudar...  eu preciso de que quando não houver um [valor], busque o  'valor da formula' que aparece na imagem acima...  @1 + @2 =  ( valor do cod =1 + valor do cod =2)  (somente dos códigos da mesma agencia)...

Eu tentei modificar aquele campo fórmula... para que ficasse entre aspas e com uma vírgula de separador...  e tentei usa isso em um set analisys (conforme mostra o print) , só que não deu muito certo... os valores só batem se eu selecionar apenas um código e uma agência...

me deram a dica de tentar modificar isso no script e só depois relacionar a conta com o  valor ( ja arumado )... porém não sei como chegaria nesse valor pelo script...

se alguém tiver alguma dica ...

Tags (1)
1 Solution

Accepted Solutions
Not applicable

Re: Ajuda com formula.

Bom dia,

Uma sugestão é trabalhar no script.

Para cada registro que possuir valor no campo formula deve ser criada uma nova linha para cada campo citado na fórmula, por exemplo:

tabela_inicial:

contaagenciacodformulavalor
11111111-20
22222212-50
33333313@1+@20


Após tratamento:

contaagenciacodformulavalor
11111111-20
22222212-50
33333313-20
33333313-50


Não tenho a solução completa mas é um bom começo.

Para facilitar a agregação e soma dos valores (pois a fórmula possui apenas o campo codigo e este deve respeitar sempre a agencia do mesmo registro) crie um novo campo concatenando agencia e o codigo: agencia & '#' & cod AS agencia_cod, ficará algo parecido com: 1#1  1#2  1#3...

Separe da tabela já existentes os registros que possuem formula dos que não possuem:

tmp_sem_formula:

LOAD ...

FROM ...

WHERE ISNULL(formula) = -1;

tmp_com_formula:

LOAD ...

FROM ...

WHERE ISNULL(formula) = 0;

O tratamento deve ser realizado apenas na tabela "tmp_com_formula".

Agora é necessário verificar em quantas linhas o registro será quebrado, para isso utilize a função:

SubStringCount(formula, '@') + 1 AS contador

A partir desta parte deverá ser utlizado laços de repetições para percorrer a tabela e desmembrar 1 registro em "n" registros.

Quando criar esta tabela, você deverá utilizar um join para relacionar este novo registro com os valores da tabela "tmp_sem_formula".

Espero ter ajudado, abraços!

2 Replies
Not applicable

Re: Ajuda com formula.

Bom dia,

Uma sugestão é trabalhar no script.

Para cada registro que possuir valor no campo formula deve ser criada uma nova linha para cada campo citado na fórmula, por exemplo:

tabela_inicial:

contaagenciacodformulavalor
11111111-20
22222212-50
33333313@1+@20


Após tratamento:

contaagenciacodformulavalor
11111111-20
22222212-50
33333313-20
33333313-50


Não tenho a solução completa mas é um bom começo.

Para facilitar a agregação e soma dos valores (pois a fórmula possui apenas o campo codigo e este deve respeitar sempre a agencia do mesmo registro) crie um novo campo concatenando agencia e o codigo: agencia & '#' & cod AS agencia_cod, ficará algo parecido com: 1#1  1#2  1#3...

Separe da tabela já existentes os registros que possuem formula dos que não possuem:

tmp_sem_formula:

LOAD ...

FROM ...

WHERE ISNULL(formula) = -1;

tmp_com_formula:

LOAD ...

FROM ...

WHERE ISNULL(formula) = 0;

O tratamento deve ser realizado apenas na tabela "tmp_com_formula".

Agora é necessário verificar em quantas linhas o registro será quebrado, para isso utilize a função:

SubStringCount(formula, '@') + 1 AS contador

A partir desta parte deverá ser utlizado laços de repetições para percorrer a tabela e desmembrar 1 registro em "n" registros.

Quando criar esta tabela, você deverá utilizar um join para relacionar este novo registro com os valores da tabela "tmp_sem_formula".

Espero ter ajudado, abraços!

rvsilvestre
Contributor III

Re: Ajuda com formula.

Olá,

Obrigado pela dica,

aqui deu certo apenas com

subfield(formula_x,',') as codmaster

valeu ai pela ajuda!

abraços...