10 дек. 2010 г.

Запуск calc скриптов

Предлагаю 2 варианта запуска calc скриптов Essbase c параметрами через MaxL:

1. Используем подстановочные переменные (substitution variables ):

Создаем переменные:
   alter application Sample add variable 'vScenario';
   alter application Sample add variable 'vVersion';

   или через EAS консоль:


Создаем в кубе Sample.Basic calc скрипт Agg_test.csc:
FIX (&vScenario, &vEntity) 
 CALC DIM (Account, Period, Entity...)
ENDFIX
Создаем MaxL Agg_test.mxl:
login admin identified by 'password' on localhost;

spool on to "Maxl.log";
set timestamp on;

set inputScenario  = $1;
set inputVersion    = $2;

alter application Sample set variable "vScenario"  "$inputScenario";
alter application Sample set variable "vVersion"   "$inputVersion";

execute calculation Sample.Basic.Agg_test;

exit;
Запускаем MaxL:
essmsh Agg_test.mxl BUD VR_Work
 
2. Используем возможности MaxL

Создаем MaxL Agg_test2.mxl:
login admin identified by 'password' on localhost;

spool on to "Maxl.log";
set timestamp on;

set inputScenario  = $1;
set inputVersion    = $2;

execute calculation "
FIX ($inputScenario, $inputVersion)
 CALC DIM (Account, Period, Entity...)
ENDFIX
" on Sample.Basic;

exit;
Запускаем MaxL:
essmsh Agg_test2.mxl BUD VR_Work
В итоге результат будет достигнут аналогично п.1, но в данном случае не надо создавать отдельный calc скрипт и подстановочные переменные.

3. Дополнительная информация.

Чем отличается скрипт в ' ' от скрипта в " "?
vYear=FY10
Execute Calculation "FIX ($vYear)" on Sample.Basic /* правильно */
Execute Calculation 'FIX ($vYear)' on Sample.Basic /* не правильно */
В результате код первого скрипта будет - FIX (FY10), а код второго скрипта останется без изменения - FIX ($vYear), что приведет к ошибке. Т.е. если данные заключены в одинарные кавычки, то подстановка переменных не происходит.

Не используйте в кодах измерений Outline символы ".", пробел и прочие спец. символы т.к. это приводит к усложнению написания скриптов т.к. необходимо применять символ '/'.
Если не поставить "/" перед "." и не взять код элемента, в котором есть пробел в кавычки, MaxL будет сообщать об ошибке.

Не правильно:
Execute Calculation "
FIX ($vYear, Moscow.01, "Moscow 02")
  CALC DIM (Account, Period) 
ENDFIX" on Sample.Basic
Правильно:
Execute Calculation "FIX ($vYear, Moscow/.01, /"Moscow 02/")
  CALC DIM (Account, Period) 
ENDFIX" on Sample.Basic
Правильно, но подстановка невозможна:
Execute Calculation '
FIX (FY10, "Moscow.01", "Moscow 02")
  CALC DIM (Account, Period) 
ENDFIX' on Sample.Basic

Комментариев нет:

Отправить комментарий