Direct Discovery 和記憶體內資料的不同之處

記憶體內模型

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

One table with three fields.

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

Two tables with a common field.

Direct Discovery

Direct Discovery LOAD 陳述式 (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 欄位時,Qlik Sense 會自動建立可在外部資料上執行的適當 SQL 查詢。進行選取時,Direct Discovery 的關聯資料值會用於資料庫查詢的 WHERE 條件中。

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

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

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

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

SET DirectConnectionMax=10;

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

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

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

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

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

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

範例表格
ColumnA ColumnB
紅色
紅色
紅色
紅色

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

Red two

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

因為周圍不同的空格位置,而對於數字「1」具有不同值的表格
ColumnA ColumnB
' 1' space_before
'1' no_space
'1 ' space_after
'2'

如果您在篩選窗格中為 ColumnA 選取 "1",其中資料位於標準 Qlik Sense 記憶體中,會與前三列產生關聯:

Associated rows
ColumnA ColumnB
' 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

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

Example:  

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

    SQL 會通過基礎資料來源。

  2. 使用者清除選項,並套用與初始選項相同的選項。

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

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

    SQL 會通過基礎資料來源。

可在使用 DirectCacheSeconds 系統變數的快取方式設定時間限制。達到時間限制後,Qlik Sense 會清除為先前選項產生的 Direct Discovery 查詢結果的快取。隨後 Qlik Sense 會針對選項查詢來源資料,然後為指定的時間限制重新建立快取。

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