自定义汇总公式和自定义成员公式
自定义汇总公式和自定义成员公式是使用多维表达式 (MDX) 编写的表达式,用来确定与成员相关联的多维数据集的单元值。自定义汇总公式适用于级别中除计算成员以外的所有成员。自定义成员公式适用于单个成员。
自定义汇总公式和自定义成员公式不同于计算成员。自定义汇总公式和自定义成员公式适用于存在于维度表中的成员。而计算成员不存储在维度表中。计算成员还提供除维度表中成员以外的成员。
自定义汇总公式和自定义成员公式计算使用类似的 MDX 表达式。
自定义汇总公式和自定义成员公式都替代与度量值相关联的聚合函数。例如,在指定自定义汇总公式之前,使用 Sum 聚合函数的度量值对 Time 维度的如下成员产生如下值:
1997: 2100
Quarter 1: 700
Quarter 2: 500
Quarter 3: 100
Quarter 4: 800
1998: 1500
Quarter 1: 600
Quarter 2: 200
Quarter 3: 300
Quarter 4: 400
为 Year 级别指定如下自定义汇总公式:
Time.CurrentMember.LastChild
该自定义汇总公式替代 Sum 聚合函数并为 Year 成员产生如下新值:
1997: 800
1998: 400
Quarter 成员的值不变。
自定义成员公式的操作方式与自定义汇总公式类似,但每个公式只影响一个成员。自定义成员的值由自定义成员公式提供。例如,下列自定义成员公式可用来为 Time 维度中 1998 成员的 Quarter 4 子代成员提供值。
Time.[Quarter 3] * 1.5
自定义成员公式存储在维度表的一列中。启用自定义成员公式时,会出现一个对话框,可以在该对话框中选择或创建此列。此过程将在本主题后面的部分加以总结。
若要将自定义汇总公式只应用于级别中的某些成员,请使用 IIf 和 Rollupchildren 函数。RollupChildren 函数可使用函数中指定的一元运算符对指定成员的子代进行汇总。例如,若要将自定义汇总公式 Sales* 0.10 只应用于 SalesPersons 的子代,请键入下面的自定义汇总公式:
IIf(Employees.CurrentMember.Parent.Name = "SalesPersons", Sales * 0.10,
RollupChildren(Employees.CurrentMember,
Employees.CurrentMember.Properties("UNARY_OPERATOR"))
有关这些函数的更多信息,请参见 IIf 和 RollupChildren。
在求值次序方面,如果级别既有自定义汇总公式又有自定义成员公式,则自定义成员公式重写自定义汇总公式。在解析自定义汇总公式和自定义成员公式之前,系统会先解析计算成员。如果一个多维数据集中包含多个具有自定义汇总公式或自定义成员公式的维度,系统则按将维度添加到多维数据集的顺序解析公式。可以在多维数据集编辑器树窗格中查看或更改该顺序。有关各种公式的求值次序的更多信息,请参见理解传递次序和求解次序。
若要在除"(全部)"级别以外的任何级别中指定自定义汇总公式,请使用级别的 Custom Rollup Formula 属性。若要在"(全部)"级别中指定自定义汇总公式,请使用维度的 All Member Formula 属性。可以在多维数据集编辑器的属性窗格中访问这些属性。单击这些属性值旁边的编辑("...")按钮显示 MDX 生成器,您可以在其中构造自定义汇总公式。
在共享或专用维度中都可以指定自定义汇总公式。如果在两种维度中都指定了自定义汇总公式,则多维数据集专用维度中的自定义汇总公式优先。
若要在一个级别中启用自定义成员公式,请在维度编辑器(如果维度是共享的)或多维数据集编辑器(如果维度是专用的)的属性窗格中使用级别的 Custom Members 属性。单击该属性值旁边的编辑("...")按钮显示"定义自定义成员列"对话框,您可以在其中选择或创建一列来存储公式。关闭该对话框后,如果维度为写启用状态,则可以在维度编辑器(如果维度是共享的)或维度浏览器的自定义成员公式窗格中创建公式。(若要执行此操作,请确保写启用的维度所在的多维数据集自该维度上次更改后曾经过处理。)如果维度不处于写启用状态,则必须使用 Analysis Manager 之外的某种工具将公式插入到列中。
说明 如果多维数据集有一个 Aggregate Function 属性设置为 Distinct Count 的度量值,则将自定义汇总运算符或表达式添加到一个级别中将导致多维数据集的结构变得无效。