Оптимизация функции поиска в QlikView на больших наборах данных

Автор:

к.т.н, директор компании СтавАналит Хороненко А.Ю.

Объект «Поиск» быстро работает с относительно небольшим набором данных, но свободный поиск на больших объемах проводится заметно медленнее. В данной статье предлагается подход, увеличивающий скорость свободного поиска на больших объемах данных в QlikView за счет предварительного определения набора полей, участвующих в поиске. Для иллюстрации в статье будет использована недавно вышедшая платформа QlikView версии 12.0.20000.0.

Формирование исходных данных

Для иллюстрации рассматриваемого подхода воспользуемся штатной возможностью QlikView и загрузим тестовые данные по умолчанию. Нажатие комбинации Ctrl+Q+Q в новой базе QlikView приведет к появлению в редакторе скрипта фрагмента кода, представленного на Рис.1.

Рис.1 Фрагмент кода при нажатии клавиш Ctrl+Q+Q в редакторе скрипта

После загрузки полученного скрипта анализ данных показывает, что три поля – Alpha, Dim1 и Dim3 в таблицах имеют буквенные значения латинского алфавита (Рис. 2). Вот на этих трех полях и будут продемонстрированы возможности предлагаемого подхода. 

Рис. 2 Содержание полей Alpha, Dim1, Dim3

Настройки объекта «Поиск»

Первоначально на листе необходимо разместить объект «Список» с отображением системного поля $Field, который показывает список всех полей, находящихся в таблицах (Рис. 3).

Рис. 3 Объект «Список» для системного поля $Field

Далее в контекстном меню выбирается объект «Список», как показано на Рис.4.

Рис. 4 Создание объекта «Список» на рабочем листе

Не принципиально, но так как мы несколько переопределяем процедуру полного поиска, укажем в заголовке данного объекта заголовок «Быстрый поиск», чтобы понимать это переопределение в дальнейшем.

 Далее в свойствах объекта «Поиск»  на закладке «Общие» необходимо переключатель установить в положение «Список полей» и в поле выбранного положения ввести формулу =GetFieldSelections($Field,',',100), как представлено на Рис.5.

Рис. 5 Определение свойств объекта «Поиск»

Сделаем пояснения, так как это основной элемент использования данного подхода.

С одной стороны, согласно Руководству пользователя QlikView, при установке переключателя в положение «Список полей» необходимо в соответствующем поле указать список полей для поиска, отделенными знаком «;». Кроме того, в именах полей разрешается использовать знаки подстановки * и ? и задавать список в виде вычисляемой формулы для динамического обновления.

С другой стороны, воспользуемся возможностью задавать список в виде вычисляемой формулы с разделением полей запятыми и используем функцию =GetFieldSelections($Field,',',100), как представлено на Рис.5.

Согласно Руководству пользователя данная функция будет возвращать строку в виде списка отобранных полей с разделителем между полями запятой «,» и общее количество отобранных полей ограничивается числом 100 (если это значение не устроит, можно установить любое максимальное количество полей отбора).

Таким образом, учитывая вышеизложенную специфику QlikView, при отборе значений в списке поля $Field (Рис.4), платформа осуществляет поиск не по всему набору данных, а только по отобранным полям, что может значительно увеличить скорость отбора при поиске.

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

В заключении следует отметить, что реализация данного подхода возможна только благодаря мощи вычисляемых выражений, изначально заложенной разработчиками в платформу QlikView.