суббота, 18 февраля 2012 г.

Отображение иерархических списков - Начало

Сегодня я расскажу про еще одну возможность продукта QlikView – работу с иерархическими списками. Очень часто информация (особенно каталоги продуктов  и справочники подразделений компании) может быть сгруппирована, каталогизирована определенным образом. Поэтому продукт анализа данных просто обязан легко работать с  иерархическими списками и тут QlikView  оправдывает ожидания пользователя.
Итак, я легко нашла функцию скрипта  HIERARCHY в справке, а вот правильно ее использовать получилось, если честно, не сразу. Но, помня фразу  (кстати, не помню, откуда это)  «….это Вы просто не умеете правильно готовить», начала пробовать и искать информацию.

Проще всего, оказалось, отобразить иерархию в объекте типа Список, но подготовка данных для такого простого отображения  оказалось достаточно сложной,  было очень сложно поверить, что QlikView требует так мучиться с данными.  Оказалось, все просто!!
В качестве источника данных я просто решила использовать каталог товаров с Qzon.ru не рекламы для, а только и исключительно по причине его многоуровневости.  Я думаю, что при желании каждый сможет найти оригинал этого списка. Итак, я выбрала несколько разделов каждого уровня и сформировала вот такой Excel-файл:

Что бы, сделать представление списка более наглядным , каждый уровень его иерархии я раскрасила в разные цвета.   Очевидно, что первое поле NoteID – уникальный первичный ключ нашей будущей таблицы – код узла (кстати, он может быть любым, просто такой вид кодировки очень быстро и удобно сделать в Excel). Второе поле – NoteName - название  нашего узла. Третье поле Parent ID – ссылка на родительский уровень нашего иерархического списка. Очевидно, что самый  верхний элемент не имеет ссылки ни какой другой.
Теперь загружаем наш файл в QlikView. Создаем новое приложение, открываем редактор скрипта (Файл – Редактор Скрипта) и выбираем опцию загрузки данных из файла ( Вставить – Оператор Load – Загрузить данные из файла).

Далее выбираем наш Excel-файл и убеждаемся, что  в поле Метки выбрана опция  Встроенные метки, что бы можно было рассматривать первую строку файла как строку с заголовками полей. Теперь  нажимаем 2 раза на кнопку Далее,  мы пропустили  одну страницу  мастера и оказываемся на странице Опции. Далее нажимаем кнопку Иерархия.

 К сожалению, следующая страницу переведена  на русский язык очень плохо, поэтому я была вынуждена переключится на английский язык, а Вы можете воспользоваться следующим скрин-шотом с пояснениями:

Нажимаем OK и Готово.
У нас сформировался вот такой скрипт:
Directory;
HIERARCHY(NoteID, ParentID, NoteName, ИмяРодительскогоУзла, NoteName, ПолныйПуть, '/')
LOAD NoteID,
    
NoteName,
    
ParentID
FROM
HIERARCHY.xlsx
(
ooxml, embedded labels, table is Лист1);
 

Обращаем внимание, что из 3х полей-источников мы ожидаем получить 6 полей. Что бы проверить наши ожидания поострим простую таблицу в QlikView (Объект- Новый объект листа – Простая таблица) и  добавим туда все поля новой таблицы и получим, на мой взгляд, удивительный результат:  для каждого уровня иерархии создано отдельное поле (NoteName1; NoteName2….), название родительского узла (поле ИмяРодительскогоУзла) и полный «путь» каждого узла в своем уровне иерархии (поле ПолныйПуть) сформировались автоматически.

Теперь каждый узел иерархии можно использовать для поиска и анализа.


Что бы продолжить удивляться добавим на лист объект Список. И выберем поле ПолныйПуть.  Нажмем готово и посмотрим результат – пока ничего интересного нет, все то же, что мы видим в соответствующем поле таблицы.
 Чуть-чуть изменим свойства объекта. На закладке Общие активируем поле Показать как дерево и проверим, что бы для разделения уровней иерархии использовался «наш» разделитель.

Вот так изменился наш скучный список:



Кстати, если Вы просто сформируете данные в виде «пути» (по образцу нашего исходного поля ПолныйПуть) и просто загрузите данные вместе , например, с каталогом товаров в QlikView, то Вы получите тот же результат в объекте Список (только на самом нижнем уровне у Вас будут товары).
Но это еще не все. В QlikView есть другой оператор, позволяющий работать со списком. Его мы разберем позже (продолжение следует).



2 комментария:

  1. Спасибо, всё действительно ясно и просто оказалось =)
    А может быть Вы можете подсказать, какие есть способы просмотра ветвей дерева с возможностью изменять наименования узлов-детей в зависимости от значения узла-родителя? (все данные загружаются в *.qvd файла) Т.е. например,в описываемом Вами случае всем "детям" дописать к имени "love", если в наименовании их родителя (или родителя родителя и т д до вершины дерева) есть подстрока "люб" ?

    ОтветитьУдалить
    Ответы
    1. спасибо, что читаете мой блог.
      Вот только я не очень поняла Вашей задачи. У Вас есть qvd-файл нужного формата и Вам нужно просто изменить наименования (только наименования) для отдельных ветвей дерева?

      Удалить