数据集可能会非常稀疏,计算空的结果集会显著降低性能。要避免计算空的结果集,您可以在自定义计算公式中使用 NONEMPTYTUPLE 属性子句。使用 NONEMPTYTUPLE 限制系统尝试计算的位置。要设置此项,您需要定义一个元组,仅当该元组不为空时才计算该元组。然后,定义要应用于该元组的简单数字运算。
语法
使用 NONEMPTYTUPLE 的语法如下所示:
tuple := NONEMPTYTUPLE (nonempty_member_list) numeric_value_expression;
其中:
tuple
:指定一个或多个成员的 MDX,其中每个成员都需要来自不同的维
NONEMPTYTUPLE
:一个可选属性,可以用来优化计算性能。如果使用,则必须在此文字属性后加上 nonempty_member_list
。
nonempty_member_list
:来自不同维的一个或多个成员的名称(用逗号分隔)。元组必须以 numeric_value_expression
形式表示。
numeric_value_expression
:一个简单的 MDX 数值表达式,例如数字或算术运算
表达式必须位于等式的右侧。您必须仅使用算术运算符。如果使用了非算术运算符(例如 AND、OR 或 IF),则会返回错误。
例如:
[UnitCost] := NONEMPTYTUPLE ([TotalExpense], [NetBalance]) ([TotalExpense], [NetBalance]) / ([Units], [CostPool]);
此示例含义如下:
查看元组 ([TotalExpense], [NetBalance])
。
如果该元组或交叉点不为空(即,它包含实际值),则执行以下操作:
获取元组 ([TotalExpense], [NetBalance])
并用它除以元组 ([Units], [CostPool])
来得到 UnitCost
。
如果元组为空,则跳过它并计算下一个实例。
使用规则
元组是来自不同维的成员的组合,例如:
([product2], [account5], customer3])
([myactivity], [yourdepartment])
将 NONEMPTYTUPLE 添加到 Profitability and Cost Management 自定义计算规则的公式中时,需要遵循如下要求,其中 A、B 和 C 表示元组:
只有当元组具有某个值时才能使用 NONEMPTYTUPLE。否则,会产生意外结果。假设存在以下情况:
A=B+C
- 不能对 B
或 C
使用 NONEMPTYTUPLE。如果缺少 B
或 C
,则结果将为“无”,这不正确。
Note:
要使用 NONEMPTYTUPLE 计算 A=B+C,请使用两个规则:
规则 1:A=A+B
,NONEMPTYTUPLE 用于 B
规则 2:A=A+C
(或 A=A-C
),NONEMPTYTUPLE 用于 C
在此示例中,只要 B
不缺少值,它就将加到 A
;只要 C
不缺少值,它就将加到 A
。
A=B-C
- 不能对 B
或 C
使用 NONEMPTYTUPLE。如果缺少 B
或 C
,结果将为“无”,这是不正确的(除非您如前所述使用两个规则)。
当结果相同时,无论是否缺少元组,都可以使用 NONEMPTYTUPLE。假设存在以下情况:
A=B
- 可以对 B
使用 NONEMPTYTUPLE。
A=B*C
- 可以对 B
或 C
使用 NONEMPTYTUPLE。
A=B/C
- 可以对 B
或 C
使用 NONEMPTYTUPLE。
进行汇总时,您可以在乘法或除法运算中放心使用 NONEMPTYTUPLE。对于加法或减法,必须针对每种单独情况来评估 NONEMPTYTUPLE 的使用,以避免意外结果。
Note:
有关编写自定义计算规则的信息,请参阅“自定义计算规则的公式语法”。有关启用非空元组的信息,请参阅“有关 Enterprise Profitability and Cost Management 的常见问题 (FAQ)”中的“如何在 Enterprise Profitability and Cost Management 中启用非空元组 (NET)?”。