可設定的計算最佳作法

使用可設定的計算時,可善用這些最佳作法。

計算概念

這些是建立計算的基本概念:

  • 資料區塊

  • 基本指令碼格式

  • 由下至上與由上至下計算

  • 區塊與儲存格模式

資料區塊

下圖顯示來自範例應用程式的「資料區塊」。


範例資料區塊
  • 儲存的密集維度成員構成「資料區塊」。上述範例應用程式的區塊大小為 2 (「銷售」和「現金」) x 8 位元組 = 16 位元組。

  • 唯一的稀疏維度成員組合構成 INDEX 並指向「資料區塊」。在上述範例應用程式中,共有 2 (實際、預算) x 2 (FY17、FY18) x 2 (1 月、2 月)= 8 個索引。


範例規則索引

在 Essbase 區塊儲存選項 (BSO) 資料庫中,有一個由已儲存之密集維度成員組成的區塊。在 Financial Consolidation and Close 中,「科目」預設是唯一「密集」維度。

在此範例中,「科目」維度是「密集」,並且具有 1977 個儲存的成員。這指出單一 BSO Database Consol 的區塊具有 1977 個儲存格,且各代表一個「科目」成員。

區塊大小 (以位元組為單位) 將是:

  • 區塊大小 (位元組) = 科目中儲存的成員數目 * 8

  • 區塊大小 (位元組) = 1977 * 8 = 15,816 位元組


資料庫特性範例

附註:若要檢視資料庫特性,請從 Calculation Manager 中選取動作,然後選取資料庫特性

建立資料區塊的最佳作法

在執行可寫入至資料儲存格的可設定的計算時,要寫入至資料庫的資料必須存在資料區塊。

資料區塊由儲存的「稀疏」和「密集」維度成員組成。

將會針對每個儲存的稀疏維度組合建立個別的資料區塊。密集維度中的成員等於一個區塊。

當您建立可設定的計算時,您可能需要建立額外的區塊來儲存計算結果以及解決缺少資料的問題。

您可以啟用「自動建立區塊」選項,讓系統自動建立缺少的區塊。請參閱對可設定的計算啟用自動建立區塊

如果您在您的可設定的計算中使用「由下而上」處理,您應該手動建立資料區塊,或者確定資料區塊已經存在。

您可以使用下列其中一個方法來手動建立資料區塊:

  • 在資料載入處理期間指派資料。例如,將 "Zero" 寫入單一「密集」成員交集,然後在寫入 "#missing" 以在區塊建立之後清除 "Zero"。


    建立區塊的範例指令碼
  • 使用 Essbase DATACOPY 命令,將來源中的所有區塊複製至目的地,包括缺少的儲存格在內。不過,此方法可能會潛在建立不需要的區塊以及降低整合程序速度。

何時使用自動建立區塊

「自動建立區塊」這個提供的設定可在「可設定計算」期間建立缺少的區塊。

此設定具有大幅效能影響,因為它使用潛在區塊演算法來搜尋整個資料庫是否有區塊,並相應地建立缺少的區塊 (若不存在)。

只有在您完全確定其他區塊建立技術都不適當時,才使用此設定。

@CALCMODE(BOTTOMUP) 函數 (若用於插入點) 與「自動建立區塊」互斥。

為 @SHIFT 和 @PRIOR 函數建立目標資料區塊

當您在計算指令碼中使用 @SHIFT 或 @PRIOR 函數時,目標資料區塊必須存在,然後您才能執行計算。目標資料區塊必須為另一次計算或資料載入的一部分,否則,必須使用 @CREATEBLOCK 函數加以建立。

使用案例範例:

資料存在於 Actual、FY16、P12、ML_HFM 中。該資料是從 Oracle Hyperion Financial Management 提取,並未載入至 Actual、FY16、P1、ML_HFM 中。該資料必須從前一年度的 P12 期間擷取,且沖銷項目應反映在 Actual、FY17、P1、ML_HFM_Calc 中。

計算指令碼如下所示:


資料區塊範例計算指令碼

未記入日記帳 (P13 中的"FCCS_Journal Input")。預期此程式碼會採取下列路徑,並以 "ML_HFM_Calc" 作為稀疏成員錨點:

@SHIFT("P12"->"ML_HFM", -1, @CHILDREN("Years"));

然而,它傳回 #MISSING。

解決方法 1:


資料區塊解決方法 1

解決方法 2:


資料區塊解決方法 2

ClearEmptyBlocks 規則準則

ClearEmptyBlocks 商業規則可協助您清除 Consol 立方體以找出任何空白的資料區塊。空白資料區塊可以隨著下列各項一起產生:

  • 產生空白區塊的 OnDemand 規則執行。例如,使用 @CREATEBLOCK 函數,然後可能永遠沒使用某個產生的空白資料區塊。

  • 可能因 TOPDOWN 計算而有區塊洩漏 (可能由於使用稀疏錨點而不是使用 @CALCMODE(BOTTOM UP) 來指派 #MISSING) 的插入點程式碼 (例如 FCCS_20)

  • Financial Consolidation and Close 系統計算

建議的 ClearEmptyBlocks 規則執行作法

  • 當指令碼處於開發階段時,最佳作法是在完成任何 OnDemand 規則/插入點測試之後,再執行規則。ClearEmptyBlocks 規則會協助測量開發中計算執行前後的區塊統計資料。

  • 在生產階段,請於完成指定年度一整年的整合之後,再執行規則。

您可以排定 EPM Automate 指令碼在每個週末的下班後執行:

call epmautomate runbusinessrule ClearEmptyBlocks Scenario ="<Scenario>" Year = "<Particular Year>"
Period = "ILv10Descendants(YearTotal)"
call epmautomate restructurecube Consol

備註:此活動的排程必須與「每日維護週期」保持至少 3-4 小時的間隔。

基本指令碼格式

下圖顯示範例「計算指令碼」格式。


「計算指令碼」格式

寫入可設定計算

下圖顯示「整合程序」的「當地幣別」頁籤上的「可設定計算」規則。


可設定計算畫面範例 1

下圖顯示「整合程序」的「當地幣別」頁籤中的對應「可設定計算」規則。


可設定計算範例 2

可設定計算可協助您執行涉及三種資料類別的自訂計算:

  • 未轉換的資料:實體幣別 + (FCCS_Entity Input 或 FCCS_Entity Consolidation)

  • 轉換的資料:父項幣別 + (FCCS_Entity Input 或 FCCS_Entity Consolidation)

  • 抵銷的資料:父項幣別 + FCCS_Elimination

瞭解「幣別」與「整合」組合非常重要,而此組合可在正確的「可設定計算規則」範本 (也稱為「插入點」) 內寫入可設定計算。

例如,只有在 FCCS 預設轉換和 FX 計算已處理 FCCS_30 中需要特別注意的資料時,才會假設使用 FCCS_30_After Opening Balance Carry Forward_Translated。

寫入可設定計算範例

請考慮「區塊建立」問題範例,以及使用不同的方式來解決相同的計算。

使用案例:

  • 在兩個科目中新增值:載入至 FCCS_Managed Data、FCCS_Mvmts_NetIncome、FCCS_Local GAAP 和「無產品」的 Warehouse_Stock 和 Showroom_Stock

  • 將計算結果儲存至 FCCS_Other Data、FCCS_Mvmts_NetIncome、FCCS_Local GAAP 和「無產品」處的科目 Inventory_Stock

  • 使用 FCCS_10 可設定計算

方式 1:使用無成員區塊 (錨點)

1.   FIX ("FCCS_Entity Input", "Entity Currency")
2.      FIX ("FCCS_Other Data", "FCCS_Mvmts_NetIncome", "FCCS_No Intercompany", "No Product",
"FCCS_Local GAAP")
3.      " Inventory_Stock " = "FCCS_Managed Data"->" Warehouse_Stock " + "FCCS_Managed Data"->
"Showroom_Stock ";

4.      ENDFIX
5.      ENDFIX

此方式的缺點:

  1. 這是密集計算,請考慮 Inventory_Stock 是左側的科目。雖然已正確地寫入計算,但是將看不到計算結果,如果 FCCS_Other Data 處沒有先前的區塊,並且未關聯其他 FIX 成員來保留結果。

  2. 無法強制條件計算限制,例如,IF..ELSE..ENDIF。

  3. 需要因應措施,將零資料區塊手動引入至上述交集。

方式 2:使用密集成員區塊 (錨點)

1.   FIX ("FCCS_Entity Input", "Entity Currency")
2.      FIX ("FCCS_Other Data", "FCCS_Mvmts_NetIncome", "FCCS_No Intercompany", "FCCS_No Intercompany",
"FCCS_Local GAAP")

3.      " Inventory_Stock "(
4.      "FCCS_Managed Data"->" Warehouse_Stock " + "FCCS_Managed Data"->" Showroom_Stock ";
5.      )
6.      ENDFIX
7.      ENDFIX

此方式的缺點:

  1. 這是密集計算,因為成員區塊 Inventory_Stock 是科目。雖然已正確地寫入計算,但是將看不到計算結果,如果 FCCS_Other Data 處沒有先前的區塊,並且未關聯其他 FIX 成員。

  2. 需要因應措施,將零資料區塊手動引入至上述交集。

方式 3:使用稀疏成員區塊 (錨點)

1.   FIX ("FCCS_Entity Input", "Entity Currency")
2.      FIX ("FCCS_Mvmts_NetIncome", "FCCS_No Intercompany", "No Product", "FCCS_Local GAAP")
3.      "FCCS_Other Data" (
4.      " Inventory_Stock " = "FCCS_Managed Data"->" Warehouse_Stock " + "FCCS_Managed Data"->
"Showroom_Stock ";

5.      )
6.      ENDFIX
7.      ENDFIX

此方式的優點:

這是稀疏計算,因為成員區塊 FCCS_Other Data 是本身為稀疏維度的「資料來源」。計算會建立區塊。

此方式的缺點:

成員區塊計算是由上而下執行,因為正在使用跨維運算子。

方式 4:使用稀疏成員區塊和由下至上計算

1.   FIX ("FCCS_Entity Input", "Entity Currency")
2.      FIX ( "FCCS_Mvmts_NetIncome", "FCCS_No Intercompany", "No Product", "FCCS_Local GAAP")
3.      "FCCS_Managed Data"(@CALCMODE(BOTTOMUP);
4.      "FCCS_Other Data"-> "Inventory_Stock " = " Warehouse_Stock " + " Showroom_Stock "; 5.        )
6.      ENDFIX
7.      ENDFIX

此方式的優點:

  1. 這是稀疏計算,因為成員區塊 FCCS_Managed Data 是本身為稀疏維度的「資料來源」。

  2. 成員區塊計算是由下至上執行。

  3. FCCS_Managed Data 是此計算的來源。只有在來源處存在資料區塊時,才會在 FCCS_Other Data 處建立產生的區塊。

  4. 計算右側不需要跨維運算子。

  5. 需要將計算明確地指定為由下至上,因為此指派左側已有跨維運算子。

區塊與儲存格模式計算

  • BLOCK 模式:(預設模式) 在此計算模式中,Essbase 會將儲存格群組至一個區塊,同時計算每個群組中的儲存格。

  • 區塊計算模式快速,但您需要仔細考量區塊內的資料相依性,確定產生的資料準確。

  • CELL 模式:在此計算模式中,Essbase 會循序計算每個根據大綱的儲存格,並遵循計算順序。

  • 儲存格計算模式因明顯原因而較慢。不過,它可確定有關資料相依性的準確結果。

  • Essbase 編譯公式時,會在應用程式日誌檔中列印一則訊息來說明公式的執行模式,其與下列訊息類似:

    Formula on member Profit % will be executed in CELL and TOPDOWN mode.

Essbase 除非使用下列這類函數,否則在計算公式時會使用「區塊」模式:

  • @ANCEST

  • @CURRMBR

  • @ISMBR on a dense member

  • @MDANCESTVAL

  • @MDPARENTVAL

  • @MDSHIFT

  • @NEXT

  • @PARENT

  • @PARENTVAL

  • @PRIOR

  • @SANCESTVAL

  • @SPARENTVAL

  • @SHIFT

  • @XWRITE

若要手動引出「區塊」模式,請使用 @CALCMODE(BLOCK)。請確定密集區塊內沒有資料相依性。

區塊模式範例

根據月份,執行下列計算:

  • 一月 - Sales SynergiesReturns and Allowances 子項的總和
  • 二月 - Sales SynergiesReturns and Allowances 子項的總和 - 乘上 20%
  • 其餘月份 - Sales SynergiesReturns and Allowances 子項的總和 - 乘上 10%

區塊模式

1.   FIX ("FCCS_Entity Input", "Entity Currency")
2.      FIX ("Sales Synergies", "FCCS_No Intercompany", "FCCS_Managed Data", "No Product", "FCCS_Local GAAP")
3.      "FCCS_Mvmts_NetIncome" (
4.      IF (@ISMBR("Jan"))
5.      @SUM(@Children("Returns and Allowances"));
6.      ELSEIF (@ISMBR("Feb"))
7.      @SUM(@Children("Returns and Allowances")) * 0.2;
8.      ELSE
9.      @SUM(@Children("Returns and Allowances")) * 0.1;
10.     ENDIF
11.     )
12.     ENDFIX
13.     ENDFIX

儲存格模式與引出的區塊模式

根據月份,執行下列計算:

一月 - Sales SynergiesReturns and Allowances 子項的總和

二月 - Sales SynergiesReturns and Allowances 子項的總和 - 乘上 20%

其餘月份 - Sales SynergiesReturns and Allowances 子項加上前一個期間的 Sales Synergies 的總和。請將整個結果乘上 10%。

CELL 模式

1.   FIX ("FCCS_Entity Input", "Entity Currency")
2.      FIX ("Sales Synergies", "FCCS_No Intercompany", "FCCS_Managed Data", "No Product", "FCCS_Local GAAP")
3.      "FCCS_Mvmts_NetIncome" (
4.      IF (@ISMBR("Jan"))
5.      @SUM(@Children("Returns and Allowances"));
6.      ELSEIF (@ISMBR("Feb"))
7.      @SUM(@Children("Returns and Allowances")) * 0.2;
8.      ELSE
9.      (@SUM(@Children("Returns and Allowances")) + @PRIOR("Sales Synergies")) * 0.1;
10.     ENDIF
11.     )
12.     ENDFIX
13.     ENDFIX

區塊模式

1.   FIX ("FCCS_Entity Input", "Entity Currency")
2.      FIX ("Sales Synergies", "FCCS_No Intercompany", "FCCS_Managed Data", "No Product", "FCCS_Local GAAP")
3.      "FCCS_Mvmts_NetIncome" (@CALCMODE(BLOCK);
4.      IF (@ISMBR("Jan"))
5.      @SUM(@Children("Returns and Allowances"));
6.      ELSEIF (@ISMBR("Feb"))
7.      @SUM(@Children("Returns and Allowances")) * 0.2;
8.      ELSE
9.      (@SUM(@Children("Returns and Allowances")) + @PRIOR("Sales Synergies")) * 0.1;
10.     ENDIF
11.     )
12.     ENDFIX
13.     ENDFIX

客戶 A 使用案例

  • 根據日記帳調整,將從「損益表」科目的 FDMEE 中載入的「受管理資料」重新分類為不同的計算「資料來源」成員

  • 整年的效能變慢:180 分鐘

客戶 A - 指令碼範例


客戶 A 使用案例

客戶 A - 指令碼改良

  • 使用 @REMOVE 移除「科目」,而不對「科目密集」維度使用 @ISMBR 檢查

  • 由下至上處理

  • 使用 Boolean @ISLEV 而非 @LEV 和 @CURRMEMBER

  • 效能改良 90%

客戶 B 使用案例

  • 目標 - 將資料從一些「來源」實體移至「目標」實體

  • 尚未計算資料

  • 效能變慢 - 3.5 小時

客戶 B - 指令碼範例


客戶 B 使用案例

客戶 B - 指令碼改良

  • 使用「複製」來建立目標區塊

  • 計算保持由上而下

  • 只對一個目標「自訂」維度成員執行計算

  • 使用 @LIKE 使指令碼成為通用的

  • 計時從 3.5 小時減少為幾分鐘

客戶 C 使用案例

  • 根據透過使用者介面輸入的 FCCS_Closing_Balance_Input,來重新分類變動

  • 效能變慢 - 15 分鐘


客戶 C 使用案例

客戶 C - 指令碼範例 (續)


客戶 C 使用案例 (續)

客戶 C - 指令碼改良

  • 從 FIX 移除限制成員

  • 由下至上處理

  • 檢查邊緣案例

  • 先檢查一般案例。

  • 效能改良 40%

客戶 D 使用案例

  • 重新分類從 Hyperion Financial Management 的資料來源 ML_HFM 提取的資料,並將它儲存於 ML_HFM_Calc 資料來源成員

  • 單一期間的效能變慢 - 24 小時

  • 未繫結資料,因為未如預期建立區塊

客戶 D - 指令碼範例


客戶 D 使用案例

客戶 D 使用案例 (續)

客戶 D - 指令碼改良

  • 使用 @REMOVE 移除「科目」,而不對「科目密集」維度使用 @ISMBR 檢查

  • 由下至上處理

  • 使用 Boolean @ISLEV 而非 @LEV 和 @CURRMEMBER

  • 效能改良 90%

客戶 E 使用案例

  • 在目前期間變更的「整合」方法想要移除較早期間的所有累計 CTA 和抵銷處理

  • 效能變慢 - 90 分鐘


客戶 E 使用案例

客戶 E - 指令碼改良

  • 在目標中使用 Data_Input,避免有關寫入至 FCCS_Intercompany_Eliminations 的驗證錯誤

  • 對具有「期末餘額輸入」的遍訪 ICP 成員使用由下至上

  • 計時從 90 分鐘減少為 11 分鐘

最佳作法摘要

  • 由下至上處理

  • 使用 @REMOVE 移除科目,而不對「科目」密集維度使用 @ISMBR 檢查

  • 使用 Boolean @ISLEV 而非 @LEV 和 @CURRMBR

  • 從 FIX 移除限制成員

  • 如果錨點法無效,則使用「複製」來建立目標區塊

  • 只對一個目標「自訂」維度成員執行計算

  • 使用 @LIKE 使指令碼成為通用的

  • 避免自動區塊建立

  • 檢查邊緣案例

  • 先檢查一般案例。

效能的最佳作法

多次傳遞至 Essbase

每次在規則中使用 FIX 陳述式時,每個 FIX 都會觸發個別傳遞至資料庫。透過不要包含太多個別的 FIX 陳述式來避免多次傳遞至 Essbase 是提升效能的最佳作法。

範例 - 多次傳遞至 Essbase

FIX("Entity Currency", "FCCS_Entity Input", …..)
        FIX("FCCS_Data Input", … )
                //Calculations;
        ENDFIX
        
        FIX("FCCS_Other Data", … )
                //Calculations;
        ENDFIX

ENDFIX

範例:建議變更以避免使用 IF...ENDIF 進行多次傳遞

FIX("Entity Currency", ...)
        FIX( @List("FCCS_Data Input", "FCCS_Other Data"), … )
                "FCCS_Entity Input"( @CALCMODE(BOTTOMUP);
                        IF(@ISMBR("FCCS_Data Input")
                                //Calculations for "FCCS_Data Input";
                        ELSE                    
                                //Calculations "FCCS_Other Data";
                        ENDIF   
                )
        ENDFIX
ENDFIX

範例:建議變更以避免使用成員區塊進行多次傳遞

FIX("Entity Currency", ...)
        FIX( @List("FCCS_Data Input", "FCCS_Other Data"), … )
                "FCCS_Entity Input"( @CALCMODE(BOTTOMUP);
                        IF(@ISMBR("FCCS_Data Input")
                                //Calculations for "FCCS_Data Input";
                        ELSE                    
                                //Calculations "FCCS_Other Data";
                        ENDIF   
                )
        ENDFIX
ENDFIX

範例:多個單獨的巢狀 FIX 陳述式導致多次傳遞至 Essbase

FIX("FCCS_Elimination")
        FIX("No Movement")
                Fix(@Relative("ICP_Category",0))
                "Custom_Elimination" (
                        "InterSales"="Other_InterAcct"->"FCCS_Intercompany Eliminations";
                )
                ENDFIX  /*Intercompany*/
        ENDFIX  /*Movement*/
 ENDFIX  /*Consolidation*/

範例:重新撰寫以避免多次傳遞

FIX ("FCCS_Elimination",@Relative("ICP_Category A",0), "No Movement")
        "Custom_Elimination" ( @CALCMODE(BOTTOMUP);
                "640102" = "WA_Intercompany Account"->"FCCS_Intercompany Eliminations";
        )
ENDFIX

寫入至受限制成員

在此範例中,假設您要將 "FCCS_Intercompany Eliminations" > "FCCS_Eliminations" > "Mvmts_NewBusiness" 重新分類為 "Data Input" > "FCCS_Eliminations" > "Mvmts Reclass"。

不過,由於 "FCCS_Intercompany Eliminations" 是資料來源維度的受限制成員,如果您嘗試對此成員使用 FIX,系統會傳回錯誤。

您可以嘗試撰寫下列陳述式,以強制系統使用「由上而下」處理。

範例:利用「由上而下」處理使用受限制成員

FIX("Data Input", … ) 
        "FCCS_Elimination" (
                 "Mvmts_Reclass" = -1 * "FCCS_Intercompany Eliminations"->"Mvmts_NewBusiness" ; 
        )               
ENDFIX

範例:使用 BottomUp 處理重新撰寫陳述式

FIX("FCCS_IntercomanyEliminations", "Mvmts_NewBusiness", … )
        "FCCS_Elimination" ( @CALCMODE(BOTTOMUP);
                 "Mvmts_Reclass"->"Data Input" = -1 * "Mvmts_NewBusiness" ; 
        )               
ENDFIX

請注意,在此範例中,您在 "FCCS_Intercompany Eliminations" 上具有 FIX,但是在成員區塊中使用 "Data Input" 進行置換,驗證期間系統將不會傳回錯誤。

根據 UDA 在「期末餘額輸入」和「計算變動」中輸入資料

在此範例中,假設您要將「期末餘額輸入」移動到特定的「變動」成員中。您可以使用以下要求,撰寫自訂計算:

  • 針對「由下而上」處理,對稀疏維度成員組合使用 FIX。「由下而上」處理和區塊相關,稀疏維度則定義區塊。

  • 使用者定義屬性 (UDA) 最好與 UDA 科目上的 FIX 一起處理,以執行相同的計算。

  • 以下範例假設所有指定的 UDA 都在 ASSET / LIABILITY / EQUITY 科目類型中定義。

  • 層級 0 科目維度成員上的 FIX 相對於 FCCS_Net Income

  • 使用布林函數,而非使用 @LEV 計算成員層級,以改善效能

  • 使用布林函數 @ISDESC 檢查成員是否是子代。一律是分葉成員。

範例:根據 UDA 在期末餘額輸入中輸入資料和計算變動


適用於使用 UDA 之期末餘額輸入的可設定計算範例

使用 IF 條件的最佳作法

以下是您使用 IF 撰寫條件陳述式的一般範例。在此範例中,您要在一月執行特定程序,但要在其他月份執行不同的程序。如果所撰寫的計算如下,系統將對一月以外的所有期間進行 12 次檢查,因為一律會先檢查一月,然後分支至 ELSE 子句。

範例:IF 陳述式

FIX ("Entity Currency", "FCCS_Entity Input" … )
        "Mvmt_Increase01" ( @CALCMODE(BOTTOMUP);
                IF(@ISMBR("Jan"))
                                "FCCS_ClosingBalance_Input" - @PRIOR("FCCS_ClosingBalance_Input"->                   "Dec", 1, @RELATIVE("Years", 0));
                ELSE
                                "FCCS_ClosingBalance_Input" - "FCCS_TotalOpeningBalance";
                ENDIF
        )
ENDFIX

範例:使用 NOT IF 重新撰寫

您可以重新撰寫 IF 陳述式以便 12 個期間中有 11 個將以 IF 子句執行,然後退出條件分支。只有一月才會在 ELSE 子句中執行一次。

FIX ("Entity Currency", "FCCS_Entity Input", …)         
        "FCCS_ClosingBalance_Input"(@CALCMODE(BOTTOMUP);
        IF (NOT @ISMBR("Jan"))
                "Mvmt_Increase01" = "FCCS_ClosingBalance_Input" - "FCCS_TotalOpeningBalance";
        ELSE
                IF(NOT @ISMBR(@MEMBERAT(@CHILDREN("Years"),1)))
              "Mvmt_Increase01" = "FCCS_ClosingBalance_Input" - "FCCS_ClosingBalance_Input"->"Dec"->            @MEMBER(@PREVSIBLING(@CURRMBR("Years")));
                  ENDIF;
         ENDIF;
        )
ENDFIX

將最上層自訂成員系統計算選項與擴展維度搭配使用

對於使用者定義的自訂維度,服務管理員可以使用自訂維度的最上層成員,而不是所有層級 0 成員,來處理系統計算,以加快效能。您可以針對套用的選項選取特定自訂維度。請參閱系統計算

如果您使用擴展維度環境,請確保使用「自訂最上層成員」不會降低效能,您可以在整合開始時,根據「實體輸入」和「實體幣別」資料,在「NoCustomX」建立一個空白區塊,並使用該區塊執行所有計算。例如,如果您在產品自訂維度中有 1000 個「自訂」成員,您可以建立一個區塊 @"No Product",在 "No Product" 上建立 FIX,並使用「由下而上」處理。然後,系統不需要對產品維度的所有 1000 個成員執行迴圈,您可以使用「產品總計」作為總值來提高整體效能。

下例顯示計算指令碼的範例:


自訂最上層成員的可設定計算範例

使用「由下而上」處理計算 FCCS_10 成員區塊

  1. 使用 @CALCMODE(BOTTOMUP) 並結合成員區塊計算。

  2. 如果 FIX 成員在計算中相同,會將多個 FIX...ENDFIX 中的計算組合成單一 FIX...ENDFIX。

    如果只是單一計算,請避免在 FIX 中使用 FIX。

下列範例顯示使用「由上而下」處理來執行計算,接著是一個經過修改的範例,在右側使用「由下而上」處理來升級查詢處理。

範例:使用由上而下處理執行 FCCS_20 C1_Validation
可設定的計算範例 C1 由上而下

範例:使用「由下而上」處理執行 FCCS_20 C1_Validation


可設定的計算範例 C1 由下而上

計算相依性

在「可設定的計算」(插入點) 和「隨需規則」中完成計算時,您應該避免實體之間的相依性。如果您嘗試在計算中參照 Entity A 的值,但尚未計算 Entity A,則 Entity A 不會有值。

例如,如果您嘗試將資料從 "Entity A" > "ICP_B" > "Entity Currency" (來源) 重新分類至 "Entity B" > "ICP_A" > "Entity Currency" (目標),則平行計算 Entity A 和 Entity B 這兩個實體時,Entity A (來源) 中的資料可能無法使用,因為它可能尚未進行計算。

在這類情況下,應該先計算 Entity A,再計算相依 Entity B,嘗試重新分類。