Przeskocz do zawartości głównej Przejdź do treści uzupełniającej

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 selekcji w QlikView 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 QlikView 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).

Two linked tables.

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

A filter box, a bar chart and a table.

Scenariusz 1 Niska liczebność

W tym scenariuszu tabela produktów zawiera niską liczbę odrębnych produktów (266). Po dokonaniu selekcji wartości 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 20 produktów).

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

Wygenerowane zapytanie SQL jest następujące:

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 Zastosowanie 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 filtra 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ć QlikView 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 dokonanej selekcji.

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.

Czy ta strona była pomocna?

Jeżeli natkniesz się na problemy z tą stroną lub jej zawartością — literówkę, brakujący krok lub błąd techniczny — daj nam znać, co możemy poprawić!

Dołącz do Programu Modernizacji Analityki

Remove banner from view

Przeprowadź modernizację bez szkody dla Twoich cennych aplikacji QlikView za pomocą programu Analytics Modernization Program. Kliknij tutaj aby uzyskać więcej informacji lub skontaktuj się z nami: ampquestions@qlik.com