Всем доброго времени суток!
Начинаю озадачиваться развитием системы бюджетирования, МСФО и управленческой отчетности в сторону использования развитых BI-решений. Единым хранилищем данных (и их витриной) является Essbase 11.1.2.0 (Planning-on-Essbase, HFM-to-Essbase, RelationalData-FDM-to-Essbase).
Меня интересуют реальные кейсы/фидбэки про разработку и сопровождение BI-решений различных вендоров на Essbase.
Пишите в комменты данного поста или в почту pqtero{a}гмейл.ком
Блог посвящен большей частью информационным системам класса BPM/CPM. В основном - продуктам линейки Oracle (Hyperion) EPM System. Здесь описываются важнейшие моменты, интересные how-to, hints, tips & tricks.
28 марта 2012
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 могу смело обновлять переменные.
01 марта 2012
Как я проходил аудит FDM и HFM
Работаю в крупной группе компаний, имеющей в своем составе российские
и иностранные компании. Поэтому мы готовим отчетность по МСФО стандартам с
помощью FDM и HFM,
получая данные факта из выгрузок 1С и загрузочных файлов Excel.
Пришла пора пройти аудит. Проверяющими стали специалисты
компаний из Большой четверки.
Поскольку мы готовим отчетность в информационной системе, то
аудит, в том числе, проводится и самой системы.
Аудитором пока понадобились:
- Данные об учетных записях пользователей, выделяя деактивированных (неиспользуемых). Предоставил аудит и провижн отчеты
- Отчет по мэппингу из FDM (который, как я понимаю, они хотят повторить и проверить в Excel). Я выгрузил правила мэппинга в Excel (доступно в системе), отдал последнюю удачную загрузку и файл-результат мэппинга по нужной компании за нужный период
- Отчет об изменениях артефактов приложения HFM. Файл может быть получен из системы по этой инструкции вендора
- Отчет об изменениях артефактов приложения FDM. Файл не может получен по инструкции вендора, т.к. экспорт отчета не предусмотрен. Для этого можно сделать из Excel запрос (простой SELECT) к таблице tLogActivity БД приложения FDM
- Скриншоты всех проделанных администраторских действий в системе. Все действия аудиторы просят провести при них и практически для каждого шага сделать скриншот.
Подписаться на:
Сообщения (Atom)