Мелкие хинты по кастомизации интерфейса EPM (11.1.2.0-11.1.2.2):
Блог посвящен большей частью информационным системам класса BPM/CPM. В основном - продуктам линейки Oracle (Hyperion) EPM System. Здесь описываются важнейшие моменты, интересные how-to, hints, tips & tricks.
Показаны сообщения с ярлыком Формы. Показать все сообщения
Показаны сообщения с ярлыком Формы. Показать все сообщения
28 августа 2012
SQL запросы для получения информации о формах в Planning
Можно потратить много времени, чтобы получить информацию о формах данных в Planning: папка формы, бизнес-правила, меню и др. Можно упростить это процесс. Подробнее
26 марта 2012
Скользкие формы Planning
Встала передо мной задача: построить формы в Planning таким образом, чтобы на форме был текущий месяц (Period Dim) и пару месяцев назад. Естественно, каждый раз перестраивать ручками формы лень, а есть ситуации, когда нужно "заглянуть" на 1-2 мес в прошлый год. Вот и получаются у нас "скользящие" формы.
К сожалению, сами формы данных, в отличие от отчетов FinReporting, построить с использование ссылающихся функций (вроде Prior) нельзя. Ответ нашелся на форуме: https://forums.oracle.com/forums/thread.jspa?messageID=9454665 Да, и так понятно, что это единственный вариант - через переменные подстановки в Essbase. Прекрасно, приступим к реализации:
К сожалению, сами формы данных, в отличие от отчетов FinReporting, построить с использование ссылающихся функций (вроде Prior) нельзя. Ответ нашелся на форуме: https://forums.oracle.com/forums/thread.jspa?messageID=9454665 Да, и так понятно, что это единственный вариант - через переменные подстановки в Essbase. Прекрасно, приступим к реализации:
- Определяемся с набором переменных. Для каждого "специфического" периода может быть нужен свой год. Например, в моем случае: в январе текущего понадобятся еще ноябрь и декабрь прошлого года, а в феврале - только декабрь прошлого года и январь нынешнего:
- CurrYearFor - текущий год
- CurrPerFor - текущий период для Прогнозирования
- Prev1PerFormFor - предыдущий период
- Prev1YearFormFor - год для предыдущего периода (Prev1PerFormFor)
- Prev2PerFormFor - пред-пердыдущий период
- Prev2YearFormFor - год для пред-предыдущего периода (Prev2PerFormFor)
- Создаем эти переменные подстановки в кубе приложения Essbase. Либо ручками (операция по сути - разовая), либо MaxL-скриптиком с использованием команд на нужной БД (кубе) Essbase:
alter database sample.basic add variable CurMnth 'Jan';
таким синтаксисом мы создаем переменную для куба приложения. Есть еще варианты для одного приложения:
alter application sample add variable CurMnth 'Jan';
или инстанса Essbase:alter system add variable CurMnth 'Jan';
- Настраиваем формы данных на использование этих переменных. Здесь придется отказаться от выбора года и периода в срезе, потому что придется эти измерения "зашивать" в таблицы данных.
- Готовим скрипт (bat для Windows env.) для обновления переменных по мере необходимости:
@echo off
setlocal
cls
Rem Set Variables
SET ESSSETENV=F:\Oracle\Middleware\user_projects\epmsystem1\EssbaseServer\essbaseserver1\bin\setEssbaseEnv.bat
SET SERVER=epm_server_name
SET USER=ess_admin
SET PASSWORD=ess_passwordНиже укзаываются Public Key for Encryption и Private Key for Decryption. Это необходимо для шифрования учетных записей пользователя для исполнения MaxL скрипта. Подробности
SET PKE=
SET PKD=
SET App=AppName
SET Cube=PlanName
SET OuputMaxl=EssVarsUpdate.maxlВ EssVarsUpdate_AutoExec.log будем сохранять лог основных операций, а в %LogDate%_EssVarsUpdate.log исполняемый MaxL.
SET EXECLOG=EssVarsGenerator_Auto.log
SET CurrDir=%CD%
SET LogSubDir=%CurrDir%\LOGS
SET CurrYear=%date:~12%
SET /A PrevYear=%CurrYear% - 1
SET Day=%date:~7,2%
SET Month=%date:~4,2%
SET LogDate=%CurrYear%-%Month%-%Day%
if '%Month:~0,1%'=='0' set Month=%Month:~1,1%
Не забудьте проверить значения переменных CurrYear, Month. Зависят от используемой на сервере локали.
Rem LOG
echo Генератор переменных БД Essbase по Прогозу для построения "скользящих" форм >> %LogSubDir%\%EXECLOG%
echo Started: %date% @ %time% >> %LogSubDir%\%EXECLOG%
echo Params: CurrMonth:%Month%; CurrYear:%CurrYear%; PrevYear:%PrevYear% >> %LogSubDir%\%EXECLOG%
Rem Checkin' Input Parameter
IF %Month% LSS 1 GOTO :error
IF %Month% GTR 12 GOTO :errorНиже - список базовых элементов измерения Period
Rem Input Parameter Converter
IF %Month%==1 SET TempMonth='January'
IF %Month%==2 SET TempMonth='February'
IF %Month%==3 SET TempMonth='March'
IF %Month%==4 SET TempMonth='April'
IF %Month%==5 SET TempMonth='May'
IF %Month%==6 SET TempMonth='June'
IF %Month%==7 SET TempMonth='July'
IF %Month%==8 SET TempMonth='August'
IF %Month%==9 SET TempMonth='September'
IF %Month%==10 SET TempMonth='October'
IF %Month%==11 SET TempMonth='November'
IF %Month%==12 SET TempMonth='December'
Rem Create MAXL script
echo spool on to '%LogSubDir%\%LogDate%_EssVarsUpdate.log'; > %CurrDir%\%OuputMaxl%
echo login '%USER%' '%PASSWORD%' on '%SERVER%'; >> %CurrDir%\%OuputMaxl%
Rem Set Current Period and Year, Start Period for Forecast calculations
echo alter database '%App%'.'%Cube%' set variable 'CurrYearFor' 'FY%CurrYear%'; >> %CurrDir%\%OuputMaxl%
echo alter database '%App%'.'%Cube%' set variable 'CurrPerFor' %TempMonth%; >> %CurrDir%\%OuputMaxl%
echo alter database '%App%'.'%Cube%' set variable 'StartPerFor' %TempMonth%; >> %CurrDir%\%OuputMaxl%
Rem Set Previous Period and Year
SET /A Mon = 100%Month% %% 100
SET /A PriorMonth=%Mon% - 1
SET Prev1YearFormFor='FY%CurrYear%'
IF %PriorMonth% == 0 SET Prev1YearFormFor='FY%PrevYear%'
IF %PriorMonth% == 0 SET PriorMonth=12
IF %PriorMonth%==1 SET TempMonth='January'
IF %PriorMonth%==2 SET TempMonth='February'
IF %PriorMonth%==3 SET TempMonth='March'
IF %PriorMonth%==4 SET TempMonth='April'
IF %PriorMonth%==5 SET TempMonth='May'
IF %PriorMonth%==6 SET TempMonth='June'
IF %PriorMonth%==7 SET TempMonth='July'
IF %PriorMonth%==8 SET TempMonth='August'
IF %PriorMonth%==9 SET TempMonth='September'
IF %PriorMonth%==10 SET TempMonth='October'
IF %PriorMonth%==11 SET TempMonth='November'
IF %PriorMonth%==12 SET TempMonth='December'
echo alter database '%App%'.'%Cube%' set variable 'Prev1PerFormFor' %TempMonth%; >> %CurrDir%\%OuputMaxl%
echo alter database '%App%'.'%Cube%' set variable 'Prev1YearFormFor' %Prev1YearFormFor%; >> %CurrDir%\%OuputMaxl%
Rem Set Pre-Previous Period and Year
SET /A PriorMonth=%Mon% - 2
SET Prev2YearFormFor='FY%CurrYear%'
IF %PriorMonth% == 0 SET Prev2YearFormFor='FY%PrevYear%'
IF %PriorMonth% == -1 SET Prev2YearFormFor='FY%PrevYear%'
IF %PriorMonth% == 0 SET PriorMonth=12
IF %PriorMonth% == -1 SET PriorMonth=11
IF %PriorMonth%==1 SET TempMonth='January'
IF %PriorMonth%==2 SET TempMonth='February'
IF %PriorMonth%==3 SET TempMonth='March'
IF %PriorMonth%==4 SET TempMonth='April'
IF %PriorMonth%==5 SET TempMonth='May'
IF %PriorMonth%==6 SET TempMonth='June'
IF %PriorMonth%==7 SET TempMonth='July'
IF %PriorMonth%==8 SET TempMonth='August'
IF %PriorMonth%==9 SET TempMonth='September'
IF %PriorMonth%==10 SET TempMonth='October'
IF %PriorMonth%==11 SET TempMonth='November'
IF %PriorMonth%==12 SET TempMonth='December'
echo alter database '%App%'.'%Cube%' set variable 'Prev2PerFormFor' %TempMonth%; >> %CurrDir%\%OuputMaxl%
echo alter database '%App%'.'%Cube%' set variable 'Prev2YearFormFor' %Prev2YearFormFor%; >> %CurrDir%\%OuputMaxl%
echo logout; >> %CurrDir%\%OuputMaxl%
echo spool off; >> %CurrDir%\%OuputMaxl%
echo exit; >> %CurrDir%\%OuputMaxl%
Rem Set Essbase Env
call %ESSSETENV%
Rem Encrypt MaxL Script
essmsh -E %CurrDir%\%OuputMaxl% %PKE% > nul
Rem Del Original MaxL Script
del %CurrDir%\%OuputMaxl% >> %LogSubDir%\%EXECLOG%
Rem Run Encrypted MaxL Script
essmsh -D %CurrDir%\%OuputMaxl%s %PKD% > nul
Rem Del Encrypted MaxL Script
del %CurrDir%\%OuputMaxl%s >> %LogSubDir%\%EXECLOG%
echo MaxL log U can find here: %LogSubDir%\%LogDate%_EssVarsUpdate.log >> %LogSubDir%\%EXECLOG%
GOTO :fine
:error
set ERRORLEVEL=-1
echo Wrong input parameter '%Month%' (Num. of month) :( >> %LogSubDir%\%EXECLOG%
echo Input value must be in range [1..12] >> %LogSubDir%\%EXECLOG%
GOTO :end
:fine
set ERRORLEVEL=0
echo Essbase Variables has been updated successfully =) >> %LogSubDir%\%EXECLOG%
GOTO :end
:end
echo Finished: %date% @ %time% >> %LogSubDir%\%EXECLOG%
echo ... >> %LogSubDir%\%EXECLOG% - Автоматизируем запуск этого файла, вставляя задачу в Task Scheduler. Сначала я готовил батничек для ручного режима с менюшкой для ответственного пользователя, но пришел к выводу, что могу автоматизировать процесс такого обновления переменных: я знаю, что пользователи полезут в систему к 1-му числу, значит числа 25 могу смело обновлять переменные.
14 сентября 2010
Поменяем по-быстрому?!
Привет,
Работая с Hyperion Planning 3.5 столкнулся с банальнейшей на первый взгляд задачей – массово заменить в формах некоторые элементы. Проблемы:
1. При выгрузке форм через FormDefUtil оказалось, что 3.5 не умеет выгружать переменные подстановки. Вместо таких элементов подставляются верхние элементы измерений. Никак не лечится для версии 3.x. Можно заменить на нужные элементы и, заранее создав отдельную папку форм в приложении Planning, массово изменить расположение форм на эту папку.
2. Вместо элементов измерений из Point of View подставляются алиасы верхних элементов измерений. Это лечится патчем Planning 3.5.1.8 и выше.
3. Результаты выгрузки – файлы XML. Но при открытии в умном текстовом редакторе они определяются в кодировке ANSI/Win. Хотя сам формат файла XML UTF-8. Вероятно это проблема того, что я использую Windows c дефолтовой страницей ANSI. После преобразований в редакторе (Notepad++) массово перекодировать файлы не получилось. Лечится использованием портированой на win-платформу утилитой iconv. Для ее использования нужно скачать саму библиотеку iconv и среду исполнения gettext-runtime.
Ниже приведен простейший пример использования для группы файлов.
Чтобы узнать полный список кодировок/их внутренние наименования, наберите:
iconv.exe -l
1251_utf8.cmd (пакетная обработка 1251->UTF8)
for %%i in (*.*); do f:\iconv\bin\iconv.exe -f cp1251 -t utf-8 "%%i" >tmp && move /y tmp "%%i"
Запуск (batch для всех файлов xml)
rem - в папку с формами
cd f:\iconv\forms
rem - обработка
f:\iconv\cp1251_utf8.cmd *.xml
Кроме того, для ускорения процесса замен рекомендую использовать on-line сервисные редакторы RegEx. Например: http://gskinner.com/
Работая с Hyperion Planning 3.5 столкнулся с банальнейшей на первый взгляд задачей – массово заменить в формах некоторые элементы. Проблемы:
1. При выгрузке форм через FormDefUtil оказалось, что 3.5 не умеет выгружать переменные подстановки. Вместо таких элементов подставляются верхние элементы измерений. Никак не лечится для версии 3.x. Можно заменить на нужные элементы и, заранее создав отдельную папку форм в приложении Planning, массово изменить расположение форм на эту папку.
2. Вместо элементов измерений из Point of View подставляются алиасы верхних элементов измерений. Это лечится патчем Planning 3.5.1.8 и выше.
3. Результаты выгрузки – файлы XML. Но при открытии в умном текстовом редакторе они определяются в кодировке ANSI/Win. Хотя сам формат файла XML UTF-8. Вероятно это проблема того, что я использую Windows c дефолтовой страницей ANSI. После преобразований в редакторе (Notepad++) массово перекодировать файлы не получилось. Лечится использованием портированой на win-платформу утилитой iconv. Для ее использования нужно скачать саму библиотеку iconv и среду исполнения gettext-runtime.
Ниже приведен простейший пример использования для группы файлов.
Чтобы узнать полный список кодировок/их внутренние наименования, наберите:
iconv.exe -l
1251_utf8.cmd (пакетная обработка 1251->UTF8)
for %%i in (*.*); do f:\iconv\bin\iconv.exe -f cp1251 -t utf-8 "%%i" >tmp && move /y tmp "%%i"
Запуск (batch для всех файлов xml)
rem - в папку с формами
cd f:\iconv\forms
rem - обработка
f:\iconv\cp1251_utf8.cmd *.xml
Кроме того, для ускорения процесса замен рекомендую использовать on-line сервисные редакторы RegEx. Например: http://gskinner.com/
22 сентября 2009
Создание динамических переменных для использования на форме
Создание динамических переменных для использования на форме Oracle EPM System - Planning, например для выбора части продукции (ТМЦ) из полного ее списка. Удобно использовать для больших справочников, когда на форме хотелось бы отображать только их часть. Работает в версиях 9.3, 11.1. В таком случае, пользователь сам управляет набором элементов измерения необходимым в данный момент.
Что нужно сделать:
Понятно, что настраивает это администратор. Но при входе в Систему пользователю необходимо установить начальное значение этой переменной (п.2), иначе при входе на форму, на которой сделана такая "хитрость", он получит ошибку. Для ее устранения и необходимо задать значение созданной переменной индивидуально каждому пользователю.
Что нужно сделать:
- Создать переменную: Administration -> Manage User Variables.
- Указать ее использование для Planning: File -> Preferences -> Planning -> User Variable Options и задать созданной в п.1 переменной какой-нибудь (верхний) элемент.
- В настройках формы для табличного измерения, к которому привязана переменная в п.1 в поле выбора элементов выбрать использование элемента-переменной (например, IDescandants(&Var)).
- В настройках формы на вкладке внетабличных элементов разрешить использование динамических переменных (Enable Dynamic User Variables) и выбрать для использования созданную переменную в п.1.
Понятно, что настраивает это администратор. Но при входе в Систему пользователю необходимо установить начальное значение этой переменной (п.2), иначе при входе на форму, на которой сделана такая "хитрость", он получит ошибку. Для ее устранения и необходимо задать значение созданной переменной индивидуально каждому пользователю.
Подписаться на:
Сообщения (Atom)