計算指令碼中的公式

Essbase 公式會計算資料庫大綱中成員之間的數學和位置關係。您可以將它們套用至大綱中的成員,並 / 或在計算命令檔中使用它們,以嚴格控制您的計算。

當您在計算命令檔中定義 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 會循環整個資料庫,並執行下列計算:

  1. IF 陳述式會檢查目前成員組合的 Sales 值是否大於 100。

  2. 如果 Sales 大於 100, Essbase 會從 Sales 的值減去 COGS 中的值,將差異乘以 2,並將結果置於 Profit 中。

  3. 如果 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);