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.
Procedere come indicato di seguito:
- Creare una nuova app e assegnarle un nome.
- Aggiungere una nuova sezione dello script nell'editor caricamento dati.
- Richiamare la sezione Wine.
-
Nel menu a destra, in DataFiles, fare clic su Seleziona dati.
- Caricare e selezionare Winedistricts.txt.
- Nella finestra Seleziona dati da, deselezionare i campi Lbound e RBound in modo che non vengano caricati.
- Fare clic su Inserisci script.
- Sopra l'istruzione LOAD immettere quanto segue:
- Fare clic su Carica dati.
- Utilizzare la sezione Anteprima del sistema di visualizzazione modello dati per visualizzare la tabella risultante.
- 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.
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);
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:
La tabella risultante avrà l'aspetto seguente:
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.
Procedere come indicato di seguito:
- Modificare l'istruzione Hierarchy nell'editor caricamento dati in modo che riporti quanto segue:
HierarchyBelongsTo (NodeID, ParentID, NodeName, BelongsToID, BelongsTo)
- Fare clic su Carica dati.
- Utilizzare la sezione Anteprima del sistema di visualizzazione modello dati per visualizzare la tabella risultante.
- 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 padre soddisfa alcuni requisiti di analisi della gerarchia in un modello relazionale:
La tabella risultante avrà l'aspetto seguente:
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.
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:
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 | Finanza |
USER | ACME\RNL | Bob | COO | Vendite |
USER | ACME\LFD | Larry | CTO | Prodotto |
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.
Questo esempio produce il seguente modello dati: