Hiërarchische gegevens verwerken
Hiërarchieën maken een belangrijk onderdeel uit van alle Business Intelligence-oplossingen. Zij worden gebruikt voor het beschrijven van dimensies die van nature verschillende granulariteitsniveaus bevatten. Sommige zijn simpel en intuïtief, terwijl andere complex zijn en veel denkwerk bij de modellering vereisen.
Vanaf de top van een hiërarchie tot aan de onderkant, zijn de leden in toenemende mate meer gedetailleerd. In een dimensie met de niveaus Markt, Land, Staat en Plaats bijvoorbeeld, verschijnt het lid Noord-, Midden- en Zuid-Amerika op het hoogste niveau van de hiërarchie, het lid V.S. op het tweede niveau, het lid California op het derde niveau en San Francisco op het laagste niveau. California is specifieker dan V.S. en San Francisco is specifieker dan California.
Het opslaan van hiërarchieën in een relationeel model is een veelvoorkomend probleem met meerdere oplossingen. Er zijn verschillende benaderingen:
- De horizontale hiërarchie
- Het nabijheidslijstmodel
- De padopsommingsmethode
- Het model van geneste gegevensverzamelingen
- De voorgangerslijst
In het kader van deze zelfstudie gaan we een voorgangerslijst maken omdat deze de hiërarchie presenteert in een vorm die direct bruikbaar is in een query. Meer informatie over de andere benaderingen is te vinden in Qlik Community.
Prefix Hierarchy
Het prefix Hierarchy is een scriptopdracht die u vóór een LOAD- of SELECT-opdracht plaatst waarmee een tabel met nabijgelegen knooppunten wordt geladen. De opdracht LOAD moet uit ten minste drie velden bestaan: Een id als unieke sleutel voor het knooppunt, een verwijzing naar het bovenliggende element en een naam.
Het prefix transformeert een geladen tabel in een tabel met uitgevouwen knooppunten; een tabel met een aantal extra kolommen - één voor elk niveau van de hiërarchie.
Doe het volgende:
- Maak een nieuwe app en geef deze een naam.
- Voeg een nieuwe scriptsectie toe in de Editor voor het laden van gegevens.
- Roep de sectie Wine aan.
-
Onder DataFiles in het rechtermenu klikt u op Gegevens selecteren.
- Upload en selecteer Winedistricts.txt.
- Leeg in het venster Gegevens selecteren van de velden Lbound en RBound, zodat deze niet worden geladen.
- Klik op Script invoegen.
- Voer boven de LOAD-opdracht het volgende in:
- Klik op Gegevens laden.
- Gebruik de sectie Voorbeeld van de gegevensmodelviewer om de resulterende tabel te bekijken.
- Alle namen van knooppunten bestaan in één en dezelfde kolom, zodat deze kan worden gebruikt voor zoekopdrachten.
- Daarnaast zijn de verschillende knooppuntniveaus elk in één veld uitgevouwen; velden die kunnen worden gebruikt in drill-down-groepen of als dimensies in draaitabellen.
- Daarnaast zijn de verschillende knooppuntniveaus uitgevouwen in één veld elk; velden die kunnen worden gebruikt in drill-down groepen.
- In de tabel kan tevens een pad worden opgenomen dat uniek is voor het knooppunt, met alle voorgangers in de juiste volgorde.
- De tabel kan de diepte van het knooppunt bevatten, oftewel de afstand tot het hoofdelement.
Hierarchy (NodeID, ParentID, NodeName)
Uw script zou er als volgt moeten uitzien:
Hierarchy (NodeID, ParentID, NodeName)
LOAD
NodeID,
ParentID,
NodeName
FROM [lib://DataFiles/Winedistricts.txt]
(txt, utf8, embedded labels, delimiter is '\t', msq);
De resulterende tabel met uitgevouwen knooppunten bevat exact hetzelfde aantal records als de brontabel: één per knooppunt. De tabel met uitgevouwen knooppunten is zeer praktisch omdat het aan een aantal vereisten voor analyse van een hiërarchie in een relationeel model voldoet:
De resulterende tabel ziet er als volgt uit:
Prefix HierarchyBelongsTo
Net zoals het prefix Hierarchy is het prefix HierarchyBelongsTo een scriptopdracht die u vóór een opdracht LOAD of SELECT plaatst om nabijgelegen knooppunten te laden.
Ook hier moet de opdracht LOAD ten minste drie velden bevatten: Een id die een unieke sleutel is voor het knooppunt, een referentie naar het bovenliggende element en een naam. Het prefix transformeert de geladen tabel in een voorgangerstabel, een tabel die elke combinatie van een voorganger en een afstammeling bevat als afzonderlijke record. Daarom is het heel gemakkelijk om alle voorgangers of alle afstammelingen van een specifiek knooppunt te vinden.
Doe het volgende:
- Pas de opdracht Hierarchy in de editor voor laden van gegevens als volgt aan:
HierarchyBelongsTo (NodeID, ParentID, NodeName, BelongsToID, BelongsTo)
- Klik op Gegevens laden.
- Gebruik de sectie Voorbeeld van de gegevensmodelviewer om de resulterende tabel te bekijken.
- Als de knooppunt-id de afzonderlijke knooppunten vertegenwoordigt, vertegenwoordigt de voorganger-id de volledige structuren en substructuren van de hiërarchie.
- Alle knooppuntnamen bestaan zowel in de rol als knooppunten als in de rol als structuren, en beide kunnen worden gebruikt voor zoekopdrachten.
- De tabel kan het diepteverschil tussen de knooppuntdiepte en de voorgangerdiepte bevatten, oftewel de afstand van het hoofdelement tot de substructuur.
De voorgangerstabel voldoet aan een aantal vereisten voor analyse van een hiërarchie in een relationeel model:
De resulterende tabel ziet er als volgt uit:
Autorisatie
Het is niet ongebruikelijk dat een hiërarchie wordt gebruikt voor autorisatie. Eén voorbeeld is een organisatiehiërarchie. Alle managers moeten het recht hebben om alles te zien wat betrekking heeft op hun eigen afdeling, met inbegrip van subafdelingen. Maar zij hoeven niet noodzakelijkerwijs het recht te hebben om andere afdelingen te zien.
Dit betekent dat verschillende personen verschillende substructuren van de organisatie kunnen bekijken. De autorisatietabel zou er als volgt kunnen uitzien:
TOEGANG | NTNAME | PERSOON | POSITIE | RECHTEN |
---|---|---|---|---|
GEBRUIKER | ACME\JRL | John | CPO | HR |
GEBRUIKER | ACME\CAH | Carol | CEO | CEO |
GEBRUIKER | ACME\JER | James | Hoofdtechnicus | Technicus |
GEBRUIKER | ACME\DBK | Diana | CFO | Financiën |
GEBRUIKER | ACME\RNL | Bob | COO | Sales |
GEBRUIKER | ACME\LFD | Larry | CTO | Product |
In dit geval mag Carol alles zien dat betrekking heeft op de CEO en eronder; Larry mag de organisatie Product zien en James mag alleen de organisatie Engineering zien.
Voorbeeld:
De hiërarchie wordt vaak opgeslagen in een tabel met nabijgelegen knooppunten. In dit voorbeeld kunt u dit oplossen door de tabel met nabijgelegen knooppunten te laden met een HierarchyBelongsTo en het voorgangersveld de naam Tree te geven.
Als u Section Access wilt gebruiken, moet u een kopie in hoofdletters van Tree laden en dit nieuwe veld de naam PERMISSIONS geven. Ten slotte moet u de autorisatietabel laden. Deze laatste twee stappen kunt u uitvoeren met de volgende scriptregels. Onthoud dat de tabel TempTrees de tabel is die door de opdracht HierarchyBelongsTo is gemaakt.
Let op: dit is slechts een voorbeeld. Er is geen bijbehorende oefening in Qlik Sense.
Dit voorbeeld zou in het volgende gegevensmodel resulteren: