Przeskocz do zawartości głównej Przejdź do treści uzupełniającej

Obsługa danych hierarchicznych

Hierarchie stanowią ważny element każdego rozwiązania Business Intelligence. Umożliwiają one do opisywanie wymiarów, które ze swej natury obejmują różne poziomy szczegółowości. Niektóre hierarchie są proste i intuicyjne, podczas gdy inne są bardziej złożone i prawidłowe ich zamodelowanie wymaga dokładnego przemyślenia.

Przechodząc od szczytu hierarchii do jej dołu, kolejne poziomy są coraz bardziej szczegółowe. Na przykład w wymiarze obejmującym poziomy Rynek, Kraj, Stan i Miasto element Ameryki będzie należeć do pierwszego poziomu hierarchii, element Stany Zjednoczone do drugiego poziomu, element Kalifornia do trzeciego, a element San Francisco do poziomu najniższego. Kalifornia to wartość bardziej szczegółowa niż Stany Zjednoczone, a San Francisco to z kolei wartość bardziej szczegółowa niż Kalifornia.

Przechowywanie hierarchii w relacyjnym modelu danych jest znanym problemem o licznych rozwiązaniach. Istnieje tu kilka podejść:

  • hierarchia pozioma,
  • model list sąsiadowania,
  • metoda wyliczania ścieżki,
  • model zbiorów zagnieżdżonych,
  • lista węzłów nadrzędnych.

Dla potrzeb tego kursu utworzymy listę węzłów nadrzędnych, ponieważ pozwala ona zapisać hierarchię w formacie bezpośrednio nadającym się do wykonywania zapytań. Więcej informacji na temat innych strategii można znaleźć w temacie Qlik Community.

Prefiks Hierarchy

Prefiks Hierarchy to polecenie skryptu umieszczane przed instrukcją LOAD lub SELECT w celu załadowania tabeli węzłów sąsiadujących. Instrukcja LOAD musi zawierać co najmniej trzy pola: identyfikator stanowiący niepowtarzalny klucz węzła, odwołanie do węzła nadrzędnego i nazwę.

Zastosowanie prefiksu spowoduje przekształcenie załadowanej tabeli do postaci tabeli z węzłami rozwiniętymi, zawierającej kilka dodatkowych kolumn – po jednej dla każdego poziomu hierarchii.

  1. Utwórz nową aplikację i nadaj jej nazwę.
  2. Dodaj nową sekcję skryptu w edytorze ładowania danych.
  3. Wywołaj sekcję Wine.
  4. W sekcji DataFiles dostępnej po prawej stronie kliknij przycisk Wybierz dane.

  5. Prześlij, a następnie wybierz Winedistricts.txt.
  6. W oknie Wybierz dane z usuń zaznaczenie pól Lbound i RBound, aby nie zostały one załadowane.
  7. Kliknij polecenie Wstaw skrypt.
  8. Wprowadź następujące dane powyżej instrukcji LOAD:
  9. Hierarchy (NodeID, ParentID, NodeName)

    Skrypt powinien wyglądać następująco:

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

  10. Kliknij polecenie Ładuj dane.
  11. W sekcji Podgląd w Przeglądarce modelu danych wyświetl wynikową tabelę.
  12. Wynikowa tabela węzłów rozwiniętych zawiera dokładnie tyle samo rekordów, co tabela źródłowa, czyli po jednym dla każdego węzła. Tabela węzłów rozwiniętych to bardzo praktyczna postać danych, ponieważ spełnia szereg wymogów dotyczących analizowania hierarchii w modelu relacyjnym:

    • Jedna kolumna zawiera wszystkie nazwy węzłów, więc można jej używać w wyszukiwaniach.
    • Poszczególne poziomy węzłów zostały rozwinięte w osobne pola, których można używać w grupach hierarchicznych lub jako wymiary w tabelach przestawnych.
    • Poszczególne poziomy węzłów zostały rozwinięte w osobne pola, których można używać w grupach hierarchicznych.
    • Można sprawić, by tabela zawierała unikatową ścieżkę prowadzącą do określonego węzła, zawierającą wszystkie elementy nadrzędne w odpowiedniej kolejności.
    • Można sprawić, by tabela zawierała głębokość węzła, czyli jego odległość od węzła głównego.

    Wynikowa tabela wygląda następująco:

    Tabela przedstawia część danych załadowanych przy użyciu prefiksu Hierarchy

    Tabela przedstawia część danych załadowanych przy użyciu prefiksu Hierarchy.

Prefiks HierarchyBelongsTo

Podobnie jak Hierarchy prefiks HierarchyBelongsTo to polecenie skryptu umieszczane przed instrukcją LOAD lub SELECT w celu załadowania tabeli węzłów sąsiadujących.

Również w tym przypadku instrukcja LOAD musi zawierać co najmniej trzy pola: identyfikator stanowiący niepowtarzalny klucz węzła, odwołanie do węzła nadrzędnego i nazwę. Prefiks powoduje przekształcenie załadowanej tabeli w tabelę węzłów nadrzędnych, czyli taką, która zawiera osobny wiersz dla każdej kombinacji węzła nadrzędnego i podrzędnego. Dzięki temu bardzo łatwo jest znaleźć wszystkie węzły nadrzędne lub podrzędne określonego węzła.

  1. Zmodyfikuj instrukcję Hierarchy w Edytorze ładowania danych do następującej postaci:
  2. HierarchyBelongsTo (NodeID, ParentID, NodeName, BelongsToID, BelongsTo)
  1. Kliknij polecenie Ładuj dane.
  2. W sekcji Podgląd w Przeglądarce modelu danych wyświetl wynikową tabelę.
  3. Tabela nadrzędna spełnia szereg wymogów dotyczących analizowania hierarchii w modelu relacyjnym:

    • Podczas gdy identyfikator węzła reprezentuje tylko pojedynczy węzeł, identyfikator węzła nadrzędnego może reprezentować całe drzewo hierarchii lub poddrzewo w jej obrębie.
    • Wszystkie nazwy węzłów istnieją zarówno w roli węzłów, jak i w roli drzew, i mogą być używane w wyszukiwaniach w obu rolach.
    • Można sprawić, by tabela zawierała różnicę głębokości węzła i określonego węzła nadrzędnego, czyli odległość od węzła głównego poddrzewa.

    Wynikowa tabela wygląda następująco:

    Tabela przedstawia dane załadowane przy użyciu prefiksu HierarchyBelongsTo

    Tabela przedstawia dane załadowane przy użyciu prefiksu HierarchyBelongsTo.

Autoryzacja

Częstym zastosowaniem hierarchii jest dokonywanie autoryzacji. Typowym przykładem jest hierarchia organizacyjna. Każdy menedżer powinien oczywiście mieć wgląd w działalność wszystkich jednostek w obrębie swojego działu, w tym wszelkich poddziałów. Niekoniecznie musi jednak mieć uprawnienia wglądu do innych działów.

Przykład hierarchii organizacyjnej

Oznacza to, że różne osoby mogą widzieć różne poddrzewa w ramach organizacji. Tabela autoryzacji może wyglądać następująco:

Tabela autoryzacji
DOSTĘPNTNAMEOSOBASTANOWISKOUPRAWNIENIA
USERACME\JRLJohnCPOHR
USERACME\CAHCarolCEOCEO
USERACME\JERJamesDyrektor ds. inżynieriiInżynieria
USERACME\DBKDianaCFOFinanse
USERACME\RNLBobCOOSprzedaż
USERACME\LFDLarryCTOProdukt

W tym przypadku Carol ma uprawnienia do wyświetlania wszystkiego od węzła CEO w dół, Larry ma uprawnienia do wyświetlania całej organizacji Product, a James widzi tylko organizację Engineering.

Przykład:  

Często hierarchia jest przechowywana w tabeli węzłów sąsiadujących. W tym przykładzie, aby rozwiązać ten problem, można załadować tabelę węzłów sąsiadujących za pomocą HierarchyBelongsTo, a polu nadrzędnemu nadać nazwę Tree.

Jeśli chcesz użyć Section Access, załaduj kopię Tree zapisaną wielkimi literami i wywołaj to nowe pole PERMISSIONS. Na koniec należy załadować tabelę autoryzacji. Dwa ostatnie kroki można wykonać, używając poniższego kodu. Zauważ, że tabela TempTrees została utworzona przez instrukcję HierarchyBelongsTo.

Należy pamiętać, że jest to tylko przykład. Nie ma żadnego ćwiczenia towarzyszącego, które należy wykonać w 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;

Na podstawie tego przykładu powstałby następujący model danych:

Model danych: Tabele Authorization, Trees, Fact i Nodes

Model danych:

Czy ta strona była pomocna?

Jeżeli natkniesz się na problemy z tą stroną lub jej zawartością — literówkę, brakujący krok lub błąd techniczny — daj nam znać, co możemy poprawić!