計算立方體中的資料子集

為了避免計算超過您所需的資料,請計算 Essbase 資料庫中的資料子集。您可以使用任何成員集函數組合來指示子集、使用 FIX 敘述句來指定內含項目,以及使用 EXCLUDE 敘述句來指定排除項目。

若要計算立方體中的資料子集,請使用下列其中一種方法:

  • 使用成員集函式建立公式,以計算成員清單。

  • 使用 FIX...ENDFIX 指令,透過包含來計算值的範圍。

  • 使用 EXCLUDE...ENDEXCLUDE 命令,透過排除來計算值範圍。

附註:

啟用智慧型計算時,在資料庫的部分計算之後,新計算的資料區塊不會標示為清除。計算資料庫的子集時,您可以使用 SET CLEARUPDATESTATUS AFTER 命令,確保新計算的區塊標示為乾淨。使用此命令可確保 Essbase 使用智慧型計算盡可能有效地重新計算資料庫。

計算成員清單

Essbase 成員集計算函式會根據您指定的成員產生成員清單。

例如, @IDESCENDANTS 函數會產生指定成員之所有子代的清單。當您在公式中使用成員集函式時, Essbase 會先產生成員清單,再計算公式。

在下列範例中,使用「費用總計」成員上的 @IDESCENDANTS 命令產生下列成員的清單:費用總計、本身及其子代,即行銷、薪資及雜項:

@IDESCENDANTS("Total Expenses");

另請參閱

成員集函數

使用 FIX 命令

使用 Essbase 區塊儲存計算命令檔中的 FIX 命令,定義要包含在計算中的成員。FIX 區塊可讓您避免過度計算,以最佳化效能。FIX 也可讓您使用不同的公式來計算立方體的個別部分。

計算指令集中的 FIX 區塊可協助您定義要包含在計算中的資料時段。

例如,下列 FIX 區塊只會計算 East (紐約、麻薩諸塞州、佛羅里達州、康涅狄格州和新罕布夏州) 子代的 Budget 值:

FIX(Budget,@DESCENDANTS(East))
   CALC DIM(Year, Measures, Product);
ENDFIX

下列範例會修正具有新市場使用者定義屬性之 East 子系的成員組合:

FIX(@CHILDREN(East) AND @UDA(Market,"New Mkt"))
   Marketing = Marketing * 1.1;
ENDFIX

下列範例使用萬用字元比對 (???) 來修正以字元 -10 結尾的成員名稱,這些成員為 100-10、200-10、300-10 和 400-10:

FIX(@MATCH(Product, "???-10"))
   Price = Price * 1.1;
ENDFIX

當您只在密集維度上使用 FIX 命令時, Essbase 會擷取包含指定成員之必要值或值的整個區塊。I/O 不受影響,而且可以縮短計算效能時間。

當您在稀疏維度上使用 FIX 命令時, Essbase 會擷取指定稀疏維度成員的區塊。I/O 可能會大幅降低。

Essbase 會針對您在密集維度成員上使用的每個 FIX 命令,循環資料庫一次。如果可能,請結合 FIX 區塊以提升計算效能。

例如,使用一個 FIX 命令時,下列計算命令檔會使 Essbase 只循環資料庫一次,計算「實際」值和「預算」值:

FIX(Actual,Budget)
   CALC DIM(Year, Measures);
ENDFIX

相反地,使用兩個 FIX 命令時,下列計算命令檔會使 Essbase 循環資料庫兩次:一旦計算「實際」資料值,然後計算「預算」資料值:

FIX(Actual)
   CALC DIM(Year, Measures);
ENDFIX
FIX(Budget)
   CALC DIM(Year, Measures);
ENDFIX

您無法在 FIX 指令中計算的維度子集上進行 FIX。例如,下列計算命令檔會傳回錯誤訊息,因為 CALC DIM 作業會計算整個 Market 維度,雖然 FIX 上方會修正 Market 維度的特定成員:

FIX(@CHILDREN(East) AND @UDA(Market,"New Mkt"))
   CALC DIM(Year, Measures, Product, Market);
ENDFIX

FIX 命令可以巢狀置入其他 FIX 命令區塊中。不過,使用巢狀 FIX 指令不正確可能會導致不正確的結果。例如,下列計算命令檔的目的為將 1 指派給 East 的所有子項,然後將 2 指派給 New York:

FIX (@CHILDREN(EAST))
   "100-10"=1;
      FIX ("New York")
         "100-10"=2;
      ENDFIX
ENDFIX

不過,巢狀 FIX 命令會修正其上方 FIX 命令所指定之維度的子集 (不允許);因此,命令檔會指派 2 給 East 的所有子項,因為命令檔的執行方式與撰寫方式相同:

FIX (@CHILDREN(EAST),''New York'')
   "100-10"=1;
   "100-10"=2;
ENDFIX

請勿使用巢狀 FIX 指令,而使用兩個獨立的 FIX 指令區塊。舉例而言:

FIX (@CHILDREN(EAST))
   "100-10"=1;
ENDFIX

FIX ("New York")
   "100-10"=2;
ENDFIX

由 VAR 計算命令定義的變數 (varName) 無法在 FIX 成員敘述句中使用。系統會在執行計算之前評估 FIX 成員,並在設定 FIX 陳述式之後,於執行時期評估變數。因為變數在計算執行期間可能會變更,所以您無法在 FIX 陳述式中使用該變數。下列範例顯示 FIX 成員陳述式中變數的使用不正確:

VAR varName=1;
FIX (@relative(@memberat(@List("Product1","Product2"),varName),0))
   COMMANDS;
ENDFIX

另請參閱

FIX…ENDFIX

使用排除命令

使用 Essbase 區塊儲存計算命令檔中的 EXCLUDE..ENDEXCLUDE 命令區塊,來定義要從計算中排除哪些成員。

有時候,指定不包含在計算中的成員會比定義要包含哪些成員更容易。

指定不應在 EXCLUDE … ENDEXCLUDE 指令中計算的成員,可能會比在 FIX … ENDFIX 指令中指定成員名稱的複雜組合簡單。

另請參閱

排除…結束排除