Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Problema com strings

Olá, Pessoal!

Estou com os seguintes problemas com 'String'...

Tenho um campo na planilha com 'números' de contratos:

1- Tem valores que terminam em 'C' e 'O', utilizei Right pra fazer a comparação com 'C' e 'O' respectivamente, mas vi que não está retornando todos os contratos, alguns estão passando pelo if( Right( contrato, 1) = 'C', 'Contratos C' ) as Cliente, o mesmo para os contratos terminados em 'O'.

2 -  Outra questão é que tenho alguns valores de contrato que também estão passando pelo if que cria o novo campo...tipo:

if( numero_contrato = '001/2012', 'PETROBRAS'  ) as Cliente

3 - Outra questão é quanto ao aninhamento dos IFs. Tenho muitos contratos e estou encadeando os ifs e tenho clientes que tem mais de um contrato e tenho que colocar todos em sucessivas comparações com or( ex: if( numero_contrato = '001' or '002', or '003', 'Cliente A') as Cliente...Tem alguma estrutura de script que eu possa colocar if( numero_contrato =  {'001','002','003'}..., ou preciso criar variável pra isso ?

Alguém tem alguma ideia pq alguns valores não estão sendo lidos corretamente?

Já coloquei Trim pensando que houvesse algum espaço em branco...mas não funcionou...Alguém tem alguma dica?

Abraço!

1 Solution

Accepted Solutions
Marcio_Campestrini
Specialist
Specialist

Alexandre,

Dê uma olhada neste post para a parte dos if's encadeados. Acredito até que vai resolver as questões 1 e 2.

Márcio Rodrigo Campestrini

View solution in original post

4 Replies
Marcio_Campestrini
Specialist
Specialist

Alexandre,

Dê uma olhada neste post para a parte dos if's encadeados. Acredito até que vai resolver as questões 1 e 2.

Márcio Rodrigo Campestrini
eduardo_sommer
Partner - Specialist
Partner - Specialist

Boa noite, Alexandre

Quando você tem diversos valores a testar em um if, me parece mais adequado usar uma tabela de mapeamento. Esse recurso, do Qlikview (e do Qlik Sense) é poderoso e dá maior flexibilidade na hora de fazer essas atribuições (como as do item 3 de sua questão).

Para criar uma tabela de mapeamento, você pode fazer uma carga inline, ou carregar de uma fonte qualquer que tenha as informações. O importante é que esta tabela tenha dois campos. O nome desses campos não é importante; apenas a sua ordem.

Na carga dessa tabele, você prefixa o comando load com a palavra Mapping

Exemplo:

DePara:

Mapping Load * inline [

De, Para

001, Cliente A

002, Cliente A

003, Cliente B

004, Cliente C

];

Na carga da sua tabela de contratos, digamos que você tenha um campo de nome [Nro Contrato] e você precisa colocar o nome do cliente (de acordo com a tabela DePara, acima.

O seu comando de carga ficará algo como:

Load Campo1,

        Campo2,

        Campo 3,

        [Nro Contrato],

        ApplyMap('DePara', [Nro Contrato], 'Sem Cliente') as Cliente,

        ...

        ...

;

A função ApplyMap irá na tabela que lhe foi passada como primeiro parâmetro (repare nos apóstrofos no nome da tabela) e comparará o segundo parâmetro com o primeiro campo da tabela. Encontrando-o ela pegará o segundo campo como resposta. Não o encontrando, retornará o terceiro parâmetro ('Sem Cliente', no exemplo) para o campo que está sendo criado (Cliente, no exemplo). Caso o terceiro parâmetro da ApplyMap não for informado e ela não encontrar o elemento na tabela de mapeamento, a função retornará nulo.

Por fim, não é necessário que se apague (drop) a tabela de mapeamento. O Qlikview fará isso automaticamente.

Bom proveito

Eduardo

nicolett_yuri

Alexandre, como já foi falado, ao invés de criar centenas de IFs, crie uma tabela de mapeamento com os valores que deseja tratar. O mapeamento alem de ser muito mais prático para adicionar/remover/alterar os casos, ele também se encaixa dentro das melhores práticas de desenvolvimento em qlikview.

Not applicable
Author

Bom dia!

Obrigado a todos por todas as dicas...

Vlw mesmo pessoal!

abraço!