Essbase 计算脚本是一种可用于在 Financial Consolidation and Close 中编写自定义业务逻辑的语言。本节介绍了一些基本 Essbase 构造以及适用于 Financial Consolidation and Close 的限制。有关 Essbase 计算脚本的详细信息,请参阅《Getting Started with Essbase Cloud for Administrators》。
常用语法
Sales = Sales * 1.50;
"Cash Ratio" = "Cash"/"Current Liabilities";
->
指定多个维的交叉点"Sales"->"Changes In Net Income"->"Product1";
注释
注释以 /*
开头,以 */
结尾。
支持单行或多行注释。
您可以使用此工具栏图标设置或删除注释块。
FIX/ENDFIX
FIX/ENDFIX 是任何计算脚本的基本构建块之一。要执行任何计算,您必须定义一个 FIX/ENDFIX 节,然后将实际业务计算放在该节中。
示例:假设“产品”是自定义维,您想要计算销售的电视机数量。可以使用以下语法:
FIX("Televisions")
"Units_Sold" = "LED_TVs" + "UHD_TVs";
ENDFIX
实际业务计算为:
"Units_Sold = "LED_TVs" + "UHD_TVs";
,它计算销售的电视机数量。
注:
必须在每个计算语句的末尾放置一个分号,但 FIX 或 ENDFIX 末尾不必放置分号。FIX/ENDFIX 节会限制各个维中参与计算的成员。在此示例中,只有 "Televisions" 参与计算。
还可以定义嵌套的 FIX,如下所示:
上述计算还可以按如下方式编写:
例如,@List 是一个 Essbase 函数。Essbase 提供了许多函数。但是,Financial Consolidation and Close 并不支持所有 Essbase 函数。有关支持的函数的列表,请参阅“Essbase 函数列表”部分。
对 Financial Consolidation and Close 维应用 FIX
Financial Consolidation and Close 应用程序可以包含 13 个维,具体取决于已启用的应用程序功能。在这 13 个可能的维中,不允许您对以下维应用 FIX,因为系统会在用户调用合并过程时自动对它们应用 FIX。
方案
年份
期间
视图
实体
例如,假设您有以下语句:
部署将失败,且系统会在作业控制台中记录包含相应信息的错误消息。
但是,这并不意味着您无法在脚本中使用这些维。通常,计算具有如下所示的语法:
请注意,在 FIX 和“左侧”,不能使用“方案”、“年份”、“期间”、“实体”和“视图”维中的任何成员。而对于等式的“右侧”则没有该限制。
允许使用以下语法:
对于其余八个维,如果您不对特定维应用 FIX,则系统会假定使用该维的所有成员。例如,假设您有以下语句:
在此示例中,除了“帐户”之外,其余所有维都应用了 FIX。在这种情况下,Essbase 将在 FIX/ENDFIX 的计算中考虑“帐户”维的所有成员。
受限制的 Financial Consolidation and Close 成员
每个 Financial Consolidation and Close 服务中都有一些不能在计算脚本中使用或计算的系统成员。如果在计算中使用这些受限制的成员,验证或部署将失败,且系统会在作业控制台中记录错误消息。
请注意,如果没有为某个维指定任何成员,则系统会假定使用该维中的所有成员。但是,由于不允许将受限制的成员包含到流程中,因此您必须在 FIX 维语句或表达式的左侧明确排除这些受限制的成员。
下表完整列出了这些维中不允许使用的 Financial Consolidation and Close 成员。请注意,对于“货币”维与“合并”维,这些成员是否受限制取决于所使用的插入规则。请注意,每个植入的插入规则都在注释节提供了说明信息,指明可以将“货币”维与“合并”维的哪些成员包含到该规则中。
表 20-5 受限制的维成员
维 | 成员 | 表达式 左侧 | 表达式 右侧 |
---|---|---|---|
方案 | 所有成员 | 否 | 是 |
年份 | 所有成员 | 否 | 是 |
期间 | 所有成员 | 否 | 是 |
视图 | 所有成员 | 否 | 是 |
实体 | 所有成员 | 否 | 是 |
帐户 | FCCS_CSTATUS | 否 | 是 |
FCCS_CSTATUS FILTER | 否 | 是 | |
外汇汇率 - 期末 | 否 | 是 | |
外汇汇率 - 平均值 | 否 | 是 | |
平均汇率 | 否 | 是 | |
期末汇率 | 否 | 是 | |
SrcAverageRate | 否 | 是 | |
TgtAverageRate | 否 | 是 | |
SrcEndingRate | 否 | 是 | |
TgtEndingRate | 否 | 是 | |
FCCS_Balance | 否 | 是 | |
FCCS_CTA | 否 | 是 | |
FCCS_CICTA | 否 | 是 | |
FCCS_Percent Control | 否 | 是 | |
FCCS_Current Ratio | 否 | 是 | |
FCCS_Quick Ratio | 否 | 是 | |
FCCS_Cash Ratio | 否 | 是 | |
FCCS_Inventory Turnover | 否 | 是 | |
FCCS_Asset Turnover | 否 | 是 | |
FCCS_Days Sales In Receivables | 否 | 是 | |
FCCS_Days Sales In Inventory | 否 | 是 | |
FCCS_Gross Profit Margin | 否 | 是 | |
FCCS_Return on Sales | 否 | 是 | |
FCCS_Return on Equity | 否 | 是 | |
FCCS_Debt to Equity Ratio | 否 | 是 | |
FCCS_Debt Ratio | 否 | 是 | |
数据源 | FCCS_System Types | 否 | 是 |
FCCS_Rate Override | 否 | 是 | |
FCCS_Account Override | 否 | 是 | |
FCCS_PCON | 否 | 是 | |
FCCS_Driver Source | 否 | 是 | |
移动 | FCCS_Opening Balance | 否 | 是 |
FCCS_OpeningBalance_Cash | 否 | 是 | |
FCCS_FX_Total_NonCash | 否 | 是 | |
FCCS_ClosingBalanceCash | 否 | 是 |
对维的受限制成员以外的所有成员应用 FIX
一个很常见的用例是您需要对维的所有 0 级成员应用 FIX,而该维可能包含受限制的成员。以下示例显示了如何以最佳方式对该维的受限制成员以外的所有 0 级成员应用 FIX。
例如,“帐户”维包含的受限制成员最多。
下面是可用于对“帐户”维的受限制成员以外的所有 0 级成员应用 FIX 的计算脚本代码片段:
@REMOVE( @LEVMBRS( "Account", 0 ), @LIST( @RELATIVE( "FCCS_System Account", 0 ),@RELATIVE( "FCCS_Drivers", 0 ),@RELATIVE( "FCCS_Ratios", 0 ),@RELATIVE( "Exchange Rates", 0 ) ) )
对稀疏维与密集维应用 FIX
对稀疏维执行 FIX 更高效。在这种情况下,FIX 将使 Essbase 仅拉取 FIX 中定义的稀疏维成员组合使用的块并跳过其余块。
这些稀疏组合用作索引,供 Essbase 用于搜索并拉取与索引匹配的数据块以进行计算。因此,未拉取所有块供系统执行。
对密集维使用 FIX 时,密集成员在 Essbase 中的每个数据块中都存在。因此,如果使用不当,这将对性能产生影响。请注意,对密集维使用 FIX 时,Essbase 将拉取所有数据块,而不会限制块数,只会限制每个块中的某个部分。因此,可能需要多次遍历数据库才能返回信息。
例如,可以使用以下语句引用“帐户”维的 "Sales" 和 "PostSales":
当系统处理针对 "Sales" 的第一个 fix 时,Essbase 将拉取“帐户”维的所有数据块,但只会处理一个 "Sales" 帐户。
稍后在针对 "PostSales" 的 FIX 语句中,Essbase 将再次拉取“帐户”维的所有数据块,但只会处理一个 "PostSales" 帐户。在这种情况下,获取这两个帐户遍历了两次数据库。
为防止出现性能问题,您可以不对“帐户”维使用 FIX,而对密集维使用 IF...THEN。
在此示例中,如果不使用 FIX 语句,只需要遍历一次 Essbase 数据库。
为提高计算性能,建议您对稀疏维使用 FIX 并对密集维使用 IF..THEN。
成员块
成员块也称为计算块。有时,您会看到用于成员块的术语“锚点”。成员块的语法如下所示:
以下是成员块语句的示例:
在此示例中,"My Total Opening Balance" 称为计算块或锚点。只要可能,该成员应来自密集维。
在上述计算中,限定为成员 "My FX Opening",并对 FIX 语句中指定的成员执行计算。
请注意,当使用 IF 语句时,您需要一个成员块。不能在成员块外部编写 IF 语句。