Быстрый способ получить уникальные значения поля в Qlik Sense
Проблема
При создании модели данных в Qlik часто возникает задача, загрузить только уникальные значения поля из очень большой таблицы. При этом эта таблица уже загружена в модель данных и находится в оперативной памяти.
Например, для создания мастер-календаря нам нужно найти минимальную и максимальную дату в таблице. Таблица может быть очень большой — сотни миллионов или миллиарды строк.
Решение
Самый быстрый способ — обратиться к внутренним индексным таблицам, в которых Qlik хранит уникальные значения для каждого поля. Это можно сделать с помощью функции FieldValue(). Это на порядки быстрее, чем грузить данные напрямую через LOAD DISTINCT ... RESIDENT.
Proof of Concept
Возьмем для примера таблицу. В ней 300М строк с числами от 1 до 100.
Наша задача найти минимальное и максимальное значения в этой таблице.
Вариант 1. LOAD DISTINCT ... RESIDENT -> 2 минуты 36 секунд
В этом варианте Qlik при загрузке данных из Temp вынужден перелопатить все 300М записей, чтобы загрузить из них только уникальные значения. Это долго.
Вариант 2. FieldValue() ... AUTOGENERATE FieldValueCount() -> 0 секунд
В этом случае Qlik проходит только по своей внутренней индексной таблице с уникальными значениями поля, которых всего 100 штук, а не 300 миллионов.
Это происходит мгновенно.
Данный прием стоит использовать всегда, когда нужно получать таблицы с перечнем уникальных значений поля, а также для вычисления максимальных и минимальных значений поля.
Спасибо за лайфхак Евгению Стучалкину!