資料區塊的智慧計算
瞭解 Essbase 智慧型計算如何處理密集和稀疏計算、並行計算和多次通過計算。
Essbase 會為稀疏維度成員的每個唯一組合建立一個資料區塊,前提是該組合至少有一個資料值存在。每個資料區塊都代表該稀疏維度成員的唯一組合的所有密集維度成員值。
例如,在 Sample Basic 資料庫中,Market 和 Product 維度為稀疏維度。因此,資料區塊 New York -> Colas 代表稀疏組合 New York -> Colas 之 Year、Measures 和 Scenario 維度上的所有成員值。
下節假設您已熟悉上層、層級 0 和輸入資料區塊的概念,如資料區塊中的資料儲存中所述。
密集維度的智慧計算
當您計算密集維度且不使用 FIX 命令時, Essbase 會計算資料庫中每個資料區塊中至少某些資料值。就智慧型計算狀態而言,區塊會從密集計算中標示為乾淨。
例如,下列計算命令檔會計算密集的 Year 維度。
SET CLEARUPDATESTATUS AFTER;
CALC DIM(Year);因為 Year 是密集的,所以立方體中的每個區塊都包含 Year 的成員。因此, Essbase 會計算每個區塊。
然後,因為命令檔使用 SET CLEARUPDATESTATUS AFTER 命令,所以 Essbase 會將立方體中的所有資料區塊標示為乾淨。
稀疏維度的智慧型計算
計算稀疏維度時, Essbase 可能不需要計算資料庫中的每個資料區塊。瞭解智慧型計算的清除 / 已修改更新狀態如何影響層級 0 和上層區塊的狀態,以及如何避免不必要的計算。
例如,下列計算命令檔是以「基本範例」資料庫為基礎:
SET CLEARUPDATESTATUS AFTER;
CALC DIM(Product);此指令檔會計算 Product 維度,即稀疏維度。因為 Product 為稀疏,所以 Product 維度上的每個成員都有資料區塊。例如,New York -> Colas 有一個資料區塊,而 New York -> 100-10 則有另一個資料區塊。
層級 0 效果
如果您將資料載入層級 0 的立方體,受影響的區塊會標示為已修改。如果您隨後只計算稀疏維度,則不會計算層級 0 區塊,而且會保持不變。當您只重新計算稀疏維度或維度時, Essbase 會重新計算上層資料區塊。
附註:
如果對應的稀疏層級 0 成員套用公式, Essbase 會計算層級 0 資料區塊。
資料區塊 New York -> 100-10 為層次 0 區塊;它並不代表稀疏維度 (Market 或 Product) 上的上階成員。紐約 -> 100-10 的資料值為輸入值;它們會載入資料庫中。因此, Essbase 不需要計算此資料區塊。即使命令檔使用 SET CLEARUPDATESTATUS AFTER 命令, Essbase 也不會將紐約 -> 100-10 的資料區塊標示為乾淨。
上層效果
當 Essbase 計算稀疏維度時,如果區塊相依於一或多個已修改子項區塊,則會重新計算上層資料區塊。
Colas 是 Product 維度上的父項層級成員。Essbase 必須計算 Colas 的值,因此 Essbase 會計算此資料區塊。因為命令檔使用 SET CLEARUPDATESTATUS AFTER 命令,所以 Essbase 會將資料區塊標示為清除。
不必要的計算
您至少可以計算一個密集維度,以避免不必要的計算。在不使用 FIX 指令的情況下計算密集維度時,會在每個區塊中計算資料值,包括層級 0 區塊。因此層級 0 區塊會標示為清除。
智慧型計算與並行計算
啟用智慧型計算時,請對並行計算採取預防措施。如果多個計算嘗試計算相同的區塊, Essbase 可能不會重新計算資料區塊,因為這些區塊已標示為清除。
在下列範例中,以 Sample Basic 資料庫為基礎,「實際」和「預算」是密集 Scenario 維度的成員。因為「案例」密集,所以資料庫中的每個區塊都包含「實際」與「預算」值。如果「使用者 1」執行下列計算命令檔, Essbase 會計算代表紐約之所有資料區塊的「實際」值。
SET CLEARUPDATESTATUS AFTER;
FIX("New York", Actual)
CALC DIM(Product, Year);
ENDFIXEssbase 會將計算的資料區塊標示為已清除,但尚未計算每個計算區塊中的所有值。例如,尚未計算「預算」值。
如果「使用者 2」執行下列計算命令檔來計算紐約的「預算」值,則 Essbase 不會重新計算指定的區塊,因為這些區塊已經標示為清除。「預算」的計算結果不正確。
SET CLEARUPDATESTATUS AFTER;
FIX("New York", Budget)
CALC DIM(Product, Year);
ENDFIX解決此問題的方法之一是讓 Scenario 維度稀疏。然後「實際」與「預算」值位於不同的區塊中;例如,New York -> Colas -> Actual and New York -> Colas -> Budget (預算)。在此情況下,第二個計算命令檔會正確計算「預算」區塊。
執行並行計算可能需要增加資料快取。
智慧型計算與多階段計算
在某些情況下,需要多次通過的 Essbase 計算指令碼可能會與使用智慧型計算不相容。
當 Essbase 計算第一次計算通過資料庫的資料區塊時,會將資料區塊標示為清除。如果您嘗試在啟用 Intelligent Calculation 的後續階段中計算相同的資料區塊, Essbase 不會重新計算資料區塊,因為資料區塊已標示為清除。
如果可能的話, Essbase 會在一個計算中計算資料庫,然後通過資料庫。
當您使用計算命令檔來計算資料庫時,計算的數目會根據計算命令檔而傳遞給 Essbase 執行的數目。
例如,假設 Essbase 會在第一次計算通過時計算區塊,並將它們標示為清除。如果在啟用智慧型計算時,嘗試在後續階段計算相同的區塊, Essbase 不會重新計算資料區塊,因為這些區塊已標示為清除。
多階段計算的範例與解決方案
這些範例說明產生不正確 Essbase 計算結果的情況,以及取得正確結果的解決方案。它們是以「基本範例」資料庫為基礎,並假設已開啟智慧型計算。
範例 1:智慧型計算與兩階段
下列計算命令檔會執行預設計算,然後執行二次計算:
CALC ALL;
CALC TWOPASS;錯誤
Essbase 會計算資料庫中的已變更資料區塊,並將所有資料區塊標示為已清除。然後, Essbase 需要重新計算標記為帳戶的維度中標記為二次傳送的成員。不過, Essbase 不會重新計算指定的資料區塊,因為它們已標示為清除。計算結果不正確。
解決方案
您可以停用兩輪計算的智慧型計算,以計算正確的結果。
範例 2:SET CLEARUPDATESTATUS 與 FIX
此計算命令檔會計算紐約的資料值。計算是以 Product 維度為基礎:
SET CLEARUPDATESTATUS AFTER;
FIX("New York")
CALC DIM(Product);
ENDFIX
CALC TWOPASS;錯誤
Essbase 會執行下列程序:
-
Essbase 會循環資料庫,計算代表紐約的已修改資料區塊。計算是以 Product 維度為基礎。因此, Essbase 只會計算代表 Product 維度上之父項成員的區塊 (例如 New York -> Colas,New York -> Root Beer,New York -> Fruit Soda),然後只計算 Product 維度的聚總與公式。
-
由於使用 SET CLEARUPDATESTATUS AFTER 命令,因此 Essbase 會將計算的資料區塊標示為乾淨,雖然尚未計算每個計算區塊中的所有資料值。
-
Essbase 應在標記為帳戶的維度中重新計算標記為二次傳送的成員;但是,在上一個步驟中,某些資料區塊已標示為清除。Essbase 不會重新計算標示為清除的資料區塊。計算結果不正確。
解決方案
您可以停用兩輪計算的智慧型計算,以計算正確的結果。
範例 3:設定 CLEARUPDATESTATUS 和兩個 CALC DIM 命令
此計算命令檔以 Product 和 Year 維度的資料庫計算為基礎。由於使用兩個 CALC DIM 命令,因此 Essbase 會透過資料庫執行兩個計算:
SET CLEARUPDATESTATUS AFTER;
CALC DIM(Product);
CALC DIM(Year);錯誤
Essbase 會執行下列程序:
-
Essbase 會在計算已變更資料區塊的資料庫中循環。計算是以 Product 維度為基礎,如範例 2 中所示。
-
由於使用 SET CLEARUPDATESTATUS AFTER 命令,因此 Essbase 會將計算的資料區塊標示為乾淨,雖然尚未計算每個計算區塊中的所有資料值。
-
Essbase 應重新計算資料區塊。重新計算是以 Year 維度為基礎。不過,由於上一個步驟中的計算結果,某些資料區塊已標示為清除,而 Essbase 不會重新計算它們。計算結果不正確。
解決方案
您可以使用一個 CALC DIM 指令來計算 Product 和 Year 維度,以計算正確的結果。Essbase 會計算單一計算中通過資料庫的兩個維度。
下列計算命令檔會計算正確的結果:
SET CLEARUPDATESTATUS AFTER;
CALC DIM(Product, Year);附註:
當您在一個 CALC DIM 命令中計算多個維度時, Essbase 會以預設計算順序計算維度,而不是以您在命令中列出的順序計算。請參閱成員計算順序。
範例 4:兩個計算命令檔
此範例計算 New York 的資料值,但使用兩個計算命令檔根據兩個維度來計算。第一個計算命令檔會計算 Product 維度:
SET CLEARUPDATESTATUS AFTER;
FIX("New York")
CALC DIM(Product);
ENDFIXEssbase 會計算包含 New York 的資料區塊。由於計算是以 Product 維度為基礎,因此 Essbase 只會計算包含 Product 維度上父項成員的已修改區塊 (例如 New York -> Colas,New York -> Root Beer,New York -> Fruit Soda),並且只計算 Product 維度的聚總與公式。
因為使用 CLEARUPDATESTATUS AFTER 命令, Essbase 會將計算的資料區塊標示為乾淨,但並未計算每個計算區塊中的所有資料值。
第二個計算命令檔會計算 Year 維度:
SET CLEARUPDATESTATUS AFTER;
FIX("New York")
CALC DIM(Year);
ENDFIXEssbase 會計算代表 New York 的資料區塊。由於計算是以「年度」維度 (密集維度) 為基礎,因此 Essbase 應計算所有包含 New York 的資料區塊,儘管每個區塊 Essbase 只會計算 Year 維度的聚總與公式。
錯誤
由於第一次計算,紐約的某些資料區塊已標示為乾淨。Essbase 不會使用第二個計算命令檔重新計算這些資料區塊,因為資料區塊會標示為清除。計算結果不正確。
解決方案
若要計算正確的結果,請告訴 Essbase ,不要將計算的資料區塊標示為乾淨。下列計算命令檔會計算正確的結果:
SET CLEARUPDATESTATUS OFF;
FIX("New York")
CALC DIM(Product);
ENDFIX
SET CLEARUPDATESTATUS AFTER;
FIX("New York")
CALC DIM(Year);
ENDFIX使用 SET CLEARUPDATESTATUS OFF 命令, Essbase 會計算已修改的資料區塊,但不會將它們標示為乾淨,與 SET CLEARUPDATESTATUS AFTER 命令不同。
此解決方案假設資料庫的前部分計算未將資料區塊標示為未清除。
您可以停用智慧型計算,確保計算所有資料區塊,無論其狀態為何。下列計算命令檔會計算所有指定的資料區塊,無論其為乾淨或已變更的狀態為何:
SET UPDATECALC OFF;
FIX("New York")
CALC DIM(Year, Product);
ENDFIX由於您尚未使用 SET CLEARUPDATESTATUS AFTER 命令,因此 Essbase 不會將計算的資料區塊標示為清除。