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