跳到主要內容

最佳化應用程式效能

在此頁面

最佳化應用程式效能

可以減少應用程式大小、簡化資料模型和策略性使用集合分析,以改善應用程式效能。此區段將指出會影響效能的地方以及您可以如何評估並監控應用程式效能,以協助您避免效能問題。

您可以透過效能評估工具查看應用程式如何執行。如需詳細資訊,請參閱應用程式效能評估

應用程式複雜性

這些是可協助診斷問題的大致類別。最複雜的應用程式具有最低效能。

簡單應用程式:

  • 不包括複雜的集合分析或 If() 陳述式。
  • 不包括大型表格。
  • 具有簡單的資料模型。
  • 包含簡單計算。
  • 可能有大量資料。

中等應用程式:

  • 具有含有很多表格的資料模型,但遵守最佳做去。
  • 使用集合分析和幾個 If() 陳述式。
  • 工作表上具有大型或寬型表格 (15 欄或更多)。

複雜應用程式:

  • 具有很複雜的資料模型。

  • 連線至大量資料。
  • 包含複雜計算、圖表和表格。

大量資料

您可以在連線至大量資料時採用這些架構策略。

分段

您可以依維度分段 QVDs,例如時間範圍、區域或彙總層級。例如,您可以有:

  • QVD,其中含有來自最近兩年的資料。
  • QVD,其中含有超過兩年的歷史資料。
  • QVD,其中含有在較高層級彙總的所有資料。例如,根據月份而非日期,或根據國家而非個別客戶。

  • 一個含有所有資料的大型 QVD,僅供小子集的使用者使用。

您可以透過類似方式分段應用程式。較小的應用程式將會處理大部分使用者的分析需求。這可節省記憶體。

您也可以擁有強調不同區域的多個應用程式。依此方式,若應用程式中含有使用者不感興趣或沒有存取權限的資料,則使用者將無法開啟。無法透過區段存取來存取的資料仍會影響記憶體。

On-Demand 應用程式產生ODAG

Qlik Sense On-demand 應用程式向使用者提供大型資料存放區的彙總檢視。這可以識別和載入相關資料子集,以獲得詳細分析。

從使用者觀點,有兩個應用程式:

  1. 含有彙總資料的購物車。
  2. 用來顯示詳細資訊的空白範本應用程式。

使用者在購物車應用程式中進行選取。達到閾值後,就會建立自訂 LOAD 指令碼,這會使用要求的詳細資訊填入範本應用程式。如需詳細資訊,請參閱使用 On-demand 應用程式管理巨量資料

文件鏈結

文件鏈結意指有一個使用者定期取用的彙總應用程式。若使用者需要更多詳細資訊,選項可從彙總應用程式傳遞至詳細應用程式,從而以較低的精細度進行檢視。這可節省記憶體,因為使用者沒有載入不必要的詳細資訊。文件鏈結透過 APIs 受到支援。

資料模型效能

以下是可影響資料模型效能的指標。每一項是改善應用程式可用性的最佳做法。

資料模型效能最佳做法
動作 描述

移除合成鍵

若兩個或更多資料表格共同擁有兩個或更多欄位,則 Qlik Sense 會建立合成鍵。這可能表示指令碼或資料模型中發生錯誤。若要診斷合成鍵,請參閱 合成鍵

從資料模型中移除循環參照

若兩個欄位具有多個關聯,就會發生循環參照。Qlik Sense 將嘗試變更與其中一個表格的連線,以解決這些事項。不過,應解決所有循環參照警告,請參閱 瞭解和解決循環參照

適當的資料精細度

您只能載入必要資料。例如:使用者群組只需要依週、月和年分割的資料。您可以在彙總資料中載入,或在載入指令碼內彙總資料以節省記憶體。若使用者的確需要以較低的精細度視覺化資料,可以使用 ODAG 或文件鏈結。

在可行情況下使用的 QVDs

QVD 是包含從 Qlik Sense 所匯出之資料表格的檔案。從指令碼讀取資料時,此檔案格式的速度已經過最佳化處理,但是仍然十分精簡。從 QVD 檔案讀取資料通常比從其他資料來源讀取資料快 10-100 倍。如需詳細資訊,請參閱 使用 QVD 檔案Working with QVD files

在載入時最佳化的 QVD 檔案

可用兩種模式讀取 QVD 檔案:標準 (快速) 與最佳化 (更快速)。指令碼引擎會自動決定選取的模式。

關於最佳化載入有一些限制。可以重新命名欄位,但這些操作都會造成標準載入:

  • 載入欄位上的任何轉換。
  • 使用造成 Qlik Sense 解壓縮記錄的 where 子句。
  • 在載入的欄位上使用對應

運用累加載入

如果您的應用程式連線至大量來自持續更新的資料庫的資料,載入整個資料集會相當耗時。您應改用累加載入,以從資料庫中擷取新記錄或變更的記錄。如需詳細資訊,請參閱 使用累加載入載入新的和更新的記錄

合併 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 陳述式以將值轉換為符號鍵。如需詳細資訊,請參閱 AutoNumberAutoNumber

避免資料島

資料島很實用,但通常會影響效能。若您正在建立用於選項值的島,請使用變數。

QVD 根據累加時間範圍來儲存。

您應以區段儲存 QVD,例如每月。然後這些較小的每月 QVD 可支援許多可能不需要所有資料的不同應用程式。

工作表效能

以下是可改善工作表和視覺化效能的最佳做法。

工作表效能最佳做法
動作 描述

在可行情況下避免 If() 函數

若在彙總函數內部使用 If() 函數,將會在記錄層級操作並評估多次。

例如,若您在彙總中有 1000 個記錄,將會評估 If() 條件 1000 次。若您巢狀化陳述式,這會迅速串聯。您應改用集合分析。會在彙總之前套用集合分析篩選條件,造成回應更加快速。也能透過集合分析快取這些回應,If() 則無法實現。您也可以對資料模型考慮其他函數和修改。

盡可能避免來自彙總表格內部不同表格的欄位。

評估彙總時,計算會透過兩個步驟執行:

  1. 第一步是尋找要進行計算的相關組合。此步驟是單一執行緒。

  2. 第二步是執行計算。此步驟是多執行緒。

單一執行緒部分會顯著影響效能。一個範例是,若彙總內部有多個欄位,例如 Sum(Quantity*ListPrice)。若 Quantity 位於事實資料表中,而 ListPrice 位於主要產品表格中,則引擎首先需要聯結兩個表格以尋找組合,才能開始加總產品。聯結是單一執行緒部分,而加總是多執行緒。若在相同表格中找到兩個欄位,則不必聯結,評估彙總的速度會大幅提升。

儘量少使用 Aggr() 和巢狀化 Aggr() 函數

Aggr() 函數會大幅影響效能。不正確的使用會造成不精確的結果。例如,在維度與 Aggr() 函數內部的維度不同的表格中。如需更多資訊,請參閱什麼時候不可使用 AGGR?

在可行情況下使用集合分析

您可以使用集合分析定義與目前選項定義的一般集合不同的資料值集合。如需詳細資訊,請參閱 集合分析與集合運算式

在可行情況下避免字串比較

字串比較不如集合分析有效率。例如,您應避免 Match()MixMatch()WildMatch()Pick()。在指令碼中建立旗標或改用集合分析。 如需更多資訊,請參閱 條件函數條件式彙總的效能

計算條件用於包含密集計算的物件

沒有任何選項時,您可能有視覺化及許多記錄。作為最佳做法,請將計算條件新增至物件,如此只有在進行特定選取後才能轉譯。這可阻止建立非常大的超立方體。例如:GetSelectedCount([Country])=1 OR GetPossibleCount([Country])=1。在此情境下,視覺化將不會呈現,除非使用者選取單一國家,或在僅單一國家可行時進行其他選取。

在可行情況下於指令碼中預先計算量值

任何處於最低資料模型精細度的量值應於指令碼中進行計算。例如,若在表格的相同記錄中,您有 SalesCost,您可以計算 Sales - Cost AS Margin 以衍生利潤。若您知道其他值不是根據選項變化,或者這些值繫結於不同的精細度,則您也可以事先彙總其他值。

表格的欄少於 15 個且表格具有計算條件

含有 15 欄的表格可視為寬型表格。若表格由許多記錄組成,您應在表格物件上使用計算條件,如此只有在達到特定選項或標準後才會轉譯。若您的表格非常寬,請考慮:

  • 建立多個根據條件顯示的較小表格。
  • 使用方法以根據條件顯示欄。
  • 讓表格限僅限對於分析有必要的欄位。

工作表沒有過多物件數量

使用者前往工作表時,會計算物件。使用者每次在工作表進行選取時,若目前狀態不存在於快取,將會重新計算每個物件。若您的工作表有許多圖表,使用者幾乎必須在每次選取時等待每個物件進行計算。這會對引擎造成大量負載。作為最佳做法,請按照 Dashboard/Analysis/Reporting (DAR) 概念開發乾淨且最小的應用程式。如需更多資訊,請參閱 DAR 方法

在指令碼中運用數字旗標以用於集合分析

含有旗標的集合分析比使用字串比較或乘法更有效率。

用於運算式的主項目或變數

主項目可拖放受到控管的度量並保證將會快取運算式。例如,Sum(Sales)SUM(Sales) 不同。運算式會在拼字和大小寫方面進行快取,且需要符合逐字相符才能重複使用。