优化规则:示例

标识出要优化的步骤之后,编辑业务规则。确保为每一步指定了最佳逻辑和条件。

考虑下面的业务规则定义:计算两个 YTD 帐户,然后通过“产品”和“实体”维聚合各值:

SET UPDATECALC OFF;
/* PASS 1 BEGINS*/  
FIX ("BaseData","Plan","FY17",  "FY17" "FY16")
      "BU Version_1"(
          IF(@ismbr("Jan"))
             "4110_YTD" = "4110"; "4120_YTD" = "4120"; "4130_YTD" = "4130";
             "4140_YTD" = "4140"; "4150_YTD" = "4150";
          Else
             "4110_YTD"="4110" + @prior("4110_YTD"); "4120_YTD"="4120"
                                                                + @prior("4120_YTD");
             "4130_YTD"="4130" + @prior("4130_YTD"); "4140_YTD"="4140"
                                                                + @prior("4140_YTD");
             "4150_YTD"="4150" + @prior("4150_YTD");
          Endif)
  /*  PASS 1 ENDS -- PASS 2 BEGINS*/
      Agg("Entity","Product");
  /*  PASS 2 ENDS */
 ENDFIX

Calculation Manager 中运行此规则(请参阅“标识需要进行规则优化的区域”)时,如果选择了仅显示执行,日志消息选项卡会显示一则类似如下的消息:
使用“仅显示执行”选项运行规则时显示的消息示例

对日志文件中的信息进行分析后发现,99.995% 的执行时间(79.235 秒)都花在第 1 遍上,只有 0.005% 的时间花在第 2 遍上。

如果您取消选择仅显示执行,则将显示如下图所示的块、读取和写入信息:
不使用“仅显示执行”选项运行规则时显示的消息示例

上面的规则定义具有如下问题:

  • 对“实体”和“产品”维没有使用 Fix,因此会强制在“实体”和“产品”维的所有级别上运行所有规则。

  • 第 1 遍不必计算高级别。第 2 遍中的 Agg 函数会执行高级别计算,同时覆盖第 1 遍中完成的计算。

可以按如下所示对脚本进行优化:

SET UPDATECALC OFF;
FIX ("BaseData","Plan","FY17")

/* PASS 1 BEGINS*/

        Fix(@LEVMBRS("Entity",0), @LEVMBRS("Product",0))
                "BU Version_1"(
                        IF(@ismbr("Jan"))
                                "4110_YTD" = "4110";
                                "4120_YTD" = "4120";
                        Else
                                "4110_YTD"="4110" + @prior("4110_YTD");
                                "4120_YTD"="4120" + @prior("4120_YTD");
                        Endif)
        ENDFIX
/*  PASS 1 ENDS --  PASS 2 BEGINS*/

    Agg("Entity","Product");

/*  PASS 2 ENDS */

ENDFIX

在 Calculation Manager 中运行已更新的规则(请参阅“标识需要进行规则优化的区域”)时,日志消息选项卡显示一则类似如下的消息:


运行修复规则时显示的消息示例

对日志文件中的信息进行分析后发现,第 1 遍花费的执行时间相比上次运行所花费的时间减少了 15.901 秒。

如果您取消选择仅显示执行,则将针对第 1 遍显示如下图所示的块、读取和写入信息:
不使用“仅显示执行”选项运行修复规则时显示的消息示例

将块、读取和写入信息与优化前的类似数据进行比较后发现,业务规则的处理统计信息值整体下降。