清除聚總儲存立方體的資料

您可以從 Essbase 彙總儲存 (ASO) 立方體清除所有資料,也可以從指定的區域清除資料,保留位於其他區域的資料。您可以進行實體或邏輯清除。

若要清除資料,您必須具有與載入資料 ( 資料庫更新權限或更高權限) 相同的應用程式權限。

您可以使用 Essbase Web 介面中的清除資料工作,或使用 CLI clear 命令,或使用 alter database MaxL 敘述句搭配清除區域中的資料文法。本主題中的範例使用 MaxL

清除特定區域的資料

當您想要刪除容易變動的資料 (例如與上個月對應的資料) 並保留歷史資料時,此方法相當有用。

從 ASO 區域清除資料的方法包括實體和邏輯清除。

  • 實體清除

    指定區域中的輸入儲存格實際上從彙總儲存立方體中移除,如下所示。

    圖 37-2 實際清除資料區域


    此圖說明使用實體方法清除資料時,如何實際移除輸入儲存格。

    如果立方體中有多個資料切片,實體清除區域作業會自動將所有資料切片合併到主要資料切片中。清除指定區域的資料後, Essbase 會在清除區域作業發生之前,將主要資料切片中存在的所有聚總檢視具體化。

    實際清除資料的處理會按照輸入資料大小的時間長度來完成,而不是按照要清除的資料大小來完成。因此,您只能在移除大型資料片段時使用此方法。

    若要實際清除資料,請使用 alter database MaxL 敘述句搭配 clear data in region 文法和 physical 關鍵字:

    alter database appname.dbname clear data in region 'MDX set expression' physical;

    若要節省時間,您可以使用以逗號分隔的 MDX set expressions 清單,從多個實體區域中清除。

  • 邏輯清除

    指定區域中的輸入儲存格會寫入具有負數的補償值的新資料切片,該值會為您要清除的儲存格產生零值,如下所示。

    圖 37-3 邏輯清除資料區域


    本圖說明使用邏輯方法清除資料時,如何建立具有補償值的新資料片段。

    邏輯清除區域作業只會自動將具有零值的資料切片合併至主要資料切片;立方體中的其他資料切片則不會合併。清除指定區域的資料後, Essbase 只會在新資料切片中具體化聚總檢視。

    以邏輯方式清除資料的程序完成所需時間長度與要清除的資料大小成正比。由於已建立補償儲存格,此選項會增加多維資料庫的大小。

    若要在邏輯上清除資料,請使用 alter database MaxL 敘述句搭配 clear data in region 文法,但不使用 physical 關鍵字:

    alter database appname.dbname clear data in region 'MDX set expression';

    對邏輯清除區域的查詢會傳回零值,而非 #MISSING 值。您可能需要更新依賴空白儲存格之 #MISSING 值的公式。

    若要移除值為零的儲存格,請使用 alter database MaxL 敘述句搭配 merge 子句,包括 remove_zero_cells 關鍵字:

    alter database appname.dbname merge all data remove_zero_cells;

    附註:

    Oracle 不建議在同一個區域執行第二個邏輯清除區域作業,因為第二個作業不會清除在第一個作業中建立的補償儲存格,也不會建立新的補償儲存格。

指定要清除的 ASO 區域時,請遵循下列準則:

  • 區域必須是對稱的。範例:

    • {(Jan, Budget)} 是有效的對稱區域,可清除一月份的所有預算資料。

    • {(Jan, Forecast1),(Feb, Forecast2)} 是無效的區域,因為它包含兩個非對稱區域 (一月、預測 1 和二月、預測 2)。

  • 區域規格中任何維度中的個別成員都必須儲存成員。

  • 區域中的成員不可以是:

    • 動態成員 (含隱含或明確 MDX 公式的成員)

    • 從屬性維度

      如果您需要依屬性清除儲存格,請使用屬性 MDX 函數。

  • 區域中的成員可以是儲存階層中的上層成員,這是指定多個層級 0 成員的便利方式。

    例如,您可以指定 Qrt1,其與指定 Jan、Feb 與 Mar 相同 (Qrt1 的第 0 級子系):


    此圖像顯示大綱,如圖像前面的文字所述。

    下列兩個 MaxL 陳述式會產生相同的結果:

    alter database appname.dbname clear data in region '{Qtr1}';
    alter database appname.dbname clear data in region '{Jan, Feb, Mar}';
  • 僅針對實體清除,區域中的成員可以是替代階層中的上層成員。

    例如,您可以指定「高階商品」,其與指定「平面顯示器」、「HDTV」、「數位記錄器」及「筆記型電腦」(「高階商品」的共用層級 0 下階) 相同:


    此圖像顯示大綱,如圖像前面的文字所述。

    下列兩個 MaxL 陳述式會產生相同的結果:

    alter database appname.dbname clear data in region '{High End Merchandise}';
    alter database appname.dbname clear data in region '{[Flat Panel],[HDTV],[Digital Recorders],[Notebooks]}';

    若要在邏輯上清除資料時指定替代階層中的成員,請使用子代 MDX 函數。

    附註:

    當區域包含來自替代階層的上層成員時,可能會降低效能。在此情況下,請考慮僅使用層級 0 成員。

  • MDX 集表示式必須以單引號括住。

例如,若要清除 Forecast1 與 Forecast2 案例的所有一月資料,請使用此陳述式:

alter database ASOSamp.Basic clear data in region 'CrossJoin({Jan},{Forecast1, Forecast2})';

在清除區域作業期間,您無法執行更新立方體的作業 (例如載入資料、合併資料切片或清除其他區域的資料),也無法匯出資料。您可以查詢立方體;不過,查詢結果是以清除區域作業之前的資料集為基礎。

清除區域中的資料子句無法清除整個立方體的資料。

結算所有資料

清除聚總儲存立方體的所有資料與區塊儲存立方體的資料相同。若要清除整個立方體,請使用含有 reset 關鍵字的 alter database MaxL 敘述句:

alter database appname.dbname reset;