目录
[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)
#### 参考:规则替换变量不生效
计算不出数
原因:不明
临时方案:将变量换成一个具体成员,再换回来就好了
- 前言
- 使用须知
- 全景图
- 练习1:部门预算员
- 【使用网页录入预算】
- 系统登录及初始化
- 选择预算任务
- 查看预算表单
- 提交预算数据
- 下载预算表单
- 运行业务规则
- 【使用Excel录入预算】
- 安装Smart View插件
- 配置Smart View插件
- 使用Smart View选择任务
- 使用Smart View查看表单
- 使用Smart View录入数据
- 使用Smart View运行规则
- 使用Smart View即席分析
- 练习2:预算管理员
- 【系统配置部分-EPMA模式】
- 新建应用-EPMA模式
- 导入大纲-EPMA模式
- 设置表单
- 设置规则-EPMA模式
- 设置任务
- 设置权限
- 【系统设置部分-经典模式】
- 设置应用-经典模式
- 导入大纲-经典模式
- 设置规则-经典模式
- 练习3:系统管理员
- 创建数据源
- 练习4:产品经理
- 设计权限
- 设计任务
- 设计规则
- 设计表单
- 设计大纲
- 经验
- 运维FAQ
- EAS
- 表单相关
- 通过表单校验规则只读部分区域
- 参考资料
- 联系原厂
- 联系作者