开发关于聚合存储大纲的公式
公式计算 Essbase 大纲中成员之间的关系。聚合存储 (ASO) 公式与块存储公式不同。在 MDX 中将聚合存储 (ASO) 公式编写为数值表达式,并将其应用于多维数据集大纲,在多维数据集大纲中,数据检索时会动态计算这些公式。
ASO 和 BSO 公式之间的差异
如果您熟悉块存储 (BSO) 大纲上的公式,请注意聚合存储 (ASO) 中公式的差异。
-
Essbase 提供了一种本机计算语言,用于在块存储大纲上编写公式。要为聚合存储大纲编写公式,请使用 MDX(多维表达式)语言。
-
直接将公式应用于大纲中的成员。对于块存储多维数据集,公式可以放置在计算脚本中。对于聚合存储多维数据集,无法在计算脚本中放置公式。
ASO 多维数据集的公式计算
Essbase 仅在检索数据时才会计算聚合存储大纲中的公式。计算顺序可能会影响计算结果。每当您在聚合存储大纲中的多个维上使用 MDX 公式时,最好为每个成员或维设置求解顺序。请参阅 ASO 多维数据集中的计算顺序和求解顺序。
注意:
设计聚合存储计算时,请考虑使用 MDX 公式的聚合存储成员是动态计算的。在查询动态计算的成员之前,其值为 #MISSING。
使用 MDX 公式
MDX 公式必须始终是 MDX 数值表达式。在 MDX 中,数值表达式是执行下列操作之一的函数、运算符和成员名称的任意组合:
-
计算值
-
测试条件
-
执行数学运算
数字值表达式与集合表达式不同。集合表达式用于查询轴,用于描述成员和成员组合。数值表达式指定一个值。
数字值表达式用于查询构建计算成员,这些成员是在查询的 WITH 部分中为分析目的创建的逻辑成员,但大纲中不存在这些成员。
以下查询定义计算成员并使用数值表达式为其提供值:
WITH MEMBER
[Measures].[Prod Count]
AS
'Count (
Crossjoin (
{[Units]},
{[Products].children}
)
)', SOLVE_ORDER=1
SELECT
{[Geography].children}
ON COLUMNS,
{
Crossjoin (
{[Units]},
{[Products].children}
),
([Measures].[Prod Count], [Products])
}
ON ROWS
FROM
ASOsamp.Sample在示例查询中,WITH 子句在“度量”维中定义计算成员 Product Count,如下所示:
WITH MEMBER
[Measures].[Prod Count]数字值表达式紧跟在 WITH 子句之后,并用单引号引起来。在示例查询中,数值表达式按如下方式指定:
'Count (
Crossjoin (
{[Units]},
{[Products].children}
)
)'SOLVE_ORDER 属性指定成员和公式的计算顺序。请参阅 ASO 多维数据集中的计算顺序和求解顺序。
数值表达式也可以用作 MDX 公式来计算现有大纲成员的值。
因此,您不必创建示例查询,可以在“度量”维上创建一个名为“产品计数”的大纲成员,该大纲中的计算方式与示例查询中的假设产品计数相同。
要使用公式创建计算成员,请执行以下操作:
-
创建一个成员。
-
将 MDX 公式附加到成员。
假定您创建了“产品计数”示例成员,则应使用以下公式,该公式相当于用于在示例查询中创建计算成员的数值表达式:
Count(Crossjoin ( {[Units]}, {[Products].children})) -
通过验证大纲来验证公式。
从聚合存储多维数据集检索数据时,公式用于计算成员值。
可以在公式中使用替代变量。例如,可以定义一个名为“EstimatedPercent”的替代变量,并将不同的百分比作为替代变量值。请参阅实施变量以更改信息。
在将公式应用于大纲中的成员之前,您可以编写包含计算成员的 MDX 查询。当您可以编写一个 MDX 查询来返回所需的计算成员结果时,您可以将数值表达式的逻辑应用于大纲成员,并验证和测试表达式。请参阅编写 MDX 查询。