在聚合存储大纲上编写公式

使用公式编辑器在 Essbase 聚合存储 (ASO) 大纲上编写 MDX 公式。公式使您能够应用基本数学方程式、跨维计算成员、执行条件测试以及基于用户定义的属性 (UDA) 进行筛选。

关于聚合存储大纲的公式

公式是纯文本。您可以直接将公式键入到公式编辑器中,也可以在任何文本编辑器中创建公式并将文本粘贴到公式编辑器中。

基于 MDX 的语法检查告诉您公式中的语法错误;例如,函数名称或成员不存在。可以根据函数名称列表验证未知成员名称。如果您未连接到服务实例或与大纲关联的应用程序,则 Essbase 可以将您连接到验证未知名称。

验证或保存公式时会进行语法检查。用户界面中会显示错误。如果出现错误,则选择保存或不保存公式。如果保存公式时出错,则在保存大纲时会收到警告。计算公式时出错时,将忽略公式,并为成员提供 $MISSING 值。

语法检查器无法警告公式中的语义错误。如果公式无法按预期工作,则会出现语义错误。在公式中查找语义错误的一种方法是将定义公式的数字值表达式放置到 MDX 查询中并运行它,以验证结果是否符合您的预期。

您可以在维构建数据源中包括公式。请参阅设置维构建字段类型信息

聚合存储大纲的基本方程式

可以将数学运算应用于公式以创建基本方程式。例如,以下公式将应用于 ASOsamp 基本多维数据集中的平均单位数/事务处理成员:

[Units]/[Transactions]

平均单位数/事务处理中的公式将单位数除以事务处理数,得出每个事务处理的平均单位数。

在聚合存储大纲中,成员不能标记为费用项。因此,计算中的函数(如 @VAR 和 @VARPER)通过考虑费用标记来确定两个成员之间的差异,与聚合存储大纲无关。

MDX 减法运算符可用于计算两个成员之间的差值。例如,以下公式可以应用于 ASOsamp Basic 中名为 Price Diff 的新成员,以计算已支付价格与原始价格之间的差值:

[Price Paid]-[Original Price]

聚合存储大纲中跨维的成员

ASOsamp Basic 提供了名为“合计百分比”的成员的公式。此成员公式标识由事务处理生成的考评合计的百分比。合计百分比的公式:

Transactions/
(Transactions,Years,Months,[Transaction Type],[Payment Type],
Promotions,Age,[Income Level],Products,Stores,Geography)

该公式指定一个成员 (Transactions) 除以元组 (Transactions,Years ...)。该公式列出每个维中的顶层成员,以考虑多维数据集中的所有事务处理数据;也就是说,不是“当前年份”成员的事务处理数据,而是“年份”维的所有成员的事务处理数据,不是前两个季度的月份的事务处理数据,而是所有月份的事务处理数据,等等。通过这种方式,“合计百分比”的值表示由事务处理生成的度量合计的百分比。

聚合存储大纲公式中的条件测试

可以定义使用条件测试或一系列条件测试来确定成员值的公式。使用 IIF 函数对另一个条件执行测试。您可以嵌套 IIF 函数以创建更复杂的查询。

该示例为成员指定一个公式,该公式表示公司为信用卡交易必须支付的价格,其中包括 5% 的费用。以下示例假定信用价格成员已添加到 ASOsamp 基本多维数据集的度量维。信用价格具有以下公式,当付款类型为信用卡时,该公式会增加“已付价格”的 5%。

IIF (
   [Payment Type].CurrentMember=[Credit Card],
   [Price Paid] * 1.05, [Price Paid]
)

使用 CASE、WHEN 和 THEN 结构创建包含多个测试和其他条件的公式。

过滤器函数返回满足指定搜索条件标准的输入集元组。例如,要为所有产品建立基线 (100),可以添加基线成员并为其创建公式,如下所示:

Count(Filter(Descendants([PersonalElectronics],
[Products].Levels(0)),[Qtr1] > 100.00))

汇总存储大纲中的公式中的 UDA

UDA 是您为成员创建的词或短语。例如,在 Sample.Basic 中,市场维度的顶层成员具有 UDA 小市场或 UDA 主要市场。

本主题中使用的“主要市场”示例说明如何为成员创建公式,以显示所有主要市场成员的销售总和。该示例假定已向 Sample.Basic 添加了一个新成员 (Major Market Total)。

  1. MDX 提供了一个布尔函数 IsUDA,如果成员具有关联的 UDA 标记,则返回 TRUE。如果 Market 维的当前成员具有 UDA "Major Market"(主市场),则以下语法返回 TRUE:

    IsUda([Market].CurrentMember, "Major Market")
  2. 与 IsUDA 一起使用的 Filter 函数(如以下语法所示)会循环遍历 Market 维的每个成员,并为具有 Major Market UDA 的每个成员返回一个值:

    Filter([Market].Members, IsUda([Market].CurrentMember, "Major Market"))
  3. Sum 函数添加 Filter 函数返回的值;对于 Major Market 示例,将生成以下公式:

    Sum (Filter([Market].Members, IsUda([Market].CurrentMember, "Major Market")))

    此公式附加到“主要市场合计”成员。