雙流程計算

雙流程計算適用於必須計算兩次才能產生正確值的成員公式。您可以將帳戶維度成員標記為兩階段,以改善某些區塊儲存 Essbase 應用程式的效能。

附註:

請勿在混合模式立方體使用二次計算。只使用解決順序

對於某些應用程式,您可以在大綱中將帳戶維度成員標記為兩階段,以改善效能。不過,資料與計算的組合可能需要使用計算命令檔來計算公式兩次,而不是使用雙階段標記來保持準確性。

如果可能, Essbase 會在區塊層級同時與主要計算一起計算二次公式。不過,在某些情況下,需要額外的計算階段。

Essbase 計算雙通公式的方式取決於時間維度和帳戶維度的密集稀疏組態。

二階段計算範例

考慮利潤百分比需要此計算:

Profit % = Profit % Sales

假設下表顯示資料區塊的子集,其中 Measures 與 Year 為密集維度。計量標記為帳戶,而年度標記為時間。AGGMISSG 組態設定已關閉 (預設值)。

資料值已載入至輸入儲存格。Essbase 會依此順序計算數字 1 到 7 的儲存格。例如,先計算「利潤百分比」->「一月」;「利潤百分比」->「季別 1」具有多個合併路徑。

表格 34-5 雙流程計算範例:資料與計算順序

評量 -> 年度 一月 二月 三月 Qtr1

利潤

75

50

120

5

銷售

150

200

240

6

利潤百分比

1

2

3

4、7

附註:

如需儲存格計算順序如何依立方體組態而定的資訊,請參閱儲存格計算順序

Essbase 會使用此計算順序:

  1. Essbase 會針對利潤百分比 -> 一月、利潤百分比 -> 二月、利潤百分比 -> 三月,以及利潤百分比 -> 第 1 季 (上述 1、2、3、4) 計算公式 Profit % Sales

  2. Essbase 會新增 1 月、2 月和 3 月 (5、6 以上) 的值來計算「利潤」→「Qtr1」和「銷售」→「Qtr1」。

  3. Essbase 會透過新增利潤百分比 -> 1 月、利潤百分比 -> 2 月及利潤百分比 -> 3 月 (7 以上) 的值來計算利潤百分比 -> 季別 1。增加百分比會產生值 125%,這不是正確的結果。

    表格 34-6 雙階段計算範例:結果不正確

    評量 / 年度 一月 二月 三月 Qtr1
    利潤 75 50 120 245 (5)
    銷售管理系統 150 200 240 590 (6)

    利潤百分比

    50% (1)

    25% (2)

    50% (3)

    0% (4)

    125% (7)

  4. 如果您在大綱中將 Profit% 標記為兩階段, Essbase 會使用 Profit % Sales 公式重新計算 Profit% 值並產生正確的結果。

    表格 34-7 雙階段計算範例:更正結果

    評量 / 年度 一月 二月 三月 Qtr1
    利潤 75 50 120 245 (5)
    銷售管理系統 150 200 240 590 (6)

    利潤百分比

    50% (1)

    25% (2)

    50% (3)

    0% (4)

    125% (7)

    42% (8)

如需有關多個計算通過的資訊,請參閱計算通過

雙流程和智慧型計算的互動

如果您在區塊儲存應用程式中使用智慧型計算和兩次計算,請使用與立方體組態相符的案例,以確保 Essbase 正確地計算雙通公式。

附註:

請勿在混合模式立方體使用二次計算。只使用解決順序

方案 A:雙流程標籤

在此案例中,您將公式放置在大綱中,並視需要將特定公式標記為雙通以獲得最佳效能。

無雙流程公式的額外計算通過

由於 Essbase 會在計算資料區塊時計算二次公式,因此 Essbase 不需要進行額外的計算通過。

所有標示為已清除的資料區塊

計算之後,就智慧型計算而言,所有資料區塊都會標示為清除。

當您在大綱中將成員公式標記為雙通時, Essbase 會在計算每個資料區塊時執行雙通計算。不過,當您在計算命令檔中重複公式時, Essbase 必須讀取資料區塊並將其寫入記憶體,才能重新計算公式。

方案 B:計算指令檔

在此案例中,您可以建立計算命令檔來執行公式計算以獲得最佳效能。

雙流程公式的額外計算階段

Essbase 會計算立方體,然後進行額外的計算傳遞以計算雙通公式。即使在第一次計算之後,所有資料區塊都會標示為清除, Essbase 仍會忽略與二次公式相關之區塊的清除狀態,並重新計算這些區塊。

兩輪公式的資料區塊未標示為清除

第一次計算之後, Essbase 已將所有資料區塊標示為清除。在第二次計算階段中, Essbase 會重新計算雙通公式所需的資料區塊。不過,由於第二個計算是部分計算,因此 Essbase 不會將重新計算的區塊標示為乾淨。當您開啟智慧型計算時重新計算,這些資料區塊可能會不必要重新計算。

如果立方體組態允許 Essbase 使用 Scenario B,請考慮使用計算命令檔來執行二次公式計算。如果您使用計算命令檔, Essbase 仍會透過資料庫進行額外的計算;不過,您可以確保 Essbase 在計算後已將所有資料區塊標示為乾淨。請參閱雙流程和智慧型計算的計算指令碼

選擇雙階段計算標籤或計算指令碼方法

雖然將帳戶成員標記為雙通可能會帶來效能效益,但某些應用程式無法使用此方法。請檢查這些資格,以查看您是否應套用雙階段標記,或建立計算指令檔來執行計算兩次以獲得最佳效能與準確性:

  • 如果成員位於標記為帳戶的維度中,您可以將該成員標記為兩階段。當您在資料庫上執行預設計算時,如果 Essbase 在標記為帳戶的維度中,則會自動重新計算標記為二次通過的任何公式。

  • 如果成員是任何維度的動態計算成員,您可以將該成員標記為兩階段。

  • 您可能需要使用計算指令碼來計算雙通公式,以獲得準確的結果,即使雙通標記可提供效能優勢。請參閱雙流程和智慧型計算的計算指令碼

  • 如果資料庫組態表示 Essbase 使用「案例 A」,且公式參照其他資料區塊的值,則您必須使用計算命令檔來計算公式兩次。

  • 如果資料庫組態表示 Essbase 使用 Scenario B,您可能會想要使用計算指令碼來計算二次公式。

兩階段預設計算

立方體設定可用於啟用預設計算的雙倍計算。當您在啟用雙通的立方體上執行預設計算時, Essbase 會自動嘗試在標記為帳戶的維度中,計算標記為雙通的公式。

附註:

請勿在混合模式立方體使用二次計算。只使用解決順序

請參閱下列主題:

若要執行預設計算,您可以使用執行計算 MaxL 陳述式。

若要啟用雙流程計算,您可以使用 alter database MaxL 敘述句。

二次計算和智慧型計算的計算指令碼

設計 Essbase 計算指令碼以使用智慧型計算來執行二次計算時,請瞭解如何使用 SET UPDATECALC、SET CLEARUPDATESTATUS 和 CALC TWOPASS 來最佳化計算。

附註:

請勿在混合模式立方體使用二次計算。只使用解決順序

如果您的大綱使用雙通公式,請遵循下列指導方針,使計算更準確且快速:

  • 在重新計算雙通公式的指令之前,新增 SET UPDATECALC OFF 指令以停用智慧型計算。如果您已啟用智慧型計算 (預設值), Essbase 只會計算未標示為未清除的資料區塊,但當您執行已啟用智慧型計算的預設計算時,所有資料區塊都會標示為已清除,因此 Essbase 不會執行雙向公式重新計算。

  • Essbase 不會自動重新計算計算計算命令檔中的雙次公式,因此您必須使用 CALC TWOPASS 命令。

  • 如果您已變更 CALC ALL 的預設計算,且已啟用智慧型計算,則在第一次計算之後,資料區塊可能不會標示為清除。請參閱區塊儲存立方體的智慧計算

若要在執行資料庫的第一個完整計算時,獲得智慧型計算的效能優勢,請使用下列一系列範例中顯示的其中一種方法。最佳方法取決於立方結構的計算需求與大綱結構。

在接下來的範例中,假設大綱有標記為帳戶的維度,而且是密集維度。您要計算每項產品的銷售額,佔所有產品的銷售額百分比。假設此公式應該計算維度:

Sales % Sales -> Product

Essbase 計算每項產品的資料區塊時,它尚未計算「銷售 -> 產品」值,因此每項產品的銷售結果佔總銷售的百分比不正確。

具有大型索引的智慧型計算

如果立方體索引很大,而您想要使用智慧型計算,您可以使用下列任一選項來獲得最佳效能。

計算指令碼選項

使用此模型可建立計算指令碼,在啟用智慧型計算的情況下執行完整計算:

SET UPDATECALC ON;

CALC ALL;
SET UPDATECALC OFF;
SET CLEARUPDATESTATUS AFTER;
"Share of Sales" = Sales % Sales -> Product;

計算指令碼與兩階段選項

若要將成員標記為二次通過,並使用計算指令碼先計算完整立方體,然後再計算二次通過成員:

  1. 將公式放在大綱中,並將其標記為二次通過。

  2. 在標記為帳戶的維度中,將公式放在適當的成員上 (在我們的範例中,Share of Sales)。

  3. 建立會執行完整計算,然後執行二次計算的計算命令檔:

    SET UPDATECALC ON;
    CALC ALL;
    SET UPDATECALC OFF;
    SET CLEARUPDATESTATUS AFTER;
    CALC TWOPASS;

用戶端與計算指令碼選項

若要從用戶端執行預設計算,然後使用計算指令碼來執行公式計算:

  1. 如果已變更此預設值,請啟用智慧型計算

  2. 執行完整計算。

  3. 使用類似此範例的計算指令碼來停用智慧型計算並計算公式:

    SET UPDATECALC OFF;
    SET CLEARUPDATESTATUS AFTER;
    "Share of Sales" = Sales % Sales -> Product;

    SET UPDATECALC OFF;
    SET CLEARUPDATESTATUS AFTER;
    CALC TWOPASS;

上述所有範例選項都會執行這些任務:

  1. 啟用智慧型計算

  2. 計算完整的立方體,並將資料區塊標示為清除。

  3. 停用智慧型計算

  4. 將重新計算的區塊標示為乾淨,即使此計算是立方體的部分計算。如果您不使用 SET CLEARUPDATESTATUS AFTER 命令,則 Essbase 只會在完整計算之後將資料區塊標示為清除。

  5. Essbase 會循環立方體、只計算相關成員的公式 (在我們的範例中為 Sales 共用),或計算大綱中標記為雙遍的所有公式。

範例:具有小型索引的智慧型計算

若要在立方體索引較小時使用智慧型計算,請執行下列動作:

  1. 建立計算命令檔來計算立方體,但告知 Essbase 不要將計算的資料區塊標示為乾淨。

  2. 將所有資料區塊標示為乾淨,且不重新計算資料區塊。

    SET CLEARUPDATESTATUS OFF;
    CALC ALL;
    CALC TWOPASS;
    SET CLEARUPDATESTATUS ONLY;
    CALC ALL;
    1. SET CLEARUPDATESTATUS OFF 會告知 Essbase 不要將計算的資料區塊標示為乾淨。

    2. 第一個 CALC ALL 會讓 Essbase 在立方體中循環,並計算所有已修改的資料區塊。Essbase 不會將計算的區塊標示為清除。

      Essbase 不會自動重新計算標記為兩次的公式。

    3. CALC TWOPASS 會使 Essbase 在立方體中循環,重新計算帳戶維度中的雙通公式。Essbase 會重新計算公式,因為前一個 CALC ALL 未將必要的資料區塊標示為清除。Essbase 不會將重新計算的資料區塊標示為清除。

    4. SET CLEARUPDATESTATUS ONLY 會告訴 Essbase 將資料區塊標示為乾淨,但不會計算資料區塊 (此命令會停用計算)。

    5. 最後一個 CALC ALL 會讓 Essbase 在立方體中循環,並將所有資料區塊標示為清除。Essbase 並不會計算資料區塊。

範例:兩階段公式的智慧型計算已關閉

若要關閉「雙流程」公式的智慧型計算,請建立執行以下任務的計算指令碼:

  • 停用智慧型計算

  • 執行完整計算。

  • 重複下列雙通公式:

    SET UPDATECALC OFF;
    CALC ALL;
    "Share of Sales" = Sales % Sales -> Product;