使用 Essbase 計算指令碼

Essbase 計算指令碼是可供您在 Financial Consolidation and Close 中撰寫自訂業務邏輯的語言。本節提供一些基本 Essbase 建構,以及適用於 Financial Consolidation and Close 的限制。如需關於 Essbase 計算指令碼的詳細資料,請參閱管理員適用的 Essbase Cloud 入門

一般語法

  • 分號
    • 每個陳述式結束時需要
    • 範例:Sales = Sales * 1.50;
    • FIX 和 ENDFIX 之後不需要
  • 雙引號
    • 含有空格 / 特殊字元 / 以數字開頭的成員名稱
    • 最佳作法是一律使用雙引號括住成員名稱
    • 範例:"Cash Ratio" = "Cash"/"Current Liabilities";
  • 跨維度運算子
    • 使用 -> 來指定多個維度的交集
    • 範例:"Sales"->"Changes In Net Income"->"Product1";

備註

註解以 /* 開始,以 */ 結束。

支援單行或多行備註

您可以使用工具列圖示來設定或移除備註區塊。

FIX/ENDFIX

FIX/ENDFIX 是任何計算指令碼的基本建置組塊之一。若要執行任何計算,您必須定義 FIX/ENDFIX 區段,然後將實際的商業計算放置其中。

範例:假設「產品」是您的自訂維度,而且您想要計算已售出的電視數目。您可以使用下列語法:

FIX("Televisions")

"Units_Sold" = "LED_TVs" + "UHD_TVs";

ENDFIX

實際商業計算為:

"Units_Sold = "LED_TVs" + "UHD_TVs";,會計算已售出的電視數目。

註:

您必須在每個計算陳述式的結尾放置分號,但不適用於 FIX 或 ENDFIX。

FIX/ENDFIX 區段限制參與計算的各個維度的成員。在此範例中,只有「電視」正在參與計算。

您也可以定義巢狀的 FIX,如下所示:

Essbase 巢狀範例 1

上面的計算也可以寫成如下所示:

Essbase 巢狀範例 2

例如,@List 是 Essbase 函數。Essbase 提供許多函數。不過,Financial Consolidation and Close 並不支援所有 Essbase 函數。如需支援函數的清單,請參閱⟨Essbase 函數清單⟩一節。

Financial Consolidation and Close 維度上的 FIX

依據啟用的應用程式功能而定,Financial Consolidation and Close 應用程式可包含 13 個維度。在這 13 個維度以外,下列維度不允許 FIX,因為當使用者叫用整合程序時,系統會自動在這些維度上套用 FIX。

  • 案例

  • 年度

  • 期間

  • 檢視

  • 實體

例如,假設您具有下列陳述式:

Essbase Fix 範例 3

系統將部署失敗,並且會在「工作」主控台記錄錯誤訊息,提供相應資訊。

但是,這並不代表您不能在指令碼中使用這些維度。一般來說,計算將具有類似下面的語法:

Essbase Fix 範例 4

請注意,在 FIX 與「左側」中,您無法使用「案例」、「年度」、「期間」、「實體」和「檢視」維度中的任何成員。但是方程式的 "Right hand side" (右側) 沒有這樣的限制。

允許下列語法:

Essbase Fix 範例 5

對於其餘八個維度,如果您沒有在特定維度上進行 FIX,則系統將採用該維度的所有成員。例如,假設您具有下列陳述式:

Essbase Fix 範例 6

在此範例中,除了科目之外,所有其餘維度都有一個 FIX。在這種情況下,Essbase 將考慮使用在 FIX/ENDFIX 中進行計算之科目維度中的所有成員。

限制的 Financial Consolidation and Close 成員

每個 Financial Consolidation and Close 內都有某些系統成員在計算指令碼中被限制使用或計算。如果在計算中使用受限制的成員,則系統將會驗證失敗或部署失敗,並在「工作」主控台記錄錯誤訊息。

請記住,如果沒有為該維度指定成員,則系統會採用維度內的「所有」成員。但是,由於無法加入受限制的成員作為程序的一部分,因此必須在 FIX 維度陳述式或表示式的左側明確排除這些受限制的成員。

下表是來自這些維度的受限制 Financial Consolidation and Close 成員完整清單。請注意,對於幣別與整合維度,它們將根據使用的插入規則進行限制。請注意,每個內建插入規則在「註解」區段中都包含有關該規則可包含哪些幣別與整合維度成員的資訊。

表格 19-5 受限制的維度成員

維度 成員 表示式 左側 表示式 右側
案例 所有成員
年度 所有成員
期間 所有成員
檢視 所有成員
實體 所有成員
科目 FCCS_CSTATUS
  FCCS_CSTATUS FILTER
  外幣匯率 - 期末
  外幣匯率 - 平均
  Average Rate
  Ending Rate
  SrcAverageRate
  TgtAverageRate
  SrcEndingRate
  TgtEndingRate
  FCCS_Balance
  FCCS_CTA
  FCCS_CICTA
  FCCS_Percent Control
  FCCS_Current Ratio
  FCCS_Quick Ratio
  FCCS_Cash Ratio
  FCCS_Inventory Turnover
  FCCS_Asset Turnover
  FCCS_Days Sales In Receivables
  FCCS_Days Sales In Inventory
  FCCS_Gross Profit Margin
  FCCS_Return on Sales
  FCCS_Return on Equity
  FCCS_Debt to Equity Ratio
  FCCS_Debt Ratio
資料來源 FCCS_System Types
  FCCS_Rate Override
  FCCS_Account Override
  FCCS_PCON
  FCCS_Driver Source
變動 FCCS_Opening Balance
  FCCS_OpeningBalance_Cash
  FCCS_FX_Total_NonCash
  FCCS_ClosingBalanceCash

在所有維度成員上 (除了受限制成員以外) 進行 FIX

這是一個常見的使用情況,您需要在維度的所有層級 0 成員上進行 FIX,並且該維度可能具有受限制的成員。此範例顯示如何在所有層級 0 成員 (除了該維度的受限制成員以外) 上進行最佳 FIX。

例如,科目維度的受限制成員數目最多。

以下是可用於在受限制成員以外之所有層級 0 科目成員上進行 FIX 的計算指令碼片段:

@REMOVE( @LEVMBRS( "Account", 0 ), @LIST( @RELATIVE( "FCCS_System Account", 0 ),@RELATIVE( "FCCS_Drivers", 0 ),@RELATIVE( "FCCS_Ratios", 0 ),@RELATIVE( "Exchange Rates", 0 ) ) )

在稀疏和密集維度上進行 FIX

在稀疏維度上完成 FIX 更有效。在這種情況下,FIX 僅針對在 FIX 中定義的稀疏維度成員的組合建立 Essbase 提取區塊,並跳過其餘部分。

這些稀疏組合作為 Essbase 的索引,以搜尋符合索引的資料區塊,並提取這些資料區塊以進行計算。因此,不會提取所有區塊以供系統執行。

在密集維度上使用 FIX 時,密集成員將顯示在 Essbase 中的每個資料區塊中。因此,如果使用不當,會影響效能。請注意,當 FIX 處於密集維度時,Essbase 將不受區塊數目的限制,提取所有資料區塊,並且僅限於每個區塊內的一部分。因此,可能需要多次傳遞至資料庫才能傳回資訊。

例如,您可以使用以下陳述式,從科目維度中參照 "Sales" 與 "PostSales":

Essbase Fix 範例 7

當系統在 "Sales" 上處理第一個 FIX 時,Essbase 會提取科目維度的所有資料區塊,但只處理一個 "Sales" 科目。

稍後在 "PostSales" 的 FIX 陳述式中,Essbase 會再次提取科目維度的所有資料區塊,但僅在一個 "PostSales" 科目上運作。在此情況下,對這兩個科目進行兩次資料庫傳遞。

為了避免效能問題,您可以避免在科目維度上使用 FIX,但對於密集維度使用 IF...THEN。

Essbase Fix 範例 8

在沒有使用 FIX 陳述式的範例中,您只需要傳遞到 Essbase 資料庫一次。

建議在稀疏維度上使用 FIX,並針對密集維度使用 IF..THEN,以幫助計算效能。

成員區塊

成員區塊也稱為計算區塊。有時您會看見用於成員區塊的術語「錨點」。成員區塊的語法如下所示:

Essbase 成員區塊範例 1

以下是成員區塊陳述式的範例:

Essbase 成員區塊範例 2

在此範例中,「我的期初餘額總計」稱為計算區塊成員或錨點。此成員應該盡可能是密集維度的成員。

在上述計算中,我們只限於成員「我的外匯開盤」,而且是在 FIX 陳述式中指定的成員上執行計算。

請注意,使用 IF 陳述式時,您將需要一個成員區塊。您無法在成員區塊外部撰寫 IF 陳述式。