編寫不當的規則會對應用程式的各方面產生重大影響。以下是設計商業規則時的一些最佳作法。遵循最佳作法建議可以帶來顯著的效能優勢。
請遵循以下商業規則的重要設計準則。
規則的前 10 個最佳作法
設計商業規則時,請遵循以下最佳作法建議。這些準則可以帶來顯著的效能優勢,因為編寫不當的規則會對應用程式的各方面產生重大影響。
對於 SET 命令,請遵循以下準則:
SET CREATEBLOCKONEQ ON
和 SET CREATENONMISSINGBLK ON
。SET CLEARBLOCK EMPTY
SET CALCTASKDIMS
的規則。(Oracle Essbase 通常會自動執行此作業。)SET COPYMISSINGBLOCK OFF
應使用資料複製或稀疏成員指派來完成建立區塊。@createblockoneq
和 @createblock
函數應作為有限 Fix 陳述式內的最後手段。
避免在 Fix 陳述式中缺少維度參照 (例如,在資料複製規則中)。這會浪費處理時間、增加資源競爭,並且會針對缺少維度的所有層級建立不必要的區塊。
移除商業規則中與表單關聯的平行計算。Calc Parallel 或 Fix Parallel 應只與管理/批次規則搭配使用。
請勿建立非必要的零,因為這會導致區塊和資料暴增。請仔細複查商業邏輯並新增必要的 If 條件來檢查零。將零轉換為 #missing
。
排除對相同區塊的多次傳送;而是設定適當的外部 fix,以及根據需要的移入和移出。合併 If 陳述式,而不是在相同交集上使用與重複使用 If。
避免在等式左邊使用跨維參照。這會導致效能影響。
依指令碼中建立最多區塊到建立最少區塊的順序來聚總維度,例如,Agg (1st Most Blocks Dimension, 2nd Most Blocks Dimension, 3rd Most Blocks Dimension)。Agg 的速度比 Calc Dim 更快,是偏好使用的聚總機制。在一般使用者規則中一直使用 @ancestors
聚總至維度頂端可能會導致區塊競爭。
使用執行時期提示,而不是建立多個具有相同基礎邏輯的規則。規則越多,需要的維護越多。
使用範本來分解與重複使用商業邏輯。但是,範本不應該是具有 Fix、EndFix 的功能齊全規則。結合各種範本的規則應該有一個適當的外部 Fix,並視需要移入與移出較小的片段。
使用計算新增商業邏輯
若要將商業邏輯納入到應用程式中,您可以使用 Calculation Manager 建置計算。這可讓您建立、驗證、部署及管理可解決商業問題的複雜計算。
建立商業規則和規則集一般是為了:
執行收入模型化
執行支出模型化
計算 KPI
執行配置
Calculation Manager 包括這些物件:
規則:包含元件和範本
元件:協助您建立規則
規則集:包含可同時或循序計算的規則
範本:包括執行計算的系統範本和可由管理員設計的自訂範本
元件:協助您建置規則
若要深入瞭解如何建立計算,請參閱使用 Oracle Planning and Budgeting Cloud Service 的 Calculation Manager 來設計中的準則。
建置聚總
聚總會將應用程式向上彙整至維度中的摘要層級成員,例如 Entity 或是任何其他稀疏維度。
Calculation Manager 包括範本來協助您建立聚總。以下是如何使用範本的一些建議。
設定檢視點
設定檢視點時,只會針對所選的成員執行規則。為維度使用執行時期提示,可讓使用者在啟動規則時為這些維度指定成員值。如此一來,使用者就可以針對不同年度、案例和版本啟動規則數次,而不必在 Calculation Manager 中修改規則。
一般設定值:
完整密集聚總:如果在密集維度中的父項值未設定為動態計算,請完成此區段。通常此頁籤會保留空白。
完整稀疏聚總:請選取需要聚總的稀疏維度。選取維度的順序不相關。
局部維度聚總,密集:如果在密集維度中的父項值未設定為動態計算,請完成此區段。通常此頁籤會保留空白。
將資料聚總至當地幣別:否
聚總資料庫中缺少的值:是
最佳化「稀疏」維度上的計算:關閉
選取計算器快取的值:預設值
您是否要啟用此精靈的除錯模式?:「除錯精靈開啟」或「除錯精靈關閉」。如果您想要查看產生的指令碼,以顯示在此範本中某些設計階段提示的選擇,請選取「偵錯精靈」。
最佳作法:
為成員運用執行階段提示,例如 Entity、Scenario 與 Version。這可讓您的規則變成動態並且根據使者輸入執行。
通常不需要將 Account 與 Period 等密集維度聚總。如果是這樣,您可以將父成員設定為動態計算。然而,如果您在密集維度上有成員公式,而且未將它們設為動態計算,則會需要 Calc Dim 規則。
建置詳細計算
您可以使用 Calculation Manager 來建立、驗證、部署和管理可解決商業問題的計算。
Calculation Manager 中可計算的物件類型有三種:
規則集:包含可同時或循序計算的規則
規則:包含元件和範本
元件:包含公式元件、指令碼元件、條件元件、範圍元件,以及固定迴圈元件
最佳作法:
建置規則的第一步,是確保您瞭解商業邏輯以及此規則會套用至哪些實體或部門。例如,瞭解在規則中所包含的科目。
請務必瞭解來源與目標科目。
在您完全瞭解計算的動因後,請使用適當的物件元件或是範本以建置規則。元件和範本會協助成員選擇以協助部署規則。
為成員運用執行階段提示 (例如 Entity、Scenario 與 Version),可讓您的規則變成動態並根據使用者輸入執行。
Calculation Manager 診斷
在部署規則之前執行錯誤和警告。這可提供有用的資訊,包括:
if (<q>Earned Premium</q><>0)
。如此,零在應用程式中就不會那麼重要。範例規則問題與解決方案
範例 1:會通過資料庫多次的規則
以下規則會針對年份和期間、幣別和帳戶通過 10 次資料庫。
範例 2:只會通過資料庫一次的規則
以下規則只會通過資料庫一次。這會大幅減少受影響的儲存格總數。
範例 3:會複製與建立零的規則
在此規則中,如果等式右邊有任何元件包含 0,則衍生的成員將會是 0。聚總之後就會有很多 0。若要解決此問題,規則應該包含一個 if 陳述式,說明 if ("Earned Premium"<>0)
。如此,零在應用程式中就不會那麼重要。
範例 4:從 BSO 立方體移除零
以下公式會得到原始值,或若為 0,則會變更為 #missing。
"DenseMbr" = "DenseMbr" * "DenseMbr"/"DenseMbr";
"SparseMbr" = "SparseMbr" * "SparseMbr"/"SparseMbr";
若要解決此問題,請建立一個利用此公式的規則。請使用包含最少成員的稀疏維度 (例如年度、案例或版本),因為需要對每個成員進行計算。
Fix(idescendants(Entity),@levmbrs(Accounts,0),@levmbrs(Period,0),@idescendants(Custom dimensions), @levmbrs(Years,0),@levmbrs(Versions)) Actual=Actual*Actual/Actual; Fix("Actual") CLEARBLOCK EMPTY: Endfix Endfix
之後請記得進行重新建立結構。否則,將不會刪除空白區塊。