Direct Discovery에서 하위 쿼리 사용하기

테이블에 조인되는 키 필드의 집합 크기가 크다면, 즉 다수의 고유값이 있다면 WHERE key_field IN 절에 다수의 값이 포함될 수 있으므로 Qlik Sense에서 선택하는 내용에 따라 매우 큰 SQL 문이 생성될 수 있습니다. 이 경우 가능한 해결책은 Qlik Sense에서 대신 하위 쿼리를 만드는 것입니다.

이를 설명하기 위해 제품 ID(ProductID)를 사용하여 제품 테이블(ProductTable)과 판매 주문 테이블(SalesOrderDetail)을 두 테이블이 Direct Discovery 모드를 사용하는 상태로 연결하는 예를 사용합니다.

Two linked tables.

OrderMonth를 차원으로, Sum(Subtotal)을 측정값으로 사용하는 차트 및 Size를 선택하기 위한 필터 상자를 만듭니다.

A filter box, a bar chart and a table.

시나리오 1: 집합 크기 작음

이 시나리오의 경우 제품 테이블에 포함된 고유 제품의 수가 266개로, 적습니다. Size에서 선택을 하면 Direct Discovery는 선택한 크기(이 경우 19개 제품)와 일치하는 제품 ID가 포함된 WHERE ProductID IN 절을 사용하여 데이터를 반환하기 위한 SQL 문을 생성합니다.

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를 선택할 경우 수천 가지 제품 ID가 포함된 WHERE ProductID IN 절이 포함된 SQL 문이 생성됩니다. 이 경우 메모리 또는 성능과 관련된 제한이나 문제로 인해 결과 문이 데이터 소스에서 처리하기에 너무 커질 수 있습니다.

해결책은 DirectEnableSubquery를 true로 설정하여 Qlik Sense에서 대신 하위 쿼리를 만들도록 하는 것입니다. 생성된 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 절이 생성됩니다.