跳到主要內容 跳至補充內容

透過 直接探索 使用子查詢

如果聯結表格之重要欄位的基數很高,也就是包含較大數量的唯一值,QlikView 中的選項就會產生非常大的 SQL 陳述式,因為 WHERE key_field IN 子句可能會包含較大的值。在此情況下,可能的解決方案是讓 QlikView 改為建立子查詢。

為了說明此情況,我們將使用一個範例,其中的產品表格 (ProductTable) 透過產品識別碼 (ProductID) 連結到銷售訂單表格 (SalesOrderDetail),而且兩個表格都用於 直接探索 模式。

Two linked tables.

我們使用 OrderMonth 作為維度、Sum(Subtotal) 作為量值以及一個用來選取 Size 的篩選框等內容,建立一個表格。

A filter box, a bar chart and a table.

案例 1:低基數

在此案例中,產品表格包含低數量的唯一產品 (266)。如果我們在 Size 進行選取,直接探索 便會使用包含符合所選大小之產品識別碼的 WHERE ProductID IN 子句 (在此案例中是產品 20),以產生 SQL 陳述式來傳回資料。

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

所產生的 SQL 如下所示:

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

案例 2:使用子查詢

如果相同的範例含有高數量的唯一產品 (例如 20,000),則選取維度篩選器 (例如 Size) 就會使用包含數千個產品識別碼的 WHERE ProductID IN 子句產生 SQL 陳述式。所產生的陳述式可能會太大而無法由資料來源處理,因為記憶體或效能有所限制或發生問題。

解決方案是將 DirectEnableSubquery 設為 true,使 QlikView 轉而建立子查詢。所產生的 SQL 陳述式可能會如下所示:

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 子句大小不再取決於選項所產生的索引鍵數。

使用子查詢有以下的限制:

  • 只有在您選擇的資料與使用其他表格的資料來篩選圖表相關時,才會叫用子查詢語法。
  • 索引鍵中的資料數量才是決定性的因素,而不是索引鍵數量。
  • 只有在所有相關表格都處於 直接探索 模式時,才會叫用子查詢。如果您使用處於記憶體模式的表格中的資料來篩選圖表,將會產生 IN 子句。

此頁面是否對您有幫助?

若您發現此頁面或其內容有任何問題——錯字、遺漏步驟或技術錯誤——請告知我們可以如何改善!

加入分析現代化計畫

Remove banner from view

透過分析現代化程式進行現代化而不犧牲寶貴的 QlikView 應用程式。 按一下這裡 取得更多資訊或聯繫: ampquestions@qlik.com