3 Replies Latest reply: Jan 22, 2018 8:07 AM by Jeu Ricardo Domingos RSS

    Como usar ou substituir IF com mais de 100 níveis

    Jeu Ricardo Domingos

      Boa tarde pessoal, estou tentando resolver um problema de loops entre campos, cheguei em uma solução com IF, comparando se uma coluna é igual (=) ou diferente (<>) as outras.

      Porém existe um limitação de 100 níveis dentro do IF.

      Existe alguma função que substitui o IF, para que eu consiga verificar todas as possibilidades.

       

      A sequencia é de A pra B pra C pra D pra E pra F,

      se A<> B então C não pode ser igual a A,

      quer dizer que está voltando,

      mas C pode ser igual B ou diferente.

      Capturar.PNG

      Montei algo assim:

      Comparando a primeira coluna com as outras, e depois a segunda com as outras e assim por diante.

       

      IF( [Estação A] <> [Estação B] and [Estação A] = [Estação C] and [Estação A] <> [Estação D] and [Estação A] = [Estação E] and [Estação A] <> [Estação Z] , 'Invalido' ,

      IF( [Estação A] = [Estação B] and [Estação A] <> [Estação C] and [Estação A] = [Estação D] and [Estação A] <> [Estação E] and [Estação A] = [Estação Z] , 'Invalido' ,

      IF( [Estação A] <> [Estação B] and [Estação A] = [Estação C] and [Estação A] <> [Estação D] and [Estação A] <> [Estação E] and [Estação A] = [Estação Z] , 'Invalido' ,

      IF( [Estação A] <> [Estação B] and [Estação A] <> [Estação C] and [Estação A] = [Estação D] and [Estação A] <> [Estação E] and [Estação A] = [Estação Z] , 'Invalido' ,

      IF( [Estação A] = [Estação B] and [Estação A] = [Estação C] and [Estação A] <> [Estação D] and [Estação A] = [Estação E] and [Estação A] <> [Estação Z] , 'Invalido' ,

      IF( [Estação A] <> [Estação B] and [Estação A] = [Estação C] and [Estação A] <> [Estação D] and [Estação A] <> [Estação E] and [Estação A] = [Estação Z] , 'Invalido' ,

      IF( [Estação A] <> [Estação B] and [Estação A] = [Estação C] and [Estação A] = [Estação D] and [Estação A] <> [Estação E] and [Estação A] <> [Estação Z] , 'Invalido' ,

      IF( [Estação A] <> [Estação B] and [Estação A] = [Estação C] and [Estação A] = [Estação D] and [Estação A] = [Estação E] and [Estação A] <> [Estação Z] , 'Invalido' ,

      IF( [Estação A] <> [Estação B] and [Estação A] <> [Estação C] and [Estação A] = [Estação D] and [Estação A] = [Estação E] and [Estação A] <> [Estação Z] , 'Invalido' ,

      IF( [Estação A] = [Estação B] and [Estação A] <> [Estação C] and [Estação A] <> [Estação D] and [Estação A] = [Estação E] and [Estação A] <> [Estação Z] , 'Invalido' ,

      IF( [Estação A] = [Estação B] and [Estação A] <> [Estação C] and [Estação A] <> [Estação D] and [Estação A] <> [Estação E] and [Estação A] = [Estação Z] , 'Invalido' ,

      IF( [Estação A] = [Estação B] and [Estação A] = [Estação C] and [Estação A] <> [Estação D] and [Estação A] <> [Estação E] and [Estação A] = [Estação Z] , 'Invalido' ,

      //===================================================================================================================================================================================================================================================

      IF( [Estação B] <> [Estação A] and [Estação B] <> [Estação C] and [Estação B] <> [Estação D] and [Estação B] <> [Estação E] and [Estação B] = [Estação Z] , 'Invalido' ,

       

       

      IF( [Estação B] <> [Estação A] and [Estação B] = [Estação C] and [Estação B] <> [Estação D] and [Estação B] = [Estação E] and [Estação B] <> [Estação Z] , 'Invalido' ,

      IF( [Estação B] = [Estação A] and [Estação B] <> [Estação C] and [Estação B] = [Estação D] and [Estação B] <> [Estação E] and [Estação B] = [Estação Z] , 'Invalido' ,

      IF( [Estação B] <> [Estação A] and [Estação B] = [Estação C] and [Estação B] <> [Estação D] and [Estação B] <> [Estação E] and [Estação B] = [Estação Z] , 'Invalido' ,

      IF( [Estação B] <> [Estação A] and [Estação B] <> [Estação C] and [Estação B] = [Estação D] and [Estação B] <> [Estação E] and [Estação B] = [Estação Z] , 'Invalido' ,

      IF( [Estação B] = [Estação A] and [Estação B] = [Estação C] and [Estação B] <> [Estação D] and [Estação B] = [Estação E] and [Estação B] <> [Estação Z] , 'Invalido' ,

      IF( [Estação B] <> [Estação A] and [Estação B] = [Estação C] and [Estação B] <> [Estação D] and [Estação B] <> [Estação E] and [Estação B] = [Estação Z] , 'Invalido' ,

      IF( [Estação B] <> [Estação A] and [Estação B] <> [Estação C] and [Estação B] = [Estação D] and [Estação B] = [Estação E] and [Estação B] <> [Estação Z] , 'Invalido' ,

      IF( [Estação B] = [Estação A] and [Estação B] <> [Estação C] and [Estação B] <> [Estação D] and [Estação B] = [Estação E] and [Estação B] <> [Estação Z] , 'Invalido' ,

      IF( [Estação B] = [Estação A] and [Estação B] <> [Estação C] and [Estação B] <> [Estação D] and [Estação B] <> [Estação E] and [Estação B] = [Estação Z] , 'Invalido' ,

      IF( [Estação B] = [Estação A] and [Estação B] = [Estação C] and [Estação B] <> [Estação D] and [Estação B] <> [Estação E] and [Estação B] = [Estação Z] , 'Invalido' ,

      //===================================================================================================================================================================================================================================================

       

       

      IF( [Estação C] <> [Estação A] and [Estação C] <> [Estação B] and [Estação C] <> [Estação D] and [Estação C] <> [Estação E] and [Estação C] = [Estação Z] , 'Invalido' ,

       

       

      IF( [Estação C] <> [Estação A] and [Estação C] = [Estação B] and [Estação C] <> [Estação D] and [Estação C] = [Estação E] and [Estação C] <> [Estação Z] , 'Invalido' ,

      IF( [Estação C] = [Estação A] and [Estação C] <> [Estação B] and [Estação C] = [Estação D] and [Estação C] <> [Estação E] and [Estação C] = [Estação Z] , 'Invalido' ,

      IF( [Estação C] <> [Estação A] and [Estação C] = [Estação B] and [Estação C] <> [Estação D] and [Estação C] <> [Estação E] and [Estação C] = [Estação Z] , 'Invalido' ,

      IF( [Estação C] <> [Estação A] and [Estação C] <> [Estação B] and [Estação C] = [Estação D] and [Estação C] <> [Estação E] and [Estação C] = [Estação Z] , 'Invalido' ,

      IF( [Estação C] = [Estação A] and [Estação C] = [Estação B] and [Estação C] <> [Estação D] and [Estação C] = [Estação E] and [Estação C] <> [Estação Z] , 'Invalido' ,

      IF( [Estação C] <> [Estação A] and [Estação C] = [Estação B] and [Estação C] <> [Estação D] and [Estação C] <> [Estação E] and [Estação C] = [Estação Z] , 'Invalido' ,

      IF( [Estação C] = [Estação A] and [Estação C] <> [Estação B] and [Estação C] <> [Estação D] and [Estação C] = [Estação E] and [Estação C] <> [Estação Z] , 'Invalido' ,

      IF( [Estação C] = [Estação A] and [Estação C] <> [Estação B] and [Estação C] <> [Estação D] and [Estação C] <> [Estação E] and [Estação C] = [Estação Z] , 'Invalido' ,

      IF( [Estação C] = [Estação A] and [Estação C] = [Estação B] and [Estação C] <> [Estação D] and [Estação C] <> [Estação E] and [Estação C] = [Estação Z] , 'Invalido' ,

      //===================================================================================================================================================================================================================================================

      Aí o código segue comparando cada campo com o restante

        • Re: Como usar ou substituir IF com mais de 100 níveis
          Alessandro Furtado

          Jeu,

           

          Poderias, por exemplo para a algumas linhas especificas mostrar o que seria o resultado esperado ou pretendido?

           

          No seu script tem um monte de validação e o resultado sempre invalido.  Quando seria valido?  Podes mostrar exemplo?

            • Re: Como usar ou substituir IF com mais de 100 níveis
              Jeu Ricardo Domingos

              Alessandro,

              Essas validações são de condições em em que uma estação repete, de maneira não sequencial,

              na primeira linha aparece

               

              Estação AEstação BEstação CEstação DEstação EEstação F
              BREAGBREALOBREAGBREALOBREAGBREALO

              veja que BREAG aparece em A C e E isso é uma rota inválida, pois significa que partiu de BREAG foi para BREALO e voltou para BREAG.

               

              RCEBGIRCEAMRCEBVJBOPRAIPJCISRCEIMB

              Agora esta rota é valida pois houve paradas em estações diferentes,

              BREAGBREAGBREAGJBOPRAJBOPRARCEIMB

              Esta também é valida pois houve repetição de estações porém sequencial.

               

              o que quero é evitar os loops, onde repeti estações não sequencial como na primeira linha.

               

              Então única função que conheço que compara colunas é o IF, então comecei a compara a Estação A com as demais e depois a B com as demais e assim por diante.

               

              abaixo está alguns IFs, que validam as rotas.

               

              //===================================================================================================================================================================================================================================================

              IF( [Estação A] = [Estação B] and [Estação A] = [Estação C] and [Estação A] = [Estação D] and [Estação A] = [Estação E] and [Estação A] <> [Estação Z] , 'Valido' , // 1

              IF( [Estação A] = [Estação B] and [Estação A] <> [Estação C] and [Estação A] <> [Estação D] and [Estação A] <> [Estação E] and [Estação A] <> [Estação Z] , 'Valido' , // 3

              IF( [Estação A] = [Estação B] and [Estação A] = [Estação C] and [Estação A] <> [Estação D] and [Estação A] <> [Estação E] and [Estação A] <> [Estação Z] , 'Valido' , // 4

              IF( [Estação A] = [Estação B] and [Estação A] = [Estação C] and [Estação A] = [Estação D] and [Estação A] <> [Estação E] and [Estação A] <> [Estação Z] , 'Valido' , // 5

              //===================================================================================================================================================================================================================================================

               

               

              IF( [Estação B] <> [Estação A] and [Estação B] = [Estação C] and [Estação B] = [Estação D] and [Estação B] <> [Estação E] and [Estação B] <> [Estação Z] , 'Valido' , // 6

              IF( [Estação B] <> [Estação A] and [Estação B] = [Estação C] and [Estação B] = [Estação D] and [Estação B] = [Estação E] and [Estação B] <> [Estação Z] , 'Valido' , // 7

              IF( [Estação B] <> [Estação A] and [Estação B] = [Estação C] and [Estação B] = [Estação D] and [Estação B] = [Estação E] and [Estação B] = [Estação Z] , 'Valido' , // 8

              IF( [Estação B] = [Estação A] and [Estação B] = [Estação C] and [Estação B] = [Estação D] and [Estação B] = [Estação E] and [Estação B] <> [Estação Z] , 'Valido' , // 9

              IF( [Estação B] = [Estação A] and [Estação B] <> [Estação C] and [Estação B] <> [Estação D] and [Estação B] <> [Estação E] and [Estação B] <> [Estação Z] , 'Valido' , // 11

              IF( [Estação B] <> [Estação A] and [Estação B] = [Estação C] and [Estação B] <> [Estação D] and [Estação B] <> [Estação E] and [Estação B] <> [Estação Z] , 'Valido' , // 12

              IF( [Estação B] = [Estação A] and [Estação B] = [Estação C] and [Estação B] <> [Estação D] and [Estação B] <> [Estação E] and [Estação B] <> [Estação Z] , 'Valido' , // 13

              IF( [Estação B] = [Estação A] and [Estação B] = [Estação C] and [Estação B] = [Estação D] and [Estação B] <> [Estação E] and [Estação B] <> [Estação Z] , 'Valido' , // 14

              //===================================================================================================================================================================================================================================================

               

               

              IF( [Estação C] <> [Estação A] and [Estação C] = [Estação B] and [Estação C] = [Estação D] and [Estação C] <> [Estação E] and [Estação C] <> [Estação Z] , 'Valido' , // 15

              IF( [Estação C] <> [Estação A] and [Estação C] = [Estação B] and [Estação C] = [Estação D] and [Estação C] = [Estação E] and [Estação C] <> [Estação Z] , 'Valido' , // 16

              IF( [Estação C] <> [Estação A] and [Estação C] <> [Estação B] and [Estação C] = [Estação D] and [Estação C] = [Estação E] and [Estação C] <> [Estação Z] , 'Valido' , // 17

              IF( [Estação C] <> [Estação A] and [Estação C] = [Estação B] and [Estação C] = [Estação D] and [Estação C] = [Estação E] and [Estação C] = [Estação Z] , 'Valido' , // 18

              IF( [Estação C] = [Estação A] and [Estação C] = [Estação B] and [Estação C] = [Estação D] and [Estação C] = [Estação E] and [Estação C] <> [Estação Z] , 'Valido' , // 19

              IF( [Estação C] <> [Estação A] and [Estação C] = [Estação B] and [Estação C] <> [Estação D] and [Estação C] <> [Estação E] and [Estação C] <> [Estação Z] , 'Valido' , // 21

              IF( [Estação C] <> [Estação A] and [Estação C] <> [Estação B] and [Estação C] = [Estação D] and [Estação C] <> [Estação E] and [Estação C] <> [Estação Z] , 'Valido' , // 22

              IF( [Estação C] = [Estação A] and [Estação C] = [Estação B] and [Estação C] <> [Estação D] and [Estação C] <> [Estação E] and [Estação C] <> [Estação Z] , 'Valido' , // 23

              IF( [Estação C] = [Estação A] and [Estação C] = [Estação B] and [Estação C] = [Estação D] and [Estação C] <> [Estação E] and [Estação C] <> [Estação Z] , 'Valido' , // 24

              IF( [Estação C] <> [Estação A] and [Estação C] <> [Estação B] and [Estação C] = [Estação D] and [Estação C] = [Estação E] and [Estação C] = [Estação Z] , 'Valido' , // 25

              //===================================================================================================================================================================================================================================================

               

               

              IF( [Estação D] <> [Estação A] and [Estação D] = [Estação B] and [Estação D] = [Estação C] and [Estação D] <> [Estação E] and [Estação D] <> [Estação Z] , 'Valido' , // 26

              IF( [Estação D] <> [Estação A] and [Estação D] = [Estação B] and [Estação D] = [Estação C] and [Estação D] = [Estação E] and [Estação D] <> [Estação Z] , 'Valido' , // 27

              IF( [Estação D] <> [Estação A] and [Estação D] <> [Estação B] and [Estação D] = [Estação C] and [Estação D] = [Estação E] and [Estação D] <> [Estação Z] , 'Valido' , // 28

              IF( [Estação D] <> [Estação A] and [Estação D] = [Estação B] and [Estação D] = [Estação C] and [Estação D] = [Estação E] and [Estação D] = [Estação Z] , 'Valido' , // 29

              IF( [Estação D] = [Estação A] and [Estação D] = [Estação B] and [Estação D] = [Estação C] and [Estação D] = [Estação E] and [Estação D] <> [Estação Z] , 'Valido' , // 30

              IF( [Estação D] <> [Estação A] and [Estação D] <> [Estação B] and [Estação D] = [Estação C] and [Estação D] <> [Estação E] and [Estação D] <> [Estação Z] , 'Valido' , // 32

              IF( [Estação D] <> [Estação A] and [Estação D] <> [Estação B] and [Estação D] <> [Estação C] and [Estação D] = [Estação E] and [Estação D] <> [Estação Z] , 'Valido' , // 33

              IF( [Estação D] = [Estação A] and [Estação D] = [Estação B] and [Estação D] = [Estação C] and [Estação D] <> [Estação E] and [Estação D] <> [Estação Z] , 'Valido' , // 34

              IF( [Estação D] <> [Estação A] and [Estação D] <> [Estação B] and [Estação D] = [Estação C] and [Estação D] = [Estação E] and [Estação D] = [Estação Z] , 'Valido' , // 35

              IF( [Estação D] <> [Estação A] and [Estação D] <> [Estação B] and [Estação D] <> [Estação C] and [Estação D] = [Estação E] and [Estação D] = [Estação Z] , 'Valido' , // 36

              //===================================================================================================================================================================================================================================================

               

               

              IF( [Estação E] <> [Estação A] and [Estação E] = [Estação B] and [Estação E] = [Estação C] and [Estação E] = [Estação D] and [Estação E] <> [Estação Z] , 'Valido' , // 37

              IF( [Estação E] <> [Estação A] and [Estação E] <> [Estação B] and [Estação E] = [Estação C] and [Estação E] = [Estação D] and [Estação E] <> [Estação Z] , 'Valido' , // 38

              IF( [Estação E] <> [Estação A] and [Estação E] = [Estação B] and [Estação E] = [Estação C] and [Estação E] = [Estação D] and [Estação E] = [Estação Z] , 'Valido' , // 39

              IF( [Estação E] = [Estação A] and [Estação E] = [Estação B] and [Estação E] = [Estação C] and [Estação E] = [Estação D] and [Estação E] <> [Estação Z] , 'Valido' , // 40

              IF( [Estação E] <> [Estação A] and [Estação E] <> [Estação B] and [Estação E] <> [Estação C] and [Estação E] = [Estação D] and [Estação E] <> [Estação Z] , 'Valido' , // 42

              IF( [Estação E] <> [Estação A] and [Estação E] <> [Estação B] and [Estação E] <> [Estação C] and [Estação E] <> [Estação D] and [Estação E] = [Estação Z] , 'Valido' , // 43

              IF( [Estação E] <> [Estação A] and [Estação E] <> [Estação B] and [Estação E] = [Estação C] and [Estação E] = [Estação D] and [Estação E] = [Estação Z] , 'Valido' , // 44

              IF( [Estação E] <> [Estação A] and [Estação E] <> [Estação B] and [Estação E] <> [Estação C] and [Estação E] = [Estação D] and [Estação E] = [Estação Z] , 'Valido' , // 45

              //===================================================================================================================================================================================================================================================

            • Re: Como usar ou substituir IF com mais de 100 níveis
              Ricardo gerhard

              Bom dia Jeu,

               

                O que poderia auxiliar nesse seu caso, seria o encadeamento das condições, ao invés de gerar cada uma de forma individual, como no exemplo abaixo^:

              If(field1 = 'yes',

                   If(field2 = 'yes', 'match', 'match1),

                   If(field2 = 'yes', 'match2', 'no match')) as MatchFlag

                 Recomendo também, quase que obrigatoriamente, que trate esses dados na carga, pois ser deixares em um objeto tais informações, poderá gerar alguns travamentos.