Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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!
Alexandre,
Dê uma olhada neste post para a parte dos if's encadeados. Acredito até que vai resolver as questões 1 e 2.
Alexandre,
Dê uma olhada neste post para a parte dos if's encadeados. Acredito até que vai resolver as questões 1 e 2.
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
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.
Bom dia!
Obrigado a todos por todas as dicas...
Vlw mesmo pessoal!
abraço!