對潛在區塊啟用計算
當您在密集維度中使用密集成員的公式時,如果結果值來自密集維度,且運算元或運算元來自稀疏維度,則 Essbase 不會自動建立必要的區塊。
在下列範例中,假設您要從現有的實際資料建立預算銷售與費用資料。Sales and Expenses 是密集 Measures 維度中的成員;Budget 和 Actual 是稀疏 Scenario 維度中的成員。
FIX(Budget)
(Sales = Sales -> Actual * 1.1;
Expenses = Expenses -> Actual * .95;)
ENDFIXSales and Expenses,方程式的結果為密集維度成員;運算元 Actual,位於稀疏維度中。由於 Essbase 只會在現有資料區塊上執行密集成員公式,因此計算命令檔不會建立必要的資料區塊,而不會針對不存在的區塊計算「預算」資料值。
您可以使用下列技巧來解決問題:
複製含有 DATACOPY 的現有區塊
您可以使用 Essbase 區塊儲存計算命令檔中的 DATACOPY 命令,為每個現有區塊建立區塊,然後對新區塊執行計算。
舉例而言:
DATACOPY Sales -> Actual TO Sales -> Budget;
DATACOPY Expenses -> Actual TO Expenses -> Budget;
FIX(Budget)
(Sales = Sales -> Actual * 1.1;
Expenses = Expenses -> Actual * .95;)
ENDFIXEssbase 會為存在的每個對應「實際」區塊建立包含「預算」值的區塊。完成 DATACOPY 指令之後,程序檔的其餘部分會變更值。
在下列情況下,使用 DATACOPY 可正常運作:
-
現有區塊中的值與其對等項目 (由 DATACOPY 建立) 之間有數學關係。
例如,在前面的範例中,Budget 值可以根據現有的 Actual 值進行計算。
警示:
DATACOPY 會在來源區塊的所有儲存格中,建立具有相同值的新區塊。如果公式只會在區塊的部分執行,則這些複製的儲存格會保留在計算的結尾,這可能會導致不想要的值。
-
沒有複製的區塊僅包含 #MISSING 值。
如果 #MISSING 值存在,則會寫入僅包含 #MISSING 值的區塊。不必要的 #MISSING 區塊需要 Essbase 資源和處理時間。
另請參閱
使用 SET CREATENONMISSINGBLK 計算所有潛在區塊
使用 Essbase 區塊儲存計算命令檔中的 SET CREATENONMISSINGBLK 命令,在密集維度或稀疏維度進行計算時限制不需要的值。
如果您關心不需要的值,而不是使用 DATACOPY,可以使用 SET CREATENONMISSINGBLK ON 計算命令來計算記憶體中的所有潛在區塊,然後只儲存包含資料值的計算區塊。在密集或稀疏維度上計算值時,SET CREATENONMISSINGBLK 計算指令非常有用。
下列範例會從現有實際資料建立預算銷售與費用資料。Sales and Expenses 是密集 Measures 維度中的成員;Budget 和 Actual 是稀疏 Scenario 維度中的成員。
FIX(Budget)
SET CREATENONMISSINGBLK ON
(Sales = Sales -> Actual * 1.1;
Expenses = Expenses -> Actual * .95;)
ENDFIX附註:
如果為稀疏維度設定 SET CREATEBLOCKONEQ ON,則 SET CREATENONMISSINGBLK ON 會暫時覆寫 SET CREATEBLOCKONEQ ON,直到遇到 SET CREATENONMISSINGBLK OFF 命令或計算命令檔完成為止。
使用 SET CREATENONMISSINGBLK 命令的優點在於,在密集成員套用時,只會儲存受成員公式影響的資料儲存格。缺點是記憶體中可能會有太多潛在區塊具體化,這可能會影響計算效能。當您使用此命令時,最好使用 FIX 來限制要計算的區塊範圍,以限制潛在的區塊數目。