成员计算顺序

Essbase 计算大纲成员的默认顺序通常为:帐户、时间、密集和稀疏,同时考虑大纲中维的顺序以及是否应用公式。

对数据库执行默认计算 (CALC ALL) 时, Essbase 将按以下顺序计算维:

  • 如果同时存在标记为帐户的维和标记为时间的维,并且公式应用于帐户维上的成员,则 Essbase 将按以下顺序计算:

    1. 标记为账户的维

    2. 标记为时间的维

    3. 其他密集维(按它们在数据库大纲中的显示顺序)

    4. 其他稀疏维(按它们在数据库大纲中的显示顺序)

  • 否则, Essbase 将按以下顺序计算:

    1. 密集维(按它们在数据库大纲中的显示顺序)

    2. 稀疏维(按维在大纲中的显示顺序)

注意:

不包括在数据库合并中的属性维不会影响计算顺序。请参阅使用 Essbase 属性

在示例基本数据库中,维按以下顺序计算:度量、年、方案、产品和市场。

您可以使用计算脚本改写默认顺序。请参阅为块存储多维数据集开发计算脚本

成员关系的计算效果

每个 Essbase 维中的计算顺序取决于成员在大纲中的相互关系。大纲中的成员累计(合并)的方式与里程表相当。

在一个维的各个分支中,首先计算 0 级值,接着计算 1 级父代值然后,计算下一个分支的 0 级值,接着计算其 1 级父代值然后会以这种方式继续计算,直到计算完所有级别为止。

下图显示了 Sample Basic 数据库中的 Year 维。其成员的计算顺序显示在每个成员的左侧。此示例假定父代成员未标记为动态计算

图 19-3:示例基本年度维的计算顺序


展开的“Year(年度)”维大纲,其中包含用于说明其成员的计算顺序的数字。订单(从 1 到 17)为“Jan(一月)”、“Feb(二月)”、“Mar(三月)”、“Qtr1(季度)”、“Apr(四月)”、“May(五月)”、“Jun(六月)”、“Qtr2(四月)”、“Jul(七月)”、“Aug(八月)”、“Sep(九月)”、“Qtr3(三季度)”、“Oct(十月)”、“Nov(十一月)”、“Dec(十二月)”、“Qtr4(四季度)”、“Year(年度)”。

Jan 是第一个分支中的第一个成员。Jan 没有公式,因此不会对其进行评估。这同样适用于 Feb 和 Mar,分支中的其他两个成员。

Essbase 通过合并“一月”、“二月”和“三月”来计算 Qtr1。在此示例中,将添加这些月份(如 + 合并运算符所示),以便为 Qtr1 提供值。

然后, Essbase 以相同的方式计算 Qtr2 到 Qtr4 分支。

最后, Essbase 通过合并 Qtr1 到 Qtr4 的值来计算 Year 成员。如 + 合并运算符所示,添加这些季度以提供年份值。

成员如何合并

您可以通过对数据库大纲中的成员应用计算运算符(+、-、/、*、%、~、^)来选择 Essbase 如何合并块存储多维数据集中的成员。

如果帐户成员具有时间余额标记(第一个、最后一个或平均值),则 Essbase 会相应地对其进行合并。请参阅计算第一个值、最后一个值和平均值

如果父代成员具有仅标签运算符,则 Essbase 不会从其子代计算父代。

如果成员具有 ~ 运算符,则 Essbase 不会将成员合并到其父代。

如果成员具有 ^ 运算符,则 Essbase 不会合并任何维中的成员。

注意:

如果使用动态计算,则 Essbase 可以使用不同的计算顺序。请参阅动态计算的计算顺序

数据库大纲中的维顺序

要确保所需的计算结果,如果 Essbase 大纲中使用计算运算符来除 (/)、乘 (*) 或计算成员的百分比 (%),或者某些成员具有公式,请考虑这些维的计算顺序。

如果仅使用计算运算符在数据库大纲中添加 (+) 和减(–)成员,而不在大纲中使用公式,则无需考虑计算顺序。

数据库大纲中成员的公式

如果将公式放在 Essbase 大纲中的成员上,请考虑维的计算顺序。一个维上附加到某个成员的公式可能会被另一个维上的后续计算覆盖。

例如,“示例基本”数据库有一个标记为“帐户”的“度量”维和一个标记为“时间”的“年”维。


类型为“时间”的年度维,以及类型为“帐户”的已部分展开的“度量”维,其中突出显示了成员利润。

度量计算第一年和第二年。如果在“度量”维上将公式附加到“毛利”,则 Essbase 将在计算“度量”维时计算公式。然后, Essbase 在合并 Year 维时会覆盖公式。请参阅单元格计算顺序

使用计算运算符 *、/ 和 %

如果使用计算运算符对 Essbase 大纲中的成员进行乘 (*)、除 (/) 和计算百分比 (%),请考虑维的计算顺序。所需的计算值可能会被另一个维上的后续计算覆盖。

例如,“示例基本”数据库有一个标记为“帐户”的“度量”维和一个标记为“时间”的“年”维。度量计算第一年和第二年。如果将“度量”维上的成员相乘,则当 Essbase 合并“年份”维上的值时,计算结果可能会被覆盖。请参阅单元格计算顺序

使用乘法 ( * )、除法 ( / ) 或百分比 ( % ) 运算符合并成员时,请仔细排序分支中的成员以获得所需结果。

图 19-4 显示了大纲中显示的计算运算符。假设用户希望将“子 2”和“子 3”的总和除以“子 1”。但是,如果子代 1 是第一个成员,则 Essbase 从子代 1 开始,从值 #MISSING 开始,然后将其除以子代 1。结果为 #MISSING。然后, Essbase 添加子代 2 和子代 3。显然,此结果不是必需的结果。

图 19-4 数据库大纲中的计算运算符


大纲中的计算运算符。

要计算正确结果,请将子代 1 设为分支中的最后一个成员。

您可以将公式应用于数据库大纲中的成员,以获得相同的结果。但是,在成员上使用这些计算运算符要高效得多,如图 19-4 中所示。

避免结转计算参考

要获取预期的计算结果,请确保大纲不包含正向计算参考。当计算成员的值依赖于 Essbase 尚未计算的成员时,会出现正向计算引用。在这些情况下, Essbase 可能不会生成所需的计算结果。

例如,考虑如下所示的产品维,该维有三个正向计算引用:两个共享成员(P100 – 20 和 P300 – 20)和一个非共享成员(P500 – 20):

图 19-5 包含正向计算参考的产品维


此图显示了具有三个正向计算参考的产品维大纲。

大纲编辑器中,验证大纲时, Essbase 标识具有正向计算引用的共享成员。验证大纲不会标识具有正向计算引用的非共享成员。您可以保存并使用包含正向计算参考的大纲。

考虑饮食下的五个成员。P100-20、P300-20 和 P500-20 成员具有结转计算参考:

  • P100-20 (+)(共享成员): Essbase 在计算原型成员 P100-20 之前会计算共享成员 P100-20。由于原型成员 P100-20 具有子代,因此 Essbase 必须通过添加其子代来计算原型成员,然后才能准确计算共享成员 P100-20。

  • P300-20 (+)(共享成员): Essbase 在计算原型成员 P300-20 之前会计算共享成员 P300-20。由于原型成员 P300-20 具有公式,因此 Essbase 必须先计算原型成员,然后才能准确计算共享成员 P300-20。

  • P500-20 (+)("P200-20" + "P300-20"):应用于 P500-20 的公式引用了 Essbase 尚未计算的成员。一个这样的原型成员 P300-20 有自己的公式, Essbase 必须先计算 P300-20,然后才能准确计算 P500-20。P200-20 和 P400-20 成员计算正确,因为它们没有正向计算参考。

  • P200-20 (+)(共享成员):P200-20 不是正向计算参考,尽管 Essbase 在计算原型成员 P200-20 之前会计算共享成员 P200-20。原型成员 P200-20 没有计算相关性(没有子代,没有公式)。因此, Essbase 不需要在共享成员之前计算原型成员。Essbase 只需接受原型成员的值。

  • P400-20 (+)("P200-10" * 2"):P400-20 不是正向计算引用,尽管应用于 P400-20 的公式引用了 Essbase 尚未计算的成员。公式中的成员原型本身没有计算相关性。P200-10 是公式中唯一的成员,而 P200-10 本身没有子代或公式。Essbase 准确计算 P400-20。

要获取 P100-20、P300-20 和 P500-20 的准确计算结果,请更改大纲中成员的顺序。通过将 Diet 共享成员放置在常规成员之后(如下所示),可以确保 Essbase 按所需的顺序计算成员。

图 19-6 在没有正向计算参考的情况下更改了产品维


此图显示了没有正向计算参考的产品维大纲。

现在, Essbase 会计算:

  • 原型成员 P100-20 在计算共享成员 P100-20 之前。因此,P100-20 不再具有正向计算参考。

  • 共享成员 P300-20 之前的原型成员 P300-20。因此,P300-20 不再具有正向计算参考。

  • 在成员 P500-20 之前使用公式 P300-20 的成员。因此,P500-20 不再具有正向计算参考。