Ga naar hoofdinhoud Ga naar aanvullende inhoud

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.

  1. Maak een nieuwe app en geef deze een naam.
  2. Voeg een nieuwe scriptsectie toe in de Editor voor het laden van gegevens.
  3. Roep de sectie Wine aan.
  4. Onder DataFiles in het rechtermenu klikt u op Gegevens selecteren.

  5. Upload en selecteer Winedistricts.txt.
  6. Leeg in het venster Gegevens selecteren van de velden Lbound en RBound, zodat deze niet worden geladen.
  7. Klik op Script invoegen.
  8. Voer boven de LOAD-opdracht het volgende in:
  9. 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);			

  10. Klik op Gegevens laden.
  11. Gebruik de sectie Voorbeeld van de gegevensmodelviewer om de resulterende tabel te bekijken.
  12. 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:

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

    De resulterende tabel ziet er als volgt uit:

    Tabel toont een voorbeeld van de gegevens geladen met het prefix Hierarchy

    Tabel toont een voorbeeld van de gegevens geladen met het prefix Hierarchy.

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.

  1. Pas de opdracht Hierarchy in de editor voor laden van gegevens als volgt aan:
  2. HierarchyBelongsTo (NodeID, ParentID, NodeName, BelongsToID, BelongsTo)
  1. Klik op Gegevens laden.
  2. Gebruik de sectie Voorbeeld van de gegevensmodelviewer om de resulterende tabel te bekijken.
  3. De voorgangerstabel voldoet aan een aantal vereisten voor analyse van een hiërarchie in een relationeel model:

    • 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 resulterende tabel ziet er als volgt uit:

    Tabel toont gegevens geladen met het prefix HierarchyBelongsTo

    Tabel toont een voorbeeld van de gegevens geladen met het prefix HierarchyBelongsTo.

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.

Voorbeeld organisatiehiërarchie

Dit betekent dat verschillende personen verschillende substructuren van de organisatie kunnen bekijken. De autorisatietabel zou er als volgt kunnen uitzien:

Autorisatietabel
TOEGANGNTNAMEPERSOONPOSITIERECHTEN
GEBRUIKERACME\JRLJohnCPOHR
GEBRUIKERACME\CAHCarolCEOCEO
GEBRUIKERACME\JERJamesHoofdtechnicusTechnicus
GEBRUIKERACME\DBKDianaCFOFinanciën
GEBRUIKERACME\RNLBobCOOSales
GEBRUIKERACME\LFDLarryCTOProduct

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.

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;

Dit voorbeeld zou in het volgende gegevensmodel resulteren:

Gegevensmodel: Tabellen Authorization, Trees, Fact en Nodes

Gegevensmodel:

Was deze pagina nuttig?

Als u problemen ervaart op deze pagina of de inhoud onjuist is – een typfout, een ontbrekende stap of een technische fout – laat het ons weten zodat we dit kunnen verbeteren!