Essbase Custom-Defined Macros

Задача:

Существует куб со следующими измерениями:

Account
   Acc1
   Acc2
   Acc3
Period
   YearTotal
     Q1
       Jan
       Feb
       ...
Year
   FY09
   FY10
   FY11

Необходимо создать функцию XXPRIOR которая умеет “перескакивать” через год т.е.

XXPRIOR(Jan->FY10) = Dec->FY09

Решение:

Создаем макрос в MaxL:

create or replace macro '@XXPRIOR'
(SINGLE) as
'(
  (@ISMBR(Jan) * @@1->Dec->@CURRMBRRANGE("Years", LEV, 0, -1,-1)) 
    + (@ISMBR(Feb:Dec) * @PRIOR (@@1))
)'

Перестартовываем приложение в Essbase.

Используем макрос в calc-сриптах:

FIX(FY10, Jan:May)

    Acc2 = @XXPRIOR(Acc1); /* Macro */
    Acc3 = @PRIOR(Acc1);   /* Standart Function */

ENDFIX

Этот пример показывает результат работы скрипта:

                Dec     Jan     Feb     Mar    Apr    May
                FY09    FY10    FY10    FY10   FY10   FY10
                ===     ===     ===     ===    ===    ===
Acc1            1100    1200    1000    1300   1300   1400
Acc2            #MI     1100    1200    1000   1300   1300
Acc3            #MI     #MI     1200    1000   1300   1300

Для детального изучения смотрите Technical Reference: Custom-Defined Macros