Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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 | 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 |
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 | IdPai | Descricao |
---|---|---|
13 | 2 | Processador para servidores |
15 | 13 | Processador núcleo simples |
16 | 13 | Processador núcleo duplo |
17 | 13 | Processador 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
];
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;
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.
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;
Estou com uma dúvida muito parecida , estou tentando fazer com o Hierarchy , mas não esta dando certo..
tenho
cod1 cod2
1 8
1 7
1 2
2 4
2 9
e quero transformar para
cod1 cod2
1 8
1 7
1 4
1 9
Alguém para dar um help?
Olá Rodrigo,
Acredito que a melhor opção neste caso é o uso do Mapping, segue:
Grupo:
Mapping
LOAD cod2,
cod1
From...;
Resultado:
LOAD MapSubString('Grupo',cod1) as cod1,
cod2,
Descricao
From...
Where not Exists(cod1,cod2);
O Where é apenas para remover os "gurpos" da tabela cerregada.
Abraço.
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, (...)
Olá Pericles,
Tem sim.... use a função Concat(Descrição,',')