Använda underordnade frågor med Direct Discovery
Om kardinaliteten av nyckelfältet som slår samman tabellen, det vill säga om den innehåller ett stort antal distinkta värden, kan ett urval i QlikView generera en mycket lång SQL-sats, eftersom WHERE key_field IN-satsen kan innehålla ett stort antal värden. I så fall är en möjlig lösning att låta QlikView skapa underordnade frågor istället
För att illustrera detta använder vi ett exempel där en produkttabell (ProductTable) är länkad till en försäljningsordertabell (SalesOrderDetail) med hjälp av en produktnyckel (ProductID), där båda tabellerna används i Direct Discovery-läge.
Vi skapar ett diagram med OrderMonth som dimension ochSum(Subtotal) som mått, samt en filterbox för att välja Size.
Scenario 1: Låg kardinalitet
I det här scenariet innehåller produkttabellen ett lågt antal distinkta produkter, 266. Om vi gör ett urval i Size, genererar Direct Discovery en SQL-sats för att returnera data med hjälp av en WHERE ProductID IN-sats som innehåller produktnycklar som matchar den valda storleken, i det här fallet 20 produkter.
De SQL-data som genereras ser ut så här:
Scenario 2: Använda underordnade frågor
Om samma exempel innehåller ett högt antal distinkta produkter, till exempel 20 000, kan användning av ett dimensionsfilter som t.ex. Size generera en SQL-sats med en WHERE ProductID IN-sats som innehåller tusentals produktnycklar. Den sats som då genereras kan vara för lång för att kunna hanteras av datakällan, på grund av begränsningar eller problem med minne eller prestanda.
Lösningen är att låta QlikView skapa underordnade frågor istället genom att ställa in DirectEnableSubquery på sann. Den genererade SQL-satsen kanske ser ut så här istället:
Storleken på WHERE ProductID IN-satsen beror då inte längre på antalet nycklar som urvalet ger upphov till.
Följande begränsningar gäller när du använder underordnade frågor:
- Syntaxen för underordnade frågor tillämpas bara om du väljer data som kräver filtrering av ett diagram med hjälp av data från en annan tabell.
- Mängden data i nycklarna är en avgörande faktor, inte antalet nycklar i sig.
- Underordnade frågor tillämpas bara om alla tabeller är i läget Direct Discovery. Om du filtrerar diagrammet med hjälp av data från en tabell som inkluderas i minnesläge kommer en IN-sats att genereras.