Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
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 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

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 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)
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 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)
Anonymous
Not applicable
Author

Obrigado Aderlan e Eduardo...

Muito boa a solução realmente...