SlideShare a Scribd company logo
Dmitry Anoshin
BOGBUSINESS OBJECTS GUIDE
2 07/03/2012 Footer
Universe
Designer
3 07/03/2012 Footer
BusinessObjects Universe
Юниверс – семантический слой, который изолирует бизнес
пользователя от технических сложностей баз данных, в которых
хранится корпоративная информация.
Для облегчения жизни конечных пользователей, юниверс состоит из
объектов и классов, которые ссылаются на данные в базе данных.
Используя юниверс, пользователь оперирует бизнес терминологией, с
которой он привык работать.
Юниверс – это файл,
который состоит из:
• Подключения к
источнику данных
• ER диаграммы
• Объектов и классов
• Файл *.unv не
должен превышать
1mb, кол-во объектов
<=500
4 07/03/2012 Footer
Universe
5 07/03/2012 Footer
BusinessObjects Universe Designer
components
Конструктор юниверсов – приложение для создания,
редактирования юниверсов. Юниверс может иметь несколько
подключений к разным БД, но одновременно работать можеть только
с одной БД.
Дизайнер используется только с репозиторие ВО, поэтому сначало
необходимо подключиться к CMS. Для работы с юниверсом
необходимо импортировать его из CMS. После внесений изменений
эскпортировать обратно.
Панель инструментов конструктора юниверсов:
6 07/03/2012 Footer
Creating the Course Universe
После проведеннго анализа бизнес требований и разработки плана
построения юниверса, можно приступить к созданию юниверса. Для этого
необходимо:
• Создать новый источник данных
• Создать новое подключение в Конструкторе
• Создать новый юниверс
• Настроить параметры юниверсы (не обязательно)
7 07/03/2012 Footer
Database Connection
В качестве источника данных
можно использовать практически
любые СУБД.
Для подключения к источникам
данных используются следующие
драйвера:
• ODBC
• OLE DB
• JDBC
• и др.
Существет 3 основных типа
подключения:
• Secured
• Shared
• Personal
8 07/03/2012 Footer
Creating New Universe
Для создания нового юниверса необходимо нажать «New universe» и
перед вами появится следующая форма:
9 07/03/2012 Footer
Controls Tab
На вкладке управления можно ограничить:
• количество выгружаемых строк
• время выполнения запроса
• размер строки
10 07/03/2012 Footer
SQL Tab
На вкладке «SQL» настраиваются параметры связанные с SQL:
11 07/03/2012 Footer
Parameters tab
На вкладке параметров можно включать, выключать параметры:
• ANSI92
• BEGIN SQL
• END SQL
(“set query band”)
• FILTER_IN_FORM
• и другие
12 07/03/2012 Footer
Building the Universe Structure
Схема юниверса состоит из таблиц и связей между ними. Для создания
юниверса необходимо из источника данных выбрать таблицы и затем
соединить их.
При желании можно просматривать содержимое таблицы.
13 07/03/2012 Footer
Defining joins in a universe
Послед добавления таблиц в юниверс не обходима создать связи между
таблицами.
Двойным кликом по ссвязи можно открыть окно редактирование связи:
Связи:
• Equal-join
• Outer-join
• Theta join
• Shortcut join
• Self-restricting
join
Auto Detect:
SELECT count (*)
FROM table1, table2
WHERE table1.column =
table2.column
SELECT count (*)
FROM table1
SELECT count (*)
FROM table2.
14 07/03/2012 Footer
List Mode
Для просмотра всех связей юниверса можно использовать «List mode»:
15 07/03/2012 Footer
Checking integrity
После создания модели рекомендуется проверить юниверс на наличие ошибок,
для этого необходимо запустить “Integrity Check”
16 07/03/2012 Footer
Creating Dimension Objects
При создании новых объектов сначало необходимо создать «Класс» – папку, и
в ней уже создавать объекты.
17 07/03/2012 Footer
Creating Dimension Objects (cont)
Измериния можно создать двумя способами:
1. Щелкнуть правой кнопкой мыши, выбрать «объект»
В новом окне необходимо
ввести название будующего
объекта, выбрать тип данных
и ввести поле из таблицы.
18 07/03/2012 Footer
Creating Dimension Objects (cont)
2. Перетащить объект из таблиц или всю таблицу целиком в область списка
объектов:
Если мы перетащим всю
таблицу, то у нас создастся
новый класс, в котором
будут лежать все поля таблицы.
При необходимости из объекта измерения мы можем превратить наш объект
в объект – деталь:
19 07/03/2012 Footer
Creating Measure Objects
Объект мера имеет
численный тип данных. Как
уже говорилось раньше,
мера завист от контекста:
Мера всегда должна использоваться с одной из агрегативных функций:
• Sum
• Count
• Average
• Maximum
• Minimum
20 07/03/2012 Footer
The query process
В BusinessObjects существует 2 уровня агригации, которые происходят во
время выполнения запроса:
• Агригация на уровне SELECT выражения находится в микрокубе
• Агригация на уровне отчета
21 07/03/2012 Footer
Creating Measure Objects (cont)
Мера создается также, как и измерение, только во вкладке свойства необхомо
указать тип объекта – мера, или просто при написание названия поля
использовать одну из 5 агрегативных функций.
22 07/03/2012 Footer
Loops in a Universe
Во время созданию юниверса у нас могут получится циклы, то есть таблицы
соединены таким образом, что образую замкнутый круг.:
У нас есть следующая ситуация:
• один набор таблиц (Car sale
details, client, the client‟s region,
clients country)
• друго набор таблиц (Car sale
details, showroom, showroom‟s
country)
Если мы соединим эти таблицы,
то получим цикл.
WHERE
{COUNTRY.COUNTRY_ID=SHOWROOM.COUNTRY_ID}
AND {COUNTRY.COUNTRY_ID=REGION.COUNTRY_ID }
AND {REGION.REGION_ID=CLIENT.REGION_ID }
AND {CLIENT.CLIENT_ID=SALE.CLIENT_ID }
AND {SHOWROOM.SHOWROOM_ID=SALE.SHOWROOM_ID }
AND {SALE.SALE_ID=SALE_MODEL.SALE_ID }
AND {SALE.SALE_TYPE= 'S' }
При выполнение запроса в отчет попадет
не вся информация, так как согласно
запросу у нас создалось ограничение
Showroom Country =Client Country)
23 07/03/2012 Footer
Resolving Loops in a Universe
Для решения циклов существует два способа:
1. Использование альясов:
2. Использование контекстов.
24 07/03/2012 Footer
About Contexts
Контекст – это список джоинов и таблиц, которые могут вместе
учавствовать в запросе. Любые объекты, полученные из таблиц, включенных
в контекст, совместимы друг с другом.
Если в запросе учавствует объекты из разных контекстов, то BO создаст
несоклько запросов, свой для каждого контекста, а затем соединит их в одном
микрокубе. Это позволяет избежать некорректных результатов .
Допустим у нас есть юниверс Motors:
25 07/03/2012 Footer
About Contexts (cont)
У нас есть две сущности Rental и Sale. Сущность Client одновременно связана
с Rental и Sale:
1. Rental_Model:
2. Sales_Model:
26 07/03/2012 Footer
About Contexts (end)
Для того, чтобы пользователь мог использовать в одном запросе
одновременно объекты из разных контекстов, необходимо включить данную
опцию в настройках юниверса. Такой запрос называется Ambiguous query.
27 07/03/2012 Footer
Resolving SQL Traps
В дизайнере существует два вида “SQL traps”:
• chasm traps
• fan traps
Если при возникновении цикла в отчет попадает меньше строк, то при
возникновении ловушек у нас появляются лишние записи.
К счастью, существет несколько способов для идентификации и решения
таких вещей.
Chasm Traps
Chasm trap случается, когда у нас три таблички
соединяются, как показано на рисунке, тоесть 1 ко
многим.
28 07/03/2012 Footer
Chasm Traps Example
29 07/03/2012 Footer
Chasm Traps Example (end)
Запрос возвращает все возможные комбинации строк таблицы SALE и все
возможные комбинации строк таблицы RENTAL, тем самым задваивая наш
результат.
Вы можете ничего не заметить, пока не посмотрите на детализированные
данные.
Для решения данной проблемы существует 2 способа:
• Изменить параметры юниверса, чтобы ВО создавал отдельный запрос
для каждой таблицы, но это поможет только при использование мэр
• Создание контекста для каждой таблицы
30 07/03/2012 Footer
Fan traps
Fan traps случаются, когда у нас есть соединения 1 ко многим,
которое также имеет соединение 1 ко многим с другой
таблицей, как показано на рисунке.
Fan traps example
31 07/03/2012 Footer
Fan traps example (cont)
Мы не увидим ошибку, пока не посмотри на детализированную выгрузку:
Для решения fan trap мы можем сделать одно из следующих действий:
• Изменить параметры юниверса, чтобы ВО создавал отдельный запрос
для каждой таблицы, но это поможет только при использование мэр
• Использовать комбинацию из контекста и альясов
• Избежать fan trap сценария
32 07/03/2012 Footer
Applying Restrictions on Objects
Ограничения на объект можно накаладывать при его создание в дизайнере:
Теперь при использование объекта в SQL выражение будет подставляться
данное условие.
33 07/03/2012 Footer
Condition objects
В ВО можно создавать специальные объекты, которые будут содержать
условия – объекты фильтры.
Такие объекты имеют ряд преимуществ:
• Удобны для сложных условий
Self-restricting join
Такой тип ограничения создается непосредтственно на поле таблицы, и потом
автоматически появляется в SQL выражение в условие, при использование
данной таблицы в запросе:
34 07/03/2012 Footer
Using @functions with Objects
• @prompt(,,,,,,)
• @select()
• @where()
• @aggregate_aware(,)
В ВО есть специальны класс функций - @ функции:
@prompt
Синтакс функции @ptompt состоит из семи параметров, разделенных
запятой:
• сообщение
• тип данных (A-alphanumeric, N-numeric, D-Date)
• список значений
• mono (одно значение), multi (несколько значений)
• free(позволяет ввести любое значение), constrained(позволяет выбрать
только из списка значений), primary key(в запросе используется вместо
значения его ключ)
• persistent(сохраняет в промте последнее значение), not persistent
• „Default value‟:‟key‟ (значение промпта по умолчанию и ключ для PK)
Первые два параметра обязательны.
35 07/03/2012 Footer
@prompt example
SHOWROOM.SHOWROOM_NAME =
@prompt('Enter Showroom Name','A',
'ShowroomShowroom',mono,primary_key)
SELECT
sum(SALE_MODEL.SALE_QTY *
MODEL.MODEL_PRICE *(100 -
SALE.SALE_DISCOUNT )/100)
FROM
MODEL INNER JOIN SALE_MODEL ON
(SALE_MODEL.MODEL_ID=MODEL.MODEL_ID)
INNER JOIN SALE ON
(SALE.SALE_ID=SALE_MODEL.SALE_ID)
INNER JOIN SHOWROOM ON
(SALE.SHOWROOM_ID=SHOWROOM.SHOWROOM_I
D)
WHERE
(SALE.SALE_TYPE='S')
AND (SHOWROOM.SHOWROOM_ID = 2 )
SHOWROOM.SHOWROOM_NAME IN
@prompt('Enter Showroom Name','A',
'ShowroomShowroom',multi,primary_key,not_persistent,
{'Prestige Cars' : '1', 'Prestige Sports Cars' : '2','Prestige Motors' :
'3'})
SELECT
sum(SALE_MODEL.SALE_QTY * MODEL.MODEL_PRICE *(
100 - SALE.SALE_DISCOUNT )/100
)
FROM
MODEL INNER JOIN SALE_MODEL ON
(SALE_MODEL.MODEL_ID=MODEL.MODEL_ID)
INNER JOIN SALE ON
(SALE.SALE_ID=SALE_MODEL.SALE_ID)
INNER JOIN SHOWROOM ON
(SALE.SHOWROOM_ID=SHOWROOM.SHOWROOM_ID)
WHERE
(SALE.SALE_TYPE='S')
AND (SHOWROOM.SHOWROOM_ID IN (1, 2, 3) )
36 07/03/2012 Footer
@select
Функция @select используется для дублирования объектов, то есть, если вам
необходимо один и тот же код SQL использовать в нескольких объекта или в
сложных формула, то вы можете вместо SQL выражения использовать
дануню функцию.
Рассмотрим пример:
У нас есть объект «Model» (MODEL.MODEL_NAME+' '+MODEL.MODEL_TRIM+'
'+MODEL.MODEL_ENGINE)
Мы создадим еще один объект – «Model for rental» (@select(CarModel)).
При использование это объекта, в запрос будет подставляться такой же код,
как и при использование объекта «Model»
37 07/03/2012 Footer
@where
Функция @where() также заменят SQL выражение на путь к объекту:
38 07/03/2012 Footer
@agreagate_aware
Функция @agregate_aware необходима для работы с сумарными таблицами.
@aggregate_aware(<SELECT statement for highest agg level>,
<SELECT statement for second highest agg level>,
..
<SELECT statement for second lowest agg level>,
<original SELECT statement for basic agg calculation>)
39 07/03/2012 Footer
Using Hierarchies
Иерархия – упорядоченная серия
взаимовсвязанных измерений, которые
используются для многомерного анализа, на
пример, как на рисунке: Страна, Регион, Город.
В ВО иерархия может быть естественной, например (Год, Месяц, День) или
логической, то есть созданный в собственном порядке.
40 07/03/2012 Footer
Working with hierarchies
По умолчанию ирархию повторяет очередность объектов в
классе. Именно поэтому важно при созданию юниверса
организовывать объекты в классе в нужной иерархии.
Для просмотра существующей иерархии или создание
своей иерархии можно использовать Hierarchies Editor
41 07/03/2012 Footer
Automatic time hierarchy
При создание таких объектов типа дата, можно автоматически создавать
автоматическую временную иерархию:
42 07/03/2012 Footer
Using List of Values
В дизайнере при создании нового измерения или объекта деталь,
автоматически создается список значений. Сразу этот список физически не
создаются, но у вас есть возможность получить его, направив запрос к БД.
Список значений базируется на
SELECT DISTINCT. Его можно
экспортировать вместе с
юниверсов, тогда список значений
конвертируется в XML и
сохранается в файле *.unw в
репозотирий ВО.
43 07/03/2012 Footer
Cascading LOV
В дизайнере можно создать каскадный список значений, который упростит
выбор параметров для пользователей.
44 07/03/2012 Footer
Derived Tables
Производная таблица это виртуальная таблица, которую
можно создать в структуре юниверса. Такая таблица
содержит в себе SQL выражение.
Пример таблицы DT_Sales_to_Rentals:
SELECT CLIENT.CLIENT_ID, MODEL.MODEL_ID,
(CASE SALE.SALE_TYPE WHEN 'R' THEN
SALE.SALE_TOTAL ELSE 0 END) AS Rental_Total,
(CASE SALE.SALE_TYPE WHEN 'S' THEN
SALE.SALE_TOTAL ELSE 0 END) AS Sales_Total
FROM CLIENT, MODEL,SALE,SALE_MODEL
WHERE CLIENT.CLIENT_ID = SALE.CLIENT_ID
AND MODEL.MODEL_ID = SALE_MODEL.MODEL_ID
AND SALE_MODEL.SALE_ID = SALE.SALE_ID
Nested Derived Tables
45 07/03/2012 Footer
Index awareness
Index awareness позволяет нам пользоваться преимуществом primary, foreign
key, то есть, допустим у нас есть запрос:
В условие мы выбираем UK и US.
А если мы воспользуемся Index awareness, то запрос примет следующий вид:
То есть у нас из запроса исчезла таблица COUNTRY и мы отфильтровали UK
и US по foreign key – MAKER.COUNTRY, тем самым улучшив
производительность запроса.
SELECT MAKER.MAKER_NAME, max(MODEL.MODEL_PRICE)
FROM MAKER, MODEL, COUNTRY COUNTRY_MAKER
WHERE (MODEL.MAKER_ID=MAKER.MAKER_ID)
AND (MAKER.COUNTRY_ID=COUNTRY_MAKER.COUNTRY_ID)
AND COUNTRY_MAKER.COUNTRY_NAME In ( 'United Kingdom','USA' )
GROUP BY MAKER.MAKER_NAME
SELECT MAKER.MAKER_NAME, max(MODEL.MODEL_PRICE)
FROM MAKER, MODEL
WHERE (MODEL.MAKER_ID=MAKER.MAKER_ID)
AND MAKER.COUNTRY_ID In ( 44,1 )
GROUP BY MAKER.MAKER_NAME
46 07/03/2012 Footer
To set up primary key index awareness
Primary key:
COUNTRY_REGION.COUNTRY_ID
WHERE:
COUNTRY_REGION.COUNTRY_ID =
CLIENT.COUNTRY_ID
47 07/03/2012 Footer
Linking Universes
ВО позваляет соединять несколько юниверсов в обном файле *.unw, что
дает ряд преимущест (удобство при создание объектов и тп.) и не достатков
(возможно подключиться только к одному источнику данных, списки значений
хранятся только для одного из юниверсов, контексты должны быть
определены для каждого юниверса и тд.)
48 07/03/2012 Footer
Applying Universe Access Restrictions
В юниверсе можно настраивать ограничения доступа для определенных
пользователей или для груп пользователей. Существуют следующие виды
ограничений:
• Соединение
• Управление запросом
• Контроль за SQL
• Доступ на уровне объектов
• Доступ на уровне строк
• Доступ к альтернативным таблицам
49 07/03/2012 Footer
Applying Universe Access Restrictions (cont)
50 07/03/2012 Footer
Applying Universe Access Restrictions (cont)
51 07/03/2012 Footer
Managing Universes
У вас есть возможность получить всю необходимую информацию по юниверсу
(объекты, связы, таблицы, схема и тп). Для это необходимо:
File->Print Preview/Print.
В опциях юнивераса можно выбрать объекты, которые необходимо отразить в
документации.
52 07/03/2012 Footer
Importing a universe
После того, как вы закончили разрабатывать юниверс, его необходимо
импортировать в репозиторирь ВО (CMS), для этого его нужно сохранить как
файл *.unw, желательно чтобы название файла совпадало с название
юниверса в параметрах.

More Related Content

SAP BusinessObjects Universe Designer training

  • 3. 3 07/03/2012 Footer BusinessObjects Universe Юниверс – семантический слой, который изолирует бизнес пользователя от технических сложностей баз данных, в которых хранится корпоративная информация. Для облегчения жизни конечных пользователей, юниверс состоит из объектов и классов, которые ссылаются на данные в базе данных. Используя юниверс, пользователь оперирует бизнес терминологией, с которой он привык работать. Юниверс – это файл, который состоит из: • Подключения к источнику данных • ER диаграммы • Объектов и классов • Файл *.unv не должен превышать 1mb, кол-во объектов <=500
  • 5. 5 07/03/2012 Footer BusinessObjects Universe Designer components Конструктор юниверсов – приложение для создания, редактирования юниверсов. Юниверс может иметь несколько подключений к разным БД, но одновременно работать можеть только с одной БД. Дизайнер используется только с репозиторие ВО, поэтому сначало необходимо подключиться к CMS. Для работы с юниверсом необходимо импортировать его из CMS. После внесений изменений эскпортировать обратно. Панель инструментов конструктора юниверсов:
  • 6. 6 07/03/2012 Footer Creating the Course Universe После проведеннго анализа бизнес требований и разработки плана построения юниверса, можно приступить к созданию юниверса. Для этого необходимо: • Создать новый источник данных • Создать новое подключение в Конструкторе • Создать новый юниверс • Настроить параметры юниверсы (не обязательно)
  • 7. 7 07/03/2012 Footer Database Connection В качестве источника данных можно использовать практически любые СУБД. Для подключения к источникам данных используются следующие драйвера: • ODBC • OLE DB • JDBC • и др. Существет 3 основных типа подключения: • Secured • Shared • Personal
  • 8. 8 07/03/2012 Footer Creating New Universe Для создания нового юниверса необходимо нажать «New universe» и перед вами появится следующая форма:
  • 9. 9 07/03/2012 Footer Controls Tab На вкладке управления можно ограничить: • количество выгружаемых строк • время выполнения запроса • размер строки
  • 10. 10 07/03/2012 Footer SQL Tab На вкладке «SQL» настраиваются параметры связанные с SQL:
  • 11. 11 07/03/2012 Footer Parameters tab На вкладке параметров можно включать, выключать параметры: • ANSI92 • BEGIN SQL • END SQL (“set query band”) • FILTER_IN_FORM • и другие
  • 12. 12 07/03/2012 Footer Building the Universe Structure Схема юниверса состоит из таблиц и связей между ними. Для создания юниверса необходимо из источника данных выбрать таблицы и затем соединить их. При желании можно просматривать содержимое таблицы.
  • 13. 13 07/03/2012 Footer Defining joins in a universe Послед добавления таблиц в юниверс не обходима создать связи между таблицами. Двойным кликом по ссвязи можно открыть окно редактирование связи: Связи: • Equal-join • Outer-join • Theta join • Shortcut join • Self-restricting join Auto Detect: SELECT count (*) FROM table1, table2 WHERE table1.column = table2.column SELECT count (*) FROM table1 SELECT count (*) FROM table2.
  • 14. 14 07/03/2012 Footer List Mode Для просмотра всех связей юниверса можно использовать «List mode»:
  • 15. 15 07/03/2012 Footer Checking integrity После создания модели рекомендуется проверить юниверс на наличие ошибок, для этого необходимо запустить “Integrity Check”
  • 16. 16 07/03/2012 Footer Creating Dimension Objects При создании новых объектов сначало необходимо создать «Класс» – папку, и в ней уже создавать объекты.
  • 17. 17 07/03/2012 Footer Creating Dimension Objects (cont) Измериния можно создать двумя способами: 1. Щелкнуть правой кнопкой мыши, выбрать «объект» В новом окне необходимо ввести название будующего объекта, выбрать тип данных и ввести поле из таблицы.
  • 18. 18 07/03/2012 Footer Creating Dimension Objects (cont) 2. Перетащить объект из таблиц или всю таблицу целиком в область списка объектов: Если мы перетащим всю таблицу, то у нас создастся новый класс, в котором будут лежать все поля таблицы. При необходимости из объекта измерения мы можем превратить наш объект в объект – деталь:
  • 19. 19 07/03/2012 Footer Creating Measure Objects Объект мера имеет численный тип данных. Как уже говорилось раньше, мера завист от контекста: Мера всегда должна использоваться с одной из агрегативных функций: • Sum • Count • Average • Maximum • Minimum
  • 20. 20 07/03/2012 Footer The query process В BusinessObjects существует 2 уровня агригации, которые происходят во время выполнения запроса: • Агригация на уровне SELECT выражения находится в микрокубе • Агригация на уровне отчета
  • 21. 21 07/03/2012 Footer Creating Measure Objects (cont) Мера создается также, как и измерение, только во вкладке свойства необхомо указать тип объекта – мера, или просто при написание названия поля использовать одну из 5 агрегативных функций.
  • 22. 22 07/03/2012 Footer Loops in a Universe Во время созданию юниверса у нас могут получится циклы, то есть таблицы соединены таким образом, что образую замкнутый круг.: У нас есть следующая ситуация: • один набор таблиц (Car sale details, client, the client‟s region, clients country) • друго набор таблиц (Car sale details, showroom, showroom‟s country) Если мы соединим эти таблицы, то получим цикл. WHERE {COUNTRY.COUNTRY_ID=SHOWROOM.COUNTRY_ID} AND {COUNTRY.COUNTRY_ID=REGION.COUNTRY_ID } AND {REGION.REGION_ID=CLIENT.REGION_ID } AND {CLIENT.CLIENT_ID=SALE.CLIENT_ID } AND {SHOWROOM.SHOWROOM_ID=SALE.SHOWROOM_ID } AND {SALE.SALE_ID=SALE_MODEL.SALE_ID } AND {SALE.SALE_TYPE= 'S' } При выполнение запроса в отчет попадет не вся информация, так как согласно запросу у нас создалось ограничение Showroom Country =Client Country)
  • 23. 23 07/03/2012 Footer Resolving Loops in a Universe Для решения циклов существует два способа: 1. Использование альясов: 2. Использование контекстов.
  • 24. 24 07/03/2012 Footer About Contexts Контекст – это список джоинов и таблиц, которые могут вместе учавствовать в запросе. Любые объекты, полученные из таблиц, включенных в контекст, совместимы друг с другом. Если в запросе учавствует объекты из разных контекстов, то BO создаст несоклько запросов, свой для каждого контекста, а затем соединит их в одном микрокубе. Это позволяет избежать некорректных результатов . Допустим у нас есть юниверс Motors:
  • 25. 25 07/03/2012 Footer About Contexts (cont) У нас есть две сущности Rental и Sale. Сущность Client одновременно связана с Rental и Sale: 1. Rental_Model: 2. Sales_Model:
  • 26. 26 07/03/2012 Footer About Contexts (end) Для того, чтобы пользователь мог использовать в одном запросе одновременно объекты из разных контекстов, необходимо включить данную опцию в настройках юниверса. Такой запрос называется Ambiguous query.
  • 27. 27 07/03/2012 Footer Resolving SQL Traps В дизайнере существует два вида “SQL traps”: • chasm traps • fan traps Если при возникновении цикла в отчет попадает меньше строк, то при возникновении ловушек у нас появляются лишние записи. К счастью, существет несколько способов для идентификации и решения таких вещей. Chasm Traps Chasm trap случается, когда у нас три таблички соединяются, как показано на рисунке, тоесть 1 ко многим.
  • 28. 28 07/03/2012 Footer Chasm Traps Example
  • 29. 29 07/03/2012 Footer Chasm Traps Example (end) Запрос возвращает все возможные комбинации строк таблицы SALE и все возможные комбинации строк таблицы RENTAL, тем самым задваивая наш результат. Вы можете ничего не заметить, пока не посмотрите на детализированные данные. Для решения данной проблемы существует 2 способа: • Изменить параметры юниверса, чтобы ВО создавал отдельный запрос для каждой таблицы, но это поможет только при использование мэр • Создание контекста для каждой таблицы
  • 30. 30 07/03/2012 Footer Fan traps Fan traps случаются, когда у нас есть соединения 1 ко многим, которое также имеет соединение 1 ко многим с другой таблицей, как показано на рисунке. Fan traps example
  • 31. 31 07/03/2012 Footer Fan traps example (cont) Мы не увидим ошибку, пока не посмотри на детализированную выгрузку: Для решения fan trap мы можем сделать одно из следующих действий: • Изменить параметры юниверса, чтобы ВО создавал отдельный запрос для каждой таблицы, но это поможет только при использование мэр • Использовать комбинацию из контекста и альясов • Избежать fan trap сценария
  • 32. 32 07/03/2012 Footer Applying Restrictions on Objects Ограничения на объект можно накаладывать при его создание в дизайнере: Теперь при использование объекта в SQL выражение будет подставляться данное условие.
  • 33. 33 07/03/2012 Footer Condition objects В ВО можно создавать специальные объекты, которые будут содержать условия – объекты фильтры. Такие объекты имеют ряд преимуществ: • Удобны для сложных условий Self-restricting join Такой тип ограничения создается непосредтственно на поле таблицы, и потом автоматически появляется в SQL выражение в условие, при использование данной таблицы в запросе:
  • 34. 34 07/03/2012 Footer Using @functions with Objects • @prompt(,,,,,,) • @select() • @where() • @aggregate_aware(,) В ВО есть специальны класс функций - @ функции: @prompt Синтакс функции @ptompt состоит из семи параметров, разделенных запятой: • сообщение • тип данных (A-alphanumeric, N-numeric, D-Date) • список значений • mono (одно значение), multi (несколько значений) • free(позволяет ввести любое значение), constrained(позволяет выбрать только из списка значений), primary key(в запросе используется вместо значения его ключ) • persistent(сохраняет в промте последнее значение), not persistent • „Default value‟:‟key‟ (значение промпта по умолчанию и ключ для PK) Первые два параметра обязательны.
  • 35. 35 07/03/2012 Footer @prompt example SHOWROOM.SHOWROOM_NAME = @prompt('Enter Showroom Name','A', 'ShowroomShowroom',mono,primary_key) SELECT sum(SALE_MODEL.SALE_QTY * MODEL.MODEL_PRICE *(100 - SALE.SALE_DISCOUNT )/100) FROM MODEL INNER JOIN SALE_MODEL ON (SALE_MODEL.MODEL_ID=MODEL.MODEL_ID) INNER JOIN SALE ON (SALE.SALE_ID=SALE_MODEL.SALE_ID) INNER JOIN SHOWROOM ON (SALE.SHOWROOM_ID=SHOWROOM.SHOWROOM_I D) WHERE (SALE.SALE_TYPE='S') AND (SHOWROOM.SHOWROOM_ID = 2 ) SHOWROOM.SHOWROOM_NAME IN @prompt('Enter Showroom Name','A', 'ShowroomShowroom',multi,primary_key,not_persistent, {'Prestige Cars' : '1', 'Prestige Sports Cars' : '2','Prestige Motors' : '3'}) SELECT sum(SALE_MODEL.SALE_QTY * MODEL.MODEL_PRICE *( 100 - SALE.SALE_DISCOUNT )/100 ) FROM MODEL INNER JOIN SALE_MODEL ON (SALE_MODEL.MODEL_ID=MODEL.MODEL_ID) INNER JOIN SALE ON (SALE.SALE_ID=SALE_MODEL.SALE_ID) INNER JOIN SHOWROOM ON (SALE.SHOWROOM_ID=SHOWROOM.SHOWROOM_ID) WHERE (SALE.SALE_TYPE='S') AND (SHOWROOM.SHOWROOM_ID IN (1, 2, 3) )
  • 36. 36 07/03/2012 Footer @select Функция @select используется для дублирования объектов, то есть, если вам необходимо один и тот же код SQL использовать в нескольких объекта или в сложных формула, то вы можете вместо SQL выражения использовать дануню функцию. Рассмотрим пример: У нас есть объект «Model» (MODEL.MODEL_NAME+' '+MODEL.MODEL_TRIM+' '+MODEL.MODEL_ENGINE) Мы создадим еще один объект – «Model for rental» (@select(CarModel)). При использование это объекта, в запрос будет подставляться такой же код, как и при использование объекта «Model»
  • 37. 37 07/03/2012 Footer @where Функция @where() также заменят SQL выражение на путь к объекту:
  • 38. 38 07/03/2012 Footer @agreagate_aware Функция @agregate_aware необходима для работы с сумарными таблицами. @aggregate_aware(<SELECT statement for highest agg level>, <SELECT statement for second highest agg level>, .. <SELECT statement for second lowest agg level>, <original SELECT statement for basic agg calculation>)
  • 39. 39 07/03/2012 Footer Using Hierarchies Иерархия – упорядоченная серия взаимовсвязанных измерений, которые используются для многомерного анализа, на пример, как на рисунке: Страна, Регион, Город. В ВО иерархия может быть естественной, например (Год, Месяц, День) или логической, то есть созданный в собственном порядке.
  • 40. 40 07/03/2012 Footer Working with hierarchies По умолчанию ирархию повторяет очередность объектов в классе. Именно поэтому важно при созданию юниверса организовывать объекты в классе в нужной иерархии. Для просмотра существующей иерархии или создание своей иерархии можно использовать Hierarchies Editor
  • 41. 41 07/03/2012 Footer Automatic time hierarchy При создание таких объектов типа дата, можно автоматически создавать автоматическую временную иерархию:
  • 42. 42 07/03/2012 Footer Using List of Values В дизайнере при создании нового измерения или объекта деталь, автоматически создается список значений. Сразу этот список физически не создаются, но у вас есть возможность получить его, направив запрос к БД. Список значений базируется на SELECT DISTINCT. Его можно экспортировать вместе с юниверсов, тогда список значений конвертируется в XML и сохранается в файле *.unw в репозотирий ВО.
  • 43. 43 07/03/2012 Footer Cascading LOV В дизайнере можно создать каскадный список значений, который упростит выбор параметров для пользователей.
  • 44. 44 07/03/2012 Footer Derived Tables Производная таблица это виртуальная таблица, которую можно создать в структуре юниверса. Такая таблица содержит в себе SQL выражение. Пример таблицы DT_Sales_to_Rentals: SELECT CLIENT.CLIENT_ID, MODEL.MODEL_ID, (CASE SALE.SALE_TYPE WHEN 'R' THEN SALE.SALE_TOTAL ELSE 0 END) AS Rental_Total, (CASE SALE.SALE_TYPE WHEN 'S' THEN SALE.SALE_TOTAL ELSE 0 END) AS Sales_Total FROM CLIENT, MODEL,SALE,SALE_MODEL WHERE CLIENT.CLIENT_ID = SALE.CLIENT_ID AND MODEL.MODEL_ID = SALE_MODEL.MODEL_ID AND SALE_MODEL.SALE_ID = SALE.SALE_ID Nested Derived Tables
  • 45. 45 07/03/2012 Footer Index awareness Index awareness позволяет нам пользоваться преимуществом primary, foreign key, то есть, допустим у нас есть запрос: В условие мы выбираем UK и US. А если мы воспользуемся Index awareness, то запрос примет следующий вид: То есть у нас из запроса исчезла таблица COUNTRY и мы отфильтровали UK и US по foreign key – MAKER.COUNTRY, тем самым улучшив производительность запроса. SELECT MAKER.MAKER_NAME, max(MODEL.MODEL_PRICE) FROM MAKER, MODEL, COUNTRY COUNTRY_MAKER WHERE (MODEL.MAKER_ID=MAKER.MAKER_ID) AND (MAKER.COUNTRY_ID=COUNTRY_MAKER.COUNTRY_ID) AND COUNTRY_MAKER.COUNTRY_NAME In ( 'United Kingdom','USA' ) GROUP BY MAKER.MAKER_NAME SELECT MAKER.MAKER_NAME, max(MODEL.MODEL_PRICE) FROM MAKER, MODEL WHERE (MODEL.MAKER_ID=MAKER.MAKER_ID) AND MAKER.COUNTRY_ID In ( 44,1 ) GROUP BY MAKER.MAKER_NAME
  • 46. 46 07/03/2012 Footer To set up primary key index awareness Primary key: COUNTRY_REGION.COUNTRY_ID WHERE: COUNTRY_REGION.COUNTRY_ID = CLIENT.COUNTRY_ID
  • 47. 47 07/03/2012 Footer Linking Universes ВО позваляет соединять несколько юниверсов в обном файле *.unw, что дает ряд преимущест (удобство при создание объектов и тп.) и не достатков (возможно подключиться только к одному источнику данных, списки значений хранятся только для одного из юниверсов, контексты должны быть определены для каждого юниверса и тд.)
  • 48. 48 07/03/2012 Footer Applying Universe Access Restrictions В юниверсе можно настраивать ограничения доступа для определенных пользователей или для груп пользователей. Существуют следующие виды ограничений: • Соединение • Управление запросом • Контроль за SQL • Доступ на уровне объектов • Доступ на уровне строк • Доступ к альтернативным таблицам
  • 49. 49 07/03/2012 Footer Applying Universe Access Restrictions (cont)
  • 50. 50 07/03/2012 Footer Applying Universe Access Restrictions (cont)
  • 51. 51 07/03/2012 Footer Managing Universes У вас есть возможность получить всю необходимую информацию по юниверсу (объекты, связы, таблицы, схема и тп). Для это необходимо: File->Print Preview/Print. В опциях юнивераса можно выбрать объекты, которые необходимо отразить в документации.
  • 52. 52 07/03/2012 Footer Importing a universe После того, как вы закончили разрабатывать юниверс, его необходимо импортировать в репозиторирь ВО (CMS), для этого его нужно сохранить как файл *.unw, желательно чтобы название файла совпадало с название юниверса в параметрах.