动态计算如何更改计算顺序
动态计算可优化批处理计算性能,并更改 Essbase 计算值的顺序。首先计算稀疏维。在非对称数据集中使用 Dynamic Calc 或使用 Two Pass 成员时,请采取预防措施。
使用动态计算的数据值可更改 Essbase 计算值的顺序,并可能对多维数据集的管理方式产生影响。
动态计算的计算顺序
使用动态计算时, Essbase 会先计算稀疏维的值,然后再计算密集维。密集值按帐户、时间、时间序列、其他密集维以及最后属性的顺序计算。
当 Essbase 动态计算数据值时,它会按与批处理数据库计算顺序不同的顺序计算数据。
在批处理计算期间, Essbase 按以下顺序计算数据库:
-
标记为账户的维
-
标记为时间的维
-
其他密集维(按它们在数据库大纲中的显示顺序)
-
其他稀疏维(按它们在数据库大纲中的显示顺序)
-
双遍计算
请参阅块存储数据库计算顺序。
对于动态计算的值,在检索时, Essbase 通过按以下顺序计算数据库来计算值:
-
稀疏维
-
如果标记为时间的维是稀疏的,并且数据库大纲使用时间序列数据,则 Essbase 将基于时间维进行稀疏计算。
-
否则, Essbase 将基于通常用于批处理计算的维进行计算。
-
-
密集尺寸
-
标记为账户的维(如果密集)
-
标记为时间(如果密集)的维
-
时间序列的计算
-
剩余密集维
-
双遍计算
-
属性
-
如果数据检索使用属性成员,则计算顺序中的最后一步是属性的求和。属性计算对与查询中指定的属性成员匹配的数据块执行实时聚合。当查询包含双遍计算成员时,属性计算将在收集所有聚合值之后应用双遍计算成员公式。此双遍计算使用属性计算中的数据值,而不是实际数据块中的值。
在查询中使用属性成员会导致 Essbase 在动态计算中忽略“剩余时间”成员的值。在不使用属性的检索过程中,“时间余额”成员的值将应用于计算。使用和不使用属性成员之间的计算过程差异会为动态计算的任何较高级别时间成员生成不同的结果。
在检索不使用属性期间,将在最后一步中计算这些动态计算的成员,因此可以正确应用时间余额功能。但是,在检索使用属性期间,属性的汇总是应用的最后一步。计算顺序的差异会为动态计算的上层时间成员生成两个不同的、可预测的结果。
动态计算双传递成员的计算顺序
动态计算更改 Essbase 计算值的顺序。将 Dynamic Calc 与 Two Pass 成员一起使用时,请采取预防措施。请考虑将混合模式与解析顺序一起使用。
请考虑以下信息,以确保 Essbase 在动态计算标记为双遍的成员的数据值时生成所需的计算结果(请参阅双遍计算)。
注意:
请勿对混合模式多维数据集使用两遍计算。仅使用解决顺序。
如果多个动态计算密集维成员标记为双遍,则 Essbase 将在第一遍执行动态计算,然后按以下顺序计算双遍成员:
-
帐户维中的双遍成员(如果存在)
-
时间维中的双遍成员(如果存在)
-
按维在大纲中的显示顺序排列的其余密集维中的双遍成员
例如,在 Sample.Basic 数据库中,假定如下:
-
密集度量维(标记为帐户的维)中的利润百分比标记为动态计算和双遍。
-
密集方案维中的差异标记为动态计算和双遍。
Essbase 首先计算帐户维成员。因此, Essbase 将根据“度量”维计算利润百分比,然后根据“方案”维计算差异。
如果方案是稀疏维,则 Essbase 将按照动态计算的常规计算顺序先计算差异。然后, Essbase 计算利润百分比。请参阅动态计算的计算顺序。
此计算顺序不会产生所需结果,因为 Essbase 需要使用“利润百分比”公式而不是“差异”公式来计算“利润百分比”->“差异”。您可以通过将方案设为密集维来避免此问题。如果度量维(帐户维)稀疏,则不会出现此问题,因为 Essbase 仍先计算利润百分比。
非对称数据的计算顺序
Essbase 动态计算可能不适合用于非对称数据集。查看本主题中针对您的用例的示例。
由于动态计算的计算顺序与批计算的计算顺序不同,因此,在某些多维数据集大纲中,如果将某些成员标记为动态计算,可能会获得不同的计算结果。当 Essbase 动态计算非对称数据时,会发生这些差异。
无论计算哪个维,对称数据计算都会产生相同的结果。
使用以下对称示例中的数据集,Qtr1-> Profit 的计算将生成相同的结果,无论您是沿标记为时间的维计算,还是沿标记为帐户的维计算。沿时间维计算,添加“Jan(一月)”、“Feb(二月)”和“Mar(三月)”的值:
50+100+150=300 沿客户维度计算,从 Qtr1 减去 Qtr1 -> COGS,然后从 Sales 中减去:
600–300=300 表 21-1 对称计算示例
| 时间 -> 帐户 | Jan | Feb | 三月 | Qtr1 |
|---|---|---|---|---|
|
销售 |
100 |
200 |
300 |
600 |
|
COGS |
50 |
100 |
150 |
300 |
|
Profit(利润) (销售 - 销货成本) |
50 |
100 |
150 |
300 |
非对称数据计算在不同维度上的计算方式不同。
使用以下非对称示例中的数据集,在沿 Market 维进行计算时,East -> Sales 的计算会生成正确的结果,但在沿 Accounts 维进行计算时会生成不正确的结果。沿市场维度计算,添加纽约、佛罗里达和康涅狄格州的值将生成正确的结果:
50 + 100 + 100 = 250沿帐户维度计算,将值“East(东)”>“Price(价格)”乘以值“East(东)”>“UnitsSold(销售件数)”将生成错误的结果:
15 * 50 = 750表 21-2 非对称计算示例
| 市场 -> 客户 | 纽约 | 佛罗里达州 | 康涅狄格州 | East |
|---|---|---|---|---|
|
销售数量 |
10 |
20 |
20 |
50 |
|
Price |
5 |
5 |
5 |
15 |
|
销售(价格 * 售出件数) |
50 |
100 |
100 |
250 |
在以下大纲中,East 是一个稀疏维,Accounts 是一个密集维:

如果 East 和 Sales 标记为动态计算,则 Essbase 计算的结果与 East 和 Sales 标记为动态计算时的计算结果不同。
如果 East 和 Sales 不是动态计算成员,则 Essbase 将通过计算以下维来生成正确的结果:
-
密集帐户维 - 计算纽约、佛罗里达和康涅狄格州的销售件数、价格和销售值
-
稀疏东维 - 汇总纽约、佛罗里达和康涅狄格州的销售件数、价格和销售的计算值,以获取东部的销售值
如果 East 和 Sales 是动态计算成员,则 Essbase 会通过计算以下维来生成错误的结果:
-
稀疏东部维 - 汇总纽约、佛罗里达和康涅狄格州的销售件数、价格和销售值,以获取东部的值
-
“东部”->“销售”的值 - 采用“东部”数据块中的汇总值,并使用这些值执行公式计算以获得“销售”的值
要避免此问题并确保获取所需结果,请不要将销售成员标记为动态计算。
混合模式下的解析顺序
Essbase 中的解析顺序确定在混合模式下执行动态计算的顺序。您可以定制解析顺序,也可以接受默认解析顺序,默认解析顺序已针对高性能和相关性分析进行了优化。
解析顺序的概念适用于动态计算执行,无论该计算是由动态成员公式还是计算脚本中的动态相关性启动。在多维查询中对某个单元格求值时,解析计算的顺序可能不明确,除非指定了解析顺序以指明所需的计算优先级。
您可以设置维或成员的解析顺序,也可以使用默认的 Essbase 解析顺序。您可以设置的最小解析顺序为 0,最大解析顺序为 127。解析顺序值越大,对相应成员的计算就越晚;例如,解析顺序为 1 的成员先解析,解析顺序为 2 的成员后解析。
启用混合模式后,默认解析顺序(也称为计算顺序)与块存储数据库的该顺序几乎一致:
| 维/成员类型 | 默认解析顺序值 |
|---|---|
| 存储的成员 | 0 |
| 稀疏维成员 | 10 |
| 密集账户维成员 | 30 |
| 密集时间维成员 | 40 |
| 密集常规维成员 | 50 |
| 属性维成员 | 90 |
| 两遍动态成员 | 100 |
| MDX 计算成员或命名集(已在 MDX 中定义) | 120 |
总之,混合模式下的默认解析顺序规定,先计算存储的成员,再计算动态计算成员;先计算稀疏成员,再计算密集成员;各自按照大纲中的显示顺序(从上到下)进行计算。
没有为其指定解析顺序的动态成员(带或不带公式)继承其维的解析顺序,除非它们被标记为两遍。
两遍计算是块存储模式下可以应用的一项设置,适用于带有必须计算两遍才能生成正确值的公式的成员。
注意:
请勿对混合模式多维数据集使用两遍计算。仅使用解决顺序。
两遍计算在混合模式下不适用,标记为两遍的所有成员将在属性之后最后才计算。在混合模式下,如果默认解析顺序不符合需求,应实施定制解析顺序,而非两遍计算。
混合模式下的默认解析顺序针对以下方案进行了优化:
-
向前引用,其中的动态成员公式引用了按大纲顺序稍后才会出现的成员。混合模式下没有大纲顺序相关性。
-
基于大纲顺序对子值聚合更接近使用等效公式进行聚合。
-
动态密集成员是稀疏公式内的相关项。在混合模式下,如果稀疏公式引用了密集动态成员,该引用将会被忽略,因为系统会先计算稀疏维。要更改这种情况,请给稀疏维分配一个比密集维的解析顺序更高(更晚计算)的解析顺序值。
定制解析顺序
如果您需要调整混合模式下动态计算的行为,可以通过定制维和成员的解析顺序来实现此目标,并且无需对大纲进行重大更改。
如果实施定制解析顺序,它将覆盖默认解析顺序。如果成员或维具有相同的解析顺序,则采用它们出现在大纲中的顺序(从上到下)来解决冲突。
除非为特定成员定制解析顺序,否则顶级维成员的解析顺序应用于维中的所有动态成员。
要更改解析顺序,可在 Essbase Web 界面中使用大纲编辑器,或者使用 Smart View (请参见 Changing the Solve Order of a Selected POV )。
您可以设置的最小解析顺序为 0,最大解析顺序为 127。解析顺序值越高意味着计算相应成员的时间越晚。
要探索解析顺序的用例,请参见应用程序工作薄库的 "Technical" 部分中的解析顺序模板。该库位于 Essbase 中的文件目录。
有关非混合模式下解析顺序的说明
在聚合存储多维数据集中:
-
所有维的解析顺序都设置为 0。
-
聚合以大纲顺序执行,以下情况除外:
- 首先处理存储的层次成员。
- 然后处理动态层次成员。
在非混合块存储多维数据集中,默认解析顺序如下
-
先稀疏,后密集
-
先账户,后时间
-
属性排在最后
注意:
如果手动将账户成员的解析顺序设置为高于时间成员的解析顺序,则将在动态时间序列成员之后对账户成员求值。