解决计算脚本验证警告

创建和验证使用 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

在此脚本示例中,规则验证过程将生成以下警告:

第 2 行:使用移动成员 FCCS_Mvmts_NetIncome 作为锚点,而不是锚点成员 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

在此脚本示例中,规则验证过程将生成以下警告:

第 2 行:使用帐户成员 IC_PROFIT_ACC 作为锚点,而不是锚点成员 FCCS_Managed Data。

针对 @CALCMODE (BottomUp) 的 Calc Manager 脚本验证

@CALCMODE(BOTTOMUP) 与 @CALCMODE(TOPDOWN)

相比于 TOPDOWN,Financial Consolidation and Close 建议使用 BOTTOMUP,以通过可配置计算(插入点)或按需规则 (ODR) 实现更快的计算。

运行 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 

在此脚本示例中,规则验证过程将生成以下警告:

第 2 行:对成员块 FCCS_Income_Statement 使用 @CalcMode (BOTTOMUP)。

有关详细信息,请参阅以下主题:https://docs.oracle.com/cd/E57185_01/ESBTR/calcmode_func.html

针对混合 BSO 的 Calc Manager 脚本验证

对于混合 Financial Consolidation and Close 应用程序,建议在适用的情况下使用 SET 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

在此脚本示例中,规则验证过程将生成以下警告:

第 3 行:使用 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 on a dense member、@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 

在此脚本示例中,规则验证过程将生成以下警告:

第 2 行:对成员块 FCCS_Income_Statement 使用 @CalcMode (BLOCK)。