定义 Essbase 计算
计算对于推导某些类型的数据至关重要。从计算派生的数据称为计算数据,而未计算的源数据称为输入数据。了解如何使用合并、帐户标记、公式、函数和动态计算为 Essbase 数据库定义最佳计算逻辑。
维和成员的合并
定义标准维的成员时, Essbase 会使用 + 合并运算符(表示加法的加号)自动标记成员,这意味着在合并成员过程中会添加成员以推导其父代的值。根据需要,您可以更改成员合并属性。
合并是 Essbase 中最常用的计算。本主题使用“产品”维度来说明合并。
TBC 应用程序有多个合并路径:
-
各个产品汇总到产品系列,产品系列汇总到产品中。TBC 大纲还要求有多个整合路径;有些产品必须整合到多个类别中。
-
州/省累计到区域,区域合并到市场。
-
月数累计到季度,季度合并到年度。
合并运算符定义 Essbase 如何将分支中每个成员的数据汇总到父代。例如,使用默认的加法 (+) 运算符, Essbase 将添加 100 ‑ 10、100 ‑ 20 和 100 ‑ 30,并将结果存储在父代 100 中,如下所示。
图 1-7 TBC 产品维

“Product(产品)”维主要包含添加 (+) 运算符,这些运算符表示每个成员组都已添加并累计到父代。Diet 具有波浪号 (~) 运算符,该运算符表示 Essbase 在合并到父代产品时不包括 Diet 成员。Diet 成员完全由共享的成员组成。TBC 产品管理小组希望能够在报告中隔离饮食饮料,因此 TBC 创建了一个单独的饮食成员,不会影响整体整合。
职位和运算符对合并的影响
Essbase 按自上而下的顺序计算分支的数据。例如,如果有两个成员标记了加号 (+) 运算符,而第三个成员标记了乘号 (*) 运算符,则 Essbase 将添加前两个成员并将之乘以第三个成员。
由于 Essbase 合并时始终以顶级成员开头,因此成员的顺序和标签非常重要。
共享成员的合并
共享成员也会影响合并路径。共享成员概念允许两个同名的成员共享相同的数据。共享成员存储指向其他成员中包含的数据的指针,因此 Essbase 仅存储一次数据。共享成员必须位于同一个维。数据可以由多个成员共享。
合并核对清单
使用以下核对清单帮助定义合并:
-
您是否在大纲中标识了合并?
-
是否使用正确的合并运算符标记每个成员?
-
是否为指定的成员指定共享成员标记?
-
如果设计为属性维(共享维除外),共享成员是否更高效?
示例度量维上的标记和运算符
“度量”维标记为“帐户”,是虚构 TBC 大纲中最复杂的维,因为它同时使用时间和帐户数据。它还包含用于帮助 Essbase 计算大纲的公式和特殊标记。
检查 TBC 定义的度量维标记。“度量”维的许多属性在前面的主题中进行了讨论:加 (+)、减(–)和无合并 (~) 运算符以及帐户和仅标签标记:
-
库存和比率成员名称可帮助用户导航数据。它们不包含数据,因此仅接收标签。
-
“度量”维本身具有仅标签标记。度量的一些成员具有 Dynamic Calc(动态计算)标记。
-
度量的一些成员具有时间平衡标记(TB 优先或 TB 末尾)。
图 1-8 TBC 度量维

账户维计算
标记为帐户的 Essbase 维可以使用影响计算的特殊属性。时间余额标记或属性向 Essbase 提供有关如何计算与时间周期相关的帐户的说明。差异报告属性定义 Essbase 如何计算实际数据和预算数据之间的差异。
本主题讨论标记为帐户的维的两种计算形式。
Time Balance(剩余时间)属性
要使用剩余时间标记/属性,需要具有标记为“账户”的维和标记为“时间”的维。第一个标记、最后一个标记、平均标记和费用标记专门用于帐户维成员。
在“TBC 度量”维中,“期初库存”数据表示 TBC 在每个月初携带的库存。期初库存的季度值等于季度中第一个月的期初值。期初库存需要时间结余标记,首先需要 TB。
期末库存数据表示 TBC 在每个月底携带的库存。期末库存的季度值等于季度中上个月的期末值。期末库存需要剩余时间标记(最后 TB)。下表定义帐户维的时间余额标记。
表 1-6:客户成员标记
| 标记 | 说明 |
|---|---|
|
上次时间余额 |
最后一个子成员的值将结转到父代。例如,将 March 结转到 Qtr1。 |
|
第一个时间余额 |
第一个子项的值将传递给父项。例如,将 Jan 传送到 Qtr1。 |
在下表中,Qtr1(右边的第二列)和 Year(最右边的列)显示时间维中的合并如何受帐户维中的时间余额属性的影响。数据仅显示在第一季度。
表 1-7 受时间余额属性影响的 TBC 合并
| 尺寸 | Jan | Feb | 三月 | Qtr1 | Year |
|---|---|---|---|---|---|
|
账户成员 1 |
11 |
12 |
13 |
36 |
季度 1 + 季度 2 + 季度 3 + 季度 4 |
|
账户成员 2(TB 优先) |
20 |
25 |
21 |
20 |
20 |
|
账户成员 3(TB 最后) |
25 |
21 |
30 |
30 |
Qtr4 的值 |
通常,时间维中父代的计算基于父代的子代的合并和公式。但是,如果帐户分支中的成员标记为“TB 优先”,则时间维中的任何父代都与标记为“TB 优先”的成员匹配。
有关示例,请参阅剩余时间属性。
差异报告
一个 TBC Essbase 要求是能够对实际数据与预算数据执行差异报告。差异报告计算要求任何向公司表示费用的货品必须具有费用报告标签。库存成员、总费用成员和销货成本成员都会收到用于差异报告的费用报告标签。
Essbase 提供了两个差异报告属性 - 费用和非费用(默认)。差异报表属性定义 Essbase 如何计算成员公式中具有 @VAR 或 @VARPER 函数的成员中的实际数据与预算数据之间的差异。
将成员标记为费用时,@VAR 函数将计算“预算 - 实际”。例如,如果预算金额为 $100,实际金额为 $110,则差异为– 10。
如果没有费用报告标签,@VAR 函数将计算实际 - 预算。例如,如果预算金额为 $100,实际金额为 $110,则差异为 10。
公式和函数
公式计算 Essbase 大纲中成员之间的关系。可以将公式应用于成员,也可以在计算脚本中应用公式。函数是预定义的例程,用于执行专门计算,返回成员集或数据值集。公式包括运算符和函数,以及维名称、成员名称和数字常量。
Essbase 支持以下运算符:
-
执行算术运算的数学运算符
-
条件运算符,用于将逻辑条件构建为计算
-
跨维运算符,指向特定数据库成员组合的数据值
Essbase 函数包含超过 175 个预定义例程,以扩展 Essbase 的计算功能。Essbase 包含以下功能:
-
布尔函数,通过返回 TRUE 或 FALSE 值来提供条件测试
-
数学函数,执行专门的数学计算
-
关系函数,在基于当前成员的位置进行计算期间查找数据库中的数据值
-
范围函数,将成员范围声明为另一个函数或命令的参数
-
执行专门财务计算的财务职能
-
成员集函数,这些函数基于指定的成员并生成成员列表
-
分配函数,用于跨子成员分配在父层输入的值
-
预测函数,用于处理数据以平滑数据、插入数据或计算未来值
-
统计函数,用于计算高级统计
-
日期和时间函数,在计算公式中使用日期和时间特征
-
计算模式函数,用于指定 Essbase 用于计算公式的计算模式
“度量”维使用以下公式:
-
利润 = 销售额 - 销货成本
-
总费用 = 市场营销 + 薪资 + 杂项
-
利润 = 利润 - 总费用
-
利润百分比 = 利润百分比销售额
-
毛利百分比 = 毛利百分比销售额
-
每盎司利润 = 利润/@ATTRIBUTEVAL(@NAME(盎司))
Essbase 使用合并运算符计算“利润”、“总费用”和“利润”成员。Margin% 公式使用 % 运算符,表示“Express Margin as a percent of Sales”。Profit% 公式使用相同的 % 运算符。“每盎司利润”公式使用除法运算符 (/) 和函数 ( @ATTRIBUTEVAL ) 计算以盎司大小的产品的盈利能力。
注意:
在“每盎司利润”公式中, @NAME 函数还用于处理 @ATTRIBUTEVAL 函数的字符串“盎司”。
有关运算符、函数和语法的完整列表,请参阅计算函数列表。另请参阅为块存储多维数据集开发公式。
动态计算
设计数据库计算时,您可能希望将成员定义为动态计算成员。将成员标记为动态计算时, Essbase 将在检索数据时计算该成员的组合,而不是在常规数据库计算期间预计算成员组合。
动态计算缩短了常规数据库计算时间,但可能会增加动态计算数据值的检索时间。
在以下大纲中,“TBC 度量”维包含多个标记为动态计算的成员 - 利润、利润、总费用、利润百分比和利润百分比。
图 1-9 TBC 度量维,动态计算标记

执行整体数据库计算时,不会计算动态计算成员及其对应的公式。当用户从 Smart View 查询这些成员时,会计算这些成员。Essbase 不存储查询的值,而是重新计算每个后续查询的值。
要决定何时动态计算数据值,请考虑以下领域的优先级:
-
最佳常规计算时间(批量计算)
-
磁盘空间使用率低
-
缩短数据库重构时间
-
为用户快速检索数据
-
缩短备份时间
请参阅动态计算数据值。
两遍执行计算
双遍属性仅适用于标记为帐户的 Essbase 维的成员,以及标记为动态计算的成员。此标签指示某些成员公式必须计算两次才能生成所需的值。
在 TBC 数据库中,“毛利百分比”和“利润百分比”包含标签两遍。
以下示例说明为什么利润百分比(基于公式“利润百分比销售额”)具有两遍标记。表有五列(列标题从左至右标记为“维”、“一月”、“二月”、“三月”和“季度 1”)和三行(标记为“利润”、“销售”和“利润百分比”)。Jan、Feb、Mar 和 Qtr1 是 Year 维的成员。“利润百分比”、“销售百分比”和“利润百分比”是“度量(帐户)”维的成员。
以下示例定义要加载到 Essbase 中的初始数据。Profit(利润)-> Jan(一月)、Profit(利润)-> Feb(二月)和 Profit(利润)-> Mar(三月)的数据值为 100。Sales -> Jan、Sales -> Feb 和 Sales -> Mar 的数据值为 1000。
表 1-8 加载到 Essbase 中的数据
| 维 | Jan | Feb | 三月 | Qtr1 |
|---|---|---|---|---|
|
Profit |
100 |
100 |
100 |
不适用 |
|
销售 |
1000 |
1000 |
1000 |
不适用 |
|
利润百分比 |
不适用 |
不适用 |
不适用 |
不适用 |
首先, Essbase 计算度量维。在下表中,"Profit %" -> "Jan"、"Profit %" -> "Feb" 和 "Profit %" -> "Mar" 的数据值为 10%。
表 1-9 Essbase 计算度量维之后的数据
| 维 | Jan | Feb | 三月 | Qtr1 |
|---|---|---|---|---|
|
Profit |
100 |
100 |
100 |
|
|
销售 |
1000 |
1000 |
1000 |
|
|
利润百分比 |
10% |
10% |
10% |
不适用 |
接下来, Essbase 将计算年份维。数据在维中累计。在下表中,利润 -> Qtr1 (300) 和销售 -> Qtr1 (3000) 的数据值是正确的。“利润百分比”->“季度 1”(30%) 的数据值不正确,因为“利润百分比”标记为双遍计算。
表 1-10 Essbase 计算年份维之后的数据
| 维 | Jan | Feb | 三月 | Qtr1 |
|---|---|---|---|---|
|
Profit |
100 |
100 |
100 |
300 |
|
销售 |
1000 |
1000 |
1000 |
3000 |
|
利润百分比 |
10% |
10% |
10% |
30% |
然后, Essbase 将在每次出现成员利润百分比时重新计算利润百分比。在下表中,第二次传递后,利润百分比 -> Qtr1 (10%) 的数据值正确。
表 1-11 Essbase 重新计算利润百分比后的数据
| 维 | Jan | Feb | 三月 | Qtr1 |
|---|---|---|---|---|
|
Profit |
100 |
100 |
100 |
300 |
|
销售 |
1000 |
1000 |
1000 |
3000 |
|
利润百分比 |
10% |
10% |
10% |
10% |