識別要最佳化的階段之後,編輯商業規則。確定對每個階段指定最佳邏輯和條件。
考量下列用來計算年累計科目的商業規則定義,然後透過「產品」和「實體」維度來聚總值:
SET UPDATECALC OFF; /* PASS 1 BEGINS*/ FIX ("BaseData","Plan","FY17", "FY17" "FY16") "BU Version_1"( IF(@ismbr("Jan")) "4110_YTD" = "4110"; "4120_YTD" = "4120"; "4130_YTD" = "4130"; "4140_YTD" = "4140"; "4150_YTD" = "4150"; Else "4110_YTD"="4110" + @prior("4110_YTD"); "4120_YTD"="4120" + @prior("4120_YTD"); "4130_YTD"="4130" + @prior("4130_YTD"); "4140_YTD"="4140" + @prior("4140_YTD"); "4150_YTD"="4150" + @prior("4150_YTD"); Endif) /* PASS 1 ENDS -- PASS 2 BEGINS*/ Agg("Entity","Product"); /* PASS 2 ENDS */ ENDFIX
在 Calculation Manager 中執行此規則時 (請參閱識別規則最佳化的區域),日誌訊息頁籤會在已選取僅限階段時顯示類似以下的訊息:
日誌檔中的資訊分析指示階段 1 花費 99.995% 的執行時間 (79.235 秒),階段 2 僅花費 0.005%。
如果您取消選取僅限階段,將會顯示與下列圖解所示類似的區塊、讀取和寫入資訊:
前面的規則定義具有下列問題:
它對「實體」和「產品」維度沒有 FIX,因此對「實體」和「產品」維度的所有層級執行所有規則。
階段 1 不必要地計算較高層級。階段 2 中的 Agg 函數會執行這項作業,並覆寫階段 1 中完成的作業。
指令碼可以依下列方式最佳化:
SET UPDATECALC OFF; FIX ("BaseData","Plan","FY17") /* PASS 1 BEGINS*/ Fix(@LEVMBRS("Entity",0), @LEVMBRS("Product",0)) "BU Version_1"( IF(@ismbr("Jan")) "4110_YTD" = "4110"; "4120_YTD" = "4120"; Else "4110_YTD"="4110" + @prior("4110_YTD"); "4120_YTD"="4120" + @prior("4120_YTD"); Endif) ENDFIX /* PASS 1 ENDS -- PASS 2 BEGINS*/ Agg("Entity","Product"); /* PASS 2 ENDS */ ENDFIX
在 Calculation Manager 中執行已更新的規則時 (請參閱識別規則最佳化的區域),日誌訊息頁籤會顯示類似以下的訊息:
日誌檔中的資訊分析指示相較於前次執行,階段 1 花費的執行時間少 15.901 秒。
如果您取消選取僅限階段,將會對階段 1 顯示與下列圖解所示類似的區塊、讀取和寫入資訊:
比較區塊、讀取和寫入資訊與最佳化前的類似資料指示商業規則的處理統計資料全面降低。