成員計算順序
Essbase 計算大綱成員的預設順序一般為:帳戶、時間、密集和稀疏,並考慮大綱中的維度順序,以及是否套用公式。
當您在資料庫上執行預設計算 (CALC ALL) 時, Essbase 會以下列順序計算維度:
-
如果標記為帳戶的維度和標記為時間的維度都存在,而且如果公式套用至帳戶維度的成員,則 Essbase 會依下列順序計算:
-
標記為帳戶的維度
-
標示為時間的維度
-
其他密集維度 (依其在資料庫大綱中的顯示順序)
-
其他稀疏維度 (按照它們在資料庫大綱中的顯示順序)
-
-
否則, Essbase 會依下列順序計算:
-
密集維度 (依其在資料庫大綱中的顯示順序)
-
稀疏維度 (按照它們在大綱中的顯示順序)
-
附註:
不包含在資料庫整合中的屬性維度,不會影響計算順序。請參閱使用 Essbase 屬性。
在 Sample Basic 資料庫中,維度的計算順序如下:Measures、Year、Scenario、Product 和 Market。
您可以使用計算指令碼來置換預設順序。請參閱開發區塊儲存立方體的計算命令檔。
成員關係的計算效果
每個 Essbase 維度中的計算順序取決於大綱中成員之間的關係。大綱中的成員彙總 (合併) 與里程表比較的方式。
在維度的每個分支 (階層) 內,先計算層級 0 值,再計算其層級 1 的父項值。然後計算下一個分支的層級 0 值,接著計算其層級 1 的父項值。計算會以這種方式繼續進行,直到計算所有階層為止。
下圖顯示來自 Sample Basic 資料庫的 Year 維度。其成員的計算順序會在每個成員的左側顯示。此範例假設父成員未標記為動態計算。
圖 19-3 樣本基本年維度的計算順序

Jan 是第一個分支中的第一個成員。Jan 沒有公式,因此不會進行評估。同樣適用於 2 月和 3 月,分支中的其他兩個成員。
Essbase 會合併 Jan、Feb 和 Mar 來計算 Qtr1。在此範例中,會新增這些月份 (如 + 合併運算子所指示),以提供 Qtr1 的值。
然後, Essbase 會以相同方式計算 Qtr2 到 Qtr4 分支。
最後, Essbase 會合併 Qtr1 到 Qtr4 的值來計算「年度」成員。如 + 合併運算子所指示,會新增這些季度以提供「年度」的值。
成員合併的方式
您可以將計算運算子 (+、-、/、*、%、~、^) 套用到資料庫大綱中的成員,來選擇 Essbase 如何合併區塊儲存立方體中的成員。
如果帳戶成員有時間平衡標籤 (第一個、最後一個或平均), Essbase 會相應地進行整合。請參閱計算第一個、最後一個及平均值。
如果父項成員具有僅標籤運算子, Essbase 不會從其子項計算父項。
如果成員具有 ~ 運算子,則 Essbase 不會將成員合併至其父項。
如果成員具有 ^ 運算子,則 Essbase 不會合併任何維度中的成員。
附註:
如果您使用動態計算, Essbase 可能會使用不同的計算順序。請參閱動態計算的計算順序。
資料庫大綱中的維度順序
若要確保必要的計算結果,請考量 Essbase 大綱中維度的計算順序 (如果使用計算運算子來除 (/)、乘 (*) 或計算成員的百分比 (%) 或某些成員是否具有公式)。
如果您只使用計算運算子來新增 (+) 和減去 (–) 資料庫大綱中的成員,而且您不使用大綱中的公式,則不需考慮計算順序。
資料庫大綱中的成員公式
如果您將公式放在 Essbase 大綱中的成員上,請考慮維度的計算順序。附加至某個維度上某個成員的公式,可能會被另一個維度上的後續計算覆寫。
例如,Sample Basic 資料庫有 Measures 維度,標記為帳戶,而 Year 維度則標記為時間。

計量是計算第一年與第二年。如果您在 Measures 維度上將公式附加到 Margin,則 Essbase 會在計算 Measures 維度時計算公式。Essbase 會在整合 Year 維度時覆寫公式。請參考儲存格計算順序。
使用計算運算子 *、/ 及 %
如果您使用計算運算子來乘以 (*)、除 (/) 以及計算 Essbase 大綱中成員的百分比 (%) ,請考慮維度的計算順序。其他維度的後續計算可能會覆寫必要的計算值。
例如,Sample Basic 資料庫有 Measures 維度,標記為帳戶,而 Year 維度則標記為時間。計量是計算第一年與第二年。如果您將 Measures 維度上的成員相乘,則當 Essbase 在 Year 維度上合併值時,可能會覆寫計算的結果。請參閱儲存格計算順序。
當您使用乘法 (*) 、除法 (/) 或百分比 (%) 運算子來合併成員時,請仔細排列分支中的成員,以達成所需結果。
圖 19-4 顯示大綱中顯示的計算運算子。假設使用者想要將「子項 2」和「子項 3」的總計除以「子項 1」。不過,如果「子項 1」是第一個成員, Essbase 會從「子項 1」開始,從值 #MISSING 開始,然後除以「子項 1」。結果為 #MISSING。Essbase 接著新增子項 2 和子項 3。顯然,此結果並非必要。
圖 19-4 資料庫大綱中的計算運算子

若要計算正確結果,請將「子系 1」設為分支中的最後一個成員。
您可以將公式套用至資料庫大綱上的成員,以達成相同的結果。不過,在成員上使用這些計算運算子會更有效率,如圖 19-4 所示。
避免向前計算參照
若要取得您預期的計算結果,請確定大綱不包含轉送計算參照。當計算成員的值相依於 Essbase 尚未計算的成員時,就會發生向前計算參照。在這些情況下, Essbase 可能不會產生必要的計算結果。
例如,假設以下所示的 Product 維度有三個正向計算參照:兩個共用成員 (P100 – 20 和 P300 – 20) 和一個非共用成員 (P500 – 20):
圖 19-5 具有向前計算參考的產品維度

在大綱編輯器中,當您驗證大綱時, Essbase 會識別具有正向計算參照的共用成員。驗證大綱無法識別具有轉寄計算參照的非共用成員。您可以儲存並使用包含轉寄計算參照的大綱。
考慮飲食下的五名成員。成員 P100-20、P300-20 和 P500-20 具有向前計算參照:
-
P100-20 (+) (共用成員):在計算原型成員 P100-20 之前, Essbase 會計算共用成員 P100-20。由於原型成員 P100-20 具有子項,因此 Essbase 必須透過新增其子項來計算原型成員,才能正確計算共用成員 P100-20。
-
P300-20 (+) (共用成員):在計算原型成員 P300-20 之前, Essbase 會計算共用成員 P300-20。由於原型成員 P300-20 具有公式,因此 Essbase 必須先計算原型成員,才能正確計算共用成員 P300-20。
-
P500-20 (+) ("P200-20" + "P300-20"):套用至 P500-20 的公式是指 Essbase 尚未計算的成員。其中一種原型成員 P300-20 具有自己的公式,而 Essbase 必須先計算 P300-20,才能正確計算 P500-20。成員 P200-20 和 P400-20 會正確計算,因為它們沒有向前計算參照。
-
P200-20 (+) (共用成員):P200-20 不是正向計算參照,雖然 Essbase 在計算原型成員 P200-20 之前會先計算共用成員 P200-20。原型成員 P200-20 沒有計算相依性 (沒有子項且沒有公式)。因此, Essbase 不需要在共用成員之前計算原型成員。Essbase 只接受原型成員的值。
-
P400-20 (+) ("P200-10" * 2):雖然套用至 P400-20 的公式參照 Essbase 尚未計算的成員,但 P400-20 並非正向計算參照。公式中的成員原型本身沒有計算相依性。P200-10 是公式中唯一的成員,而 P200-10 本身沒有子項或公式。Essbase 會準確計算 P400-20。
若要取得 P100-20、P300-20 和 P500-20 的正確計算結果,請變更大綱中成員的順序。透過將 Diet 共用成員置於「一般」成員之後 (如下所示),請確定 Essbase 會依所需的順序計算成員。
圖 19-6 變更的產品維度 (不含向前計算參考)

Essbase 現在會計算:
-
原型成員 P100-20 在計算共用成員 P100-20 之前。因此,P100-20 不再有向前計算參照。
-
共用成員 P300-20 之前的原型成員 P300-20。因此,P300-20 不再有向前計算參照。
-
成員 P500-20 之前具有公式 P300-20 的成員。因此,P500-20 不再有向前計算參照。