Direct Discovery ile alt sorgular kullanma

Tabloyu birleştiren anahtar alanın niceliği yüksekse, yani çok sayıda farklı değer içeriyorsa, Qlik Sense içinde yapılan bir seçim WHERE key_field IN cümlesi çok sayıda değer içerebileceği için çok büyük SQL deyimi oluşturabilir. Bu durumda olası bir çözüm, Qlik Sense uygulamasının bunun yerine alt sorgular oluşturmasına izin vermektir.

Bunu açıklamak için ürünler tablosunun (ProductTable) bir ürün kimliği (ProductID) kullanılarak satış siparişi tablosuna (SalesOrderDetail) bağlandığı (iki tablo da Direct Discovery modunda kullanılır) bir örnek kullanıyoruz.

Two linked tables.

Boyut olarak OrderMonth ve hesaplama olarak Sum(Subtotal) kullanılan bir grafik ve Size'ı seçmek için bir filtre kutusu oluşturuyoruz.

A filter box, a bar chart and a table.

Senaryo 1: Düşük nicelik

Bu senaryoda, ürün tablosu az sayıda farklı ürün içerir: 266. Size seçeneğinde bir seçim yaparsak, Direct Discovery verileri döndürmek için seçilen boyutla eşleşen ürün kimliklerini (bu durumda 19 ü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 şöyle görünür:

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ı örnek çok sayıda farklı ürün içeriyorsa (örneğin, 20.000) Size gibi bir boyut filtresinin seçilmesi, binlerce ürün kimliği içeren WHERE ProductID IN cümlesi ile bir SQL deyimi oluşturur. Ortaya çıkan deyim, bellek veya performansla ilgili sınırlamalar ya da sorunlar nedeniyle veri kaynağı tarafından işlenemeyecek kadar büyük olabilir.

Çözüm, bunun yerine DirectEnableSubquery'nin true olarak ayarlanmasıyla Qlik Sense uygulamasının alt sorgular oluşturmasına izin vermektir. Oluşturulan SQL deyimi şunun gibi görünür:

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ümle boyutu, artık seçimden kaynaklanan anahtar sayısına bağlı olmaz.

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

  • Alt sorgu söz dizimi, yalnızca başka bir tablodan veriler kullanılarak bir grafiği filtreleme içeren verileri seçtiğinizde çağrılır.
  • Belirleyici unsur anahtar sayısı değil, anahtarlar içindeki veri miktarıdır.
  • Alt sorgular, yalnızca ilgili tüm tablolar Direct Discovery modundayken çağrılır. Bellek modunda bulunan bir tablodan veriler kullanarak grafiği filtrelerseniz, bir IN cümlesi oluşturulacaktır.