Использование вложенных запросов с помощью Direct Discovery
Если ключевое поле, присоединяемое к таблице, имеет много элементов (то есть содержит большое количество уникальных значений), выборка в Qlik Sense может создать очень большой оператор SQL, а предложение WHERE key_field IN может содержать большое количество значений. В таком случае можно разрешить Qlik Sense вместо этого создать вложенные запросы.
Чтобы показать, как это работает, мы используем пример, где таблица продуктов (ProductTable) связана с таблицей заказов на продажу (SalesOrderDetail) с помощью ID продуктов (ProductID). Обе таблицы используются в режиме Direct Discovery.
Мы создаем диаграмму с параметром OrderMonth в качестве измерения и параметром Sum(Subtotal) в качестве меры, а в поле фильтра выбираем Size.
Сценарий 1. Небольшое количество элементов
В этом сценарии таблица продуктов содержит небольшое количество уникальных продуктов, 266. Если сделать выборку в поле Size, Direct Discovery создает оператор SQL для возврата данных с помощью предложения WHERE ProductID IN, которое содержит ID продуктов, соответствующие выбранному размеру. В данном случае это 19 продуктов.
Созданный запрос SQL выглядит следующим образом.
Сценарий 2. Использование вложенных запросов
Если один пример содержит большое количество уникальных продуктов, например 20 000, выбор фильтра измерения, например Size, создает оператор SQL с предложением WHERE ProductID IN, содержащим тысячи ID продуктов. Оператор может получиться слишком большим для обработки источником данных из-за ограничений, ошибок в памяти или производительности.
В таком случае можно разрешить Qlik Sense вместо этого создать вложенные запросы. Для этого установите для параметра DirectEnableSubquery значение «true». Вместо этого созданный оператор SQL будет выглядеть следующим образом:
Размер предложения WHERE ProductID IN больше не зависит от количества ключей, полученных из выборки.
При использовании вложенных запросов существует ряд ограничений.
- Синтаксис вложенного запроса срабатывает только при выборе данных, которые включают в себя фильтрацию диаграммы с помощью данных из другой таблицы.
- Количество данных в ключах является определяющим фактором, а не количество ключей.
- Вложенные запросы срабатывают, только если все включенные таблицы находятся в режиме Direct Discovery. Если выполнить фильтрацию диаграммы с помощью данных из таблицы в памяти, будет создано предложение IN.