На форму выведен иерархический список для создания использовалась стандартная функция Hierarchy().
Как можно настроить список, чтобы при выборе пользователем родительского элемента в выборки автоматически попадали все подчиненные элементы?
Добрый день.
:)
Я пока не представляю, как работает эта функция. Сам только вчера начал разбираться с этой темой.
Что касается выдачи списка деревом - это понятно, все работает.
А вот как сделать так, чтобы в одном поле формы можно было работать с деревом, пока не разбирался.
Давайте вместе, для примера могу предложить следующую структурку:
LOAD * INLINE [
A, B, C, D, E, F
Управление финансами администрации, 909
Общегосударственные вопросы, 909, 01, , ,
Обеспечение деятельности финансовых налоговых и таможенных органов и органов финансового надзора, 909, 01, 06, ,
Руководство и управление в сфере установленных функций органов государственной власти субъектов Российской Федерации и органов местного самоуправления, 909, 01, 06, 0020000,
Выполнение функций органами местного самоуправления, 909, 01, 06, 0020000, 500
Городская целевая программа повышения эффективности бюджетных расходов, 909, 01, 06, 7952700,
Проведение мероприятий в рамках городских целевых программ, 909, 01, 06, 7952700, 009
Резервные фонды, 909, 01, 11, ,
Резервные фонды, 909, 01, 11, 0700000,
Прочие расходы, 909, 01, 11, 0700000, 013
Другие общегосударственные вопросы, 909, 01, 13
'Городская целевая программа "Развитие муниципальной службы в городском округе"', 909, 01, 13, 7953100
Проведение мероприятий в рамках городских целевых программ, 909, 01, 13, 7953100, 009
];
Для построения иерархии нам потребуется еще 2 поля:
Идентификатор элемента и идентификатор элемента-родителя. В качестве этого можно было конечно использовать наименование, но получится слишком громоздко.
Давай такой вариант иерархии:
Офис1
Департамент1
Отдел1
Отдел2
Офис2
Департамент2
Департамент3
ТаблицаПодразделений:
LOAD * INLINE [
Подразделение, ID, ID_Родителя
Офис1, 1
Департамент1, 2, 1
Отдел1, 3, 2
Отдел2, 4, 2
Офис2, 5
Департамент2, 6, 5
Департамент3, 7, 5
];
Теперь воспользуемся волшебной функцией создания иерархии. Общий синтаксис:
ЦитироватьСинтаксис имеет следующий вид:
Hierarchy (NodeID, ParentID, NodeName, [ParentName], [PathSource], [PathName], [PathDelimiter], [Depth])(loadstatement | selectstatement)
где
NodeID — имя поля, которое содержит идентификатор узла. Это поле должно существовать в таблице ввода.
ParentID — имя поля, содержащего идентификатор родительского узла. Это поле должно существовать в таблице ввода.
NodeName — имя поля, содержащего имя узла. Это поле должно существовать в таблице ввода.
ParentName – строка, которая используется для наименования нового поля ParentName. При его отсутствии это поле не создается.
PathSource — имя поля, которое содержит имя узла, используемого для создания пути узла. Необязательный параметр. При его отсутствии используется NodeName.
PathName — строка, которая используется для наименования нового поля Path, содержащего путь от корневого каталога к узлу. Необязательный параметр. При его отсутствии это поле не создается.
PathDelimiter — строка, которая используется в качестве разделителя в новом поле ParentName. Необязательный параметр. При его отсутствии используется '/'.
Depth — строка, которая используется для наименования нового поля Depth, содержащего глубину узла в иерархии. Необязательный параметр. При его отсутствии это поле не создается.
В нашем случае прописываем:
Hierarchy(ID, ID_Родителя, Подразделение,, Подразделение, 'Подразделения')
LOAD
ID,
ID_Родителя,
Подразделение
Resident ТаблицаПодразделений;
DROP Table ТаблицаПодразделений;
Ну вот и все. Перегружаем данные в модель.
На форму добавляем список в
Поле выбираем
Подразделения.
И обязательно ставим флажок "Показать как дерево".
Должна получиться как на скрине во вложении.
П.С. По поводу своего вопроса с выбором подчиненных элементов разобрался:
Если группа свернута, при нажатии в выборку попадают все вложенные элементы, если развернута, то выбирается текущий.
Спасибо, теперь немного добавлю, для новичков.
Источник - иерархическая таблица со смежными узлами:
[smg id=16 type=preview align=center width=200 caption="Источник. Иерархический справочник"]
В результате работы функция сформирует полезную таблицу модели данных QlikView:
[smg id=15 type=preview align=center width=600 caption="Результат. Иерархический справочник"]
По таблицам нетрудно понять что делает функция и как она работает:
[smg id=17 type=preview align=center width=600 caption="Пример работы. Иерархический справочник"]
Можно ли прийти к такому же результату без использования функции Hierarchy() ? Можно, если других дел больше нет и времени не жалко :) .
Есть еще одна функция работы с иерархическими справочниками - HierarchyBelongsTo
ЦитироватьHierarchyBelongsTo (NodeID, ParentID, NodeName, AncestorID, AncestorName, [DepthDiff])(loadstatement | selectstatement)
где
NodeID — имя поля, которое содержит идентификатор узла. Это поле должно существовать в таблице ввода.
ParentID — имя поля, содержащего идентификатор родительского узла. Это поле должно существовать в таблице ввода.
NodeName — имя поля, содержащего имя узла. Это поле должно существовать в таблице ввода.
AncestorID — строка имени поля идентификатора нового родительского объекта, которая содержит идентификатор родительского узла.
AncestorName — строка имени поля нового родительского объекта, содержащего имя родительского узла.
DepthDiff — строка имени нового поля DepthDiff, содержащего глубину узла в иерархии по отношению к родительскому узлу. Необязательный параметр. При его отсутствии это поле не создается.
На упомянутом примере это будет выглядеть так:
HierarchyBelongsTo(ID, ID_Родителя, Подразделение,Уровень, ПодразделениеРодитель)
LOAD
ID,
ID_Родителя,
Подразделение
Resident ТаблицаПодразделений;
DROP Table ТаблицаПодразделений;
[smg id=18 type=preview align=center width=400 caption="Пример работы HierarchyBelongsTo"]
Последние комментарии админа явно не для новичков. Вообще не понятно, что это и как работает ???
С тех пор прошло уже 6 лет.
За это время Qlik создал прекрасный ресурс help.qlik.com
https://help.qlik.com/ru-RU/sense/June2019/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Hierarchy.htm
https://help.qlik.com/ru-RU/sense/June2019/Subsystems/Hub/Content/Sense_Hub/DataSource/hierarchies.htm
https://help.qlik.com/ru-RU/sense/June2019/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/HierarchyBelongsTo.htm