第十篇.HFM規則入門(三:深入使用exp函式)
第八篇介紹的是exp函式右邊是一個數值的場景,實際場景中用的更多的是exp函式左右兩邊都是維度組合(也叫P OV ),而非數值。今天深入探討exp函式的使用。
1、維度交叉點考慮因素
如果不指定
Exp
從中獲取資料以及
Exp
放入資料的維交叉點,則源和目標交叉點由下列因素決定:
·
目標(等號
左邊
)。如果未在等號左側指定任何ICP維或C1-Cn維的成員,則
Exp
會將資料寫入所有與ACCOUNT維度為有效組合的POV上。
· 源(等號 右邊 )。如果未在等號的右側指定維的成員,則存在下列幾種可能:
o 如果維只有一個成員,則 Exp 會從此成員與源科目的交叉點獲取資料。
o 如果維與源科目只有一個有效的交叉點,則 Exp 會從此交叉點獲取資料。
o 如果維與源科目有幾個交叉的成員,則資料的源交叉點由等式左側決定:
1)如果在左側指定了一個成員,則 Exp 會嘗試從此成員與源科目的交叉點獲取資料。
2)如果未在左側指定任何成員,則 Exp 將嘗試將資料置於目標科目與維成員的每個有效交叉點。 Exp 將從該成員與源科目的相應交叉點獲取目標交叉點的資料。
注:
如果源交叉點無效,則 Exp 不會更改相應目標交叉點中的資料。
總結下:筆者認為就兩點
1)就是前面的文章也提到的,exp函式左右的維度組合個數(POV)最好要對應,能明確的維度一定要顯示寫出來。通常規則是:
Hs.exp “A#.I#.C1#.Cn#= A#.I#.C1#.Cn#”
規則中一般只用account、ICP,C1-Cn維度,這一點很重要。
2)等號兩邊的科目需要特別注意,比如等號左邊的POV中科目屬性是ICP科目(isicp=Y),等號右邊的科目是非ICP科目(isicp=N)。所以寫規則的時候特別要關注等號左右兩邊科目的屬性(CnTOPMEMBER,ISICP,ISconsolidated等)
2、同時計算多個科目
--->要將資料插入與當前視點交叉的所有科目中,可將 All 用於帳戶表示式中。您可以使用此方法來設定所有科目的期初餘額。在以下示例中, IsFirst 函式將測試當前期間是否是第一個期間。如果是第一個期間,則 Exp 會將當前期間每個科目的值設定為前一年最後一個期間的科目值。
If HS.Period.IsFirst = TRUE Then
HS.Exp "A#ALL = A#ALL.Y#PRIOR.P#LAST"
End If
上面這段的變種其實就是我們常見的年初數結轉規則,如下:
If HS.Period.IsFirst = TRUE Then
HS.Exp "A#ALL.C1#movbeg01 = A#ALL.C1#[None].Y#PRIOR.P#LAST"
End If
實際業務中,主要是資產負債類的科目的年初結轉,我們知道,資產負債表的第一列是年初資料,
第二列是期末資料。年初數資料就是上面這段規則計算出來的
(實際使用時涉及到增減變動的結轉,會略複雜)。
----->要將資料寫入到科目與自定義維或ICP維的所有有效組合式上,可使用 All 關鍵字或省略 A# 字元。上面的寫法可以等價為為:
If HS.Period.IsFirst = TRUE Then
HS.Exp "C1#movbeg01 = C1#[None].Y#PRIOR.P#LAST"
End If
示 例
下例設定 StateTax 帳戶中的金額。此示例透過將 2014 年 Sales 帳戶中的金額乘以 2014 年 StateRate 帳戶中的匯率來計算此金額。
HS.Exp "A#StateTax = A#Sales.Y#2014 * A#StateRate.Y#2014"
3、Exp和維度交叉點考慮因素
這一節大部分是Hfm官方文件上的內容,非常的經典,值得讀者認真研讀。
以下示例說明了 “維交叉點考慮因素” 中提到的考慮因素。將介紹以下交叉點型別:
a) 所有交叉點對於源科目和目標科目均有效。
b) 某些交叉點對於源科目和目標科目有效,其他一些交叉點則無效。
c)只有一個成員對於源科目有效。
以下所有示例都將名為 TargAcct 和 SourceAcct 的帳戶與名為 Member001 、 Member002 和 Member003 的 Custom1 維配合使用。下表中列出了所有示例的源交叉點資料。後面的例子的基礎都是此例子為前提。
成員 |
SourceAcct 交叉點中的資料 |
Member001 |
10 |
Member002 |
NoData 狀態 |
Member003 |
15 |
維交叉點示例的資料
先翻譯下上面這個表格,怎麼理解?
等價於如下公式:
使用smartview刷數或者web表單展示如下:
A# SourceAcct.C1# Member001=10
A# SourceAcct.C1# Member002=空,這裡用空作意思表示,smartview刷出來或者表單顯示是空白
A# SourceAcct.C1# Member003=15
3.1 所有維度組合都是有效的場景
對於以下示例, TargAcct 和 SourceAcct 科目與 Custom1 成員的所有交叉點都是有效的:
HS.Exp "A#TargAcct = A#SourceAcct"
如果目標科目TargAcct和源科目SourceAcct的設定的屬性一樣,那麼上面的規則就是將源科目的資料複製一份到目標科目上,也就是我們常說的平轉。
應用公式後的結果如下:
Custom1 成員 |
資料 |
交叉點 |
Member001 |
10 |
SourceAcct 和 Member001 |
Member002 |
--- |
不適用。 TargAcct 和 Member002 的交叉點未更改,因為 SourceAcct 和 Member002 的交叉點狀態為 NoData 。 |
Member003 |
15 |
SourceAcct 和 Member003 |
可以翻譯為:
A# TargAcct .C1# Member001=10
A# TargAcct .C1# Member002=空,這裡用空作意思表示,smartview刷出來或者表單顯示是空白
A# TargAcct .C1# Member003=15
à 如果 在等號左側將 Exp 與 Member001 成員一起使用:
HS.Exp "A#TargAcct.C1#Member001 = A#SourceAcct"
TargAcct 和 Member001 的交叉點設定為 10 。 Exp 從 SourceAcct 與 Member001 的交叉點獲取資料,因為在左側指定了 Member001 。
à 如果 在等號右側將 Exp 與 Member003 一起使用:
HS.Exp "A#TargAcct = A#SourceAcct.C1#Member003"
這樣寫等價於右邊就是一個數值,那麼會填充左邊目標POV上所有有效組合:
Custom1 成員 |
資料 |
交叉點 |
Member001 |
15 |
SourceAcct 和 Member003 |
Member002 |
15 |
SourceAcct 和 Member003 |
Member003 |
15 |
SourceAcct 和 Member003 |
上面的表格翻譯為:
A# TargAcct .C1# Member001=15
A# TargAcct .C1# Member002=15
A# TargAcct .C1# Member003=15
所以這種寫法是很危險的,特別是要防止是一個常數的情況
3.2 無效組合
在以下示例中,源帳戶與目標帳戶各有無效組合。
a)SourceAcct.Member002 和 Member003 有效, Member001 無效。
b) TargAcct.Member001 和 Member002 有效, Member003 無效。
下面這個公式及應用公式後的結果值得初學者細品,筆者不再贅述:
HS.Exp "A#TargAcct = A#SourceAcct"
使用公式後的結果 :
a) TargAcct.Member001 = SourceAcct.Member001 。 SourceAcct 與 Member001 為無效交叉點。
b)TargAcct.Member002 = SourceAcct.Member002 。因為 SourceAcct 和 Member002 的交叉點為 NoData 狀態,所以 TargAcct 和 Member002 的交叉點保持不變。
c)TargAcct.Member003 = SourceAcct.Member003 。 TargAcct 與 Member003 為無效交叉點。
在以下示例中, Exp 與在等號左側指定的 Member001 一起使用:
HS.Exp "A#TargAcct.C1#Member001 = A#SourceAcct"
TargAcct.Member001 保持不變,因為 Exp 嘗試從無效的交叉點( SourceAcct 和 Member001 )檢索資料。
在以下示例中, Exp 與在等號右側指定的 Member003 一起使用:
HS.Exp "A#TargAcct = A#SourceAcct.C1#Member003"
該函式將此資料置於 Custom1 成員與 TargAcct 科目 的交叉點中:
Custom1 成員 |
資料 |
交叉點 |
Member001 |
15 |
SourceAcct 和 Member003 |
Member002 |
15 |
SourceAcct 和 Member003 |
Member003 |
N/A |
不適用。 Member003 對於 TargAcct 帳戶是一個無效交叉點。 |
3.3 右側的一個有效成員
在以下示例中,源科目的有效組合中僅具有一個有效成員,目標科目組合中具有兩個有效成員。
a) SourceAcct.Member003 是唯一有效的交叉點。
b)TargAcct.Member001 和 Member002 有效, Member003 無效。
在以下示例中,使用 Exp 時未在等號的任一側指定 Custom1 成員:
HS.Exp "A#TargAcct = A#SourceAcct"
該函式將此資料置於 Custom1 成員與 TargAcct 科目的交叉點中:
Custom1 成員 |
資料 |
交叉點 |
Member001 |
15 |
SourceAcct 和 Member003 ( SourceAcct 科目的唯一有效交叉點) |
Member002 |
15 |
SourceAcct 和 Member003 ( SourceAcct 科目的唯一有效交叉點) |
Member003 |
N/A |
不適用。 Member003 對於 TargAcct 科目是一個無效交叉點。 |
在以下示例中, Exp 與在等號左側指定的 Member001 一起使用:
HS.Exp "A#TargAcct.C1#Member001 = A#SourceAcct"
TargAcct 和 Member001 的交叉點設定為 15 ,這是 SourceAcct 和 Member003 的交叉點中的資料。
提示: |
如果 SourceAcct 科目和 Custom1 維有多個有效交叉點,則 Exp 將嘗試從 SourceAcct 和 Member001 的交叉點中獲取資料。如果此交叉點是無效交叉點,則 Exp 將保留目標科目不變。 |
全文完。
我的微信公眾號:大話EPM,歡迎交流
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28963606/viewspace-2782453/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 第十一篇.HFM規則入門(四:深入淺出For語句)
- 第八篇.HFM規則入門(二)
- 第七篇.HFM規則入門(一)
- 正規表示式之(exp),(?:exp),(?=exp) 理解
- 普通函式與函式模板呼叫規則函式
- 普通函式與函式模板呼叫規則2函式
- React入門--第三天--函式元件React函式元件
- camunda快速入門(五):DMN規則引擎如何使用
- 深入理解正規表示式:從入門到精通
- PHP入門:常量基本規則PHP
- 5-快速入門Python函式使用Python函式
- JavaScript入門③-函式(2)原理{深入}執行上下文JavaScript函式
- 【使用者行為規則】部分能否加入【函式】呢?函式
- Python入門-函式Python函式
- 前端入門——函式前端函式
- 11函式入門函式
- 生成函式入門函式
- 尤拉函式入門函式
- PHP入門之函式PHP函式
- 集合與函式入門函式
- python入門:range函式Python函式
- 函式正規化入門(惰性求值與函式式狀態)函式
- [譯] 函式式 JavaScript 快速入門函式JavaScript
- MySQL入門系列:查詢簡介(三)之表示式和函式MySql函式
- opencv中的exp32f函式OpenCV函式
- python-函式入門(一)Python函式
- day07-函式入門函式
- 3.JavaScript函式入門JavaScript函式
- JavaScript入門-函式function(二)JavaScript函式Function
- python入門必會的助手函式:dir()函式Python函式
- JS正規表示式入門JS
- Regex 正規表示式入門
- 數論函式從入門到進門函式
- C++入門記-建構函式和解構函式C++函式
- 函式式DDD架構入門 - SCOTT WLASCHIN函式架構
- 新手入門:Linux使用技巧15則Linux
- Python基礎入門(5)- 函式的定義與使用Python函式
- JavaScript 高階函式快速入門JavaScript函式