最佳化應用程式效能
可以減少應用程式大小、簡化資料模型和策略性使用集合分析,以改善應用程式效能。此區段將指出會影響效能的地方以及您可以如何評估並監控應用程式效能,以協助您避免效能問題。
應用程式複雜性
這些是可協助診斷問題的大致類別。最複雜的應用程式具有最低效能。
簡單應用程式:
- 不包括複雜的集合分析或 If() 陳述式。
- 不包括大型表格。
- 具有簡單的資料模型。
- 包含簡單計算。
- 可能有大量資料。
中等應用程式:
- 具有含有很多表格的資料模型,但遵守最佳做去。
- 使用集合分析和幾個 If() 陳述式。
- 工作表上具有大型或寬型表格 (15 欄或更多)。
複雜應用程式:
-
具有很複雜的資料模型。
- 連線至大量資料。
- 包含複雜計算、圖表和表格。
應用程式詳細資訊
您需要考慮與應用程式大小相關的硬體環境,因為這會影響 Qlik Sense 部署的效能。例如,若您沒有最佳化應用程式,則可能需要更多硬體資源。
監控應用程式大小可協助您:
- 瞭解目前效能。
- 瞭解部署新應用程式的效能影響。
- 瞭解修改現有應用程式的效能影響。
- 解決效能問題。
- 為未來成長做好規畫。
Qlik 提供可協助您評估應用程式的工具。如需詳細資訊,請參閱:Qlik Sense Enterprise 中的效能與可延展性 (僅提供英文版)。
這些是可影響效能的基本應用程式元素:
功能 | 描述 |
---|---|
應用程式磁碟大小 (MB) | 您可以在 QMC 找到應用程式大小。前往應用程式,然後開啟右側動作旁的欄選取器。按一下檔案大小 (MB) 旁的選項控件。若您正在使用 Qlik Sense Desktop,可以在 Windows Explorer 中找到應用程式大小。預設資料夾為 %USERPROFILE%\Documents\Qlik\Sense\Apps。Apps 資料夾列出所有應用程式名稱和檔案大小。 |
應用程式大小單位為 RAM (GB) |
您可以依下列方式判定應用程式的基本 RAM 使用量:
若您正在使用 Qlik Sense June 2018 或更新版本,可以使用 App Metadata Analyzer 尋找此度量。 如需更多資訊,請參閱應用程式中繼資料分析器 (僅提供英文版)。 |
應用程式總列數 (M) |
您可以使用系統欄位計算總列數。使用量值 Sum($Rows) 建立 KPI 。如需詳細資訊,請參閱 系統欄位。 |
應用程式欄位總數 | 您可以使用系統欄位計算欄位總數。使用量值 Sum($Fields) 建立 KPI。如需詳細資訊,請參閱 系統欄位。 |
應用程式表格總數 | 您可以使用系統欄位計算表格總數。使用量值 Count(DISTINCT $Table) 建立 KPI。如需詳細資訊,請參閱 系統欄位。 |
監控應用程式
Qlik Management Console (QMC) 提供用於監控 Qlik Sense Enterprise on Windows 的系統效能和使用的應用程式:
-
Operations Monitor 應用程式提供關於硬體使用的資訊,例如伺服器記憶體和 CPU 使用情況、作用中的使用者以及載入任務活動。還提供有關 Qlik Sense 伺服器環境中錯誤、警告以及記錄活動的摘要和詳細資訊。
-
License Monitor 應用程式可追蹤授權使用量,並有助監控授權配置的變更。
- Log Monitor 應用程式幾乎可呈現所有可用的記錄資料,也能進行趨勢分析和疑難排解。
- Sessions Monitor 應用程式顯示關於應用程式使用的記錄資料。
- Reloads Monitor 應用程式呈現關於載入資料的詳細資訊,包括來自 QMC 以及在中心內開啟的應用程式。
- Sense System Performance Analyzer 應用程式顯示所有結點的 Qlik Sense 效能。
- Sense Connector Logs Analyzer 應用程式針對特定 Qlik 連接器的使用情況和錯誤提供深入資訊。
- App Metadata Analyzer 應用程式提供 Qlik Sense 應用程式的整體檢視,包括應用程式資料模型及其資源使用的精細度詳細資訊。
如需詳細資訊,請參閱監控Qlik Sense Enterprise on Windows網站 (僅提供英文版)。
大量資料
您可以在連線至大量資料時採用這些架構策略。
分段
您可以依維度分段 QVDs,例如時間範圍、區域或彙總層級。例如,您可以有:
- QVD,其中含有來自最近兩年的資料。
- QVD,其中含有超過兩年的歷史資料。
-
QVD,其中含有在較高層級彙總的所有資料。例如,根據月份而非日期,或根據國家而非個別客戶。
- 一個含有所有資料的大型 QVD,僅供小子集的使用者使用。
您可以透過類似方式分段應用程式。較小的應用程式將會處理大部分使用者的分析需求。這可節省記憶體。
您也可以擁有強調不同區域的多個應用程式。依此方式,若應用程式中含有使用者不感興趣或沒有存取權限的資料,則使用者將無法開啟。無法透過區段存取來存取的資料仍會影響記憶體。
On-Demand 應用程式產生ODAG
Qlik Sense On-demand 應用程式向使用者提供大型資料存放區的彙總檢視。這可以識別和載入相關資料子集,以獲得詳細分析。
從使用者觀點,有兩個應用程式:
- 含有彙總資料的購物車。
- 用來顯示詳細資訊的空白範本應用程式。
使用者在購物車應用程式中進行選取。達到閾值後,就會建立自訂 LOAD 指令碼,這會使用要求的詳細資訊填入範本應用程式。如需詳細資訊,請參閱使用 On-demand 應用程式管理巨量資料。
資料模型效能
以下是可影響資料模型效能的指標。每一項是改善應用程式可用性的最佳做法。
動作 | 描述 |
---|---|
移除合成鍵 |
若兩個或更多資料表格共同擁有兩個或更多欄位,則 Qlik Sense 會建立合成鍵。這可能表示指令碼或資料模型中發生錯誤。若要診斷合成鍵,請參閱 合成鍵。 |
從資料模型中移除循環參照 |
若兩個欄位具有多個關聯,就會發生循環參照。Qlik Sense 將嘗試變更與其中一個表格的連線,以解決這些事項。不過,應解決所有循環參照警告,請參閱 瞭解和解決循環參照。 |
適當的資料精細度 |
您只能載入必要資料。例如:使用者群組只需要依週、月和年分割的資料。您可以在彙總資料中載入,或在載入指令碼內彙總資料以節省記憶體。若使用者的確需要以較低的精細度視覺化資料,可以使用 ODAG 或文件鏈結。 |
在可行情況下使用的 QVDs |
QVD 是包含從 Qlik Sense 所匯出之資料表格的檔案。從指令碼讀取資料時,此檔案格式的速度已經過最佳化處理,但是仍然十分精簡。從 QVD 檔案讀取資料通常比從其他資料來源讀取資料快 10-100 倍。如需詳細資訊,請參閱 使用 QVD 檔案。 |
在載入時最佳化的 QVD 檔案 |
可用兩種模式讀取 QVD 檔案:標準 (快速) 與最佳化 (更快速)。指令碼引擎會自動決定選取的模式。 關於最佳化載入有一些限制。可以重新命名欄位,但這些操作都會造成標準載入:
|
運用累加載入 |
如果您的應用程式連線至大量來自持續更新的資料庫的資料,載入整個資料集會相當耗時。您應改用累加載入,以從資料庫中擷取新記錄或變更的記錄。如需詳細資訊,請參閱 使用累加載入載入新的和更新的記錄。 |
合併 Snowflake 模型 |
若您有 Snowflake 資料模型,可以使用 Join 前置詞或其他對應聯結其中某些內容,以減少資料表格數量。這對於大型事實資料表特別重要。良好的縮圖規則是只有一個大型表格。如需更多資訊,請參閱是否合併。 |
將具有較少欄位數的表格去正常化 |
若您有兩個含有少數欄位的表格,合併它們可改善效能。 如需更多資訊,請參閱撰寫指令碼的後續步驟。 |
具有對應載入的去正常化查閱 (分葉) 表格 |
若您只需要將一個欄位從某個表格新增至另一個表格,則不應使用 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) 不同。運算式會在拼字和大小寫方面進行快取,且需要符合逐字相符才能重複使用。 |