最佳化應用程式效能
可以減少應用程式大小、簡化資料模型和策略性使用集合分析,以改善應用程式效能。此區段將指出會影響效能的地方以及您可以如何評估並監控應用程式效能,以協助您避免效能問題。
您可以透過效能評估工具查看應用程式如何執行。如需詳細資訊,請參閱應用程式效能評估。
應用程式複雜性
這些是可協助診斷問題的大致類別。最複雜的應用程式具有最低效能。
簡單應用程式:
- 不包括複雜的集合分析或 If() 陳述式。
- 不包括大型表格。
- 具有簡單的資料模型。
- 包含簡單計算。
- 可能有大量資料。
中等應用程式:
- 具有含有很多表格的資料模型,但遵守最佳做去。
- 使用集合分析和幾個 If() 陳述式。
- 工作表上具有大型或寬型表格 (15 欄或更多)。
複雜應用程式:
-
具有很複雜的資料模型。
- 連線至大量資料。
- 包含複雜計算、圖表和表格。
大量資料
您可以在連線至大量資料時採用這些架構策略。
分段
您可以依維度分段 QVDs,例如時間範圍、區域或彙總層級。例如,您可以有:
- QVD,其中含有來自最近兩年的資料。
- QVD,其中含有超過兩年的歷史資料。
QVD,其中含有在較高層級彙總的所有資料。例如,根據月份而非日期,或根據國家而非個別客戶。
- 一個含有所有資料的大型 QVD,僅供小子集的使用者使用。
您可以透過類似方式分段應用程式。較小的應用程式將會處理大部分使用者的分析需求。這可節省記憶體。
您也可以擁有強調不同區域的多個應用程式。依此方式,若應用程式中含有使用者不感興趣或沒有存取權限的資料,則使用者將無法開啟。無法透過區段存取來存取的資料仍會影響記憶體。
On-Demand 應用程式產生ODAG
Qlik Sense On-demand 應用程式向使用者提供大型資料存放區的彙總檢視。這可以識別和載入相關資料子集,以獲得詳細分析。
從使用者觀點,有兩個應用程式:
- 含有彙總資料的購物車。
- 用來顯示詳細資訊的空白範本應用程式。
使用者在購物車應用程式中進行選取。達到閾值後,就會建立自訂 LOAD 指令碼,這會使用要求的詳細資訊填入範本應用程式。如需詳細資訊,請參閱使用 On-demand 應用程式管理巨量資料。
應用程式鏈結
應用程式鏈結 (在 QlikView 中稱為文件鏈結) 意指有一個使用者定期取用的彙總應用程式。若使用者需要更多詳細資訊,選項可從彙總應用程式傳遞至詳細應用程式,從而以較低的精細度進行檢視。這可節省記憶體,因為使用者沒有載入不必要的詳細資訊。可以將按鈕物件新增至工作表以執行應用程式鏈結。如需詳細資訊,請參閱應用程式鏈結。
也能透過 APIs 支援應用程式鏈結。例如,您可以使用應用程式整合 API 建立自訂應用程式鏈結。如需更多資訊,請參閱應用程式整合 API (僅提供英文版)。
動態檢視
動態檢視在高資料量或快速變化的資料情境中,可讓視覺化保持最新狀態。使用動態檢視時,請考慮下列事項:
更新動態檢視時,會直接載入資料來源。基礎資料來源的效能會影響更新效能。
動態檢視範本應用程式可以協助您建立動態圖表。
如需更多關於使用動態檢視的資訊,請參閱 透過動態檢視管理資料。
Direct Query
雖然建議使用記憶體內應用程式,但 Direct Query 允許您將資料保留在原始來源。考慮下列事項以最佳化 Direct Query 使用:
基礎資料來源的效能會嚴重影響 Direct Query 效能。
盡可能讓 Direct Query 資料模型保持簡單,因為複雜的查詢可能會造成效能問題。
如需更多關於 Direct Query 的資訊,請參閱 透過 Direct Query 直接存取雲端資料庫。
資料模型效能
以下是可影響資料模型效能的指標。每一項是改善應用程式可用性的最佳做法。
動作 | 描述 |
---|---|
移除合成鍵 | 若兩個或更多資料表格共同擁有兩個或更多欄位,則 Qlik Sense 會建立合成鍵。這可能表示指令碼或資料模型中發生錯誤。若要診斷合成鍵,請參閱 合成鍵。 |
從資料模型中移除循環參照 | 若兩個欄位具有多個關聯,就會發生循環參照。Qlik Sense 將嘗試變更與其中一個表格的連線,以解決這些事項。不過,應解決所有循環參照警告,請參閱 瞭解和解決循環參照。 |
適當的資料精細度 | 您只能載入必要資料。例如:使用者群組只需要依週、月和年分割的資料。您可以在彙總資料中載入,或在載入指令碼內彙總資料以節省記憶體。若使用者的確需要以較低的精細度視覺化資料,可以使用 ODAG 或文件鏈結。 |
在可行情況下使用的 QVDs | QVD 是包含從 Qlik Sense 所匯出之資料表格的檔案。從指令碼讀取資料時,此檔案格式的速度已經過最佳化處理,但是仍然十分精簡。從 QVD 檔案讀取資料通常比從其他資料來源讀取資料快 10-100 倍。如需詳細資訊,請參閱 使用 QVD 檔案。 |
在載入時最佳化的 QVD 檔案 | 可用兩種模式讀取 QVD 檔案:標準 (快速) 與最佳化 (更快速)。指令碼引擎會自動決定選取的模式。 關於最佳化載入有一些限制。可以重新命名欄位,但這些操作都會造成標準載入:
|
運用累加載入 | 如果您的應用程式連線至大量來自持續更新的資料庫的資料,載入整個資料集會相當耗時。您應改用累加載入,以從資料庫中擷取新記錄或變更的記錄。如需詳細資訊,請參閱 使用累加載入載入新的和更新的記錄。 |
合併 Snowflake 模型 | 若您有 Snowflake 資料模型,可以使用 Join 前置詞或其他對應聯結其中某些內容,以減少資料表格數量。這對於大型事實資料表特別重要。良好的縮圖規則是只有一個大型表格。如需更多資訊,請參閱是否合併。 |
將具有較少欄位數的表格去正常化 | 若您有兩個含有少數欄位的表格,合併它們可改善效能。如需詳細資訊,請參閱 使用 Join 與 Keep 來合併表格。 |
具有對應載入的去正常化查閱 (分葉) 表格 | 若您只需要將一個欄位從某個表格新增至另一個表格,則不應使用 Join 前置詞。您應使用 ApplyMap 查閱函數,請參閱請勿合併 - 使用 ApplyMap。 |
將時間戳記移除或從日期欄位解耦 | 若時間戳記存在,則日期欄位可以空白,因為字串表示較大,且相異值數量較大。若精確性對於分析沒有必要,可以將時間戳記四捨五入,例如使用 Timestamp(Floor(YourTimestamp,1/24)) 四捨五入為最近的小時,或使用 Date(Floor(YourTimestamp)) 完全移除時間元件。 若您想要時間戳記,可以從日期本身解耦。您可以使用相同的 Floor() 函數,然後沿用以下文字行,透過擷取的時間建立新欄位:Time(Frac(YourTimestamp))。 |
從資料模型中移除不必要的欄位 | 您只能在資料模型中載入必要欄位。避免使用 Load * 和 SELECT。確認您保留:
|
在處理大量資料時避免連結表格 | 您應在可行情況下使用連結表格。不過,若您處理大量資料,串連表格會超過連結表格的效能。 |
串連維度分為新的欄位 | 您應將串連維度分為獨立的欄位。這可減少欄位中值的唯一發生次數。這與最佳化時間戳記的方式類似。 |
在可行情況下使用的 AutoNumber | 您可以先從 QVD 檔案載入資料,以建立最佳載入,然後使用 AutoNumber 陳述式以將值轉換為符號鍵。如需詳細資訊,請參閱 AutoNumber。 |
避免資料島 | 資料島很實用,但通常會影響效能。若您正在建立用於選項值的島,請使用變數。 |
QVD 根據累加時間範圍來儲存。 | 您應以區段儲存 QVD,例如每月。然後這些較小的每月 QVD 可支援許多可能不需要所有資料的不同應用程式。 |
工作表效能
以下是可改善工作表和視覺化效能的最佳做法。
動作 | 描述 |
---|---|
在可行情況下避免 If() 函數 | 若在彙總函數內部使用 If() 函數,將會在記錄層級操作並評估多次。 例如,若您在彙總中有 1000 個記錄,將會評估 If() 條件 1000 次。若您巢狀化陳述式,這會迅速串聯。您應改用集合分析。會在彙總之前套用集合分析篩選條件,造成回應更加快速。也能透過集合分析快取這些回應,If() 則無法實現。您也可以對資料模型考慮其他函數和修改。 |
盡可能避免來自彙總表格內部不同表格的欄位。 | 評估彙總時,計算會透過兩個步驟執行:
單一執行緒部分會顯著影響效能。一個範例是,若彙總內部有多個欄位,例如 Sum(Quantity*ListPrice)。若 Quantity 位於事實資料表中,而 ListPrice 位於主要產品表格中,則引擎首先需要聯結兩個表格以尋找組合,才能開始加總產品。聯結是單一執行緒部分,而加總是多執行緒。若在相同表格中找到兩個欄位,則不必聯結,評估彙總的速度會大幅提升。 |
儘量少使用 Aggr() 和巢狀化 Aggr() 函數 | Aggr() 函數會大幅影響效能。不正確的使用會造成不精確的結果。例如,在維度與 Aggr() 函數內部的維度不同的表格中。如需更多資訊,請參閱什麼時候不可使用 AGGR? |
在可行情況下使用集合分析 | 您可以使用集合分析定義與目前選項定義的一般集合不同的資料值集合。如需詳細資訊,請參閱 集合分析。 |
在可行情況下避免字串比較 | 字串比較不如集合分析有效率。例如,您應避免 Match()、MixMatch()、WildMatch() 和 Pick()。在指令碼中建立旗標或改用集合分析。 如需更多資訊,請參閱 條件函數 和條件式彙總的效能。 |
計算條件用於包含密集計算的物件 | 沒有任何選項時,您可能有視覺化及許多記錄。作為最佳做法,請將計算條件新增至物件,如此只有在進行特定選取後才能轉譯。這可阻止建立非常大的超立方體。例如:GetSelectedCount([Country])=1 OR GetPossibleCount([Country])=1。在此情境下,視覺化將不會呈現,除非使用者選取單一國家,或在僅單一國家可行時進行其他選取。 |
在可行情況下於指令碼中預先計算量值 | 任何處於最低資料模型精細度的量值應於指令碼中進行計算。例如,若在表格的相同記錄中,您有 Sales 和 Cost,您可以計算 Sales - Cost AS Margin 以衍生利潤。若您知道其他值不是根據選項變化,或者這些值繫結於不同的精細度,則您也可以事先彙總其他值。 |
表格的欄少於 15 個且表格具有計算條件 | 含有 15 欄的表格可視為寬型表格。若表格由許多記錄組成,您應在表格物件上使用計算條件,如此只有在達到特定選項或標準後才會轉譯。若您的表格非常寬,請考慮:
|
工作表沒有過多物件數量 | 使用者前往工作表時,會計算物件。使用者每次在工作表進行選取時,若目前狀態不存在於快取,將會重新計算每個物件。若您的工作表有許多圖表,使用者幾乎必須在每次選取時等待每個物件進行計算。這會對引擎造成大量負載。作為最佳做法,請按照 Dashboard/Analysis/Reporting (DAR) 概念開發乾淨且最小的應用程式。如需更多資訊,請參閱 DAR 方法。 |
在指令碼中運用數字旗標以用於集合分析 | 含有旗標的集合分析比使用字串比較或乘法更有效率。 |
主項目可拖放受到控管的度量並保證將會快取運算式。例如,Sum(Sales) 與 SUM(Sales) 不同。運算式會在拼字和大小寫方面進行快取,且需要符合逐字相符才能重複使用。 |
資料載入效能
在 Qlik Cloud 中使用應用程式時,若要獲得順暢且反應靈敏的體驗,最佳化資料載入很重要。此區段強調效能影響因素,並提供如何預防效能問題的指南。
Qlik 資料閘道 - 直接存取
使用 Qlik 資料閘道 - 直接存取 以將資料載入到應用程式時,下列因素會影響效能:
託管資料閘道的機器和資料庫之間的連線速度和延遲。
託管資料閘道的機器和 Qlik Cloud 租用戶之間的連線速度和延遲。理想上,請在與 Qlik Cloud 租用戶相同的區域託管資料閘道,以改善效能。
資料庫儲存
減慢儲存連線可能會增加載入時間。對於內部部署或在雲端託管的資料庫,請考慮下列事項:
內部部署:若資料庫為內部部署,並與其他應用程式共用伺服器,則其他這些應用程式的活動可能會影響其效能。
雲端:若大小正確,雲端資料庫通常提供比內部部署資料庫更好的效能。為獲得最佳結果,請為雲端儲存選擇靠近 Qlik Cloud 租用戶的區域。