跳过空元组以优化自定义计算

数据集可能会非常稀疏,计算空的结果集会显著降低性能。要避免计算空的结果集,您可以在自定义计算公式中使用 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]);

此示例含义如下:

  1. 查看元组 ([TotalExpense], [NetBalance])

  2. 如果该元组或交叉点不为空(即,它包含实际值),则执行以下操作:

    获取元组 ([TotalExpense], [NetBalance]) 并用它除以元组 ([Units], [CostPool]) 来得到 UnitCost

  3. 如果元组为空,则跳过它并计算下一个实例。

使用规则

元组是来自不同维的成员的组合,例如:

([product2], [account5], customer3])

([myactivity], [yourdepartment])

将 NONEMPTYTUPLE 添加到 Profitability and Cost Management 自定义计算规则的公式中时,需要遵循如下要求,其中 A、B 和 C 表示元组:

  • 只有当元组具有某个值时才能使用 NONEMPTYTUPLE。否则,会产生意外结果。假设存在以下情况:

    • A=B+C - 不能对 BC 使用 NONEMPTYTUPLE。如果缺少 BC,则结果将为“无”,这不正确。

      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 - 不能对 BC 使用 NONEMPTYTUPLE。如果缺少 BC,结果将为“无”,这是不正确的(除非您如前所述使用两个规则)。

  • 当结果相同时,无论是否缺少元组,都可以使用 NONEMPTYTUPLE。假设存在以下情况:

    • A=B - 可以对 B 使用 NONEMPTYTUPLE。

    • A=B*C - 可以对 BC 使用 NONEMPTYTUPLE。

    • A=B/C - 可以对 BC 使用 NONEMPTYTUPLE。

进行汇总时,您可以在乘法或除法运算中放心使用 NONEMPTYTUPLE。对于加法或减法,必须针对每种单独情况来评估 NONEMPTYTUPLE 的使用,以避免意外结果。

Note:

有关编写自定义计算规则的信息,请参阅“自定义计算规则的公式语法”。有关启用非空元组的信息,请参阅“有关 Enterprise Profitability and Cost Management 的常见问题 (FAQ)”中的“如何在 Enterprise Profitability and Cost Management 中启用非空元组 (NET)?”。