Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Olá pessoal,
Preciso criar um campo na minha base de dados que é condicionado a leitura de outros campos. Por exemplo:
Na minha base original tenho alguns campos que uso, entre eles um campo Cod_PRODUTO e outro GRUPO. Os produtos já estão relacionados a um GRUPO, entretanto dependendo de alguns Cod_PRODUTOS eu preciso mudar o nome do GRUPO.
Se Cod_PRODUTO igual 1234 então EMPRESA X, senão EMPRESA Y.
Como posso fazer que o resultado seja gravado em um novo campo GRUPO_ATUAL?
Abs.,
LGMF
Você pode usar a forma que o Fernando passou ou então usar a função WILDMATCH(), por exemplo:
IF( WILDMATCH(COD_PRODUTO, '1234', '0114','0116','0520','0523','0525','0542', '0583','0589')>0, 'EMPRESA X', GRUPO) as GRUPO_ATUAL,
Porém a melhor solução é usar o ApplyMap, pois ele faz isso com maior performance!
Luiz, você mesmo respondeu sua pergunta hehe, vamos lá:
Basta você adicionar uma linha dentro da leitura dessa tabela com o seguinte código:
IF( COD_PRODUTO = '1234', 'EMPRESA X', 'EMPRESA Y') as GRUPO_ATUAL,
Se o cod_produto for '1234', então recebe a string EMPRESA X, caso contrário recebe EMPRESA Y
Olá Yuri,
Obrigado pela resposta.
E como poderia fazer para manter o mesmo valor do GRUPO no else? Ou seja:
Se Cod_PRODUTO igual a 1234 então EMPRESA X, senão mantenha a empresa do campo GRUPO.
Exemplo:
GRUPO - Cod_PRODUTO GRUPO ATUAL
EMPRESA X - 1234 - EMPRESA Y
EMPRESA Y - 5678 - EMPRESA Y
EMPRESA X - 3456 - EMPRESA X
EMPRESA Z - 1234 - EMPRESA Y
Faça assim:
IF( COD_PRODUTO = '1234', 'EMPRESA X', GRUPO) as GRUPO_ATUAL,
Olá Yuri,
Há alguma sintaxe para que eu possa fazer a condicional com alguns Cod_PRODUTO, sem ter que usar muitos OR, ou seja, melhorar a sintaxe:
IF( COD_PRODUTO = '1234' OR COD_PRODUTO = '0114' OR COD_PRODUTO = '0116' OR COD_PRODUTO = '0520' OR COD_PRODUTO = '0523' OR COD_PRODUTO = '0525' OR COD_PRODUTO = '0542' OR COD_PRODUTO = '0583' OR COD_PRODUTO = '0589', 'EMPRESA X', GRUPO) as GRUPO_ATUAL,
Obrigado!
Olá Luiz,
Quando possui mais de uma possibilidade, sempre utilizo a tabela de mapeamento com o auxílio da função ApplyMap(), pois fica mais fácil a manutenção e a performance é melhor.
Exemplo:
Map_GrupoAtual:
Mapping
Load * InLine [
DE, PARA
1234, EMPRESA X
0114, EMPRESA X
0116, EMPRESA X
0520, EMPRESA X
0523, EMPRESA X
0525, EMPRESA X
0542, EMPRESA X
0583, EMPRESA X
0589, EMPRESA X
]
Dados:
Load
ApplyMap('Map_GrupoAtual', COD_PRODUTO, GRUPO) AS GRUPO_ATUAL,
GRUPO,
COD_PRODUTO
From Tabela;
Qlikfique-se.
Tonial.
Você pode usar a forma que o Fernando passou ou então usar a função WILDMATCH(), por exemplo:
IF( WILDMATCH(COD_PRODUTO, '1234', '0114','0116','0520','0523','0525','0542', '0583','0589')>0, 'EMPRESA X', GRUPO) as GRUPO_ATUAL,
Porém a melhor solução é usar o ApplyMap, pois ele faz isso com maior performance!
Se tenho mais de uma empresa no campo, posso condicionar com:
IF(
WILDMATCH(Cod_PRODUTO, '1234', '0114','0116','0520','0523','0525','0542','0583','0589')>0
AND
WILDMATCH(Cod_EMPRESA, '05321', '01775', '05096', '06955', '06041', '06912', '03182', '21661')
'EMPRESA X',
GRUPO)
as GRUPO_ATUAL,
Acho que ainda sou Padawan para usar o ApplyMap().
IF(
WILDMATCH(Cod_PRODUTO, '1234','0114','0116','0520','0523','0525','0542','0583','0589')>0
AND
WILDMATCH(Cod_EMPRESA, '05321', '01775', '05096', '06955', '06041', '06912', '03182', '21661')>0
'EMPRESA X',
GRUPO)
as GRUPO_ATUAL,
Só esqueceu do >0 ali