目錄
[TOC]
* * * * *
> 注意:練習的設置信息請參考使用須知中的資料包,以《03_規則設計 V1.xlsx》為準。
#### 什么是規則
規則是用于靈活計算表內、表間、數據庫之間邏輯文件。
業務人員可以學會看懂規則即可,一般業務人員做好表單之后,規則由技術人員編寫。如果有基礎和興趣,可參考使用須知資料包,03-規則設計/《esb_dbag 中文版.pdf》,了解更多關于Essbase的基礎概念、計算語法、規則和函數。
基本結構和語法包括:
1. 計算的全局范圍:限定計算范圍(Fix……End Fix),見開始的全局范圍。
2. 計算的核心要點:
- 包括成員的四則運算,見腳本中的加減乘除。
- 對成員指定一個組合(->),見示例中期初的銷售單價
- 增加注釋信息(/* …… */ )
- 成員的引用需要用“”雙引號引起來
- 替代變量的引用需要使用“&”,不需要引號,例如:&CurYear
- 規則變量的引用需要使用大括號括起來,或者通過變量按鈕選擇
- 除Fix,每行規則末尾需要有分號“;”
4. 計算后的匯總:見示例中的聚合模塊

#### 進入計算管理器
Calculation Manager,簡稱CM

#### 設置替換變量
創建應用程序級別內共享的變量



設置維名稱為Entity的替換變量
設置一個默認值
勾選RTP(Run-Time Prompt,運行時提示),后面才可以引用表單上的成員
RTP文本為必填,用于設置參數選擇框時給用戶的提示文字。
#### 新建規則

#### 指定全局范圍
目的:避免計算范圍過大,導致計算耗時過長。通過也避免計算無意義的組合,增加塊的數量,影響數據庫大小。

使用成員選擇器選擇成員。對于替代變量,需要直接輸入,如 &CurYear

#### 編寫計算邏輯

##### 插入腳本塊和限定子范圍

從左側新對象區域拖動“腳本”對象到“開始”和“結束”之間。
在計算邏輯中根據需要可能還要進一步FIX限定計算范圍。
##### 選擇成員

##### 插入變量
目的:便于通過變量集中更換規則計算的場景、版本、年份。
可以使用“插入變量”按鈕變量,也可以直接輸入“{變量名稱}”來使用變量。

對于替代變量,規則也可以引用,但只能手工輸入,無法通過“插入變量"插入。
&CurYear
&CurSce
&CurVer
##### 腳本診斷

點擊腳本診斷,查看腳本語法是否正確。在部署前可以進行預檢查。
#### 匯總數據
拖動匯總模塊到設計器

可關閉彈出的匯總設置窗口,在設計器摘要中按需設置

設置聚合數據庫中缺少的值

避免出現以下情況,數據庫清除數據,但不匯總missing到父層

#### 查看全部腳本代碼
可以點擊“開始”模塊下的“腳本”選項卡,查看該規則包含各個設計對象的完整腳本代碼。
> 注意,“開始”模塊下的腳本代碼是只讀的,如需編輯,需要點擊進入各個“腳本”的腳本選項卡。
> 注意:替換變量在腳本代碼顯示時,顯示的是默認值,見“A_0101_銷售計劃表”圖例。

#### 驗證與部署規則
檢查是否有語法錯誤之類

部署后可以在表單關聯規則界面看到

> tips:
> 規則部署之后在業務規則清單看不到,重啟服務(待添加操作步驟,測試環境操作),重新完全部署。耐心等待1小時.
#### 查看位置別名
使用跨庫取數@XREF時需要用到維值別名。

在哪個數據庫使用@XREF函數,就在哪個數據庫查看位置別名。
在RPT引用biz、fin,就在RPT右鍵查看維值別名,注意,系統默認的位置別名不能修改。

#### 規則關聯表單
目的:規則掛到表單上,以便表單保存時能觸發規則

將默認的計算表單刪除,添加自定義規則
設置表單的業務規則屬性。
#### 規則導出導入
>發布正式環境,可以使用規則導出,導入,提交效率,避免出錯。
>導入前,先做好原規則的備份。

導出

導入

覆蓋原規則
#### 參考:練習的規則示例
##### A_0100_銷售價格表


腳本
```
FIX ("BegBalance",&CurVer,@IDescendants("P01"),&CurSce,M100,@Relative("E01", 0),&CurYear)
/*每個公司的銷售單價 = 缺省公司的銷售單價*/
SET CREATENONMISSINGBLK ON;
"A0102" = "A0102"->"E00";
SET CREATENONMISSINGBLK OFF;
ENDFIX
```
##### A_0101_銷售計劃表

注意:替換變量{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_銷售費用表

```
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_管理費用表

```
FIX (@IDescendants("A02"),&CurVer,@IDescendants("YearTotal"),&CurSce,&CurYear)
/* Start Template:Aggregation*/
SET AGGMISSG ON;
AGG ("Entity");
/* End Template:Aggregation*/
ENDFIX
```
##### A_0301_預算利潤表


注意:
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



#### 參考:關于計算中的塊
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秒

Datacopy

Set Createnonmissingblk on

#### 參考:使用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秒


塊大小 6k,密度2.36%

Scenario稀疏維

調整后4分鐘,性能降低8X

塊大小 92k

#### 參考:規則替換變量不生效
計算不出數
原因:不明
臨時方案:將變量換成一個具體成員,再換回來就好了
- 前言
- 使用須知
- 全景圖
- 練習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
- 表單相關
- 通過表單校驗規則只讀部分區域
- 參考資料
- 聯系原廠
- 聯系作者