优化 BSO 多维数据集

优化 BSO 多维数据集可减小数据库大小;其中涉及以下过程:

  • 运行显式重建。
  • 运行 Essbase 块分析报表以确定 BSO 多维数据集中的重复值和零。
  • 将零块替换为 #missing 块。
  • 对数据类型为“智能列表”、“日期”、“文本”和“百分比”的成员,使用从不作为合并运算符。

执行显式多维数据集重建

在 Planning 中,您可以手动或通过作业运行显式多维数据集重建。您还可以使用 restructureCube EPM Automate 命令或重建多维数据集 REST API 重建多维数据集。

Note:

  • 这不是刷新数据库,而是显式重建密集多维数据集。
  • 显式重建会删除 #missing 块以减小 BSO 数据库大小。

要使用 Calculation Manager 重建多维数据集:

  1. 在导航器中,在创建和管理下选择规则以打开 Calculation Manager。
  2. 依次选择操作和数据库属性。
  3. 在企业视图中,展开包含要重建的多维数据集的数据库。
  4. 右键单击要重建的多维数据集,然后选择重建数据库。

分析多维数据集中的数据

首先生成 Essbase 块分析报表。请参阅以下信息源:

Note:

当您将多维数据集数据导出到导出文件(在生成 Essbase 块分析报表时,该文件将用作源)时,多维数据集置于只读模式。根据多维数据集的大小,导出可能需要一些时间。因此,建议将您的实例克隆到测试实例,以便进行此分析。

Essbase 块分析报表提供有关以下三个方面的信息:

  1. 仅包含零的块的百分比,显示仅包含零的块占导出文件中包含的所有块的百分比。
  2. 仅具有接近零值的单元格百分比,显示块中具有接近零值(例如 0.000000001604)的单元格百分比。

  3. 按数字单元格百分比列出的前 10 个重复数字单元格值,以导出文件中所有值的百分比形式显示前 10 个重复值。
  4. 具有重复值的前 100 个密集成员组合,显示多维数据集中具有重复值的前 100 个密集组合。单元格值列按在层次中出现的顺序将每个成员的值显示为不同的列。例如,如果“期间”跨列,则一月、二月等将对应不同的列。其他密集维出现在行中。这应该有助于您识别重复值的位置。

将 BSO 多维数据集中的接近零值转换为零

要删除 BSO 多维数据集中稀疏维中的接近零值或非常小的值,请使用 @round 或 @truncate 函数,这些函数可将它们转换为零。然后可以删除这些零值,并将它们替换为 #missing 块。请参阅“删除 BSO 多维数据集中的零”。

要将接近零值转换为零:

  1. 创建用于将接近零值或非常小的值舍入或截断为零的业务规则。

    配置业务规则环境以优化此规则。此规则当前设置为在 0 级运行。在将接近零值转换为零并从多维数据集中清除后(请参阅下一节),如果启用了 SET AGGMISSG,则在下次聚合期间还会从高级别成员中清除这些值。

    SET UPDATECALC OFF;
    SET CREATENONMISSINGBLK OFF;
    SET CREATEBLOCKONEQ OFF;
    FIXPARALLEL(NumberThreads, @RELATIVE("SparseDim",0))
    FIX on all level 0 sparse dimension @RELATIVE(SparseDim,0)
    

    Note:

    • 虽然默认情况下 UPDATECALC、CREATENONMISSINGBLK 和 CREATEBLOCKONEQ 处于禁用状态,但 Oracle 建议在业务规则中明确禁用它们。
    • 务必将 "SparseDim" 替换为要替换零块的稀疏维的名称。
    • 使用 FIXPARALLEL 以帮助提高性能,例如 FIXPARALLEL(4, @RELATIVE("Scenario",0))。
    • 务必指定 ENDFIXPARALLEL。
  2. 使用以下优化计算设计之一将接近零值更改为零值。根据您的维设计、数据模式和流程,选择性能更好的计算设计。

    计算设计 1(适用于密集或稀疏计算)

    此计算将接近零值更改为零。

    "DenseMbr" = @round("DenseMbr",<Insert Decimal Place>);
    "SparseMbr" = @round("SparseMbr ",<Insert Decimal Place>);
    

    计算设计 2(仅适用于块模式下的密集成员)

    "DenseBlockHeader" (
        @CALCMODE(BLOCK);
           "DenseMbr" =@round("DenseMbr",<Insert Decimal Place>);
    )
    

    Note:

    DenseMbr、SparseMbr 和 DenseBlockHeader 应替换为实际名称。

    运行此规则后,删除生成的零。有关说明,请参阅“删除 BSO 多维数据集中的零”。

删除 BSO 多维数据集中的零

首先通过将多维数据集中稀疏维中的零块替换为 #missing 块,删除这些零块。

要将零块替换为 #missing 块:

  1. 创建用于将零块替换为 #missing 块的业务规则。

    设置业务规则环境以优化此业务规则:

    SET UPDATECALC OFF;
    SET CREATENONMISSINGBLK OFF;
    SET CREATEBLOCKONEQ OFF;
    FIXPARALLEL(NumberThreads, @RELATIVE("SparseDim",0))
    FIX on all level 0 sparse dimension @RELATIVE(SparseDim,0)
    

    Note:

    • 尽管默认情况下,UPDATECALC、CREATENONMISSINGBLK 和 CREATEBLOCKONEQ 处于禁用状态,Oracle 建议在业务规则中显式关闭它们。
    • 务必将 "SparseDim" 替换为要替换零块的稀疏维的名称。
    • 使用 FIXPARALLEL 以帮助提高性能,例如 FIXPARALLEL(4, @RELATIVE("Scenario",0))。
    • 务必指定 ENDFIXPARALLEL。
  2. 使用以下优化计算设计之一将零块更改为 #missing 块。根据您的维设计、数据模式和流程,选择性能更好的计算设计。

    计算设计 1(适用于密集或稀疏计算)

    此计算将生成原始值,并将零值更改为 #missing。

    "DenseMbr" = "DenseMbr" * "DenseMbr" / "DenseMbr";
    "SparseMbr" = "SparseMbr" * "SparseMbr" / "SparseMbr";

    计算设计 2(仅适用于块模式下的密集成员)

    "DenseBlockHeader" (
        @CALCMODE(BLOCK);
           IF ("DenseMbr" == 0) 
               "DenseMbr" = #Missing;
           ENDIF

    Note:

    DenseMbr、SparseMbr 和 DenseBlockHeader 应替换为实际名称。

对数据类型为“智能列表”、“日期”、“文本”和“百分比”的成员,使用“从不”作为合并运算符

数据类型为“智能列表”、“日期”、“文本”和“百分比”的维成员应使用从不作为合并运算符。使用“加法”合并运算符会增加多维数据集大小,但不会添加任何值。使用“忽略”作为合并运算符将仅停止成员的维中的加法;它不会停止汇总来自其他维的值,这可能会创建不需要的块。