計算指令碼中的公式
當您在計算命令檔中定義 Essbase 公式時,其優先順序高於任何套用至立方體大綱中成員的公式。以這種方式使用公式,可使批次計算在立方體大綱中所編碼的關係之外,具有額外的彈性。
您可撰寫公式,以使用基本方程式、條件方程式與互相依公式進行計算。
在 Essbase 計算命令檔中,您可以執行下列兩個作業:
-
計算立方體大綱上的現有成員公式
-
定義一個持續計算命令檔執行期間的新公式
若要計算套用至大綱中成員的現有公式,請使用成員名稱,後面接著分號 (;)。例如,計算指令集中的下列指令會計算套用至大綱中「差異」成員的公式:
Variance;若要置換大綱計算所產生的值,您可以在計算命令檔中手動套用公式。例如,計算指令碼中的下列公式會循環整個立方體,在「薪資」、「行銷」和「雜項」成員中新增值,並將結果置於「費用」成員中。此公式會置換置於大綱中「費用」成員的任何公式:
Expenses = Payroll + Marketing + Misc;附註:
您無法將公式套用至共用成員或僅標籤成員。
另請參閱:開發區塊儲存立方體的公式。
Essbase 計算指令碼中的基本方程式
在 Essbase 計算命令檔中,您可以使用方程式將值指派給立方體大綱成員。指派會持續執行計算指令碼的持續時間。
Essbase 計算命令檔中方程式的語法如下:
member = mathematical_expression;member 是大綱的成員名稱, mathematical_expression 是任何有效的數學表示式。
Essbase 會評估表示式,並將值指派給指定的成員。
在下列範例中, Essbase 會循環資料庫,從 Sales 中的值減去銷貨成本中的值,並將結果置於利潤:
Margin = Sales - COGS;在此範例中, Essbase 會循環資料庫、從 Retail 的值中減去 Cost 的值、將結果值計算為 Retail 值的百分比,以及將結果置於 Markup:
Markup = (Retail - Cost) % Retail;您也可以在方程式中使用 > (大於) 和 < (小於) 邏輯運算子。
在下列範例中,如果二月份銷售大於一月份銷售,則「銷售增加旗標」會產生值 1;如果為 false,則結果為 0:
Sales Increase Flag = Sales -> Feb > Sales -> Jan;Essbase 計算指令碼中的條件方程式
您可以在 Essbase 計算指令碼公式中使用條件方程式,以定義 if/else 邏輯並控制計算期間的事件流程。
當您在計算命令檔中使用 IF 陳述式作為成員公式的一部分時,您必須:
-
將 IF 陳述式與單一成員建立關聯
-
將 IF 陳述式括在括號中
在下列範例中,整個 IF … ENDIF 陳述式會括在括弧中,並與 Profit 成員 Profit (IF(...)...) 相關聯:
Profit
(IF (Sales > 100)
Profit = (Sales - COGS) * 2;
ELSE
Profit = (Sales - COGS) * 1.5;
ENDIF;)Essbase 會循環整個資料庫,並執行下列計算:
-
IF 陳述式會檢查目前成員組合的 Sales 值是否大於 100。
-
如果 Sales 大於 100, Essbase 會從 Sales 的值減去 COGS 中的值,將差異乘以 2,並將結果置於 Profit 中。
-
如果 Sales 小於或等於 100, Essbase 會從 Sales 中的值減去 COGS 中的值,將差異乘以 1.5,並將結果置於 Profit 中。
如需有關條件指令和控制計算指令集流程的詳細資訊,請參閱計算指令群組
Essbase 計算指令碼中的相依公式
如同大綱中的公式一樣,計算命令檔中的公式會計算 Essbase 立方體大綱中成員之間的數學關係。
Essbase 中互相依存公式的良好範例是現金流量評估,其中的期初存貨取決於上個月的期末存貨。
當您在計算指令碼中使用互相依存公式時,請記住,相同的規則會套用至 IF 陳述式。您必須:
-
將公式與單一成員建立關聯
-
以括弧括住公式
在下列範例中,整個相依公式會包含在括號中,並與「期初庫存」成員相關聯:
"Opening Inventory"
(IF(NOT @ISMBR (Jan))
"Opening Inventory" = @PRIOR("Ending Inventory");
ENDIF;)
"Ending Inventory" = "Opening Inventory" - Sales + Additions;計算指令碼公式和智慧型計算狀態
包含關係或財務函數之稀疏維度成員的公式一律會導致重新計算,即使 Essbase 智慧型計算將區塊標示為乾淨。
假設您在稀疏維度成員上有公式,且公式包含下列其中一種類型的函數:
-
關係 (例如,@PRIOR 或 @NEXT)
-
財務 (例如 @NPV 或 @INTEREST)
Essbase 一律會重新計算包含公式的資料區塊,即使針對智慧型計算,該區塊標示為清除。
將指令碼中的公式和維度分組
您可以透過在計算指令碼中仔細分 Essbase 成員公式和維度,以大幅提高計算效能。
計算一系列成員公式
計算公式時,請務必正確地使用括弧。
在下列範例中,放置錯誤的括弧會使 Essbase 執行兩個計算通過立方體:一旦計算成員 Qtr1 與 Qtr2 上的公式,然後在 Qtr3 上計算公式:
(Qtr1;
Qtr2;)
Qtr3;相反地,下列組態會導致 Essbase 只循環立方體一次,計算成員 Qtr1、Qtr2 和 Qtr3 的公式:
Qtr1;
Qtr2;
Qtr3;或
(Qtr1;
Qtr2;
Qtr3;)同樣地,下列公式會使 Essbase 在立方體中循環一次,一次計算這兩個公式:
Profit = (Sales - COGS) * 1.5;
Market = East + West;計算一系列維度
計算一系列維度時,您可以盡可能將維度分組,以最佳化效能。
例如,下列公式只會讓 Essbase 在立方體中循環一次:
CALC DIM(Year, Measures);相反地,下列語法會使 Essbase 循環立方體兩次,針對每個 CALC DIM 命令一次:
CALC DIM(Year);
CALC DIM(Measures);