语法注意事项

  • 如果对整个维使用语法,请始终使用 @LEVMBRS,而不是 @RELATIVE
  • 如果适用,请使用 @CHILDREN,而不是 @RELATIVE
  • 如果只是想从 FIX 语句中排除某些成员,请使用 @REMOVE@LEVMBRS

使用 Planning 中存储的日期执行计算

Planning 允许您输入日期值。例如,使用 MM/DD/YYYY 格式,可将开始日期输入为 11/01/2019,将结束日期输入为 06/01/2020。Oracle Essbase 会将日期格式的值存储为数值。例如,前面的开始日期会存储为 20191101,结束日期会存储为 201200601。可以使用 Essbase 函数(例如,@ROUND@INT@TRUNCATE 函数)计算任何开始日期和结束日期之间的月数。以下示例显示了如何使用 @ROUND 函数计算开始日期和结束日期之间的月数:

  1. 计算结束日期年份和开始日期年份之间月数的方式如下:
    (@ROUND ("End Date",-4) - @ROUND ("Start Date",-4))/10000*12
    此计算 (20200000 – 20190000)/10000 *12 的结果为 12。
  2. 计算结束日期年份的开始日期和结束日期之间的月数,然后加上此数。
    (@ROUND ("End Date",-2) - @ROUND ("End Date",-4))/100
    计算 (20200600 – 20200000)/100 的结果为 6。
  3. 计算开始日期年份的开始日期和开始日期之间的月数,然后减去此数。
    (@ROUND ("Start Date",-2) - @ROUND ("Start Date",-4))/100
    计算 (20191100 – 20190000)/100 的结果为 11。
  4. 将前面的步骤结合到一个公式 (12+6-11) 中来计算开始日期和结束日期之间的月数 (7)。
    (((@ROUND ("End Date",-4) - @ROUND ("Start Date",-4))/10000*12) + 
    ((@ROUND ("End Date",-2) - @ROUND ("End Date",-4))/100)-
    ((@ROUND ("Start Date",-2) - @ROUND ("Start Date",-4))/100))

使用 @CURRMBR 函数

@CURRMBR 函数可返回当前正在计算的维成员名称,此函数对于确定范围和管理复杂计算特别有用。但是,您必须考虑其性能影响。

在稀疏维上使用 @CURRMBR 函数时不会影响性能,因为块仅对应一个稀疏维成员。但是,在密集维上使用此函数时,性能会降低,因为该函数在块级别而不是单元格级别运行计算。因此,此函数将计算所有密集维成员,即使查询中不存在特定的密集维成员。所以,尽可能少地将此函数用于密集维。

此外,在密集维上使用时,如果与 @CONCATENATE 等其他函数结合使用,@CURRMBR 函数可能会产生意外结果或错误。例如,如果查询中的动态计算成员包含公式 "Actual"->@MEMBER(@CONCATENATE(@NAME (@CURRMBR ("Account")),"_Total")) 且帐户维是稀疏维,则只要查询中的帐户生成有效的大纲成员,查询就不会出现错误。但是,如果帐户维是密集维,即使查询中的帐户生成了有效的大纲成员,查询也会导致以下错误。

执行 [成员名称] 的公式时出错 (第 0 行): 尝试越过函数 [@X] 中的空 @ 成员

出现此错误的原因是 @CURRMBR 函数在块级别进行计算,因此会计算密集块中的所有帐户。但并非块内的所有帐户都会生成有效的大纲成员,从而出现了前面的错误消息。有关 @CURRMBR 函数的详细信息,请参阅《Oracle Essbase Technical Reference》中的 "@CURRMBR"。