Clear Data from Aggregate Storage Cubes

您可以从 Essbase 聚合存储 (ASO) 多维数据集清除所有数据,也可以从指定区域清除数据,从而保留位于其他区域中的数据。您可以执行物理或逻辑清除。

要清除数据,您必须具有与加载数据相同的应用程序权限(数据库更新权限或更高版本)。

您可以在 Essbase Web 界面中使用 Clear Data 作业,或使用 CLI clear 命令,或使用 alter database MaxL 语句和 clear data in region 语法。本主题中的示例是使用 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 将仅实体化新数据切片中的聚合视图。

    逻辑清除数据的过程需要一段时间才能完成,要清除的数据越多,时间越长。由于创建了补偿单元格,此选项会使多维数据集大小增加。

    要以逻辑方式清除数据,请使用带有 clear data in region 语法的 alter database MaxL 语句,但不带 physical 关键字:

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

    对逻辑清除区域的查询将返回零值,而不是 #MISSING 值。您可能需要更新对空单元格依赖 #MISSING 值的公式。

    要删除值为零的单元格,请使用带有 merge 子句的 alter database MaxL 语句(包括 remove_zero_cells 关键字):

    alter database appname.dbname merge all data remove_zero_cells;

    注意:

    Oracle 不建议在同一区域中执行第二个逻辑清除区域操作,因为第二个操作不会清除在第一个操作中创建的补偿单元,也不会创建新的补偿单元。

在指定要清除的 ASO 区域时,请遵循以下准则:

  • 区域必须是对称的。例如:

    • {(Jan, Budget)} 是有效的对称区域,用于清除 1 月的所有预算数据。

    • {(Jan, Forecast1),(Feb, Forecast2)} 是无效区域,因为它由两个不对称区域(Jan、Forecast1 和 Feb、Forecast2)组成。

  • 区域规范中任何维中的单个成员必须是存储成员。

  • 区域中的成员不能是:

    • 动态成员(具有隐式或显式 MDX 公式的成员)

    • 来自属性维

      如果需要按属性清除单元格,请使用 Attribute 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]}';

    要在逻辑清除数据时指定备用层次中的成员,请使用 Descendants 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;