Ana içeriğe geç Tamamlayıcı içeriğe geç

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.

Two linked tables.

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

A filter box, a bar chart and a table.

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.

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

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.

Çözüm, bunun yerine DirectEnableSubquery'nin true olarak ayarlanmasıyla QlikView uygulamasının 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 modunda bulunan bir tablodan veriler kullanarak grafiği filtrelerseniz, bir IN cümlesi oluşturulacaktır.

Bu sayfa size yardımcı oldu mu?

Bu sayfa veya içeriği ile ilgili bir sorun; bir yazım hatası, eksik bir adım veya teknik bir hata bulursanız, bize bildirin, düzeltelim!

Analiz Modernleştirme Programına katılın

Remove banner from view

Analiz Modernleştirme Programı ile değerli QlikView uygulamalarınızı ödün vermeden modernleştirin. Bize ulaşmak ve daha fazla bilgi almak için buraya tıklayın: ampquestions@qlik.com