Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Want to see what's currently in public preview? We've pulled it all together in one place. Check it out here
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

formula

Olá,

Alguem teria alguma ideia de como resolver isso?

imagem_teste.png

preciso resolver aquelas formulas no qlikview...   @1 = valor do cod 1 ....

logo (@1 + @2 - @3) / 100      = ( 10+ 10 - 10) / 100...

1 Solution

Accepted Solutions
aderlanrm
Partner - Specialist
Partner - Specialist

Olá RSilvestre,

Seguinte, carrega os dados usando Mapping.

Valores:

Mapping

LOAD '@'&Cód as CodFormula, Valor

FROM [Valores.xlsx]

(ooxml, embedded labels, table is Plan1);

Formulas:

LOAD '@'&Código as CodFormula,

    MapSubString('TrataValores',Formula) as NovaFormula,

    Evaluate(MapSubString('Valores',Formula)) as Resultado

Resident Valores

Where Formula <> '';

Assim o resultado será uma coluna com os devidos valores substituidos.

Ex: Cód: 6 = (10+10-10)/100 = 0,1

Bem atento a função Evaluate, pois sem ela, o resultado é considerado texto, usando essa função, ele faz o calculo para você.

Abraço.

Aderlan Rodrigues
Analista, Arquiteto de Dadose e Desenvolvedor
 (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

7 Replies
Not applicable
Author

Bom Dia,

Você pode realizar o tratamento direto no seu script.

Ex.:

AUX:
LOAD *
INLINE [
    COD, DESC, VLR
    1, CTBA, 10
    2, FOZ, 10
    3, PATO, 10
    4, JOIN, 10
    5, FLORI, 10
    6, PR, 0
    7, SC, 0
];

TABLE:
LOAD
     COD,
     DESC,
     IF(COD <> 6 AND COD <> 7, VLR,
       IF(COD = 6, (PEEK('VLR', 0, 'AUX') + PEEK('VLR', 1, 'AUX') - PEEK('VLR', 2, 'AUX')) / 100,
         IF(COD = 7, PEEK('VLR', 3, 'AUX') * PEEK('VLR', 4, 'AUX') ) ) )  AS VALOR
RESIDENT AUX;

DROP TABLE AUX;

Anonymous
Not applicable
Author

Obrigado pela ajuda,

mas este é só um pequeno exemplo para ficar mais facil de demonstrar...

tenho uma tabela com mais de mil fórmulas iguais a esta... 

Not applicable
Author

A idéia é justamente expor que a função PEEK() pode ser utilizada para obter os valores de determinados registros.

É um caminho, não uma solução.

Acredito que também deva utilizar algumas funções de caracteres como replace(), para que atenda totalmente suas expectativas.

Abraços!

aderlanrm
Partner - Specialist
Partner - Specialist

Olá RSilvestre,

Seguinte, carrega os dados usando Mapping.

Valores:

Mapping

LOAD '@'&Cód as CodFormula, Valor

FROM [Valores.xlsx]

(ooxml, embedded labels, table is Plan1);

Formulas:

LOAD '@'&Código as CodFormula,

    MapSubString('TrataValores',Formula) as NovaFormula,

    Evaluate(MapSubString('Valores',Formula)) as Resultado

Resident Valores

Where Formula <> '';

Assim o resultado será uma coluna com os devidos valores substituidos.

Ex: Cód: 6 = (10+10-10)/100 = 0,1

Bem atento a função Evaluate, pois sem ela, o resultado é considerado texto, usando essa função, ele faz o calculo para você.

Abraço.

Aderlan Rodrigues
Analista, Arquiteto de Dadose e Desenvolvedor
 (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)
Not applicable
Author

Utilizando o mapping como o Aderlan mencionou acredito que resolva os seus problemas.

Somente na linha "MapSubString('TrataValores',Formula)", deve ser MapSubString('Valores',Formula), pois o parâmetro deve referenciar a tabela de mapping.

Otima solução!

Abraços!!

aderlanrm
Partner - Specialist
Partner - Specialist

Rsrsrs...

Verdade, estava fazendo testes com outras tabelas então esqueci de alterar o nome na função.

Obrigado Eduardo pela correção.

Abraço.

Aderlan Rodrigues
Analista, Arquiteto de Dadose e Desenvolvedor
 (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)
Anonymous
Not applicable
Author

Obrigado Aderlan e Eduardo...

Muito boa a solução realmente...