Essbase 公式最佳化
若要最佳化計算與查詢的 Essbase 區塊儲存公式處理,您可以透過使用整合而非計算來避免公式、儘可能使用較簡單的公式、採取步驟來調整複雜公式的效能,或切換至混合模式。
您可以仔細使用立方體大綱中的公式,大幅改善計算效能。例如,您可以透過在資料庫大綱中的成員上放置公式,而不是在計算命令檔中放置公式,來提高計算效能。請參閱開發區塊儲存立方體的公式。
下列各節討論如何處理影響非混合模式區塊儲存立方體中計算效能的公式問題。
如需混合模式最佳化,請改為參考快速分析處理的混合模式。
Essbase 成員整合
使用立方體大綱來累計 Essbase 資料值比使用公式來計算它們更有效率。
例如,將成員 100-10、100-20 和 100-30 合併至成員 100,如下所示,比將下列公式套用至成員 100 更有效率:
100-10 + 100-20 + 100-30圖 34-1 合併範例

請參閱成員整合的範例。
簡易 Essbase 成員公式
如果 Essbase 公式很簡單,則會影響小於複雜公式的區塊儲存計算效能。區塊大小也是效能的因素。較簡單的公式是不使用跨維度參考、範圍函數、財務函數或關係函數的公式。
如果您使用簡單公式,且區塊大小通常不大,則可以將公式放置在稀疏維度或密集維度的成員上,而不會大幅影響計算效能。區塊大小越大,簡單公式對計算效能的影響就越大。
簡單的公式即為比率或百分比,且符合下列需求:
-
不參照不同維度 (稀疏或密集) 的值。例如,簡單公式無法參照「產品」->「一月」。
-
不使用範圍函數。例如,簡單公式不能使用 @AVGRANGE、@MAXRANGE、@MINRANGE 或 @SUMRANGE。
-
不使用關係或財務功能。例如,簡單公式不能使用 @ANCESTVAL、@NEXT、@PARENTVAL、@SHIFT、@ACCUM 或 @GROWTH。
複雜的 Essbase 成員公式
如果 Essbase 公式很複雜,它會影響區塊儲存計算效能,而不是較簡單的公式。若要最佳化複雜的公式,請將它們套用在密集維度、增加密度,以及使用 FIX 來縮小範圍。
如果您使用複雜的公式,您可以套用下列準則來改善效能:
-
如果可能,請將公式套用至密集維度中的成員。如果無法執行,請決定是否可以將由上而下計算變更為由下而上 (請參閱大型大綱中稀疏維度的公式 )。
-
使用 FIX 命令在計算命令檔中,僅計算必要的資料區塊。
-
增加資料庫的密度 (現有資料區塊與可能資料區塊的比例)。
複雜的公式是符合下列任一需求的公式:
-
參照不同維度 (稀疏或密集) 中的成員或成員;例如,Product -> Jan。
-
使用一或多個範圍函數,例如,@AVGRANGE、@MAXRANGE、@MINRANGE 或 @SUMRANGE。
-
使用關係或財務功能;例如,@ANCESTVAL、@NEXT、@PARENTVAL、@SHIFT、@ACCUM 或 @GROWTH。
套用至稀疏維度成員時,複雜公式會建立更多計算經常費用,進而降低效能。發生此問題是因為存在複雜公式需要 Essbase 盡可能執行計算,以及與具有複雜公式之成員相關的所有現有資料區塊。在稀疏維度成員上存在關係或財務函式會導致 Essbase 對所有區塊 (可能以及現有區塊) 執行計算,增加經常性費用。
因此,包含關係或財務函數的複雜公式會產生比不包含關係或財務函數的複雜公式更大的間接費用增加。
以下兩個範例說明複雜的公式經常費用:
-
如果立方結構有 90 個現有的資料區塊和 100 個可能的資料區塊,複雜公式的負荷就不會很大,無法讀取和寫入值的額外 10 個區塊。
-
如果立方結構有 10 個現有的資料區塊和 100 個可能的資料區塊,那麼多達 10 倍的負荷就是沒有複雜公式 (視大綱結構和其他因素而定),多達 90 個要讀取和寫入的額外區塊。
在所有情況下,現有資料區塊與可能資料區塊的比例都較低,計算效能負荷越高,效能就越慢。
大型大綱中稀疏維度的公式
若要最佳化大型 Essbase 區塊儲存立方體大綱中稀疏維度的複雜公式計算,您可以強制公式由下而上計算。
您可以使用 SET FRMLBOTTOMUP 計算命令,將大型資料庫大綱中稀疏維度的公式計算最佳化。使用此命令,您可以在稀疏成員公式上強制由下而上計算,否則會由上而下計算。請參閱由下而上計算與由上而下計算。
在由上而下公式強制由下而上計算,可以更有效率地使用 CALC ALL 和 CALC DIM 指令。複查 SET FRMLBOTTOMUP 計算命令與 CALCOPTFRMLBOTTOMUP 組態設定值的討論。
指派給稀疏維度中成員的常數值
如果您將常數指派給稀疏維度中的成員, Essbase 會自動為每個包含該成員的稀疏維度成員組合建立資料區塊。若要限制區塊建立,您可以使用 FIX。
例如,假設成員或計算命令檔公式包含下列表示式:
California = 120;在此公式中,California 是稀疏維度中的成員,而 120 是常數值。Essbase 會自動為 California 建立所有可能的資料區塊,並將值 120 指定給所有資料儲存格。您可以建立數千個資料區塊。若要改善效能,請建立不會建立不必要值的公式。
若要將稀疏維度中的常數僅指派給需要值的交集,請以類似下列範例的方式使用 FIX:
FIX(Colas,Misc,Actual)
California = 120;
ENDFIX在此範例中,Colas 是稀疏維度 Product 的成員;Actual 是密集維度 Scenario 的成員;而 Misc 是密集維度 Measures 的成員。值 120 會指派給任何 California 交集 (在 Market 維度中)、Actual (在 Scenario 維度中)、Misc (在 Measures 維度中)、Colas (在 Product 維度中) 以及 Year 維度中的任何成員,因為命令檔中未指定 Year 的特定成員。
由於 Sample Basic 僅包含兩個稀疏維度,因此此範例僅會影響一個區塊。如果有較多的稀疏維度存在, Essbase 會確保具有 California 和 Colas 之稀疏維度的所有組合資料區塊,並視需要建立區塊。在新區塊中, Essbase 會將「測量」與「案例」值 (指派值 120 以外的值) 設定為 #MISSING。
指派給稀疏維度中成員的非常數值
若要在將非常數值指派給稀疏維度的成員時,暫時避免不想要建立區塊,您可以在 Essbase 計算命令檔中使用 SET CREATEBLOCKONEQ OFF 命令。
如果您將非常數值指派給稀疏維度的成員,則會根據「在方程式上建立區塊」設定建立區塊。「方程式建立區塊」設定是在資料庫階層定義為資料庫屬性。請參閱非常數值。
在計算命令檔中,您可以暫時置換「在方程式上建立區塊」設定。當「西方」沒有值且已啟用「在方程式上建立區塊」時,請考量下列計算的影響:
West = California + 120;所有與 West 的稀疏成員交集都可以建立不需要的區塊,即使 West 所有子項的對應區塊值為 #MISSING。尤其在大型資料庫中,建立及處理不需要的區塊需要額外的處理時間。
若要在指派非常數值給稀疏維度的成員時控制區塊的建立,請使用 SET CREATEBLOCKONEQ ON | OFF 計算命令,如下列命令檔所示:
FIX (Colas);
SET CREATEBLOCKONEQ OFF
West = California + 120;
SET CREATEBLOCKONEQ ON
East = “New York” + 100;
ENDFIX因為指令檔開頭處停用「建立方程式上的圖塊」設定,所以只有當 West 子項有值時,才會建立 West 圖塊。稍後,因為「在方程式上建立圖塊」設定已啟用,所以會建立 East 的所有圖塊。
附註:
使用 SET CREATEBLOCKONEQ 只會在執行包含此命令的計算命令檔時,影響區塊的建立。此命令不會變更「在方程式上建立區塊」的整體資料庫設定。
成員公式中的跨維度運算子
設計 Essbase 區塊儲存成員公式時,請小心使用方程式左側的跨維度運算子 (->) 或密集維度的方程式。
方程式的左側
若要加快計算指令碼效能,請在計算指令碼中使用 FIX 來限定公式的使用,而不是在方程式左側包含跨維度運算子的公式。
例如,假設您要將 Sample.Basic 中的 Jan -> Sales 值增加 5%。若要透過僅計算相關成員組合來改善效能,請使用 FIX 命令:
FIX(Jan)
Sales = Sales * .05;
ENDFIX使用 FIX 命令時, Essbase 只會針對指定的成員組合計算公式,在此範例中,針對包含 Jan 的組合。
將此技巧與使用較慢的跨維度運算子方法進行比較。對於上一個範例,您會將下列公式放在資料庫大綱中的 Sales 成員上:
Sales(Sales -> Jan = Sales -> Jan * .05;)當 Essbase 在整個資料庫中循環時,它會計算每個成員組合的公式,該組合包含標記為時間 (一月、二月、三月等) 之維度的成員,但只需要計算一月的組合。
請參閱 Use the FIX Command 。
密集維度中的方程式
當您在密集維度的方程式中使用跨維度運算子時,如果下列兩個條件都適用, Essbase 將不會自動建立必要的區塊:
-
結果值來自密集維度。
-
運算元或運算元來自稀疏維度。
您可以使用下列技術來建立區塊,並避免效能問題。
-
確定結果成員來自稀疏維度,而不是來自密集維度。在此範例中,結果成員 Budget 來自稀疏維度:
FIX(Sales) Budget = Actual * 1.1; ENDFIX FIX(Expenses) Budget = Actual * .95; ENDFIX -
使用 DATACOPY 計算指令來建立並計算所需的圖塊。請參閱複製具有 DATACOPY 的現有區塊。
-
使用包含密集成員方程式的成員公式:
FIX(Sales, Expenses) Budget (Sales = Sales -> Actual * 1.1; Expenses = Expenses -> Actual * .95;) ENDFIX
管理公式執行層次
您可以設定 CALCLIMITFORMULARECURSION,避免過度循環的 Essbase 公式。
區塊儲存大綱中的公式可以互相具有相依性,因此它們會在一或多個區塊中產生公式的巢狀執行。這類公式稱為遞迴公式。有時遞迴公式會產生大型或未結束的迴圈,導致伺服器異常終止。
為了避免異常終止,您可以使用 CALCLIMITFORMULARECURSION 組態設定來停止超過預設執行層次數目的公式執行。