透過 直接探索 使用子查詢
如果聯結表格之重要欄位的基數很高,也就是包含較大數量的唯一值,QlikView 中的選項就會產生非常大的 SQL 陳述式,因為 WHERE key_field IN 子句可能會包含較大的值。在此情況下,可能的解決方案是讓 QlikView 改為建立子查詢。
為了說明此情況,我們將使用一個範例,其中的產品表格 (ProductTable) 透過產品識別碼 (ProductID) 連結到銷售訂單表格 (SalesOrderDetail),而且兩個表格都用於 直接探索 模式。
我們使用 OrderMonth 作為維度、Sum(Subtotal) 作為量值以及一個用來選取 Size 的篩選框等內容,建立一個表格。
案例 1:低基數
在此案例中,產品表格包含低數量的唯一產品 (266)。如果我們在 Size 進行選取,直接探索 便會使用包含符合所選大小之產品識別碼的 WHERE ProductID IN 子句 (在此案例中是產品 20),以產生 SQL 陳述式來傳回資料。
所產生的 SQL 如下所示:
案例 2:使用子查詢
如果相同的範例含有高數量的唯一產品 (例如 20,000),則選取維度篩選器 (例如 Size) 就會使用包含數千個產品識別碼的 WHERE ProductID IN 子句產生 SQL 陳述式。所產生的陳述式可能會太大而無法由資料來源處理,因為記憶體或效能有所限制或發生問題。
解決方案是將 DirectEnableSubquery 設為 true,使 QlikView 轉而建立子查詢。所產生的 SQL 陳述式可能會如下所示:
WHERE ProductID IN 子句大小不再取決於選項所產生的索引鍵數。
使用子查詢有以下的限制:
- 只有在您選擇的資料與使用其他表格的資料來篩選圖表相關時,才會叫用子查詢語法。
- 索引鍵中的資料數量才是決定性的因素,而不是索引鍵數量。
- 只有在所有相關表格都處於 直接探索 模式時,才會叫用子查詢。如果您使用處於記憶體模式的表格中的資料來篩選圖表,將會產生 IN 子句。