Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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
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))
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))
Poderia usar as funções Right e Left.
if(Right(CT1_CTFIN , 4) = '3.4.2', Dual('Opex', 3))
Com certeza funciona como espera.
Funcionou Yuri.
Poderia me explicar o conceito da função WILDMATCH?
Muito obrigado
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.
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
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
Mas é possível reestruturar de alguma forma ?
Não, pois você quer dar dois resultados diferentes para o mesmo valor, teria que existir outras condições para dar certo.