Gå till huvudinnehåll

Hantera hierarkiska data

Hierarkier är en viktig del av alla Business Intelligence-lösningar. De används för att beskriva dimensioner som naturligt innehåller olika precisionsnivåer. Vissa är enkla och intuitiva medan andra är komplexa och kräver mycket tankearbete för att kunna modelleras korrekt.

Från övre delen av en hierarki till botten är medlemmarna progressivt allt mer detaljerade. Till exempel, om en dimension har nivåerna Marknad, Land, Delstat respektive Ort, visas medlemmen Nord- och Sydamerika på hierarkins översta nivå, medlemmen USA visas på den andra nivån, medlemmen Kalifornien visas på den tredje nivån och San Francisco visas på den nedersta nivån. Kalifornien är mer specifikt än USA och San Fransisco är mer specifikt än Kalifornien.

Att spara hierarkier i en relationsmodell är en vanlig utmaning med många olika lösningar. Det finns flera metoder:

  • Horisontell hierarki
  • Modell för angränsande lista
  • Metod för sökvägsuppräkning
  • Modell för kapslade uppsättningar
  • Lista över överordnade element

För syftena med den här introduktionskursen kommer vi att skapa en lista med överordnade element eftersom den presenterar hierarkin i en form som kan användas direkt i en fråga. Mer information om andra metoder finns i Qlik Community.

Prefixet Hierarchy

Prefixet Hierarchy är ett skriptkommando som du placerar framför en LOAD- eller SELECT-sats som laddar en tabell med angränsande noder. Satsen LOAD måste innehålla minst tre fält: Ett ID som är en unik nyckel för noden, en referens till det överordnade objektet och ett namn.

Prefixet omvandlar en laddad tabell till en tabell med expanderade noder, dvs. en tabell som har ett antal ytterligare kolumner, en för varje nivå i hierarkin.

  1. Skapa en ny app och ge den ett namn.
  2. Lägg till ett nytt skriptavsnitt i Skriptredigeraren.
  3. Kalla avsnittet Wine.
  4. Klicka på Välj data under DataFiles i menyn till höger.

  5. Ladda upp och välj sedan Winedistricts.txt.
  6. Avmarkera fälten Lbound och RBound i fönstret Välj data från, så att de inte laddas.
  7. Klicka på Infoga skript.
  8. Ange följande över LOAD-satsen:
  9. Hierarchy (NodeID, ParentID, NodeName)

    Ditt skript bör se ut så här:

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

  10. Klicka på Ladda data.
  11. Använd avsnittet Granska i datamodellvyn för att visa den resulterande tabellen.
  12. Den resulterande expanderade nodtabellen har exakt samma antal poster som källtabellen: En per nod. Den expanderade nodtabellen är mycket praktisk eftersom den uppfyller ett antal krav för analys av en hierarki i en relationsmodell:

    • Alla nodnamn finns i en och samma kolumn, så att den kan användas för sökningar.
    • Dessutom har de olika nodnivåerna expanderats till ett fält vardera; fält som kan användas i hierarkiska grupper eller som dimensioner i pivottabeller.
    • Dessutom har de olika nodnivåerna expanderats till ett fält vardera; fält som kan användas i hierarkiska grupper.
    • Den kan fås att innehålla en sökväg som är unik för noden, och som listar alla överordnade element i rätt ordning.
    • Den kan fås att innehålla nodens djup, dvs. avståndet från roten.

    Den resulterande tabellen ser ut så här:

    Tabell som visar exempeldata som har laddats med prefixet Hierarchy

    Tabell som visar exempeldata som har laddats med prefixet Hierarchy.
Anteckning om informationDu kan läsa mer om hierarkier i följande blogginlägg i Qlik Community: Hierarchies (Hierarkier)

Prefixet HierarchyBelongsTo

Prefixet HierarchyBelongsTo är, liksom prefixet Hierarchy, ett skriptkommando som du placerar framför en LOAD- eller SELECT-sats som laddar en tabell med angränsande noder.

Även här måste LOAD-satsen innehålla minst tre fält: Ett ID som är en unik nyckel för noden, en referens till det överordnade objektet och ett namn. Prefixet omvandlar den laddade tabellen till en överordnad tabell, en tabell som har varje kombination av ett överordnat och en underordnat element listad som en separat post. Därför är det väldigt enkelt att hitta alla överordnade eller alla underordnade element till en viss nod.

  1. Ändra satsen Hierarchy i Skriptredigeraren så att den ser ut på följande sätt:
  2. HierarchyBelongsTo (NodeID, ParentID, NodeName, BelongsToID, BelongsTo)
  1. Klicka på Ladda data.
  2. Använd avsnittet Granska i datamodellvyn för att visa den resulterande tabellen.
  3. Den överordnade tabellen uppfyller ett antal krav för analys av en hierarki i en relationsmodell:

    • Om nod-ID:t representerar de enskilda noderna, representerar det överordnade ID:t hela träden och underträden i hierarkin.
    • Alla nodnamn finns både i rollen som noder och i rollen som träd, och båda kan användas för sökningar.
    • Den kan utformas så att den innehåller djupskillnaden mellan djupet på noden och djupet på det överordnade elementet, det vill säga avståndet från underträdets rot.

    Den resulterande tabellen ser ut så här:

    Tabellen visar data som har laddats med prefixet HierarchyBelongsTo

    Tabell som visar data som har laddats med prefixet HierarchyBelongsTo.

Auktorisering

Det är inte ovanligt att en hierarki används för auktorisering. Ett exempel är en organisationshierarki. Varje chef bör ha rätt att se allting som rör den egna avdelningen, inklusive alla underavdelningar. Men de bör inte nödvändigtvis ha rättigheten att se andra avdelningar.

Exempel på en organisationshierarki

Detta innebär att olika personer har tillåtelse att se olika underträd i organisationen. Behörighetstabellen kan se ut på följande sätt:

Behörighetstabell
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 Ekonomi
USER ACME\RNL Bob COO Sales
USER ACME\LFD Larry CTO Produkt

I det här fallet har Carol tillåtelse att se allt som berör CEO och under; Larry har tillåtelse att se Product-organisationen och James har tillåtelse att se enbart Engineering-organisationen.

Exempel:  

Hierarkin lagras ofta i en tabell med angränsande noder. I det här exemplet kan du lösa detta genom att ladda tabellen med angränsande noder med en HierarchyBelongsTo-sats och kalla det överordnade fältet Tree.

Om du vill använda Section Access laddar du en kopia av Tree med versaler och kallar det nya fältet PERMISSIONS. Slutligen ska du ladda behörighetstabellen. De två sista stegen kan utföras med följande skriptrader. Observera att tabellen TempTrees är tabellen som skapats av HierarchyBelongsTo-satsen.

Observera att det här bara är ett exempel. Det finns ingen övning för dessa data att göra i 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;

Det här exemplet skulle skapa följande datamodell:

Datamodell: Tabellerna Authorization, Trees, Fact och Nodes

Datamodell: