Direct Discovery ile alt sorguları kullanma

Tabloyu birleştiren anahtar alanın önemliliği yüksek ise, yani çok sayıda tekil değer içeriyorsa, WHERE key_field IN cümlesi çok sayıda değer içerebileceğinden, QlikView içinde bir seçim çok büyük bir SQL deyimi meydana getirebilir. Bu durumda, olası bir alternatif çözüm QlikView'nin alt sorgular oluşturmasına izin vermektir.

Bunu göstermek için, ürünler tablosunun (ProductTable) bir satış emri tablosuna (SalesOrderDetail) bağlı olduğu (ProductID ürün kimliği kullanımıyla) ve iki tablonun da Direct Discovery modunda bulunduğu bir örnek kullanıyoruz.

Boyut olarak OrderMonth ve hesaplama olarak Sum(Subtotal) içeren bir grafik ve Size seçimi için de bir filtre kutusu oluşturuyoruz.

Senaryo 1: Düşük önemlilik

Bu senaryoda, ürün tablosu az sayıda (266) tekil ürün içermektedir. Size içinde bir seçim yaparsak, Direct Discovery ilgili verileri döndürmek için, seçilen boyut ile eşleşen ürün kimliklerini (bu örnekte 20 ürün) içeren WHERE ProductID IN cümlesini kullanarak bir SQL deyimi oluşturur.

Oluşturulan SQL şuna benzer:

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

Senaryo 2: Alt sorguları kullanma

Aynı örnekte yüksek sayıda (örneğin, 20.000) tekil ürün olursa, bir boyut filtresi (örneğin, Size) seçildiğinde, binlerce ürün kimliği içeren WHERE ProductID IN cümlesiyle bir SQL deyimi oluşturulması gerekir. Sonuçta oluşan deyim, sınırlamalar veya bellek ya da performans sorunları nedeniyle veri kaynağı tarafından işlenemeyecek kadar büyük olabilir.

Bunun çözümü ise, DirectEnableSubquery ayarını 'true' yaparak QlikView'nin alt sorgular oluşturmasına izin vermektir. Oluşturulan SQL deyimi şöyle görünebilir:

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 cümlesini boyutu artık, seçimden kaynaklanan anahtarların sayısına bağımlı değildir.

Alt sorguları kullanırken aşağıdaki sınırlamalar geçerlidir:

  • Alt sorgu söz dizimi yalnızca, başka bir tablodan gelen verileri kullanarak bir grafiğe filtre uygulamayı gerektiren verileri seçtiğinizde çağrılır.
  • Burada belirleyici faktör anahtarların sayısı değil, anahtarların içindeki veri miktarıdır.
  • Alt sorgular ancak, ilgili tüm tablolar Direct Discovery modunda ise çağrılabilir. Bellek modu içinde bulunan bir tablodan gelen verileri kullanarak grafiğe filtre uygularsanız, bir IN cümlesi oluşturulur.