Как передается контекст параметров в Oracle BI EE+

Источник: ashmakov
Антон Шмаков

Достаточно часто возникают вопросы каким-образом работает связка промптов и отчетов или как устроена передача параметров при навигация между отчетами и интерактивными страницами в Oracle Business Intelligence Enterprise Edition+. Данная тема напрямую связана с понятием контекста параметров. Попытаюсь описать основные принципы работы.

За основу контекста в Oracle BI EE+ положена сущность - [Презентационная таблица (Presentation Table)].[Презентационная колонка (Presentation Column)]. Причем именно презентационные таблицы и колонки, а не логические, т.е. те объекты, которые отображаются слева в списке доступных, когда вы работаете в Oracle BI Answers. Название презентационного каталога (Presentation Catalog) не входит в состав контекста. Данный факт имеет как хорошее, так и плохое значение. С одной стороны могут возникнуть проблемы с передачей параметров, если у вас есть 2 два разных презентационных каталогах, в которых присутствуют одинаковые структуры типа [Презентационная таблица].[Презентационной колонка], тем самым может возникнуть путаница. С другой стороны это позволяет настраивать передачу параметров между различными бизнес-областями, для этих целей достаточно иметь одинаковые объекты в двух областях. Таким образом, контекст параметров в Oracle BI - это набор колонок и их значений.

Самым распространенным применением контекста параметров в Oracle BI является связка промтов (Prompt) с отчетами. Промпты и отчеты создаются в инструменте Oracle BI Answers. При этом работа с логической моделью данных строго детерминирована по выбранной бизнес-области (презентационный каталог), т.е. перед тем как построить отчет или фильтр пользователь обязан выбрать бизнес-область, тогда ему становятся доступны структуры логической модели для дальнейшей работы. Промпт в Oracle BI - является  визуальным объектом системы, отображающим контекст параметров - набор колонок и область видимости контекста, которая бывает двух типов - только на страницу, где расположен промпт или на весь дэшборд. Для каждой колонки в промпте может указывать дополнительные свойства - тип параметра (одно значение или множество), тип объекта для ввода параметра (edit, combobox, mutli-select), подпись, связь колонки с механизмом переменных и другие.

Также следует отметить, что контекст параметров является частью более общего объекта системы - фильтра. Фильтры  - это набор предикатов, основанных тех же сущностях [Презентационная таблица].[Презентационная колонка]. Предикаты бывают разными - равенство, в списке, больше, меньше, между, подстрока, пустое значение и т.д. Таким образом - контекст это частный случай фильтра с предикатами равенства, константы для которых устанавливаются пользователем в онлайне. Для фильтров значения хранятся постоянно, но могу меняться во время работы. Фильтры и промпты хранятся в веб-каталоге (web catalog) системы. Любой объект системы, который обрабатывается презентационным сервером (Presentation Server) представлен в xml-виде. Отчеты, фильтры, промпты, страницы, дэшборды и т.д. - представляются в xml-виде. Следует отметить, что фильтры имеют принципиальное отличие, они привязываются к определенной бизнес-области.

Для полной ясности приведу пример: XML представление сохраненного в веб-каталоге фильтра D2 Market.M04 Region = East:

<?xml version="1.0" encoding="utf-8"?><saw:filter xmlns:saw="com.siebel.analytics.web/report/v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sawx="com.siebel.analytics.web/expression/v1" subjectArea=""Sample Sales""><sawx:expr xsi:type="sawx:comparison" op="equal"><sawx:expr xsi:type="sawx:sqlExpression">"D2 Market"."M04  Region"</sawx:expr><sawx:expr xsi:type="xsd:string">East</sawx:expr></sawx:expr></saw:filter>
XML представлении сохранненого в веб-каталоге промта по колонке D2 Market.M04 Region:
<?xml version="1.0" encoding="utf-8"?><saw:view xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:saw="com.siebel.analytics.web/report/v1" xsi:type="saw:globalFilterPrompt" rptViewVers="200510010">            <saw:prompt type="columnFilter" formula=""D2 Market"."M04  Region"" subjectArea=""Sample Sales"" eOperator="in" eControl="drop" includeReportDefaults="true" includeAllChoices="true" columnID="c0"><sawx:expr xmlns:sawx="com.siebel.analytics.web/expression/v1" xsi:type="sawx:special" op="prompted"><sawx:expr xsi:type="sawx:sqlExpression">"D2 Market"."M04  Region"</sawx:expr></sawx:expr></saw:prompt></saw:view>

Теперь рассмотрим каким образом происходит передача выбранного значения из промпта в отчеты, которые расположены рядом с промптом. Работа осуществляется следующим образом - пользователь выбирает значения для параметра (например: D2 Market.M04 Region), а затем нажимает кнопку перейти (Go). После этого запускаются процедуры JavaScript ядра презентационного сервера, которые формируют динамический HTTP POST запрос посредством объекта DOM форма (DOM). Основные параметры указанного запроса это:

  • Action = applyfilter;
  • Page = [Название страницы] (пример: Page 1);
  • PortalPath = [Путь в веб-каталоге к дешборду] (пример: /shared/Samples Sales/_portal/Test);
  • P0 = [динамически сформированный фильтр]

В атрибуте P0 содержится самое важное - XML с фильтром, которые формируется на основе контекста параметров промпта и выбранных значений. Пример сформированного XML с выбором D2 Market.M04 Region = North:

<sawx:expr xmlns:sawx="com.siebel.analytics.web/expression/v1" xsi:type="sawx:list" op="in" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><sawx:expr xsi:type="sawx:sqlExpression">"D2 Market"."M04  Region"</sawx:expr><sawx:expr xsi:type="sawx:untypedLiteral">North</sawx:expr></sawx:expr>

В указанном примере контекст параметров промпта - это объект D2 Market.M04 Region. Далее сервер "просматривает" все отчеты, которые расположены на странице и проверяет их фильтры. Каждый фильтр имеет свой контекст параметров, если происходит совпадение колонок в контексте параметров промпта и фильтра отчета, тогда сервер подставляет в отчет фильтр, который вернул промпт и применяет его. Таким образом проверка идет на совпадение [Презентационная таблица].[Презентационная колонка] в фильтре промпта и фильтре отчета. Поэтому для того, что выбор параметров в промпте передавался в отчет нужно обязательно, чтобы в отчете был фильтр с колонкой, значения для которой фильтруются. Именно для этих целей существует фильтр заглушка - "снабжен подсказкой" (is prompted), который добавляет колонку в контекст параметров с пустым фильтром.

Рассмотрим теперь механизм навигации (Navigate) между отчетами. Механизм детализации (Drill) работает по-другому, здесь я не буду его рассматривать. В любом виде представлений отчетов - Таблица, Кросс-Таблица, Диаграмма, График навигация осуществляется одинаковым образом. Для определенной колонки в критерии отчета указывается свойства навигации (для графиков настраивается отдельно в представлении) и определяется конечный отчет или страница. После указанных действий в исходном отчет появляются активные ссылки на значениях или заголовках (в зависимости от того что настроено), нажимая на которые пользователь переходит в другой отчет. Как и в случае с промптом, в момент когда пользователь нажимает на ссылку (значение справочника или показателя, заголовок, график и т.д.) презентационный сервер формирует динамический XML фильтр с контекстом параметров. Указанный контекст параметров - это точная координата объекта в представлении отчета. Например, если представление - это таблица, то контекст параметров - это все видимые столбцы таблицы со значениями, соответствующими строке, в которой находится объект на котором произведено действие. Если представление - это кросс-таблица, то контекст параметров - это все видимые разрезы и их значений на пересечении которых находится объект. Принцип работы с графиками и диаграммами аналогичен кросс-таблице. Для примера приведу динамический XML фильтр, сформированный при переходе из значения кросс-таблицы с двумя разрезами - D2 Market.M01  Market и D4 Product.P02  Product Type:

<sawx:expr xmlns:sawx="com.siebel.analytics.web/expression/v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="sawx:logical" op="and"><sawx:expr xmlns:sawx="com.siebel.analytics.web/expression/v1" xsi:type="sawx:comparison" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" op="equal"><sawx:expr xmlns:sawx="com.siebel.analytics.web/expression/v1" xsi:type="sawx:sqlExpression" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">"D2 Market"."M01  Market"</sawx:expr><sawx:expr xmlns:sawx="com.siebel.analytics.web/expression/v1" xsi:type="sawx:untypedLiteral" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Market 2</sawx:expr></sawx:expr><sawx:expr xmlns:sawx="com.siebel.analytics.web/expression/v1" xsi:type="sawx:comparison" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" op="equal"><sawx:expr xmlns:sawx="com.siebel.analytics.web/expression/v1" xsi:type="sawx:sqlExpression" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">"D4 Product"."P02  Product Type"</sawx:expr><sawx:expr xmlns:sawx="com.siebel.analytics.web/expression/v1" xsi:type="sawx:untypedLiteral" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Type 3</sawx:expr></sawx:expr></sawx:expr>


После этого происходит переход на другой отчет или страницу, где сформированный динамически фильтр применяется. Принцип действия полностью аналогичен промту. Для того, чтобы фильтр сработал надо чтобы контекст параметров фильтра и отчетов где-то совпадали по колонкам.

Дополнительный бонус: Для отладки сложных решений в Oracle BI связанных с навигации, полезным бывает посмотреть какой фильтр формируется при навигации между отчетами. Это можно сделать следующим образом: в ресурсном файле viewhelper.js, расположенном в папке [OBIEE_HOME]/oc4j_bi/j2ee/home/applications/analytics/analytics/res/b_mozilla (для OC4J), надо найти функцию:
function NQNavigateHandler(tInfoBag, target)
Далее в ней найти следующую конструкцию:

if (nVals > 0)
tForm.P0.value = saw.getXmlText(tExpr);
else
tForm.P0.value = "";

И добавить перед if-конструкцией вызов:
alert(saw.getXmlText(tExpr));
Все, после указанных действий при навигации будет появляться окно, содеражащее динамический XML фильтр.

Не забудьте удалить вызов alert после завершения работы.

Любые изменения в коде продукта Oracle Business Intelligence Enterprise Edition+ вы делаете на свой страх и риск и несете полностью отвественность за любые ошибки, проблемы или потери важной информации.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=22251