четверг, 24 сентября 2015 г.

Построение отчетов Oracle BI на основе данных RTD

В Real-Time Decisions уже встроен ряд отчетов, позволяющих посмотреть, что происходит при общении с клиентом, какие корелляции возникают между покупкой продукта и параметрами клиента и т.д.
Однако, бывают ситуации, когда необходимо построить собственный кастомизированный отчет. Удобнее всего такие отчеты строить в Oracle BI. Однако, напрямую читать данные, накапливаемые RTD, невозможно, поскольку они сохраняются в оптимизированном BLOB-формате. Прежде чем использовать эти данные — их нужны выгрузить. Проще говоря, сделать snapshot.
Прежде чем выгружать данные необходимо из каталога RTD_HOME/scripts выполнить следующие команды:
1. Создать пользователя
сreate user snap identified by oracle;
grant connect,resource to snap;
connect snap/oracle
@RTD_HOME/scripts/sql/Oracle/util.sql
2. Создать таблицы
sdexec com.sigmadynamics.tools.SDDBTool.SDDBTool -f -i -I InitSnapshotDb.ctl db_type db_host db_port db_name db_runtime_user db_admin_user db_admin_password
Здесь:
  • db_type — тип базы данных(oracle, mssql, db2)
  • db_host — имя компьютера с базой данных
  • db_port — порт (1521)
  • db_name — SID базы данных
  • db_runtime_user, db_admin_user — пользователи, под которыми создана схема RTD. Для Oracle — это один и тот же пользователь
  • db_admin_password — пароль пользователя со схемой RTD
Как  результат мы получим следующую схему:
model_snapshots_table_diag

После этого необходимо добавить источник данных в OC4J, который будет указывать на этого пользователя
  1. Создаем стандартный JDBC источник данных в сервере приложений
  2. В файле OC4J_HOME/j2ee/home/applications/OracleRTD/ls/WEB-INF/web.xml прописываем источник
    <resource-ref id="jndi_name_LS">
    <res-ref-name>jndi_name</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Unshareable</res-sharing-scope> </resource-ref>
  3. В файле OC4J_HOME/j2ee/home/applications/OracleRTD/ls/WEB-INF/web.xml  прописываем ссылку
    <resource-ref-mapping name="jndi_name" location="jndi_name"/>
Далее необходимо зайти в JMX Console и через нее настроить источник данных (MBeans > OracleRTD > SDClusterPropertyManager > Misc > ModelSnapshotDSName) и выполнить операцию экспорта MBeans > OracleRTD > Learning Server > your study name > Complete Snapshot.
После этого к таблицам можно будет обращаться, что писать свои собственные отчеты. Ниже пара примеров:
Посчитать количество событий по каждому choice
select g.display_name     as 'Choice Group', 
       c.display_name     as 'Choice',
       e.name             as 'Event',
      mi.timewindow_start as 'Start',
      mi.timewindow_end   as 'End',
      mi.state            as 'Model Status',
       m.name             as 'Model Name',
      mi.count_total,
      mi.count_positive,
      mi.quality
from RTDApp a 
     inner join RTDStudy s          on s.id=a.study_id
     inner join RTDModel m          on m.study_id=s.id
     inner join RTDModelInstance mi on mi.model_id=m.id
     inner join RTDEvent e          on mi.event_id=e.id
     inner join RTDChoice c         on c.id=mi.choice_id
     inner join RTDChoiceGroup g    on c.choicegroup_id=g.id
where a.name='CrossSell'
order by m.name, 
         g.display_name, 
         c.display_name,
       mi.timewindow_start
counts_by_choice

Top 6 прогнозирующих атрибутов
select a.name                'Attribute Name',
       p.predictiveness      'Predictiveness',
       c.display_name        'Choice Name',
      mi.timewindow_start as 'Start',
      mi.timewindow_end   as 'End',
      mi.state            as 'Model Status'
from RTDApp app
     inner join RTDChoice c         on c.app_id=app.id
     inner join RTDStudy s          on s.id=app.study_id
     inner join RTDModel m          on m.study_id=s.id
     inner join RTDModelInstance mi on mi.model_id=m.id and mi.choice_id=c.id
     inner join RTDEvent e          on mi.event_id=e.id
     inner join RTDPredictiveness p on p.model_instance_id=mi.id
     inner join RTDAttribute a      on a.id=p.attribute_id
where app.name         = 'CrossSell'
  and   c.display_name = 'Credit Protection'
  and   e.name         = 'Purchased'
  and   m.name         = 'OfferAcceptance'
  and   7 > (select count(*) 
             from RTDPredictiveness p2 
             where p2.model_instance_id = p.model_instance_id 
               and p2.predictiveness > p.predictiveness)
order by mi.timewindow_end desc,
          p.predictiveness desc

top_5_most_predictive

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

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