Нестандартные элементы в dashboard-prompt

Несколько последних дней я работал совместно с разработчиками заказчика над созданием нестандартных дэшбордов. Основным требованием заказчика было создание prompt’ов в виде чекбоксов. В результате у нас получились такие вот симпатичные дэшборды, как на скриншоте внизу.

pic3.png

Расскажу в двух словах, как это реализовано.

То, что на скриншоте справа – это обычный prompt. Помимо трех видимых комбо-боксов, там есть еще один невидимый мультиселект для валюты, условно назовем его HIDDEN_CURRENCY ( о том, как его спрятать, будет ниже). Чекбоксы слева – это обычные чекбоксы, создаваемые html-тэгом <input type=”checkbox”>. Фрагмент макета дэшборда при этом выглядит следующим образом:

pic2.png

Элемент под названием «Javascript валюты» - это Static Text с включенным свойством Contains HTML-markup. В этом элементе создаются сами чекбоксы, а также опеределения следующих java-script функций:

  • getCurrencyString - функция на базе текущего состояния чекбоксов строки вида формирует и возвращает строку вида ’RUR’,’USD’, содержащую коды отмеченных валют.
  • setPromptValue – функция находит на странице элемент <input>, соответствующий prompt’у HIDDEN_CURRENCY и устанавливает ему value = getCurrencyString(). Затем надо вызвать у HIDDEN_CURRENCY обработчик onChange, т.к. в prompt’е Банки и Счета должны подрезаться при выборе валюты (для этого в prompt’e, напомню, используется галочка Constrain). На эту функцию устанавливается обработчик onClick для чекбоксов.
  • initCurrencyChk – функция инициализирует значения чекбоксов на основании значения prompt’а HIDDEN_CURRENCY

Теперь немного о том, как сделать элемент HIDDEN_CURRENCY спрятанным. Для этого была написана javascript-функция hideElements, которая ищет на странице элементы <input>, и у которых в innerHTML элемента parentNode.previousSibling.previousSibling содержит подстроку HIDDEN. Т.е. ищутся input’ы, лежащие рядом с заголовками, которые мы специально помечаем префиксом HIDDEN в названии. У найденных элементов в стили дописывается display:none. Вызов этой функции нужно вставить в файл ajax.js в самый конец обработчика sawr.iFrameConnection._onLoad. Файл этот лежит на сервере, путь к нему зависит от того, используется ли OC4J или AS. На моем лэптопе этот файл лежит в папках c:\oracle\biee\oc4j_bi\j2ee\home\applications\analytics\analytics\res\b_mozilla\common\ и c:\oracle\biee\web\app\res\b_mozilla\common\.

Наконец, на дэшбород положен Static Text под названием Hide, в котором однократно вызываются функции initCurrencyChk и hideElements.

Вот собственно и все. Не самый простой путь, требующий неплохого знания html и javascript, но игра часто стоит свеч.

Leave a comment : May 23rd, 2008 : Oracle BI Suite

Пара ссылок по Oracle Data Mining

Сегодня был в Оракл на семинаре, посвященном Oracle Data Mining. В принципе семинар достаточно общий, помогает войти в курс дела тем, кто про эти технологии ничего не знает. Тем не менее Ольга Горчинская рассказывала очень хорошо и интересно.

На семинаре демонстрировался Oracle Data Miner - инструмент аналитика для подготовки данных, разработки моделей (классификации, кластеризации и т.п.), оценки качества построенных моделей и применения моделей. Конкретно применения построенных моделей вызвало у слушателей большой вопрос. Дело в том, что сам Data Miner - это именно рабочее место аналитика, в нем модель можно применить только пакетно к какой-то таблице и на выходе получить другую таблицу. Понятно, что это не очень технологично.

А как сделать real-time скоринг и встроить его в какую-то систему (например в те же отчеты Oracle BI)? Здесь уже придется использовать API для java или для SQL. Есть специальное расширение ораклового SQL для применения моделей ODM’а, включающее такие функции как PREDICTION, PREDICTION_PROBABILITY и другие. Много примеров есть здесь. И есть интересная статья из трех частей о построении скоринговой системы на базе Oracle Data Mining.

Leave a comment : May 14th, 2008 : Oracle Data Mining

Бага с Event Polling table в BI Server

Я как-то писал о том, что в BI Server имеется механизм очистки кэша по добавлению записей в специальную таблицу, так называемую Event Polling table (EPT). Сегодня на релизе 10.1.3.3 было обнаружено что-то похожее на баг.

Дело в следующем. Если создать EPT с помощью приведенного в документации скрипта, то опрос этой таблицы BI Server не выполняет, а в NQServer.log пишется сообщение об ошибке [56001] The cache polling event table … has an incorrect schema. Похоже при проверке структуры таблицы используются не названия столбцов, а их номера по порядку. А порядок в скрипте и на физическом уровне метаслоя разный - в метаслое столбцы отсортированы по алфавиту.

Проблема решается, если создавать EPT с помощью немного модифицированного скрипта. Например, так:

create table EPT
(
  f1_UpdateType Integer not null,
  f2_UpdateTime date default sysdate not null,
  f3_DBName char(40) null,
  f4_CatalogName varchar(40) null,
  f5_SchemaName varchar(40) null,
  f6_TableName varchar(40) not null,
  f7_Other varchar(80) default null
);

Leave a comment : March 5th, 2008 : Oracle BI Suite

« Older Entries