6 Replies Latest reply: Jun 18, 2012 8:04 PM by Cesar Accardi RSS

    Solução para uma Tabela Hierárquica

    pericles silva

      Boa tarde. Estou com uma séria dificuldade em fazer isso.

       

      Só para relembrar que, uma tabela hierarquica, é uma tabela cujo os registros são pais ou filhos de certos registros da mesma tabela.

       

      Vou aplicar um exemplo simples: Uma tabela que armazena dados de computadores.

       

      Id
      IdPaiDescricao
      1
      Desktop
      2
      Servidores
      3
      Equipamentos de Rede
      183Roteador
      193Switch
      112Placa-mãe
      122Placa de rede
      132Processador para servidores
      142Memória
      1513Processador núcleo simples
      1613Processador núcleo duplo
      1713Processador de quatro núcleos
      41Placa-mãe
      51Placa de rede
      61Processador para desktops
      71Placa de vídeo
      81Memória
      96Processador de núcleo simples

       

      Até ai tranquilo. O problema é o seguinte: Eu quero criar uma tabela (chamada SERVIDORES:) para pegar apenas os dados A PARTIR do registro "Processadores para servidores" no QlikView.

      A tabela resultante seria:

       

      Id
      IdPaiDescricao
      132Processador para servidores
      1513Processador núcleo simples
      1613Processador núcleo duplo
      1713Processador de quatro núcleos

       

      Segue comando Inline dos dados da tabela origem:

       

      LISTA:

      LOAD * INLINE [

          Id, IdPai, Descricao

          1, , Desktop

          2, , Servidores

          3, , Equipamentos de Rede

          18, 3, Roteador

          19, 3, Switch

          11, 2, Placa-mãe

          12, 2, Placa de rede

          13, 2, Processador para servidores

          14, 2, Memória

          15, 13, Processador núcleo simples

          16, 13, Processador núcleo duplo

          17, 13, Processador de quatro núcleos

          4, 1, Placa-mãe

          5, 1, Placa de rede

          6, 1, Processador para desktops

          7, 1, Placa de vídeo

          8, 1, Memória

          9, 6, Processador de núcleo simples

      ];

        • Re: Solução para uma Tabela Hierárquica
          Aderlan Rodrigues

          Olá Pericles,

           

          Se você ja sabe quais os código basta fazer:

          LOAD Id,

              'Servidor' as IdPai,

              Descricao

          Resident LISTA

          Where Id = 13 or Id = 15 or Id = 16 or Id = 17;

           

          E colocar isso na tabela dinâmica com os campos na ordem Pai, Descrição.

           

          Mas se você quer que isso fique flexivel para sempre que carregar todos os dados sejam devidamente agrupados

          o código fica:

          Left Join (LISTA)

          LOAD Id as IdPai,

              Descricao as DescricaoPai

          Resident LISTA

          Where Exists(Id,IdPai) or IsNull(IdPai) or IdPai = '';

           

          Coloquei alguns tratamentos no WHERE que talvez seja desnecessário, avalie.

           

          Abraço.

          • Re: Solução para uma Tabela Hierárquica
            Cesar Accardi

            Olá Péricles, segue sugestão:

            TMP_LISTA:

             

             

            Hierarchy(Id,IdPai,Descricao,Pai,Descricao,'Caminho','\','Nível')

            LOAD * INLINE [

                Id, IdPai, Descricao

                1, , Desktop

                2, , Servidores

                3, , Equipamentos de Rede

                18, 3, Roteador

                19, 3, Switch

                11, 2, Placa-mãe

                12, 2, Placa de rede

                13, 2, Processador para servidores

                14, 2, Memória

                15, 13, Processador núcleo simples

                16, 13, Processador núcleo duplo

                17, 13, Processador de quatro núcleos

                4, 1, Placa-mãe

                5, 1, Placa de rede

                6, 1, Processador para desktops

                7, 1, Placa de vídeo

                8, 1, Memória

                9, 6, Processador de núcleo simples

            ]
            ;



            LISTA:

            NoConcatenate

            LOAD

            *

            Resident

            TMP_LISTA

            WHERE Descricao2 = 'Processador para servidores';



            DROP TABLE TMP_LISTA;

             

            • Re: Solução para uma Tabela Hierárquica
              pericles silva

              Cesar Accardi é isso mesmo. Agora mais uma dúvida:

               

              Gostaria de armazenar em uma variável (valores separados por vírgula) cada ID das peças de computador a partir de "Processador para servidores". Tem como?

               

              $idsCpuServer = 13, 15, 16, 17, (...)