Skip to main content
Announcements
NEW: Seamless Public Data Sharing with Qlik's New Anonymous Access Capability: TELL ME MORE!
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Criar novo campo na base condicionado a variáveis

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

1 Solution

Accepted Solutions
nicolett_yuri

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!

View solution in original post

8 Replies
nicolett_yuri

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

Not applicable
Author

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

nicolett_yuri

Faça assim:


IF( COD_PRODUTO = '1234', 'EMPRESA X', GRUPO) as GRUPO_ATUAL,

Not applicable
Author

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!

fernando_tonial
Employee
Employee

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.

Don't Worry, be Qlik.
nicolett_yuri

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!

Not applicable
Author

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().

nicolett_yuri

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