Przeskocz do zawartości głównej
Obsługa danych hierarchicznych

NA TEJ STRONIE

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.

Wykonaj następujące czynności:

  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
    Table showing sample of data loaded using Hierarchy prefix.

InformacjaAby dowiedzieć się więcej na temat hierarchii, zapoznaj się z tym artykułem na blogu Qlik Community: Hierarchie

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.

Wykonaj następujące czynności:

  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
    Table showing data loaded using HierarchyBelongsTo prefix.

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ĘP NTNAME OSOBA STANOWISKO UPRAWNIENIA
USER ACME\JRL John CPO HR
USER ACME\CAH Carol CEO CEO
USER ACME\JER James Dyrektor ds. inżynierii Inżynieria
USER ACME\DBK Diana CFO Finanse
USER ACME\RNL Bob COO Sales
USER ACME\LFD Larry CTO Produkt

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.

Example:  

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 i 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
Data model: Authorization, Trees, Fact, and Nodes tables.