Перейти к основному содержимому

Использование вложенных запросов с помощью Direct Discovery

НА ЭТОЙ СТРАНИЦЕ

Использование вложенных запросов с помощью Direct Discovery

Если ключевое поле, присоединяемое к таблице, имеет много элементов (то есть содержит большое количество уникальных значений), выборка в QlikView может создать очень большой оператор SQL, а предложение WHERE key_field IN может содержать большое количество значений. В таком случае можно разрешить QlikView вместо этого создать вложенные запросы.

Чтобы показать, как это работает, мы используем пример, где таблица продуктов (ProductTable) связана с таблицей заказов на продажу (SalesOrderDetail) с помощью ID продуктов (ProductID). Обе таблицы используются в режиме Direct Discovery.

Two linked tables.

Мы создаем диаграмму с параметром OrderMonth в качестве измерения и параметром Sum(Subtotal) в качестве меры, а в поле фильтра выбираем Size.

A filter box, a bar chart and a table.

Сценарий 1: Небольшое количество элементов

В этом сценарии таблица продуктов содержит небольшое количество уникальных продуктов, 266. Если сделать выборку в поле Size, Direct Discovery создает оператор SQL для возврата данных с помощью предложения WHERE ProductID IN, которое содержит ID продуктов, соответствующие выбранному размеру. В данном случае это 20 продуктов.

A filter box with selections made,  a bar chart and a table.

Созданный запрос SQL выглядит следующим образом:

SELECT ProductID, month([OrderDate]), SUM(OrderQty), SUM(SubTotal)
FROM SalesTable
WHERE ProductID IN ( 12, 51, 67, 81, 89, 92, 100, 108, 142, 150, 151, 162, 191, 206, 220, 222, 251, 254)
GROUP BY ProductID, month([OrderDate])

Сценарий 2: Использование вложенных запросов

Если один пример содержит большое количество уникальных продуктов, например 20 000, выбор фильтра измерения, например Size, создает оператор SQL с предложением WHERE ProductID IN, содержащим тысячи ID продуктов. Оператор может получиться слишком большим для обработки источником данных из-за ограничений, ошибок в памяти или производительности.

В таком случае можно разрешить QlikView вместо этого создать вложенные запросы. Для этого установите для параметра DirectEnableSubquery значение «true». Вместо этого созданный оператор SQL будет выглядеть следующим образом:

SELECT ProductID, month([OrderDate]), SUM(OrderQty), SUM(SubTotal)
FROM SalesTable
WHERE ProductID IN
( SELECT DISTINCT "AW2012"."dbo"."PRODUCT"."PRODUCTID" WHERE "AW2012"."dbo"."PRODUCT"."SIZE" IN (3))
GROUP BY ProductID, month([OrderDate])
 

Размер предложения WHERE ProductID IN больше не зависит от количества ключей, полученных из выборки.

При использовании вложенных запросов существует ряд ограничений.

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

Join the Analytics Modernization Program

Modernize by leveraging your QlikView investment to begin using Qlik Sense on the Cloud.

Want to know more?
Remove banner from view