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

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
Partner Ambassador/MVP
Partner Ambassador/MVP

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
Partner Ambassador/MVP
Partner Ambassador/MVP

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
Partner Ambassador/MVP
Partner Ambassador/MVP

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
Partner Ambassador/MVP
Partner Ambassador/MVP

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
Partner Ambassador/MVP
Partner Ambassador/MVP

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