聚總儲存立方體的自訂計算
自訂計算可藉由在聚總儲存 (ASO) 立方體上執行週期性計算來擴充 Essbase 的分析功能。您可以針對特定立方體區域進行計算,提供會計的借方、貸方及沖銷資訊。
您可以為更新目標層級 0 儲存格的聚總儲存立方體撰寫自訂計算。自訂計算指令碼是以 MDX 表示。
使用自訂計算,您可以對總帳中的科目餘額進行基本數學計算,並將結果寫入 Essbase 彙總儲存立方體的目標層級 0 成員。您可以對科目餘額或固定金額執行計算,也可以排定在每個會計期間重複執行。
自訂計算在立方體用於總帳報表時十分有用,其中雙重輸入會計已生效。借方項目 (如資產與支出) 必須與貸方項目 (如權益與收入) 進行平衡。
使用下列工作流程來建立與執行自訂計算:
-
建立以 MDX 表示的計算命令檔。
-
選取要執行計算的立方體區域。您可以使用目標和 POV (檢視點) 參數,在執行時提供區域。
-
若您使用借方與貸方處理,請選取大綱中的借方與貸方成員,以寫入正值與負值。您可以在執行階段提供這些參數。
-
如果您使用沖銷項目,請選取應進行沖銷項目的區域。您可以在執行時使用 MDX 元組提供此參數。如果未指定偏移量或為空白,則不會執行偏移量計算。
附註:
在總帳簿記中,沖銷分錄是分類帳相反側的平衡評量;例如,一月份的 $100 貸方可能會在分類帳的借方加上 $100 沖銷,因此可以平衡分類帳,以準備該金額的即將到期費用。
-
執行自訂計算命令檔。
自訂計算條件清單
當您為 Essbase 彙總儲存 (ASO) 立方體設計自訂計算時,要考慮的準則包括:POV (內容區域)、MDX 計算指令碼、目標 (寫入結果)、來源區域 (由公式參考)、選擇性沖銷值,以及選擇性的貸方與借方成員。
自訂計算功能取決於各種指定的準則。請先複查這些條款後再繼續。
表格 38-1 自訂計算條件的描述
| 準則 | 描述 |
|---|---|
|
POV |
資料庫中的對稱區域,描述執行自訂計算的相關資訊環境。 屬性成員無法用於此引數。 |
|
計算指令集 |
以 MDX 表示的計算命令檔。 屬性成員無法用於方程式的左側。 |
|
Target |
MDX 中表示的元組引數,可定義寫入計算結果之立方體中的區域。此引數會與每個公式的左側和位移結合,以決定寫入結果和位移值的位置。 屬性成員無法用於此引數。 |
|
(選用) 位移 |
寫入每個來源金額沖銷值之資料庫中的位置。 屬性成員無法用於此引數。 |
|
(選用) 貸方與借方成員 |
在雙重輸入會計中,平衡一個交易的日記帳分錄。兩者都是 MDX 成員表示式。借方成員指出要寫入正結果值的成員,而貸方成員指出要寫入負結果值的成員。 屬性成員無法用於此引數。 |
|
來源區域 |
MDX 集表示式,指定命令檔中公式所參照的立方體區域。 |
撰寫並執行 ASO 自訂計算
撰寫並執行 Essbase 彙總儲存立方體的自訂計算,以更新目標層級 0 儲存格。自訂計算指令碼是以 MDX 表示。若要執行命令檔,請使用 MaxL 執行計算。
撰寫自訂計算
自訂計算指令碼是您以 .csc 副檔名建立和儲存的檔案。在 MDX 中建立含有一或多個元組表示式配對的自訂計算指令碼,並以分號終止。語法:
tuple := numeric_value_expression;元組為一或多個成員的 MDX 規格,其中兩個成員皆不屬於相同維度。元組必須位於方程式的左側,而且是決定自訂計算結果的寫入位置的主要係數。
元組表示式中只允許成員名稱。自訂計算指令碼不支援使用 MDX 函數。
附註:
決定結果目標的次要因子是 target 參數,而第三個因子是 POV 參數。您可以在計算執行時間指定第二個和第三個參數,而不是作為計算命令檔的一部分。
numeric_value_expression 是簡單的 MDX 數值表示式,例如數字或算術作業。表示式必須位於等式的右側。只允許使用算術運算子。如果使用非算術運算子 (例如 AND、OR 或 IF 陳述式),則會傳回錯誤。
成員名稱可以用於數值表示式中,但自訂計算命令檔不支援使用成員函數。
屬性成員無法用於自訂計算指令碼中方程式的左側。
您也必須定義來源區域,以作為 Essbase 的效能提示。Essbase 會預先擷取來源區域中指定的資料,並使用該資料來執行命令檔中指定的計算。
執行自訂計算
您可以使用 MaxL 執行計算 (彙總儲存) 陳述式來執行自訂計算。
您也可以透過呼叫 Java API 方法 IEssPerformCustomCalc.performCustomCalc,或 C API 函數 EssPerformCustomCalcASO,使用 API 執行自訂計算指令碼。
您也可以使用 Oracle Hyperion Calculation Manager 來設計自訂計算,並將其部署至 Enterprise Scheduling Services。
自訂計算的範例使用案例
此範例使用案例用於 Essbase 彙總儲存 (ASO) 立方體上的自訂計算,使用貸方成員、借方成員和沖銷來執行商業租賃費用分攤。
請考慮包含下列維度的大綱:
-
公司,包含 CompanyA、CompanyB 及其他下階。
-
部門,包含編號部門,例如 101、102、103。
-
科目:科目 5740 為租金費用科目,而 SQFT 為統計科目,用來記錄每個部門的平方英呎。
-
案例,其中「實際」成員是資料過帳處,而「配置」成員是儲存配置和自訂計算的地方。「案例」成員是彙總子成員「實際」和「配置」的父項。
-
年度:依月份和季別組織的時間維度。
-
地理區域:依州別與城市組織的維度。
-
AmountType ,其中「借方」為目標,而「貸方」為沖銷。
-
專案,包含專案的維度,例如 Proj1、Proj2。
POV 是 MDX 集表示式,指出應執行自訂計算的位置。指定方式如下:
CrossJoin( { ( [Company], [101], [Jan], [Scenario] ) },
Descendants( Geography, Geography.Levels(0)) )
DebitMember 是 MDX 成員表示式,表示應該寫入正結果值的借方成員。它被指定為 [BeginningBalance_Debit]。
CreditMember 是 MDX 成員運算式,表示應寫入負值與沖銷結果值的貸方成員。它被指定為 [BeginningBalance_Credit]。
附註:
當所有結果值的總和為負數時,偏移會寫入借方成員。
偏移是 MDX 元組表示式,表示應在何處進行偏移項目。它被指定為 ([Account_NA], [Project_NA])。
偏移表示式會與「目標」和 POV 結合,以決定進行偏移項目的位置。如果維度重疊,則解析偏移位置的順序為偏移、目標和 POV,依此順序排列。
目標是 MDX 元組表示式,指出自訂計算結果的寫入位置。它被指定為 (Allocation)。
目標表示式會與 POV 和自訂計算命令檔中每一行的左側合併,以決定寫入結果的位置。如果維度重疊,解析目標位置的順序為方程式、目標和 POV 的左側,依順序排列。在此範例中,結果會寫入「配置」成員,因為目標會覆寫 POV 中指定的「案例」成員。
以下是自訂計算指令碼的範例:
(AccountA,Proj1) := 100;
([AccountB], [Proj1]) := ([AccountB], [Proj1]) * 1.1;
(AccountC,Proj1) :=
((AccountB,Proj1,2007) + (AccountB, Proj1)) / 2;
(AccountA,Proj2) :=
((AccountD,Proj1) +
(AccountB,Proj2)) / 2;對於 POV 中的每個組合,
-
計算命令檔會在目前 POV 組合的環境定義中執行。
-
系統會將一個位移值寫入目標位置。
附註:
每個公式 (計算命令檔中的行) 會同時執行,而不是依序執行。因此,您無法在後續公式中使用一個公式的結果。
若要定義來源區域,請檢查自訂計算命令檔,並決定在方程式右側參考哪些成員。來源區域至少應包含來自自訂計算指令碼中指派陳述式右側的所有成員。
將來源區域定義為單一 MDX 集。如果方程式右側的成員來自多個維度,您可以使用 CrossJoin 從兩個集合建立集合。CrossJoin 只接受兩個集合,因此您可能需要使用巢狀 CrossJoins。
上述自訂計算指令碼的來源區域為:
Crossjoin(
{[AccountB], [AccountD]},
Crossjoin(
{[Proj1], [Proj2]}, {[2007]}
)
)
不需要在來源區域中包含任何未在指令檔中指派的成員。例如,如果您將 [AccountC] 新增至來源區域,但該區域並未用於命令檔中,則會忽略該區域,並可能導致效能稍微降低。
不需要將來源區域中的數字列入考量。例如,自訂計算指令碼中的下列指派不需要新增至來源區域:([Bud Var]):=10。
使用 NONEMPTYTUPLE 最佳化自訂計算
使用 NONEMPTYTUPLE 特性時,您可以最佳化 Essbase 彙總儲存 (ASO) 自訂計算指令碼,藉由在計算大型稀疏資料集時略過空白元組來節省記憶體資源。
由於大型資料集可能非常稀疏,因此在自訂計算指令碼中使用 NONEMPTYTUPLE 特性可最佳化指令碼以節省記憶體資源。
您可以在 MDX 中建立包含一或多個元組表示式配對的自訂計算指令碼,並以分號終止。您可以選擇在自訂計算指令碼中包含 NONEMPTYTUPLE 特性子句,篩選出空白的結果集。
在自訂計算命令檔中使用 NONEMPTYTUPLE 特性子句,會指示 Essbase ,每當指定的 nonempty_member_list 為空白時,計算元組的儲存格值都是空的。
語法
use_optimized_way;
tuple := [NONEMPTYTUPLE (nonempty_member_list)] numeric_value_expression;其中
-
use_optimized_way - 在計算指令碼中啟用 NONEMPTYTUPLE 特性時所需的常值關鍵字。如果省略,會忽略 NONEMPTYTUPLE 指令。
-
tuple —一個或多個成員的 MDX 規格,其中沒有兩個成員可來自相同維度。
-
NONEMPTYTUPLE —您可用來優化計算績效的選用屬性。如果使用,則必須使用 nonempty_member_list 跟隨此文字特性。
-
nonempty_member_list —來自不同維度的一個或多個以逗號分隔的成員名稱。
-
numeric_value_expression - 簡單的 MDX 數值表示式,例如數字或算術運算。表示式必須位於等式的右側。只允許使用算術運算子。如果使用非算術運算子 (例如 AND、OR 或 IF 陳述式),則會傳回錯誤。
範例
下列自訂計算指令碼範例包含 NONEMPTYTUPLE 特性子句,以篩選出空的元組,使其不包含在計算階段中。
use_optimized_way;
([Balance].[Net Balance].[Net Change].[Allocation Out]):= NONEMPTYTUPLE ([Balance].[Remainder],[Rule]) -(([Balance].[Remainder],[Rule])*(20.24000/100));([2014], [August], [Actual]):= NONEMPTYTUPLE ([2014], [January], [Actual]) ([2014], [January], [Actual]);進一步資訊