# Korzystanie z zapytań podrzędnych w Direct Discovery

Jeśli liczebność pola klucza łączącego tabelę jest wysoka, czyli pole to zawiera dużą liczbę odrębnych wartości, dokonanie wyboru w Qlik Sense może wygenerować bardzo dużą instrukcję SQL, ponieważ klauzula WHERE key\_field IN może zawierać bardzo dużo wartości. W takim przypadku ewentualnym rozwiązaniem może być zezwolenie Qlik Sense na tworzenie zapytań podrzędnych.

Aby zilustrować to działanie, w przykładzie tym tabela produktów (ProductTable) jest powiązana z tabelą zamówień sprzedaży (SalesOrderDetail) za pomocą pól identyfikatorów produktów (ProductID) (obie tabele są w trybie Direct Discovery).

![Dwie połączone tabele.](https://help.qlik.com/pl-PL/sense/May2026/Subsystems/Hub/Content/Resources/Images/ex_gen_DirectDiscoverySubquery1.png)

Utworzono również wykres z wymiarem OrderMonth i miarą Sum(Subtotal) oraz pole filtru na potrzeby selekcji wartości Size.

![Pole filtru, wykres słupkowy i tabela.](https://help.qlik.com/pl-PL/sense/May2026/Subsystems/Hub/Content/Resources/Images/ex_gen_DirectDiscoverySubquery2.png)

## Scenariusz 1: Niska liczebność

W tym scenariuszu tabela produktów zawiera niską liczbę odrębnych produktów (266). Po dokonaniu wyboru w Size Direct Discovery generuje instrukcję SQL w celu zwrócenia odpowiednich danych korzystającą z klauzuli WHERE ProductID IN zawierającej identyfikatory produktów odpowiadające wybranemu rozmiarowi (w tym wypadku jest to 19 produktów).

![Pole filtru z dokonanymi wyborami, wykres słupkowy i tabela.](https://help.qlik.com/pl-PL/sense/May2026/Subsystems/Hub/Content/Resources/Images/ex_gen_DirectDiscoverySubquery3.png)

Wygenerowany kod SQL wygląda następująco:

```
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])

## Scenariusz 2: Korzystanie z zapytań podrzędnych

Jeśli w tym samym przykładzie liczba odrębnych produktów byłaby wyższa, na przykład 20 tys., wybranie filtru wymiaru, na przykład Size, wygenerowałoby instrukcję SQL z klauzulą WHERE ProductID IN zawierającą tysiące identyfikatorów produktów. Wynikowa instrukcja byłaby zbyt duża, aby zostać przetworzona przez źródło danych ze względu na ograniczenia lub problemy dotyczące pamięci lub wydajności.

W zamian można zezwolić Qlik Sense na utworzenie zapytań podrzędnych. W tym celu należy nadać parametrowi DirectEnableSubquery wartość true. Wygenerowana instrukcja SQL może być następująca:

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])

Rozmiar klauzuli WHERE ProductID IN nie zależy już od liczby kluczy wynikającej z dokonanego wyboru.

Stosowanie zapytań podrzędnych wiąże się z następującymi ograniczeniami:

* Składnia zapytań podrzędnych jest wywoływana tylko po dokonaniu selekcji danych obejmującym filtrowanie wykresu za pomocą danych z innej tabeli.
* Czynnikiem decydującym jest ilość danych w kluczach, a nie liczba kluczy.
* Zapytania podrzędne są wywoływane tylko wówczas, gdy wszystkie stosowne tabele są w trybie Direct Discovery. Jeśli wykres jest filtrowany za pomocą danych z tabeli w trybie opartym na pamięci głównej, wygenerowana zostanie klauzula IN.