要动态计算的值

动态计算某些数据值会减少批处理计算时间和磁盘使用量,但会增加检索时间。在决定要动态计算的 Essbase 成员时,请使用以下主题中所述的准则。

您可以将任何成员标记为动态计算,但不包含公式、仅标签成员和共享成员的 0 级成员除外。

您选择动态计算的成员取决于数据库结构以及 (1) 减少计算时间和磁盘使用量的需求与 (2) 用户快速检索数据的需求之间的平衡。

在示例基本数据库中,Year 维为动态计算

图 21-1 显示动态计算成员的基本大纲样例


具有动态计算成员的年度维

Smart View 中,用户可以显示用于区分动态计算值的可视提示。

开发包含动态计算值的查询时,请考虑使用 Smart View “无数据导航”选项,以便 Essbase 在构建测试查询时不会动态计算和存储值。

密集成员和动态计算

密集维中的 Essbase Dynamic Calc(动态计算)成员的合适候选对象包括上层成员和具有简单公式的 0 级成员。

考虑对密集维的成员进行以下更改:

  • 将密集维的上层成员标记为动态计算

  • 尝试使用简单的公式将密集维的 0 级成员标记为动态计算,并评估检索时间的增加。

    简单公式不需要 Essbase 执行昂贵的计算。包含财务功能或跨维运算符 (->) 的公式是复杂的公式。

稀疏成员和动态计算

稀疏维中 Essbase 动态计算成员的合适候选对象包括没有大量子代的上层成员以及具有公式的成员。

考虑对稀疏维的成员进行以下更改:

  • 将具有六个或更少子代的稀疏维的某些上层成员标记为动态计算

  • 将具有复杂公式的稀疏维成员标记为动态计算

    复杂公式要求 Essbase 执行昂贵的计算。例如,任何包含财务职能的公式都是一个复杂的公式。请参阅复杂的 Essbase 成员公式

  • 在经常重构为动态计算的维中标记上层成员。

  • 不要将具有 20 个或更多后代的上层稀疏维成员标记为 Dynamic Calc

父子关系和动态计算

有一个孩子的父母

如果父代成员具有一个子代成员,且将该子代标记为动态计算,则还必须将该父代标记为动态计算

但是,如果父代成员有一个子代成员,并且父代是动态计算成员,则不必将子代标记为动态计算

批计算中的动态计算相关性

如果成员的计算取决于动态计算子成员的计算,则 Essbase 必须在批处理数据库计算期间先计算子成员,才能计算父代。因此,定期计算时间不会减少。此要求适用于稀疏和密集维的成员。

例如,在下图中,Qtr1 是 Dynamic Calc(动态计算)成员。它的孩子,Jan,Feb 和 Mar,不是动态的。其父项“年份”不是动态的。Essbase 在批处理计算期间计算年份时,必须合并其子项的值,包括 Qtr1。因此,计算 Qtr1 需要额外的时间,尽管 Qtr1 是 Dynamic Calc

图 21-2 将 Qtr1 作为动态计算成员的年份维


此图显示“Year(年份)”维,其中 Qtr1 展开为“Jan(一月)”、“Feb(二月)”和“March(三月)”,只有 Qtr1 是动态的。

计算脚本和动态计算

您不能对动态计算成员执行计算脚本计算。如果使用计算脚本显式计算成员,请不要将该成员标记为动态计算

Essbase 在计算脚本中计算 CALC ALL 或 CALC DIM 语句时,将绕过动态计算成员的计算。

同样,如果使用成员集函数(例如 @CHILDREN 或 @SIBLINGS)指定要计算的成员列表,则 Essbase 会绕过生成列表中的任何动态计算成员的计算。

如果在计算脚本中显式指定动态计算成员,则计算脚本将失败。

例如,仅当 Qtr1 不是动态计算成员时,以下计算脚本才有效:

FIX (East, Colas)
   Qtr1;
ENDFIX

公式和动态计算的成员

您可以使用 Essbase 大纲公式中的动态计算成员,但不能用作计算脚本中的公式目标。

将公式应用于大纲时,可以在公式中包括动态计算的成员。例如,如果 Qtr1 是动态计算成员,则可以在数据库大纲中的 Qtr1 上放置以下公式:

Qtr1 = Jan + Feb;

您不能将动态计算的成员设为计算脚本中公式计算的目标。Essbase 不会为动态计算的值保留内存,因此无法为其分配值。例如,如果 Qtr1 是动态计算成员,则如果在计算脚本中包含以下公式,则 Essbase 将显示语法错误:

Qtr1 = Jan + Feb;

如果 Qtr1 是动态计算成员,而 Year 不是,则可以在计算脚本中使用以下公式:

Year = Qtr1 + Qtr2;

此公式有效,因为 Essbase 没有为动态计算的成员分配值。

注意:

引用动态计算成员时,无论是在大纲公式中还是在计算脚本中, Essbase 都会中断常规计算以执行动态计算,这会影响性能。

脚本和动态计算的成员

为了避免在存在与运行时相关的动态计算成员公式时过度计算,可以将 SET FRMLRTDYNAMIC OFF 添加到 Essbase 计算脚本中。

计算脚本的预处理阶段无法确定大纲是否包含密集的动态计算成员。如果脚本包含与运行时相关的公式,则 Essbase 在执行脚本时必须计算所有密集的动态计算成员。使用 SET FRMLRTDYNAMIC OFF 计算命令通过停止计算这些动态计算成员来提高性能。