ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
目录 [TOC] * * * * * > 注意:练习的设置信息请参考使用须知中的资料包,以《03_规则设计 V1.xlsx》为准。 #### 什么是规则 规则是用于灵活计算表内、表间、数据库之间逻辑文件。 业务人员可以学会看懂规则即可,一般业务人员做好表单之后,规则由技术人员编写。如果有基础和兴趣,可参考使用须知资料包,03-规则设计/《esb_dbag 中文版.pdf》,了解更多关于Essbase的基础概念、计算语法、规则和函数。 基本结构和语法包括: 1. 计算的全局范围:限定计算范围(Fix……End Fix),见开始的全局范围。 2. 计算的核心要点: - 包括成员的四则运算,见脚本中的加减乘除。 - 对成员指定一个组合(->),见示例中期初的销售单价 - 增加注释信息(/* …… */ ) - 成员的引用需要用“”双引号引起来 - 替代变量的引用需要使用“&”,不需要引号,例如:&CurYear - 规则变量的引用需要使用大括号括起来,或者通过变量按钮选择 - 除Fix,每行规则末尾需要有分号“;” 4. 计算后的汇总:见示例中的聚合模块 ![](https://box.kancloud.cn/fa14158cb5501ebc5cad2d33400678d4_1838x1042.png) #### 进入计算管理器 Calculation Manager,简称CM ![](https://box.kancloud.cn/e9434f805cb1168567694d160ac2ff54_1692x816.png) #### 设置替换变量 创建应用程序级别内共享的变量 ![](https://box.kancloud.cn/742c5447052a5ce1584a1adbb25cdf2d_1582x808.png) ![](https://box.kancloud.cn/b3cebbe4cac6c74b7f08e49c367ad085_2240x958.png) ![](https://box.kancloud.cn/afbcff34f59fa4661137c9d81fd1a47e_2038x892.png) 设置维名称为Entity的替换变量 设置一个默认值 勾选RTP(Run-Time Prompt,运行时提示),后面才可以引用表单上的成员 RTP文本为必填,用于设置参数选择框时给用户的提示文字。 #### 新建规则 ![](https://box.kancloud.cn/0f80b5da2e2c24c156300d12d650c6b8_1430x798.png) #### 指定全局范围 目的:避免计算范围过大,导致计算耗时过长。通过也避免计算无意义的组合,增加块的数量,影响数据库大小。 ![](https://box.kancloud.cn/45107bc00f5d7dde700b20f950249e9e_2476x1040.png) 使用成员选择器选择成员。对于替代变量,需要直接输入,如 &CurYear ![](https://box.kancloud.cn/4e3ae1fb5220b16cf7661bd36729a1cf_1840x984.png) #### 编写计算逻辑 ![](https://box.kancloud.cn/0b7f6a1a0d2eafae191d95ee9cbcf2df_2506x1000.png) ##### 插入脚本块和限定子范围 ![](https://box.kancloud.cn/2f09112afb03e59a3cd7960b08e64970_1826x886.png) 从左侧新对象区域拖动“脚本”对象到“开始”和“结束”之间。 在计算逻辑中根据需要可能还要进一步FIX限定计算范围。 ##### 选择成员 ![](https://box.kancloud.cn/83f070562e3a7a28302045c03f03455b_2084x928.png) ##### 插入变量 目的:便于通过变量集中更换规则计算的场景、版本、年份。 可以使用“插入变量”按钮变量,也可以直接输入“{变量名称}”来使用变量。 ![](https://box.kancloud.cn/81298d333f6eae55a8f028862a01f59d_1984x986.png) 对于替代变量,规则也可以引用,但只能手工输入,无法通过“插入变量"插入。 &CurYear &CurSce &CurVer ##### 脚本诊断 ![](https://box.kancloud.cn/fdfb7b216a8479e61c8d3c54ccb9239c_1840x1092.png) 点击脚本诊断,查看脚本语法是否正确。在部署前可以进行预检查。 #### 汇总数据 拖动汇总模块到设计器 ![](https://box.kancloud.cn/46f6e20ca71c7a4aaa0a7c76832814c2_2520x1092.png) 可关闭弹出的汇总设置窗口,在设计器摘要中按需设置 ![](https://box.kancloud.cn/3afa38d9dcc70433b549a4e6711a2470_2286x1054.png) 设置聚合数据库中缺少的值 ![](https://box.kancloud.cn/bbb340d91f670160c50c50fb532b3e2f_1368x928.png) 避免出现以下情况,数据库清除数据,但不汇总missing到父层 ![](https://box.kancloud.cn/4f300b8f076e549fe81443b243e09061_1584x912.png) #### 查看全部脚本代码 可以点击“开始”模块下的“脚本”选项卡,查看该规则包含各个设计对象的完整脚本代码。 > 注意,“开始”模块下的脚本代码是只读的,如需编辑,需要点击进入各个“脚本”的脚本选项卡。 > 注意:替换变量在脚本代码显示时,显示的是默认值,见“A_0101_销售计划表”图例。 ![](https://box.kancloud.cn/4851534a4db81600017e5892cd1087d4_1844x1010.png) #### 验证与部署规则 检查是否有语法错误之类 ![](https://box.kancloud.cn/a021c3382cc24a4cf3e7cf1a22dd1002_1824x1028.png) 部署后可以在表单关联规则界面看到 ![](https://box.kancloud.cn/65be0df9eb6618cedd95f7ef8bb8487e_1834x1030.png) > tips: > 规则部署之后在业务规则清单看不到,重启服务(待添加操作步骤,测试环境操作),重新完全部署。耐心等待1小时. #### 查看位置别名 使用跨库取数@XREF时需要用到维值别名。 ![](https://box.kancloud.cn/e1c5e5870060af06b3e22df45b56d45d_2132x1268.png) 在哪个数据库使用@XREF函数,就在哪个数据库查看位置别名。 在RPT引用biz、fin,就在RPT右键查看维值别名,注意,系统默认的位置别名不能修改。 ![](https://box.kancloud.cn/1ac310d34dafcffa3a919291a321a524_2304x1258.png) #### 规则关联表单 目的:规则挂到表单上,以便表单保存时能触发规则 ![](https://box.kancloud.cn/6f94754c91100a23204377c5285ed1b8_2044x922.png) 将默认的计算表单删除,添加自定义规则 设置表单的业务规则属性。 #### 规则导出导入 >发布正式环境,可以使用规则导出,导入,提交效率,避免出错。 >导入前,先做好原规则的备份。 ![](https://box.kancloud.cn/e4e92dfbe0d91c31a7a7364696bc25a2_1782x1252.png) 导出 ![](https://box.kancloud.cn/9b7a509e6b0bcb88e00a757ed46cc0b1_2066x1262.png) 导入 ![](https://box.kancloud.cn/6aa1f190c1d1facef22c84abd9ced3a4_1900x1202.png) 覆盖原规则 #### 参考:练习的规则示例 ##### A_0100_销售价格表 ![](https://box.kancloud.cn/7e5d4889f75d4d28e540da8d11b52778_1580x588.png) ![](https://box.kancloud.cn/07ab646436d3349585503a7bea190e9d_1009x477.png) 脚本 ``` FIX ("BegBalance",&CurVer,@IDescendants("P01"),&CurSce,M100,@Relative("E01", 0),&CurYear) /*每个公司的销售单价 = 缺省公司的销售单价*/ SET CREATENONMISSINGBLK ON; "A0102" = "A0102"->"E00"; SET CREATENONMISSINGBLK OFF; ENDFIX ``` ##### A_0101_销售计划表 ![](https://box.kancloud.cn/0056769ae4fac759741eb4e33d209c74_1842x1080.png) 注意:替换变量{CurEntity}在整体脚本预览显示的是默认值。 脚本 ``` FIX (@IDescendants("YearTotal"),&CurVer,&CurSce,M100,&CurYear) FIX ({CurEntity},@IDescendants( "AllProduct")) /*销售金额=销售数量*销售单价->期初*/ "A0103"="A0101"*"A0102"->"BegBalance"; ENDFIX /* Start Template:Aggregation*/ SET AGGMISSG ON; FIX ("A0101", "A0103") AGG ("Product"); AGG ("Entity"); ENDFIX /* End Template:Aggregation*/ ENDFIX ``` 计算不出销售金额可能的原因及方案 1. 规则变量问题,原因不明,在工具-业务规则中运行,选择参数运行一次。 ##### A_0102_销售费用表 ![](https://box.kancloud.cn/46d310cc25c5683c0f96ae9e82b4cff6_1824x998.png) ``` FIX (@IDescendants("YearTotal"),&CurVer,&CurSce,M100,&CurYear) /* Start Template:Aggregation*/ SET AGGMISSG ON; FIX (@IDescendants("A0104")) AGG ("Product"); AGG ("Entity"); ENDFIX /* End Template:Aggregation*/ ENDFIX ``` ##### A_0201_管理费用表 ![](https://box.kancloud.cn/676d7de3885729502be010f736ae3057_1840x854.png) ``` FIX (@IDescendants("A02"),&CurVer,@IDescendants("YearTotal"),&CurSce,&CurYear) /* Start Template:Aggregation*/ SET AGGMISSG ON; AGG ("Entity"); /* End Template:Aggregation*/ ENDFIX ``` ##### A_0301_预算利润表 ![](https://box.kancloud.cn/6622559680e4c7825768fdf6003f51e6_2030x968.png) ![](https://box.kancloud.cn/b441dee59a01c670b2f3075219996da7_1852x954.png) 注意: 1. @XREF,维值别名后的BIZ、FIN的成员手工输入;在函数的成员选择框选不到。 ``` FIX (&CurVer,@IDescendants("YearTotal"),&CurSce,&CurYear) FIX(@Relative("E01", 0)) SET CREATENONMISSINGBLK ON; "A0301"=@XREF(_RevCube_, "A0103","P01","M100")/1.17; /*收入=销售金额/1.17*/ "A0304"=@XREF(_RevCube_, "A0104","P00","M100") + @XREF(_PnlCube_, "A02"); /*费用=销售费用+管理费用*/ SET CREATENONMISSINGBLK OFF; ENDFIX FIX(@Relative("E01", 0)) "A0303"= "A0301"- "A0302"; /*毛利=收入-成本*/ "A0305"= "A0303"- "A0304"; /*利润=毛利-费用合计*/ ENDFIX /* Start Template:Aggregation*/ SET AGGMISSG ON; FIX (@Descendants("A03")) AGG ("Entity"); ENDFIX /* End Template:Aggregation*/ ENDFIX ``` 费用合计没有正确合计: 1、 对照表单检查销售费用和管理费用的@XREF组合对不对。 #### 参考:CM设计器一直Loading 原因:FLASH Player版本问题 方案:升级至最新版本的Flash Player,https://helpx.adobe.com/cn/flash-player.html ![](https://box.kancloud.cn/3aed37a88c1a92154d1e2bdeb2e1e6f9_1586x1060.png) ![](https://box.kancloud.cn/3815a7cb1d48b67158df72def86bcdff_1598x1020.png) ![](https://box.kancloud.cn/d4858d0bcc88a5ea12bcb7d10a21681e_1558x1036.png) #### 参考:关于计算中的块 Essbase计算基于块,没有块则默认跳过不计算。 ```` FIX(产品1) 收入=收入*1.5->产品2; ```` 由于收入一个块(跨稀疏维值)内时,产品1取不到产品2的收入。 两个方法: 1)使用datacopy先复制新块,再计算 ```` datacopy 收入->产品2 to 收入->产品1; fix(产品1) 收入=收入*1.5->产品2; endfix ```` 优点:计算速度快 局限:只能相同块区域复制;一刀切,容易复制出不需要的块。 详细datacopy介绍请参考:https://docs.oracle.com/cd/E57185_01/ESBTR/datacopy.html 2)开启createnonmissingblk ```` fix(产品1) set createnonmissingblk on 收入=收入*1.5->产品2; endfix ```` 优点:精确创建块; 缺点:1、速度慢,2、公式不对容易创建大量无效组合块(应对 A:在fix内严格限制好范围;B.B.使用clearblock清块) 见esb dba手册 p455,块的计算 实验结果:datacoy的1s VS set createnonmissing on的32秒 ![](https://box.kancloud.cn/557131275cadfde910847e4190641d4b_1648x984.png) Datacopy ![](https://box.kancloud.cn/a05ad6ab0449aac1c7581bd490012392_1610x990.png) Set Createnonmissingblk on ![](https://box.kancloud.cn/0e400276656f84af784b5d24d89af712_1622x958.png) #### 参考:使用clearblock清块和测试规则 cleardata清数据,不清块 clearblock块和数据一起清,有4个选项: - all,清掉所有的块 - upper,清掉父层的块 - noninput,清掉不是输入的块,包括有计算导致创建的块。 - dynamic,清掉“动态计算及存储”创建的块 - empty,清掉是#missing的块 empty比较安全 non input可清除计算脚本创建的块和数据,接口导入是否清除的待测试 all 一般用来清除数据后测试规则是否正确,也能检查出创建块的问题。 详见:https://docs.oracle.com/cd/E57185_01/ESBTR/clearblock.html #### 参考: 块大小与计算性能 最佳性能块的大小8~100K,具体还需要根据计算的调优。 见esb dba手册p864 调整前33秒 ![](https://box.kancloud.cn/18b62d50eb5dd2b5908acab1e17e79d4_1666x536.png) ![](https://box.kancloud.cn/bfb92b0010611e6eafaf01df0cecbbf6_1202x444.png) 块大小 6k,密度2.36% ![](https://box.kancloud.cn/0d6e8e9f953e498ebf8ac1a8b4bed16b_1558x1300.png) Scenario稀疏维 ![](https://box.kancloud.cn/b723ad76de816bf87773ca23cc74ce76_1394x806.png) 调整后4分钟,性能降低8X ![](https://box.kancloud.cn/7183dcf1c02fc2d61b48067b011ac061_2192x1154.png) 块大小 92k ![](https://box.kancloud.cn/de01bdcf60362b8ecb62db12be1296b0_1588x1308.png) #### 参考:规则替换变量不生效 计算不出数 原因:不明 临时方案:将变量换成一个具体成员,再换回来就好了