第十篇.HFM規則入門(三:深入使用exp函式)

oracle_cj發表於2021-07-21

第八篇介紹的是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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章