解決計算指令碼驗證警告

當您在驗證程序中建立和驗證使用 Essbase 計算指令碼的「可設定的計算」(插入規則) 或「隨需規則」時,Financial Consolidation and Close 會提供有關執行規則時可能導致效能降低之問題的警告。若要查看這些警告,請選取 Calculation Manager 中的錯誤與警告頁籤,然後按一下綠色按鈕以執行指令碼診斷。

在下列螢幕擷取畫面中,以綠色醒目提示的儲存格是來自 Financial Consolidation and Close 的警告。其他顯示的警告則來自 Calculation Manager。


Calc Manager 中的規則驗證

註:

Financial Consolidation and Close 規則驗證警告也會顯示在建議模組中。請參閱檢視應用程式建議

系統會根據指令碼的行號排序並顯示警告訊息。

若要檢視 Calculation Manager 中的規則驗證警告,請執行下列動作:

  1. 開啟 Calculation Manager,然後選取錯誤與警告頁籤。
  2. 按一下執行圖示以顯示警告。

以下各節提供如何解決規則驗證警告的詳細資料。

使用錨點的 Calc Manager 指令碼驗證

請遵循下列準則,以在 Calc Manager 指令碼中正確使用錨點:

對於非 DSO 應用程式

  • 如果您的 FIX 區塊只有一個「變動」成員,則 Financial Consolidation and Close 會建議您使用該「變動」成員作為錨點。
  • 如果 FIX 區塊中有多個「變動」成員,您就不能選擇「變動」作為錨點。在這種情況下,您可以從其他「稀疏」維度中選擇一個成員作為錨點。
    • 請注意,對於可設定的計算 (插入點),您無法從「案例」、「年度」、「期間」、「實體」或「檢視」中選擇成員作為錨點。

    • 若為隨需規則 (ODR),您無法從「案例」、「年度」、「期間」、「實體」、「整合」或「幣別」中選擇成員作為錨點。

  • 避免使用來自「密集」維度的成員作為錨點。如果是非 DSO 應用程式,「科目」是「密集」維度。若為「密集」成員區塊,CALCMODE(BOTTOMUP) 將不具有任何效能優勢。

對於 DSO 應用程式

  • 在 DSO 應用程式中,「變動」是「密集」維度。如果您要從非 DSO 變動到 DSO 應用程式,則應確定變動維度中的成員不是您的錨點。您可以從科目維度中選擇一個成員作為成員區塊的錨點,因為科目在 DSO 應用程式中是「稀疏」維度。

  • 如果您無法選擇「科目」成員作為錨點,請從任何其他「稀疏」維度中選擇一個成員作為錨點。

    • 請注意,對於可設定的計算 (插入點),您無法從「案例」、「年度」、「期間」、「實體」或「檢視」(密集) 中選擇成員作為錨點。

    • 若為隨需規則 (ODR),您無法從「案例」、「年度」、「期間」、「實體」、「整合」或「幣別」中選擇成員作為錨點。

  • 避免使用來自「密集」維度的成員作為錨點。在 DSO 應用程式中,變動和期間是「密集」維度。若為「密集」成員區塊,CALCMODE(BOTTOMUP) 將不具有任何效能優勢。

以下是非 DSO 應用程式的可設定計算 (插入規則) 範例。每一行以 # 表示,即行號。

#1 FIX ("FCCS_Periodic", "FCCS_Journal Input", "FCCS_Managed Data", "IFRS_IN ", "Entity Currency", "FCCS_Mvmts_NetIncome", @relative("Total Categories", 0), @relative("Total Area", 0), @LEVMBRS("Intercompany", 0) @relative("Total Custom", 0)) 
#2        "FCCS_Entity Input" (
#3           IF (@ISMBR("Actual_Red")) 
#4                IF (@ISUDA("Entity", "B10") AND ("FCCS_Mvmts_NetIncome" <> #Missing)) 
#5                    ENDIF
#6            ENDIF
#7        ) 
#8 ENDFIX

在此指令碼範例中,規則驗證程序會產生下列警告:

Line 2:Use Movement member FCCS_Mvmts_NetIncome as an anchor instead of Anchor member FCCS_Entity Input.

以下是 DSO 應用程式的可設定計算 (插入規則) 範例。每一行以 # 表示,即行號。

     #1   FIX("FCCS_Periodic","FCCS_No Intercompany","No operating Expense","Product1    ","CORP_IN","IC_PROFIT_ACC ")
        #2      "FCCS_Managed Data"(
        #3      @CALCMODE(BOTTOMUP);
        #4          IF (@ISMBR("FY21"))
        #5              "FCCS_OpeningBalanceAdjustment"=10;
        #6         ENDIF
        #7       )
        #8     ENDFIX

在此指令碼範例中,規則驗證程序會產生下列警告:

Line 2: Use Account member IC_PROFIT_ACC as an anchor instead of Anchor member FCCS_Managed Data.

@CALCMODE (BottomUp) 的 Calc Manager 指令碼驗證

@CALCMODE(BOTTOMUP) 與 @CALCMODE(TOPDOWN)

使用可設定的計算 (插入點) 或隨需規則 (ODR) 時,Financial Consolidation and Close 建議使用 BOTTOMUP 而不使用 TOPDOWN,因為計算速度較快。

使用 BOTTOMUP 期間 (這是預設的計算方法),Essbase 會先決定必須計算哪些現有資料區塊,再使用「稀疏」成員區塊計算資料。然後 Essbase 在整個資料庫計算過程中只會計算需要計算的區塊。

範例:A = B + C

只有 B 和 C 存在於資料庫時才會計算 A。在實際計算開始之前,A 對 B 和 C 的相依性是已知的。

使用 TOPDOWN 期間,Essbase 使用成員區塊中的「稀疏」成員計算所有潛在資料區塊上的公式。

範例:A = B -> D + C -> D

若要計算公式,Essbase 必須檢查 A 的每個組合以查看 B -> D 或 C -> D 是否存在。

Essbase 使用 BOTTOMUP 作為預設機制來計算對「稀疏」成員指派的公式,除非公式的本質複雜,在這種情況下將執行 TOPDOWN 計算。

複雜表示式是符合以下準則的表示式:

  • 包含跨維度運算子 [ -> ]

  • 使用一或多個範圍函式,例如,@AVGRANGE@MAXRANGE@MINRANGE@SUMRANGE

  • 使用關係或財務函式,例如,@ANCESTVAL@NEXT@PARENTVAL@SHIFT@ACCUM@GROWTH

在這種情況下,Essbase 會提供 @CALCMODE(BOTTOMUP) 函式來強制執行稀疏公式計算以執行 BOTTOMUP。

以下是可設定的計算 (插入規則) 範例。每一行以 # 表示,即行號。

#1   FIX ("FCCS_Periodic", "FCCS_Entity Input", "Entity Currency", "FCCS_ClosingBalance_Input","FCCS_Balance Sheet","FCCS_Total Data Source") 
#2   "FCCS_Income_Statement"(
#3   "FCCS_Movements"=@CURRMBR("Entity")->"FCCS_Contribution" -> "FCCS_Movements";
#4   )
#5   ENDFIX 

在此指令碼範例中,規則驗證程序會產生下列警告:

Line 2: Use @CalcMode (BOTTOMUP) for member block FCCS_Income_Statement.

如需詳細資訊,請參閱此主題:https://docs.oracle.com/cd/E57185_01/ESBTR/calcmode_func.html

混合 BSO 的 Calc Manager 指令碼驗證

對於混合 Financial Consolidation and Close 應用程式,建議在適用時將 HYBRIDBSOINCALCSCRIPT 設定為 NONE/FULL 以獲得最佳效能結果。

依預設,可設定的計算 (插入規則) 會將 HYBRIDBSOINCALCSCRIPT 設定為 FULL,對於隨需規則,會將 HYBRIDBSOINCALCSCRIPT 設定為 NONE。

規則驗證程序會檢查指令碼是否包含具有「動態計算」儲存類型的 CustomTop 維度成員。

  • 如果表示式有 0 或 1 個 CustomTop 成員,會顯示將 HYBRIDBSOINCALCSCRIPT 設定為 NONE 的警告 (如果其設定為 FULL)。
  • 如果表示式有兩個或更多個 CustomTop 成員,會顯示將 HYBRIDBSOINCALCSCRIPT 設定為 FULL 的警告 (如果其設定為 NONE)。

以下是隨需規則範例。每一行以 # 表示,即行號。

     #1 FIX ("FCCS_Periodic", "FCCS_No Intercompany", "No Product", "FCCS_Mvmts_NetIncome", @RELATIVE("AllDepts", 0), "No Department") 
        #2    FIX (@RELATIVE("TotalHFM", 0)) 
        #3        "StkCmpRev_CE" = -("555011_CE"->"FCCS_YTD"->"FCCS_Intercompany Top") - ("555012_CE"->"FCCS_YTD"->"FCC_Intercompany Top");
        #4    ENDFIX 
#5 ENDFIX

在此指令碼範例中,規則驗證程序會產生下列警告:

Line 3: Disable Hybrid calculation for this block with SET HYBRIDBSOINCALCSCRIPT NONE.

如需詳細資訊,請參閱此主題:https://docs.oracle.com/en/cloud/paas/analytics-cloud/tress/hybridbsoincalcscript.html

@CALCMODE (BLOCK) 的 Calc Manager 指令碼驗證

針對此特定使用案例,Financial Consolidation and Close 建議在適用時新增 @CalcMode (BLOCK) 以改善效能。

如需 @CalcMode (BLOCK) 的詳細資訊,請參閱此主題:https://docs.oracle.com/cd/E57185_01/ESBTR/calcmode_func.html

為了識別 DSO 和非 DSO 應用程式的錨點區塊內是否需要 @CALCMODE(BLOCK),規則驗證程序會檢查下列條件:

  • 錨點區塊中的表示式是否為複雜表示式

  • 表示式是否包含特定函式,例如,密集成員上的 @ANCEST@CURRMBR@ISMBR,或是 @MDANCESTVAL@MDPARENTVAL@MDSHIFT@NEXT@PARENT@PARENTVAL@PRIOR@SANCESTVAL@SPARENTVAL@SHIFT

如果符合這些條件,驗證程序會發出含有行號的警告。

以下是可設定的計算 (插入規則) 範例。每一行以 # 表示,即行號。

#1   FIX ("FCCS_Periodic", "FCCS_Entity Input", "Entity Currency", "FCCS_ClosingBalance_Input","FCCS_Balance Sheet","FCCS_Total Data Source") 
#2   "FCCS_Income_Statement"(
#3   "FCCS_Movements"=@CURRMBR("Entity")->"FCCS_Contribution" -> "FCCS_Movements";
#4   )
#5   ENDFIX 

在此指令碼範例中,規則驗證程序會產生下列警告:

Line 2: Use @CalcMode (BLOCK) for member block FCCS_Income_Statement.

Calc Manager 指令碼驗證 - IF 條件中遺漏共用實體成員參照

在可設定的計算 (插入規則) 或隨需規則的 IF 條件中定義共用實體時,如果要將條件套用至所有實體,請務必同時包含主要實體及其所有共用成員。

當條件中只新增主要實體時,除非您明確指定,否則系統不會自動包含共用成員。

在以下情況下會顯示警告:

  • IF 條件使用 @ISMBR 函式來檢查特定實體成員

  • 條件中使用的成員屬於實體維度,且具有共用例項

  • IF 區塊的任何表示式都不應包含 FCCS_Parent Input 成員

  • 並未將所有共用成員與主要實體一起包含在內

此檢查旨在協助避免未預期的行為,例如您的邏輯僅套用至主要實體,卻意外地略過共用實體。

如果您的規則僅套用至主要或特定共用成員,可以安全地忽略此警告。否則,請更新 IF 條件以包含所有必要成員。

SET HYBRIDBSOINCALCSCRIPT FULL;
Fix ("FCCS_No Data Source", "FCCS_No Movement","FCCS_Local GAAP","FCCS_No Intercompany","FCCS_Periodic",) 
 "Cash" (
    IF(@ISMBR("[Global].[USA]"))
     "Cash" = "FCCS_Mvmts_Total"->"FCCS_Managed Data"->"FCCS_Intercompany Top"->"FCCS_Entity Total"; 
       ENDIF
               )
                           ENDFIX

對於上述指令碼,系統會顯示警告以新增遺漏的共用實體,因為 USA 在兩個位置共用,但僅針對 Global 提及,如本範例所示。

共用實體的計算指令碼警告

註:

對於共用實體警告的使用案例,Financial Consolidation and Close 會將值限制為每個實體僅顯示 10 個共用實體,以避免輸出結果過於龐大,並保持訊息的簡潔。