@LEVMBRS
,而不是 @RELATIVE
。@CHILDREN
,而不是 @RELATIVE
。@REMOVE
和 @LEVMBRS
。使用 Planning 中存储的日期执行计算
Planning 允许您输入日期值。例如,使用 MM/DD/YYYY 格式,可将开始日期输入为 11/01/2019,将结束日期输入为 06/01/2020。Oracle Essbase 会将日期格式的值存储为数值。例如,前面的开始日期会存储为 20191101,结束日期会存储为 201200601。可以使用 Essbase 函数(例如,@ROUND
、@INT
或 @TRUNCATE
函数)计算任何开始日期和结束日期之间的月数。以下示例显示了如何使用 @ROUND
函数计算开始日期和结束日期之间的月数:
(@ROUND ("End Date",-4) - @ROUND ("Start Date",-4))/10000*12此计算
(20200000 – 20190000)/10000 *12
的结果为 12。(@ROUND ("End Date",-2) - @ROUND ("End Date",-4))/100计算
(20200600 – 20200000)/100
的结果为 6。(@ROUND ("Start Date",-2) - @ROUND ("Start Date",-4))/100计算
(20191100 – 20190000)/100
的结果为 11。(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"。