Ir para conteúdo principal
Manipulando dados hierárquicos

NESTA PÁGINA

Manipulando dados hierárquicos

Hierarquias são uma parte importante de todas as soluções de inteligência empresarial, 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.

Faça o seguinte:

  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
    Table showing sample of data loaded using Hierarchy prefix.

Nota informativaPara saber mais sobre hierarquias, consulte esta postagem de blog no Qlik Community: Hierarchies (Hierarquias)

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ó.

Faça o seguinte:

  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
    Table showing data loaded using HierarchyBelongsTo prefix.

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
ACCESS NTNAME PERSON POSITION PERMISSIONS
USER ACME\JRL John CPO HR
USER ACME\CAH Carol CEO CEO
USER ACME\JER James Engenharia do Diretor Engenharia
USER ACME\DBK Diana CFO Financeiro
USER ACME\RNL Bob COO  Vendas.
USER ACME\LFD Larry CTO Produto

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.

Example:  

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 ancestral de Tree.

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.

Árvores: 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
Data model: Authorization, Trees, Fact, and Nodes tables.