語法考量

  • 如果用於整個維度,則請一律使用 @LEVMBRS,而非 @RELATIVE
  • 使用 @CHILDREN,而非 @RELATIVE (適用時)。
  • 如果您只要從 FIX 陳述式排除一些成員,則請使用 @REMOVE@LEVMBRS

使用 Planning 中所儲存的日期來執行計算

Planning 可讓您輸入日期值。例如,使用 MM/DD/YYYY 格式,開始日期可能輸入為 11/01/2019,而結束日期可能輸入為 06/01/2020。Oracle Essbase 會將日期格式值儲存為數值。例如,先前的開始日期儲存為 20191101,而結束日期儲存為 201200601。您可以使用 Essbase 函數 (例如,@ROUND@INT@TRUNCATE 函數) 來計算任何開始日期與結束日期之間的月份數。下列範例顯示如何使用 @ROUND 函數來計算開始日期與結束日期之間的月份數:

  1. 計算結束日期年份與開始日期年份之間的月份數,如下所示:
    (@ROUND ("End Date",-4) - @ROUND ("Start Date",-4))/10000*12
    此計算 (20200000 – 20190000)/10000 *12 的結果為 12。
  2. 計算結束日期年份開始與結束日期之間的月份數,並加上它。
    (@ROUND ("End Date",-2) - @ROUND ("End Date",-4))/100
    計算 (20200600 – 20200000)/100 的結果為 6。
  3. 計算開始日期年份開始與開始日期之間的月份數,並減掉它。
    (@ROUND ("Start Date",-2) - @ROUND ("Start Date",-4))/100
    計算 (20191100 – 20190000)/100 的結果為 11。
  4. 將先前的步驟結合到一個公式 (12+6-11),以計算開始日期與結束日期之間的月份數 (7)。
    (((@ROUND ("End Date",-4) - @ROUND ("Start Date",-4))/10000*12) + 
    ((@ROUND ("End Date",-2) - @ROUND ("End Date",-4))/100)-
    ((@ROUND ("Start Date",-2) - @ROUND ("Start Date",-4))/100))

使用 @CURRMBR 函數

@CURRMBR 函數可傳回目前所計算維度成員的名稱,特別適用於限定和管理複雜計算。不過,您必須考慮其效能影響。

在稀疏維度上使用 @CURRMBR 函數時,不會影響效能,因為區塊只會對應至一個稀疏維度成員。不過,用於密集維度時,此函數的效能會變慢,因為它會在區塊層級執行計算,而非儲存格層級。因此,此函數會計算所有密集維度成員,即使查詢中沒有特定密集維度成員也是一樣。因此,請謹慎地搭配使用此函數與密集維度。

此外,用於密集維度時,如果搭配使用 @CURRMBR 函數與 @CONCATENATE 這類其他函數,則可能會產生非預期的結果或錯誤。例如,如果查詢中的動態計算成員包含公式 "Actual"->@MEMBER(@CONCATENATE(@NAME (@CURRMBR ("Account")),"_Total")),而且 Account 維度為稀疏,則只要查詢中的科目產生有效的大綱成員,就會執行查詢,而不發生錯誤。不過,如果 Account 維度為密集,則查詢會導致下列錯誤,即使查詢中的科目產生有效的大綱成員也是一樣。

Error executing formula for [member name] (line 0): attempt to cross a null @ member in function [@X]

會產生此錯誤,因為 @CURRMBR 函數在區塊層級進行計算,因此會計算密集區塊中的所有科目。並非區塊內的所有科目都會產生有效的大綱成員,進而導致先前的錯誤訊息。如需有關 @CURRMBR 函數的詳細資訊,請參閱 Oracle Essbase Technical Reference (僅英文版) 中的 @CURRMBR