Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Usar Like IN do SQL no Qlikview

Meus caros, no SQL utilizo a função Like In ('xxx%','yyy%')

Como posso fazer no Qlikview? Tentei da seguinte forma:

If(CT1_CTFIN LIKE('3.4.2*','3.6.1*'), Dual('Opex',3))

Mas não deu certo.

Abraços

Labels (2)
1 Solution

Accepted Solutions
nicolett_yuri

Eu gosto de utilizar as funções MATCH, MIXMATCH e WILDMATCH.

Para o seu exemplo é necessário WILDMATCH, pois ela é a única que aceita os caracteres curingas * e ?

Seria mais ou menos assim: if(WILDMATCH(CT1_CTFIN ,'3.4.2*','3.6.1*')>0,Dual('Opex',3))

View solution in original post

8 Replies
nicolett_yuri

Eu gosto de utilizar as funções MATCH, MIXMATCH e WILDMATCH.

Para o seu exemplo é necessário WILDMATCH, pois ela é a única que aceita os caracteres curingas * e ?

Seria mais ou menos assim: if(WILDMATCH(CT1_CTFIN ,'3.4.2*','3.6.1*')>0,Dual('Opex',3))

diego_almeida
Partner - Contributor
Partner - Contributor

Poderia usar as funções Right e Left.

if(Right(CT1_CTFIN , 4) = '3.4.2', Dual('Opex', 3))

Com certeza funciona como espera.

Anonymous
Not applicable
Author

Funcionou Yuri.

Poderia me explicar o conceito da função WILDMATCH?

Muito obrigado

nicolett_yuri

São funções que procuram por caracteres dentro de uma string informada.

MATCH = executa uma comparação que é sensível a maiúsculas

MIXMATCH = executa uma comparação que não diferencia maiúsculas de minúsculas

WILDMATCH = executa uma comparação que não diferencia maiúsculas de minúsculas e permite o uso

de caracteres curinga ( * e ?) nos caracteres de comparação

O retorno dessas funções é sempre um número, caso o valor a ser procurado seja encontrado, então será retornada a posição que esta procurando, por exemplo:

match( M, 'Jan','Fev','Mar')

Se M é Mar, então vai retornar 3

Por essa razão utilizei o ">0" = if(WILDMATCH(CT1_CTFIN ,'3.4.2*','3.6.1*')>0,Dual('Opex',3))

Ou seja, quero executar a função DUAL somente se ele encontrar alguns dos casos informados.

Caso eu queira negar, eu utilizo "=0" ou seja, executa somente se não encontrar nada.

Anonymous
Not applicable
Author

Fiz essa forma (estou criando grupo na dimensão):

If(CONTA LIKE '31101*', Dual('Receita Bruta',1),                                esta parte retornou corretamente

If(CONTA LIKE '32*', Dual('( - ) Deduções da Receita',2),                    esta parte retornou corretamente

If(WILDMATCH(CONTA ,'31101*','32*')>0,Dual('Receita Líquida',3),    esta parte não retornou nada

If(WILDMATCH(CT1_CTFIN ,'3.4.2*','3.6.1*','3.6.2*','3.6.3*')>0,Dual('Opex',4))))) esta parte retornou corretamente

Estranhei a terceira parte não retornar nada pois ela seria um resultado das duas primeiras partes.

Abraço

nicolett_yuri

Seu IF esta errado.

Lembre-se que o IF é estrutural

31101* vai parar no primeiro passo

32* vai parar no segundo passo

o terceiro passo nunca terá valor

Anonymous
Not applicable
Author

Mas é possível reestruturar de alguma forma ?

nicolett_yuri

Não, pois você quer dar dois resultados diferentes para o mesmo valor, teria que existir outras condições para dar certo.