Частенько приходится отвечать на достаточно популярные вопросы по Essbase и Planning. Решил по возможности писать их сюда. Итак, поехали...
Вопрос: Я меняю формулу у элемента, но при пересчете остаются старые данные.
Ответ: Для начала стоит убедиться что формула "пронеслась" из того места, где вы ее поменяли в Essbase.
Если вы видите в outline'е то, что надо, то скорее всего проблема в Intelligent Calculation. Для отключения этой опции необходимо поставить SET UPDATECALC OFF; в начале скрипта пересчета.
Блог посвящен большей частью информационным системам класса BPM/CPM. В основном - продуктам линейки Oracle (Hyperion) EPM System. Здесь описываются важнейшие моменты, интересные how-to, hints, tips & tricks.
30 декабря 2008
05 декабря 2008
Маленький совет
Так как мой проект почти завершился и даже себестоимость в OPM стала считаться правильно, то делать мне нечего и я периодически помогаю решать знакомым и не знакомым проблемы с их внедрениями Hyperion Planning.
Так вот, уже не первый раз сталкиваюсь с тем, что везде написано, но никто не принимает к сведению - код не должен быть привязан к названию элемента. Это вредно, а в случае использования EPMA еще и опасно.
Если вы вдруг изменили в EPMA какой-то код, то всячески советую стоять перед серваком и молиться во время проноса (deploy) приложения. Сам сталкивался с этим когда кто-то место десяти ноликов вбил девять. Тогда часа три было убито на то, чтобы восстановить приложение.
Ну и сразу еще один совет - не используйте EPMA, используйте ODI. Благо сейчас уже достаточно материалов чтобы самостоятельно и без лишней нервотрепки его освоить (например в блоге Джона Гудвина (John Goodwin) все описано с подробностями, картинками и примерами использования).
Так вот, уже не первый раз сталкиваюсь с тем, что везде написано, но никто не принимает к сведению - код не должен быть привязан к названию элемента. Это вредно, а в случае использования EPMA еще и опасно.
Если вы вдруг изменили в EPMA какой-то код, то всячески советую стоять перед серваком и молиться во время проноса (deploy) приложения. Сам сталкивался с этим когда кто-то место десяти ноликов вбил девять. Тогда часа три было убито на то, чтобы восстановить приложение.
Ну и сразу еще один совет - не используйте EPMA, используйте ODI. Благо сейчас уже достаточно материалов чтобы самостоятельно и без лишней нервотрепки его освоить (например в блоге Джона Гудвина (John Goodwin) все описано с подробностями, картинками и примерами использования).
19 ноября 2008
Oracle Exadata
На прошедшем недавно Oracle Open World, корпорация представила очень интересную новинку - Exadata Storage Server.
Идея новинки мне показалось безумно простой и гениальной, возможно, что этому сильно поспособствовало умение Андрея Пивоварова ясно и четко излагать материал, но тем не менее.
Идея состоит в том, чтобы часть работы по фильтрации данных переложить на хранилище, тем самым уменьшив трафик между хранилищем и собственно СУБД. Как сказал один мой коллега по этому поводу "Пока Microsoft пытается построить операционку на движке базы данных, Oracle интегрирует движок в операционку" (про MS точно не помню, вроде были у них такие утопические идеи в начале нулевых, а вот про оракл весьма точно сказано).
Ну и ссылки "понятно и на русском":
Презентация Андрея Пивоварова на Oracle TechForum (про Exadata начинается на 49 странице, но и остальной материал тоже очень хорош)
Блог Дмитрия Волкова:
Exadata Storage Server, part 1
Exadata Storage Server, part 2
Идея новинки мне показалось безумно простой и гениальной, возможно, что этому сильно поспособствовало умение Андрея Пивоварова ясно и четко излагать материал, но тем не менее.
Идея состоит в том, чтобы часть работы по фильтрации данных переложить на хранилище, тем самым уменьшив трафик между хранилищем и собственно СУБД. Как сказал один мой коллега по этому поводу "Пока Microsoft пытается построить операционку на движке базы данных, Oracle интегрирует движок в операционку" (про MS точно не помню, вроде были у них такие утопические идеи в начале нулевых, а вот про оракл весьма точно сказано).
Ну и ссылки "понятно и на русском":
Презентация Андрея Пивоварова на Oracle TechForum (про Exadata начинается на 49 странице, но и остальной материал тоже очень хорош)
Блог Дмитрия Волкова:
Exadata Storage Server, part 1
Exadata Storage Server, part 2
14 ноября 2008
Hyperion Utilities, Code Library, and Sample Applications
Oracle таки выложил на своем сайте утилиты, которые стали недоступны после приоберетния им компании Hyperion.
Смотрим сюда.
У меня уже руки чешутся:-)
Смотрим сюда.
У меня уже руки чешутся:-)
16 сентября 2008
Выгрузка статей
Есть много всяких outline extractor'ов. Но все они по каким-либо причинам не нравятся моим девушкам - когда формула у элемента многострочная, то Excel сходит от них с ума. Шариться же в Planning'е по более чем тысяче статей не очень удобно.
Пришлось вот написать скриптец, который бы выгружал список статей в текстовый файлик с табуляциями. На самом деле авторство принадлежит Максу Кудряшову, который написал сам запрос, я только исключил SQL Developer как промежуточный этап:-)
Скрипт тут. Для того, чтобы воспользоваться им, надо иметь оракловый клиент и в батничке поправить строку подключения.
P.S. Есть у кого идеи, как автоматом заливать эти выгрузки в Workspace?
15 сентября 2008
Приколы с ODBC
В пятницу вечером девушки ошарашили меня новостью о том, что не работает выгрузка из GL в Hyperion. В логах на первый взгляд все чисто, все без ошибок, но при детальном изучении наткнулся на следующие записи:
ODBC Layer Error: [01004] ==> [[Oracle][ODBC]String data, right truncated.]
ODBC Layer Error: Native Error code [0]
Причем эффект интересный - данные выгрузились в каком-то почти шахматном порядке:-)
Сегодня утром я со свежей головой принялся за проблему и.. о чудо! первая же ссылка явно говорила что делать - надо обернуть все выбираемые поля substr'ами и проблема должна решиться.
Но не тут-то было. Essbase продолжал материться. Причем этого не было когда я делал запрос из EAS.
И тут совершенно случайно заметил что в свойствах полей стоит "Drop leading/trailing spaces". Убрал эти галочки и все заработало.
Вот такая она, интеграция:-)
ODBC Layer Error: [01004] ==> [[Oracle][ODBC]String data, right truncated.]
ODBC Layer Error: Native Error code [0]
Причем эффект интересный - данные выгрузились в каком-то почти шахматном порядке:-)
Сегодня утром я со свежей головой принялся за проблему и.. о чудо! первая же ссылка явно говорила что делать - надо обернуть все выбираемые поля substr'ами и проблема должна решиться.
Но не тут-то было. Essbase продолжал материться. Причем этого не было когда я делал запрос из EAS.
И тут совершенно случайно заметил что в свойствах полей стоит "Drop leading/trailing spaces". Убрал эти галочки и все заработало.
Вот такая она, интеграция:-)
14 июля 2008
Вышел Hyperion 11.1
Ну вот и дождались.
Скачать его можно на edelivery.oracle.com (Oracle Enterprise Performance Management System). Судя по доступной документации, которой пока кот наплакал - появилось куча вкусностей, но и без багов не обошлось (вот и Роске глумится над цитатой "Running the MDX Parent function does not return the member's parent.")
Осталось разгрести текучку и приступить к экспериментам;-)
Скачать его можно на edelivery.oracle.com (Oracle Enterprise Performance Management System). Судя по доступной документации, которой пока кот наплакал - появилось куча вкусностей, но и без багов не обошлось (вот и Роске глумится над цитатой "Running the MDX Parent function does not return the member's parent.")
Осталось разгрести текучку и приступить к экспериментам;-)
05 июля 2008
Фрагментация и производительность
Сейчас ощутил на собственной шкуре, насколько сильно фрагментация BSO-куба влияет на производительность.
Расчет, который до зепуска реструктуризации куба выполнялся полтора часа теперь выполняется меньше 9 минут, это просто потрясающе!!
Так что мой вам совет - после больших загрузок данных обязательно делайте
Расчет, который до зепуска реструктуризации куба выполнялся полтора часа теперь выполняется меньше 9 минут, это просто потрясающе!!
Так что мой вам совет - после больших загрузок данных обязательно делайте
alter database appl_name.db_name force restructure;
27 июня 2008
24 июня 2008
Backup
А как же без того, чтобы потерять данные?:-)
Как и во всех проектах, где я принимал участие, бекапы начинали делаться только тогда, когда один-два раза данные исчезают. Вот и сейчас 5 гигов кануло:-) Но поводов для уныния особо нет - на то она и опытная эксплуатация. Главное, что родился скрипт на MAXL:
P.S. Логично, в принципе, заменить XCOPY на gzip - время работы скрипта не сильно увеличивается, а вот бекапы занимают раз в 20 меньше места.
Как и во всех проектах, где я принимал участие, бекапы начинали делаться только тогда, когда один-два раза данные исчезают. Вот и сейчас 5 гигов кануло:-) Но поводов для уныния особо нет - на то она и опытная эксплуатация. Главное, что родился скрипт на MAXL:
login your_login your_password on your_essbase_host;Особая благодарность Максиму Кудряшову за проделанную работу.
set timestamp on;
alter application $1 disable commands;
alter system kill request on application $1;
alter system logout session on application $1;
alter database $1.Plan1 unlock all objects;
alter database $1.Plan2 unlock all objects;
drop lock on application $1;
alter system kill request on application $1;
alter database $1.Plan1 begin archive to file "tmp1.txt";
alter database $1.Plan2 begin archive to file "tmp2.txt";
shell XCOPY D:\\Hyperion\\AnalyticServices\\app\\$1 E:\\Essbase_Backups\\$1_%date:~0%_%time:~0,2%.%time:~3,2% /e /c /i /h /k /y;
alter database $1.Plan1 end archive;
alter database $1.Plan2 end archive;
alter application $1 enable commands;
logout;
exit;
P.S. Логично, в принципе, заменить XCOPY на gzip - время работы скрипта не сильно увеличивается, а вот бекапы занимают раз в 20 меньше места.
19 июня 2008
Граф зависимости показателей
Так получилось, что наш куб достаточно сложный и стандартный CALC ALL дает неверные результаты в силу своей двупроходности. Поэтому нам приходится писать бизнес-правила для пересчета либо отдельных частей, либо всего куба. Для этого очень удобно иметь картинку с зависимостями статей.
Когда я писал правило по расчету продаж, то честно прошерстил весь соответствующий кусок outline'а и нарисовал граф зависимостей на бумажке. Это заняло достаточно много времени, туда затесалось несколько ошибок и в результате я захотел скрипт который бы сам рисовал такие графы.
И я написал такой скрипт. Только стоит учесть, что поможет он только тем, кто работает с Hyperion Planning - просто у Planning очень удобное и понятное реляционное хранилище метаданных.
Для работы скрипта понадобится установленный graphviz и SQL*Plus.
account_desc.bat:
account_desc.sql:
Сразу замечу, что sql-скрипт можно улучшать: завести переменные для like-ов (для того чтобы отсекать нужные элементы), проверять на наличие таблицы перед тем как ее грохать, не генерить ребра для всех показателей, но это мелочи.
в результате получается вот такой вот граф:
На этом автоматизм заканчивается. Дальше можно ручками редактировать account_desc.txt для того чтобы граф строился так, как вам удобнее.
Когда я писал правило по расчету продаж, то честно прошерстил весь соответствующий кусок outline'а и нарисовал граф зависимостей на бумажке. Это заняло достаточно много времени, туда затесалось несколько ошибок и в результате я захотел скрипт который бы сам рисовал такие графы.
И я написал такой скрипт. Только стоит учесть, что поможет он только тем, кто работает с Hyperion Planning - просто у Planning очень удобное и понятное реляционное хранилище метаданных.
Для работы скрипта понадобится установленный graphviz и SQL*Plus.
account_desc.bat:
set NLS_LANG=RUSSIAN_CIS.AL32UTF8
sqlplus login/password@your_DBSID @account_desc.sql
dot -Tgif account_desc.txt -o account_desc.gif
account_desc.sql:
set linesize 200
set colsep ""
set pagesize 0
set newpage none
set feedback off
set termout off
set recsep off
set sqlprompt ""
set heading off
set echo off
set serveroutput on size 10000
spool account_desc.txt
drop table hsp_account_dependence;
create table hsp_account_dependence (
parent_account varchar2(80 byte),
child_account varchar2(80 byte)
);
declare
begin
/* Dependence by formula*/
for i in (select object_name from hsp_account, hsp_object where account_id = object_id) loop
insert into hsp_account_dependence (parent_account, child_account)
select object_name, i.object_name
from hsp_object, hsp_member_formula
where formula like '%'||i.object_name||'%'
and member_id = object_id;
end loop;
commit;
/* Dependence by outline*/
insert into hsp_account_dependence (parent_account, child_account)
select o2.object_name, o1.object_name
from hsp_object o1, hsp_object o2, hsp_member m1, hsp_member m2
where o1.object_id = m1.member_id
and o2.object_id = o1.parent_id
and m1.consol_op1 in (0, 1, 2, 3, 4)
and o1.parent_id = m2.member_id
and m2.data_storage in (1, 4, 5, 6)
and exists (select 1 from hsp_account where account_id = o1.object_id);
commit;
end;
/
begin
dbms_output.enable;
dbms_output.put_line('digraph G { node [shape=record, fixedsize=false, fontsize=6, regular=true]; nodesep=.5;');
end;
/
select o.object_name||' [label="'||o.object_name||'\n'||o2.object_name||'"];'
from hsp_account a, hsp_object o, hsp_alias al, hsp_object o2, hsp_member m1
where a.account_id = o.object_id
and al.member_id = a.account_id
and al.aliastbl_id = 14
and al.alias_id = o2.object_id
and m1.member_id = o.object_id
and m1.DATA_STORAGE in (1, 4, 5, 6)
and o.object_name like '6103%'
order by o.object_name;
select parent_account||'->'||child_account||';'
from hsp_account_dependence
where parent_account like '6103%'
and child_account like '6103%'
order by parent_account;
begin
dbms_output.enable;
dbms_output.put_line('}');
end;
/
spool off
exit
Сразу замечу, что sql-скрипт можно улучшать: завести переменные для like-ов (для того чтобы отсекать нужные элементы), проверять на наличие таблицы перед тем как ее грохать, не генерить ребра для всех показателей, но это мелочи.
в результате получается вот такой вот граф:
На этом автоматизм заканчивается. Дальше можно ручками редактировать account_desc.txt для того чтобы граф строился так, как вам удобнее.
10 июня 2008
Доступ к обновлениям
Стоит отметить, что доступ к обновлениям получили и пользователи старого доброго металинка. Это не может не радовать:)
Upd: Более того, Metalink3 кушает "старые" CSI.
Upd: Более того, Metalink3 кушает "старые" CSI.
09 июня 2008
Metalink 3
Поздравляю всех внедренцев Hyperion'а со знаменательным событием - теперь у линейки Hyperion появилась "человеческая" поддержка.
Теперь общаться с поддержкой, читать описания проблем и закачивать новые обновления можно в одном месте на Metalink3. Изначально он был предназначен для поддержки Siebel. Таким образом Oracle "выделяет" поддержку BI-продуктов.
В целом неплохо получилось, осталось только причесать базу знаний и наконец-то выложить те утилиты, которые ранее были на хайповских сайтах.
Upd: Недолго мы радовались. Сайт рухнул. Странно, Metalink живой и нагрузка на него куда больше. Получается что APEX более стабилен?
Теперь общаться с поддержкой, читать описания проблем и закачивать новые обновления можно в одном месте на Metalink3. Изначально он был предназначен для поддержки Siebel. Таким образом Oracle "выделяет" поддержку BI-продуктов.
В целом неплохо получилось, осталось только причесать базу знаний и наконец-то выложить те утилиты, которые ранее были на хайповских сайтах.
Upd: Недолго мы радовались. Сайт рухнул. Странно, Metalink живой и нагрузка на него куда больше. Получается что APEX более стабилен?
"Pilot"
Блог этот создан для того, чтобы время от времени изливать душу или делиться новостями и впечатлениями от работы с различными продуктами Oracle Hyperion.
Подписаться на:
Сообщения (Atom)