4 Replies Latest reply: Dec 17, 2015 7:46 AM by Alexandre Alves RSS

    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!

        • Re: Problema com strings
          Márcio Rodrigo Campestrini

          Alexandre,

           

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

          • Re: Problema com strings
            Eduardo Sommer

            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

            • Re: Problema com strings
              Yuri Nicolett

              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.

              • Re: Problema com strings

                Bom dia!

                 

                Obrigado a todos por todas as dicas...

                Vlw mesmo pessoal!

                abraço!