Ir para conteúdo principal Pular para conteúdo complementar

Manipulando dados hierárquicos

Hierarquias são uma parte importante de todas as soluções de business intelligence, utilizadas para descrever dimensões que obviamente contêm diferentes níveis de granularidade. Algumas são simples e intuitivas, enquanto outras são complexas e exigem bastante planejamento para serem corretamente modeladas.

Da parte superior de uma hierarquia até a parte inferior, os membros são progressivamente mais detalhados. Por exemplo, em uma dimensão que tenha os níveis Mercado, País, Estado e Cidade, o membro Américas aparece no nível mais alto da hierarquia, o membro EUA aparece no segundo nível, o membro Califórnia aparece no terceiro nível e São Francisco no nível inferior. Califórnia é mais específico do que EUA e São Francisco é mais específico do que Califórnia.

Armazenar hierarquias em um modelo relacional é um desafio comum com várias soluções. Há várias abordagens:

  • A hierarquia Horizontal
  • O modelo de lista de Adjacência
  • O método de enumeração do Caminho
  • O modelo de conjuntos Aninhados
  • A lista de Ancestrais

Para os fins deste tutorial, criaremos uma lista de Ancestrais, já que ela apresenta a hierarquia de uma forma que pode ser utilizada diretamente em uma consulta. Mais informações sobre as outras abordagens podem ser encontradas no Qlik Community.

Prefixo Hierarchy

O prefixo Hierarchy é um comando de script que é colocado na frente de um comandoLOAD ou SELECT que carrega uma tabela de nós adjacentes. Também aqui, o comando LOAD precisa ter pelo menos três campos: Um ID que seja uma chave exclusiva do nó, uma referência ao pai e um nome.

O prefixo transformará uma tabela carregada em uma tabela de nós expandidos; uma tabela que tenha um número de colunas adicionais; uma para cada nível da hierarquia.

  1. Crie um novo aplicativo e nomeie-o.
  2. Adicione uma nova seção de script no Editor de carregamento de dados.
  3. Nomeie a seção como Wine.
  4. Em DataFiles no menu direito, clique em Selecionar dados.

  5. Carregue e, em seguida, selecione Winedistricts.txt.
  6. Na janela Selecionar dados de, desmarque os campos Lbound e RBound para que não sejam carregados.
  7. Clique em Inserir script.
  8. Digite o seguinte acima do comando LOAD:
  9. Hierarchy (NodeID, ParentID, NodeName)

    Seu script deve ter a seguinte aparência:

    Hierarchy (NodeID, ParentID, NodeName)
    LOAD
        NodeID,
        ParentID,
        NodeName
    FROM [lib://DataFiles/Winedistricts.txt] 
    (txt, utf8, embedded labels, delimiter is '\t', msq);			

  10. Clique em Carregar dados.
  11. Use a seção Pré-visualização do visualizador do modelo de dados para visualizar a tabela resultante.
  12. A tabela de nós expandidos resultante tem exatamente o mesmo número de registros que a sua tabela de origem: um por nó. A tabela de nós expandidos é muito prática, já que ela atende a alguns requisitos para a análise de uma hierarquia em um modelo relacional:

    • Todos os nomes de nós existem em uma e na mesma coluna; portanto, ela pode ser utilizada para pesquisas.
    • Além disso, os diferentes níveis de nós foram expandidos em um campo cada; campos que podem ser usados em grupos de hierarquia ou como dimensões em tabelas dinâmicas.
    • Além disso, os diferentes níveis de nós foram expandidos em um campo cada; campos que podem ser usados ​​em grupos detalhados.
    • Ela pode ser criada para conter um caminho exclusivo para o nó, listando todos os ancestrais na ordem correta.
    • Ela pode ser criada para conter a profundidade do nó, isto é, a distância da raiz.

    A tabela resultante tem a seguinte aparência:

    Tabela mostrando amostra de dados carregados usando o prefixo Hierarchy

    Tabela mostrando amostra de dados carregados usando o prefixo Hierarchy.

Prefixo HierarchyBelongsTo

Assim como o prefixo Hierarchy, o prefixo HierarchyBelongsTo é um comando de script que é colocado na frente de um comando LOAD ou SELECT que carrega uma tabela de nós adjacentes.

Também aqui, o comando LOAD precisa ter pelo menos três campos: Um ID que seja uma chave exclusiva do nó, uma referência ao pai e um nome. O prefixo transformará a tabela carregada em uma tabela de ancestrais, uma tabela que tenha cada combinação de um ancestral e um descendente listado como um registro separado. Por isso, é muito fácil localizar todos os ancestrais ou todos os descendentes de um determinado nó.

  1. No Editor de carregamento de dados, modifique o comando Hierarchy para o seguinte:
  2. HierarchyBelongsTo (NodeID, ParentID, NodeName, BelongsToID, BelongsTo)
  1. Clique em Carregar dados.
  2. Use a seção Pré-visualização do visualizador do modelo de dados para visualizar a tabela resultante.
  3. A tabela de ancestrais atende a vários requisitos para a análise de uma hierarquia em um modelo relacional:

    • Se o ID do nó representar os nós individuais, o ID do ancestral representará as árvores inteiras e sub-árvores da hierarquia.
    • Todos os nomes de nós existem na função como nós e na função como árvores e as duas podem ser utilizadas ​​para pesquisas.
    • Isso pode ser feito para conter a diferença de profundidade entre a profundidade do nó e a profundidade do ancestral, isto é, a distância entre a raiz da sub-árvore.

    A tabela resultante tem a seguinte aparência:

    Tabela mostrando dados carregados usando o prefixo HierarchyBelongsTo

    Tabela mostrando dados carregados usando o prefixo HierarchyBelongsTo.

Autorização

Não é raro que uma hierarquia seja usada para autorização. Um exemplo é uma hierarquia organizacional. Cada gerente deve ter o direito de visualizar tudo o que pertence ao seu próprio departamento, incluindo todos os seus sub-departamentos. Mas eles não devem, necessariamente, ter o direito de visualizar os outros departamentos.

Exemplo de hierarquia organizacional

Isso significa que diferentes pessoas poderão visualizar diferentes sub-árvores da organização. A tabela de autorização pode ter a seguinte aparência:

Tabela de autorização
ACCESSNTNAMEPERSONPOSITIONPERMISSIONS
UsuárioACME\JRLJohnCPOHR
UsuárioACME\CAHCarolCEOCEO
UsuárioACME\JERJamesEngenharia do DiretorEngenharia
UsuárioACME\DBKDianaCFOFinanceiro
UsuárioACME\RNLBobCOO Vendas.
UsuárioACME\LFDLarryCTOProduto

Neste caso, Carol pode visualizar tudo o que pertence ao CEO e outros; Larry pode visualizar a organização do Product; e James pode visualizar somente a organização Engineering.

Exemplo:  

Muitas vezes, a hierarquia é armazenada em uma tabela de nós adjacentes. Neste exemplo, para resolver isso, você pode carregar a tabela de nós adjacentes usando um HierarchyBelongsTo e chamar o campo ancestralTree.

Se você quiser usar o Section Access, carregue uma cópia em maiúsculas de Tree e chame esse novo campo de PERMISSIONS. Por último, você precisa carregar a tabela de autorização. Essas duas últimas etapas podem ser realizadas usando as seguintes linhas de script. Observe que a tabela TempTrees é a tabela criada pelo comando HierarchyBelongsTo.

Observe que este é apenas um exemplo. Não há exercícios complementares a serem concluídos no Qlik Sense.

Trees: LOAD *, Upper(Tree) as PERMISSIONS Resident TempTrees; Drop Table TempTrees;   Section Access; Authorization: LOAD ACCESS, NTNAME, UPPER(Permissions) as PERMISSIONS From Organization; Section Application;

Este exemplo produziria o seguinte modelo de dados:

Modelo de dados: Tabelas Authorization, Trees, Fact e Nodes

Modelo de dados:

Esta página ajudou?

Se você encontrar algum problema com esta página ou seu conteúdo - um erro de digitação, uma etapa ausente ou um erro técnico - informe-nos como podemos melhorar!