設計商業規則的最佳作法

編寫不當的規則會對應用程式的各方面產生重大影響。以下是設計商業規則時的一些最佳作法。遵循最佳作法建議可以帶來顯著的效能優勢。

請遵循以下商業規則的重要設計準則。

規則的前 10 個最佳作法

設計商業規則時,請遵循以下最佳作法建議。這些準則可以帶來顯著的效能優勢,因為編寫不當的規則會對應用程式的各方面產生重大影響。

  1. 對於 SET 命令,請遵循以下準則:

    • 在規則頂端,請勿使用 SET CREATEBLOCKONEQ ONSET CREATENONMISSINGBLK ON
    • 請勿在一般使用者規則中使用像這樣的管理類型命令,因為這會需要重新建立結構。
      SET CLEARBLOCK
                        EMPTY 
    • 避免使用或測試使用 SET CALCTASKDIMS 的規則。(Oracle Essbase 通常會自動執行此作業。)
    • 資料複製規則應包含以下內容,以避免複製 Fix 陳述式中的空白區塊。
      SET COPYMISSINGBLOCK
                        OFF 
  2. 應使用資料複製或稀疏成員指派來完成建立區塊。@createblockoneq@createblock 函數應作為有限 Fix 陳述式內的最後手段。

  3. 避免在 Fix 陳述式中缺少維度參照 (例如,在資料複製規則中)。這會浪費處理時間、增加資源競爭,並且會針對缺少維度的所有層級建立不必要的區塊。

  4. 移除商業規則中與表單關聯的平行計算。Calc Parallel 或 Fix Parallel 應只與管理/批次規則搭配使用。

  5. 請勿建立非必要的零,因為這會導致區塊和資料暴增。請仔細複查商業邏輯並新增必要的 If 條件來檢查零。將零轉換為 #missing

  6. 排除對相同區塊的多次傳送;而是設定適當的外部 fix,以及根據需要的移入和移出。合併 If 陳述式,而不是在相同交集上使用與重複使用 If。

  7. 避免在等式左邊使用跨維參照。這會導致效能影響。

  8. 依指令碼中建立最多區塊到建立最少區塊的順序來聚總維度,例如,Agg (1st Most Blocks Dimension, 2nd Most Blocks Dimension, 3rd Most Blocks Dimension)。Agg 的速度比 Calc Dim 更快,是偏好使用的聚總機制。在一般使用者規則中一直使用 @ancestors 聚總至維度頂端可能會導致區塊競爭。

  9. 使用執行時期提示,而不是建立多個具有相同基礎邏輯的規則。規則越多,需要的維護越多。

  10. 使用範本來分解與重複使用商業邏輯。但是,範本不應該是具有 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 診斷

在部署規則之前執行錯誤和警告。這可提供有用的資訊,包括:

  • 通過資料庫的數目
  • 任何必要的警告
  • 關於區塊數目以及是否缺少維度的資訊
  • 任何需要最佳化的規則
  • 如果等式右邊有任何元件包含零,則衍生的成員將會是 0。則聚總之後就會有很多 0。
  • 若要解決此問題,規則應該包含一個 if 陳述式,說明 if (<q>Earned Premium</q><>0)。如此,零在應用程式中就不會那麼重要。

範例規則問題與解決方案

範例 1:會通過資料庫多次的規則

以下規則會針對年份和期間、幣別和帳戶通過 10 次資料庫。

範例規則 – 多次通過資料庫

範例 2:只會通過資料庫一次的規則

以下規則只會通過資料庫一次。這會大幅減少受影響的儲存格總數。

修訂的規則 – 單次通過資料庫

範例 3:會複製與建立零的規則

在此規則中,如果等式右邊有任何元件包含 0,則衍生的成員將會是 0。聚總之後就會有很多 0。若要解決此問題,規則應該包含一個 if 陳述式,說明 if ("Earned Premium"<>0)。如此,零在應用程式中就不會那麼重要。

會複製與建立 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

之後請記得進行重新建立結構。否則,將不會刪除空白區塊。