与成员相关的函数

在公式中使用 Essbase 成员函数可指定成员列表和范围、生成成员列表、处理成员名称以及跨维处理成员组合。

指定成员列表和范围

使用某些 Essbase 计算函数时,可能需要输入大纲成员列表和/或成员范围。列表可以是逗号分隔的文字成员名称列表,也可以由计算函数返回。可以使用冒号语法指定范围,也可以由计算函数返回。

例如, @ISMBR 函数将测试当前正在计算的成员是否与指定成员的任何列表或范围匹配。

下表列出了用于指定成员的语法:

表 17-8 中用于指定成员列表和范围的语法

成员列表或范围 语法

一个会员

成员名称。

例如:

Mar2001

成员的列表

成员名称的逗号分隔 (,) 列表。

例如:

Mar2001, Apr2001, May2001

同一级别的所有成员范围,介于两个定义成员之间并包括这两个定义成员

由冒号 (:) 分隔的两个定义成员名称。例如:

Jan2000:Dec2000

同一代中所有成员的范围,介于两个定义成员之间并包括这两个定义成员

由两个冒号 (::) 分隔的两个定义成员名称。

例如:

Q1_2000::Q4_2000

函数生成的成员列表或成员范围

有关成员列表内容和相应函数的列表,请参阅生成成员列表

范围和列表的组合

用逗号 (,) 分隔每个范围、列表和函数。

例如:

Q1_97::Q4_98, FY99, FY2000

或者

@SIBLINGS(Dept01), Dept65:Dept73, Total_Dept

如果未在需要成员的函数中指定成员列表或成员范围,则 Essbase 将使用标记为时间的维的 0 级成员。如果未将维标记为时间,则 Essbase 会显示错误消息。

生成成员列表

Essbase 成员集函数允许您生成基于指定成员或成员列表的成员列表。

表 17-9 成员集函数列表

函数 成员列表的内容

@ALLANCESTORS

指定成员所有祖先,包括指定成员作为共享成员出现的祖先。此函数不包含指定成员。

@IALLANCESTORS

指定成员(包括指定成员作为共享成员出现的祖先)的所有祖先。此函数包括指定的成员。

@ANCEST

指定层代或级别上为指定成员祖先的成员

@ANCESTORS

指定成员(可选,最多指定生成或级别)的所有祖先,但不是指定成员

@IANCESTORS

指定成员的所有祖先(可选,最多指定层代或级别),包括指定成员

@LANCESTORS

指定成员列表的所有祖先(可选,最多指定层代或级别),但不包括指定成员

@ILANCESTORS

指定成员列表(可选,最多指定层代或级别)的所有祖先,包括指定成员

@ATTRIBUTE

与指定属性维成员关联的所有基维成员

@WITHATTR

与满足指定条件的属性关联的所有基本成员

@BETWEEN

名称字符串值在两个指定字符串标记之间(包括这两个字符串标记)且包含这两个字符串标记的所有成员

@CHILDREN

指定成员的所有子项,但不包括指定成员

@ICHILDREN

指定成员的所有子项,包括指定成员

@CURRMBR

为指定维计算的当前成员

@DESCENDANTS

指定成员的所有后代(可选,最多指定层代或级别),但不是共享成员的指定成员或后代

@IDESCENDANTS

指定成员的所有后代(可选,最多指定层代或级别),包括指定成员,但不包括共享成员的后代

@LDESCENDANTS

指定成员列表的所有后代(可选,降至指定层代或级别),但不包括指定成员

@ILDESCENDANTS

指定成员列表的所有后代(可选,降至指定层代或级别),包括指定成员

@RDESCENDANTS

指定成员的所有后代(可选,最多指定层代或级别),包括共享成员的后代,但不包括指定成员

@IRDESCENDANTS

指定成员的所有后代(可选,最多指定层代或级别),包括共享成员的指定成员和后代

@EQUAL

与指定令牌名称匹配的成员名称

@NOTEQUAL

与指定令牌名称不匹配的成员名称

@EXPAND

通过针对成员列表中的每个成员调用成员集函数,扩展成员搜索

@GENMBRS

指定维中指定层代的所有成员

@LEVMBRS

指定维中指定级别的所有成员

@LIKE

与指定模式匹配的用户名。

@LIST

需要多个列表参数的函数要处理的单独成员列表

@MATCH

与指定的通配符选择匹配的所有成员

@MBRCOMPARE

与比较标准匹配的成员名称

@MBRCOMPARE

指定成员的父项

成员 (@M)

名称为所提供字符串的成员

@MERGE

合并另一个函数处理的两个成员列表的列表

@PARENT

指定维中正在计算的当前成员的父代

@RANGE

来自一个维的指定成员列表,该成员列表与来自另一个维的指定成员范围

删除 (@R)

已从中删除某些成员的成员列表

@RELATIVE

指定层代或级别上位于指定成员之上或之下的所有成员

共享 (@S)

用于标识指定成员之间所有共享成员的成员列表

@SIBLINGS

指定成员(但不是指定成员)的所有同级

@ISIBLINGS

指定成员的所有同级,包括指定成员

@LSIBLINGS

数据库大纲中指定成员之前的所有同级,但不是指定成员

@RSIBLINGS

数据库大纲中指定成员之后的所有同级,但不是指定成员

@ILSIBLINGS

数据库大纲中指定成员之前的所有同级,包括指定成员

@IRSIBLINGS

数据库大纲中指定成员之后的所有同级,包括指定成员

@SHIFTSIBLING

与成员之间的指定距离的同级

@NEXTSIBLING

成员的下一个或最右侧的兄弟姐妹

@PREVSIBLING

成员的前一个或最左侧的兄弟姐妹

@UDA

Essbase Server 上定义了公用 UDA 的所有成员

@XRANGE

一个成员列表,用于标识在同一个级别上的两个指定的单维和/跨维成员之间(含)的成员范围

处理成员名称

在块存储公式和计算脚本中,可以将 Essbase 成员名称用作字符串。

下表列出了字符串处理函数:

表 17-10:字符串处理函数的列表

函数 字符串处理

@CONCATENATE

创建一个字符串,将成员名称或指定的字符串附加到其他成员名称或字符串

@NAME

以字符串形式返回成员名称

@SUBSTRING

从另一个字符串或成员名称返回字符的子字符串

跨维使用成员组合

Essbase 公式中的跨维运算符 -> 是引用特定成员组合的多维数据值的一种方法。FIX 命令可能更适合性能。

使用跨维运算符指向特定成员组合的数据值。使用连字符 (-) 和大于符号 (>) 创建跨维运算符。请勿在跨维运算符和成员之间添加空格。

注意:

使用跨维运算符可能会对性能产生重大影响。有关优化准则,请参见 Cross-Dimensional Operators in Member Formulas

下面是一个多维立方体的简化图示,其中 Jan 是 X 轴上的第一列,Sales 是 Y 轴上的第四行和最顶的行,Actual 是 Z 轴上的第一行。在此示例中,“销售”->“一月”->“实际”是单个数据值的交集。

图 17-2 指定单个数据值


此图显示一个多维数据集,其中显示了单个数据值的交叉点,如表前面的文本中所述。

以下示例将杂项费用分配给每个市场中的每个产品,说明如何使用跨维运算符。所有市场中所有产品的 Misc_Expenses 价值是已知的。该公式将 Misc_Expenses 总值的百分比分配给每个“产品”->“市场”组合。分配基于每个市场中每个产品的销售价值。

Misc_Expenses = Misc_Expenses -> Market -> Product * 
   (Sales / ( Sales -> Market -> Product));

Essbase 会循环使用数据库,执行以下计算:

  1. 将当前成员组合的销售值除以所有市场和所有产品的总销售值(销售 -> 市场 -> 产品)。

  2. 将步骤 1 中计算的值乘以所有市场和所有产品的 Misc_Expenses 值 (Misc_Expenses -> Market -> Product)。

  3. 将结果分配给当前成员组合的 Misc_Expenses。