略過空白元組以最佳化自訂計算

資料集可能會非常稀疏,且計算空結果集可能會使效能大幅降低。為避免計算空白的結果集,您可以在自訂計算公式中使用 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,結果將為 None,這是不正確的值。

      Note:

      若要使用 NONEMPTYTUPLE 計算 A=B+C,請使用兩個規則:

      • 規則 1:A=A+B (在 B 上使用 NONEMPTYTUPLE)

      • 規則 2:A=A+C (或 A=A-C) (在 C 上使用 NONEMPTYTUPLE)

      在此情況下,每當 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。針對相加或相減,您必須評估它在每一個各別情況的用法,以避免非預期的結果。

Note:

如需有關寫入自訂計算規則的詳細資訊,請參閱自訂計算規則的公式語法