Vai al contenuto principale

Gestione dei dati gerarchici

Le gerarchie sono una parte importante di tutte le soluzioni di Business Intelligence offrendo una descrizione delle dimensioni che contengono naturalmente livelli di granularità diversi. Alcune di queste gerarchie sono semplici e intuitive, mentre altre sono complesse e richiedono impegno per poter essere modellate correttamente.

I membri risultano sempre più dettagliati man mano che dalla parte alta della gerarchia si scende verso quella bassa. Ad esempio, in una dimensione con i livelli Market, Country, State e City, il membro Americas compare nel livello superiore della gerarchia, il membro U.S.A. compare nel secondo livello, il livello California appare nel terzo livello e San Francisco nell'ultimo livello. California è più specifico rispetto a U.S.A., mentre San Francisco è più specifico rispetto a California.

La memorizzazione delle gerarchie in un modello relazionale è un'operazione impegnativa che può essere eseguita in diversi modi. Sono disponibili diversi approcci:

  • La gerarchia Orizzontale
  • Il modello di elenco Adiacenza
  • Il metodo di enumerazione Percorso
  • Il modello delle serie Nidificate
  • L'elenco Padre

Ai fini di questo tutorial, si creerà un elenco Padre poiché presenta la gerarchia in una forma direttamente utilizzabile in una query. Ulteriori informazioni su altre soluzioni sono disponibili in Qlik Community.

Prefisso Hierarchy

Il prefisso Hierarchy è un comando di script da inserire davanti all'istruzione LOAD o SELECT per il caricamento di una tabella di nodi adiacenti. L'istruzione LOAD deve avere almeno tre campi: un ID che rappresenta una chiave univoca per il nodo, un riferimento al nodo padre e un nome.

Il prefisso trasformerà una tabella caricata in una tabella di nodi espansi; una tabella con alcune colonne aggiuntive, una per ogni livello della gerarchia.

  1. Creare una nuova app e assegnarle un nome.
  2. Aggiungere una nuova sezione dello script nell'editor caricamento dati.
  3. Richiamare la sezione Wine.
  4. Nel menu a destra, in DataFiles, fare clic su Seleziona dati.

  5. Caricare e selezionare Winedistricts.txt.
  6. Nella finestra Seleziona dati da, deselezionare i campi Lbound e RBound in modo che non vengano caricati.
  7. Fare clic su Inserisci script.
  8. Sopra l'istruzione LOAD immettere quanto segue:
  9. Hierarchy (NodeID, ParentID, NodeName)

    Lo script avrà questo aspetto:

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

  10. Fare clic su Carica dati.
  11. Utilizzare la sezione Anteprima del sistema di visualizzazione modello dati per visualizzare la tabella risultante.
  12. La tabella risultante di nodi espansi presenta esattamente lo stesso numero di record della tabella sorgente: uno per nodo. La tabella di nodi espansi si rivela molto pratica poiché soddisfa alcuni requisiti di analisi della gerarchia in un modello relazionale:

    • Tutti i nomi dei nodi vengono inseriti nella stessa colonna in modo che possa essere utilizzata per le ricerche.
    • Inoltre, ognuno dei livelli dei nodi è stato espanso in un campo. Questi campi possono essere utilizzati nei gruppi di drill-down o come dimensioni nelle tabelle pivot.
    • Inoltre, ognuno dei livelli dei nodi è stato espanso in un campo. Questi campi possono essere utilizzati nei gruppi di drill-down.
    • È possibile fare in modo che il percorso del nodo sia univoco, inserendo tutti i nodi padre nell'ordine corretto.
    • È possibile fare in modo che contenga la profondità del nodo, ad esempio la distanza dal nodo radice.

    La tabella risultante avrà l'aspetto seguente:

    In questa tabella vengono mostrati dati campione caricati utilizzando il prefisso Hierarchy

    In questa tabella vengono mostrati dati campione caricati utilizzando il prefisso Gerarchia.
Nota informaticaPer ulteriori informazioni sulle gerarchie, vedere questo post di blog in Qlik Community: Gerarchie

Prefisso HierarchyBelongsTo

Allo stesso modo del prefisso Hierarchy, il prefisso HierarchyBelongsTo è un comando di script da inserire davanti all'istruzione LOAD o SELECT per il caricamento di una tabella di nodi adiacenti.

Anche in questo caso, l'istruzione LOAD deve avere almeno tre campi: un ID che rappresenta una chiave univoca per il nodo, un riferimento al nodo padre e un nome. Il prefisso trasformerà la tabella caricata in una tabella padre, vale a dire in una tabella in cui qualsiasi combinazione di nodi padre e nodi decrescenti viene inserita come record separato. Pertanto, è molto facile recuperare tutti i nodi padre o i nodi decrescenti di un nodo specifico.

  1. Modificare l'istruzione Hierarchy nell'editor caricamento dati in modo che riporti quanto segue:
  2. HierarchyBelongsTo (NodeID, ParentID, NodeName, BelongsToID, BelongsTo)
  1. Fare clic su Carica dati.
  2. Utilizzare la sezione Anteprima del sistema di visualizzazione modello dati per visualizzare la tabella risultante.
  3. La tabella padre soddisfa alcuni requisiti di analisi della gerarchia in un modello relazionale:

    • Se l'ID del nodo rappresenta i singoli nodi, l'ID padre rappresenta le intere sezioni o le sezioni secondarie della gerarchia.
    • Tutti i nomi dei nodi esistono sia nel ruolo di nodi che nel ruolo di sezioni ed entrambi possono essere utilizzati per le ricerche.
    • È possibile fare in modo che contenga la differenza di profondità tra la profondità del nodo e la profondità del nodo padre, vale a dire la distanza dal nodo radice della sezione secondaria.

    La tabella risultante avrà l'aspetto seguente:

    In questa tabella vengono mostrati dati caricati utilizzando il prefisso HierarchyBelongsTo

    In questa tabella vengono mostrati dati caricati utilizzando il prefisso HierarchyBelongsTo.

Autorizzazione

Le gerarchie vengono spesso utilizzate per l'autorizzazione, come ad esempio in una gerarchia organizzativa. Ogni responsabile deve disporre del diritto di visualizzare tutto ciò che riguarda il reparto, compresi i reparti secondari. Tuttavia, non deve necessariamente disporre del diritto di accedere alle informazioni di altri reparti.

Esempio in una gerarchia organizzativa

Ciò significa che l'autorizzazione alla visualizzazione di differenti sezioni secondarie dell'organizzazione verrà concessa a persone diverse. La tabella delle autorizzazioni potrebbe avere il seguente aspetto:

Tabella delle autorizzazioni
ACCESS NTNAME PERSON POSITION PERMISSIONS
USER ACME\JRL John CPO HR
USER ACME\CAH Carol CEO CEO
USER ACME\JER James Director Engineering Engineering
USER ACME\DBK Diana CFO Finance
USER ACME\RNL Bob COO Sales
USER ACME\LFD Larry CTO Product

In questo caso a Carol è consentito vedere tutti gli elementi appartenenti a CEO e quelli sottostanti; a Larry è consentito vedere l'organizzazione Product è a James è consentito vedere solo l'organizzazione Engineering.

Esempio:  

Spesso la gerarchia è memorizzata in una tabella di nodi adiacenti. In questo esempio, per risolvere ciò è sufficiente caricare la tabella di nodi adiacenti usando il prefisso HierarchyBelongsTo e assegnare al campo padre il nome Tree.

Se si desidera utilizzare Section Access, caricare una copia in maiuscolo di Tree e denominare questo nuovo campo PERMISSIONS. Infine, è necessario caricare la tabella delle autorizzazioni. Questi ultimi due passaggi possono essere eseguiti utilizzando le seguenti righe di script. Tenere presente che la tabella TempTrees è quella creata dall'istruzione HierarchyBelongsTo.

Questo rappresenta solo un esempio. Non sono disponibili esercizi accompagnatori da completare in 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;

Questo esempio produce il seguente modello dati:

Modello dati: tabelle Authorization, Trees, Fact e Nodes

Modello dati: