雙流程計算
雙流程計算適用於必須計算兩次才能產生正確值的成員公式。您可以將帳戶維度成員標記為兩階段,以改善某些區塊儲存 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 會使用此計算順序:
-
Essbase 會針對利潤百分比 -> 一月、利潤百分比 -> 二月、利潤百分比 -> 三月,以及利潤百分比 -> 第 1 季 (上述 1、2、3、4) 計算公式
Profit % Sales。 -
Essbase 會新增 1 月、2 月和 3 月 (5、6 以上) 的值來計算「利潤」→「Qtr1」和「銷售」→「Qtr1」。
-
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)
-
如果您在大綱中將 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;計算指令碼與兩階段選項
若要將成員標記為二次通過,並使用計算指令碼先計算完整立方體,然後再計算二次通過成員:
-
將公式放在大綱中,並將其標記為二次通過。
-
在標記為帳戶的維度中,將公式放在適當的成員上 (在我們的範例中,Share of Sales)。
-
建立會執行完整計算,然後執行二次計算的計算命令檔:
SET UPDATECALC ON; CALC ALL; SET UPDATECALC OFF; SET CLEARUPDATESTATUS AFTER; CALC TWOPASS;
用戶端與計算指令碼選項
若要從用戶端執行預設計算,然後使用計算指令碼來執行公式計算:
-
如果已變更此預設值,請啟用智慧型計算。
-
執行完整計算。
-
使用類似此範例的計算指令碼來停用智慧型計算並計算公式:
SET UPDATECALC OFF; SET CLEARUPDATESTATUS AFTER; "Share of Sales" = Sales % Sales -> Product;或
SET UPDATECALC OFF; SET CLEARUPDATESTATUS AFTER; CALC TWOPASS;
上述所有範例選項都會執行這些任務:
-
啟用智慧型計算。
-
計算完整的立方體,並將資料區塊標示為清除。
-
停用智慧型計算。
-
將重新計算的區塊標示為乾淨,即使此計算是立方體的部分計算。如果您不使用 SET CLEARUPDATESTATUS AFTER 命令,則 Essbase 只會在完整計算之後將資料區塊標示為清除。
-
Essbase 會循環立方體、只計算相關成員的公式 (在我們的範例中為 Sales 共用),或計算大綱中標記為雙遍的所有公式。
範例:具有小型索引的智慧型計算
若要在立方體索引較小時使用智慧型計算,請執行下列動作:
-
建立計算命令檔來計算立方體,但告知 Essbase 不要將計算的資料區塊標示為乾淨。
-
將所有資料區塊標示為乾淨,且不重新計算資料區塊。
SET CLEARUPDATESTATUS OFF; CALC ALL; CALC TWOPASS; SET CLEARUPDATESTATUS ONLY; CALC ALL;-
SET CLEARUPDATESTATUS OFF 會告知 Essbase 不要將計算的資料區塊標示為乾淨。
-
第一個 CALC ALL 會讓 Essbase 在立方體中循環,並計算所有已修改的資料區塊。Essbase 不會將計算的區塊標示為清除。
Essbase 不會自動重新計算標記為兩次的公式。
-
CALC TWOPASS 會使 Essbase 在立方體中循環,重新計算帳戶維度中的雙通公式。Essbase 會重新計算公式,因為前一個 CALC ALL 未將必要的資料區塊標示為清除。Essbase 不會將重新計算的資料區塊標示為清除。
-
SET CLEARUPDATESTATUS ONLY 會告訴 Essbase 將資料區塊標示為乾淨,但不會計算資料區塊 (此命令會停用計算)。
-
最後一個 CALC ALL 會讓 Essbase 在立方體中循環,並將所有資料區塊標示為清除。Essbase 並不會計算資料區塊。
-
範例:兩階段公式的智慧型計算已關閉
若要關閉「雙流程」公式的智慧型計算,請建立執行以下任務的計算指令碼:
-
停用智慧型計算。
-
執行完整計算。
-
重複下列雙通公式:
SET UPDATECALC OFF; CALC ALL; "Share of Sales" = Sales % Sales -> Product;