Direct Discovery 與記憶體內資料之間的差異

記憶體內資料

QlikView 記憶體內模型中,載入指令碼內表格中所選欄位的所有唯一值都會載入於欄位結構,而關聯資料也會同時載入表格中。欄位資料與關聯資料都會保留在記憶體內。

One table with three fields.

載入記憶體的第二個相關表格會共用共同欄位,而此表格可能會在共同欄位中新增唯一值,也可能會共用現有值。

Two tables with a common field.

Direct Discovery

Direct DiscoveryLOAD 陳述式 (Direct Query) 載入表格欄位時,會建立一個只有 DIMENSION 欄位的類似表格。和記憶體內欄位一樣,DIMENSION 欄位的唯一值會載入於記憶體內。但欄位之間的關聯則會留在資料庫中。

One table with two dimension fields.

MEASURE 欄位值也會留在資料庫中。

One table with measure field values left in the database.

在建立 Direct Discovery 結構後,Direct Discovery 欄位便可與某些圖表物件搭配使用,並可用於記憶體內欄位的關聯。使用 Direct Discovery 欄位時,QlikView 會自動建立適當的 SQL 查詢,以便在外部資料上執行。進行選取時,Direct Discovery 欄位的關聯資料值會用於資料庫查詢的 WHERE 條件中。

每選取一次,便會透過執行 QlikView 建立的 SQL 查詢,在來源資料庫表格重新計算具有 Direct Discovery 欄位的圖表。計算條件功能可用來指定何時重新計算圖表。QlikView 只會在符合條件時才傳送要重新計算圖表的查詢。

記憶體內欄位與 Direct Discovery 欄位之間的效能差異

記憶體內的處理速度一向比來源資料庫的處理速度來得快。Direct Discovery 的效能會反映系統在資料庫處理 Direct Discovery 查詢時的執行效能。

您可以使用標準資料庫及查詢來調整 Direct Discovery 的最佳做法。所有效能調整應在來源資料庫進行。Direct Discovery 不支援來自 QlikView 文件的查詢效能調整。不過,透過連接共用功能,即可對資料庫執行非同步的平行呼叫。設定共用功能的載入指令碼語法為︰

SET DirectConnectionMax=10;

QlikView 快取也會改善整體使用者體驗。請參閱下方的快取和 Direct Discovery

將部分關聯的欄位分離,可改善具有 DIMENSION 欄位的 Direct Discovery 效能。這是透過 DIRECT QUERY 上的 DETACH 關鍵字來達成。雖然分離的欄位不會被查詢關聯,它們仍是篩選的一部分,有助於加速選取時間。

雖然 QlikView 記憶體內欄位及 Direct DiscoveryDIMENSION 欄位的資料都存在記憶體內,但是載入方式會影響載入記憶體的速度。當 QlikView 記憶體內欄位中有多個相同值時,只會保留一份欄位值。不過,載入所有欄位資料後,便會將重複資料排序出來。

DIMENSION 欄位也只會儲存一份欄位値,但是會在載入記憶體前於資料庫中將重複值排序出來。處理大量資料,也就是通常在使用 Direct Discovery 時,針對記憶體內欄位使用 DIRECT QUERY 載入資料的速度會比 SQL SELECT 載入快很多。

記憶體內資料及資料庫資料之間的差異

DIRECT QUERY 在與記憶體內資料建立關聯時會區分大小寫。Direct Discovery 會根據查詢的資料庫欄位的大小寫區分性,從來源資料庫中選取資料。如果資料庫欄位不區分大小寫,Direct Discovery 查詢可能會傳回記憶體內查詢不會傳回的資料。例如,如果下列資料存在於不區分大小寫的資料庫內,"Red" 值的 Direct Discovery 查詢就會傳回所有四個列。

ColumnA ColumnB
red one
Red two
rED three
RED four

另一方面,"Red," 的記憶體內選項只會傳回:

Red two

QlikView 標準化資料到一個程度,便會從資料庫無法相符的所選資料中產生相符結果。因此,記憶體內查詢可能會產生比 Direct Discovery 查詢更多的符合項目。例如,下列表格中,數字 "1" 的值會依據周圍空格的位置而有所不同:

ColumnA ColumnB
' 1' space_before
'1' no_space
'1 ' space_after
'2' two

如果您在 ColumnA列表框中選取 "1",其中資料位於標準 QlikView 記憶體中,就會與前三列產生關聯:

' 1' space_before
'1' no_space
'1 ' space_after

如果列表框包含 Direct Discovery) 資料,則 "1" 的選項可能只會與 "no_space" 產生關聯。Direct Discovery 資料傳回的符合項目視資料庫而定。有些只傳回 "no_space",而有些像是 SQL Server 則會傳回 "no_space""space_after"

快取和 Direct Discovery

QlikView 快取會在記憶體內儲存查詢的選項狀態和相關的查詢結果。進行相同類型的選取時,QlikView 會利用快取中的查詢,而非來源資料中的查詢。進行不同類型的選取時,則會在資料來源上進行 SQL 查詢。快取結果可供多位使用者共用。

Example:  

  1. 使用者套用初始選項。

    SQL 已通過基礎資料來源。

  2. 使用者清除選項並套用相同選項作為初始選項。

    快取結果已傳回,SQL 未通過基礎資料來源。

  3. 使用者套用其他選項。

    SQL 已通過基礎資料來源。

可使用 DirectCacheSeconds 系統變數設定快取的時間限制。一旦到達此時間限制,QlikView 便會清除 Direct Discovery 查詢在先前選項所產生結果中的快取。然後,QlikView 會查詢選項的來源資料,並根據指定時間限制重新建立快取。

若非使用 DirectCacheSeconds 系統變數,Direct Discovery 查詢結果的預設快取時間是 30 分鐘。