Академический Документы
Профессиональный Документы
Культура Документы
Виталий Васильев
Прочитать позже
2567
1
АННОТАЦИЯ
Публикация предназначена для консультантов по различным модулям SAP ERP. Описываемая
технология ABAP CDS наиболее актуальна для систем SAP S/4HANA, но может применяться и в
любых системах, начиная с платформы SAP Netweaver 7.40 SPS05, независимо от используемой
базы данных.
Для быстрого погружения в тему приводится серия практических примеров, которые читатель
может самостоятельно повторить в своей системе.
Изложенная информация будет полезна при решении задач, связанных с разработкой операционной
и аналитической отчётности: самостоятельное создание отчётов, постановка задач для
разработчиков ABAP или BW, анализ и использование уже существующих в системе стандартных
или пользовательских разработок.
ПРЕДИСЛОВИЕ
Линейка продуктов компании SAP постоянно пополняется новыми наименованиями, на смену
привычным версиям знакомых систем приходят новинки, полностью пересмотренные
архитектурно, появляются новшества и в технологиях разработки. Изменений много, происходят
они быстро. Порой даже то, что преподносилось как новшество, отходит на второй план и перестаёт
развиваться уже в следующем пакете обновлений. В такой ситуации следить за развитием событий,
быть в курсе новинок – задача, которая иногда оказывается непростой не только для компаний,
использующих продукты SAP, но и для профессиональных консультантов. Знакомиться с новыми
продуктами и технологиями работы приходится по презентациям, слайдам, видеороликам. Но такие
источники зачастую ограничиваются общими словами и приукрашивают действительность в
интересах маркетинга.
Оглавление
1. ВВОДНАЯ ИНФОРМАЦИЯ
1.1. Эволюция работы с SQL в ABAP: от Open SQL к Core Data Services
1. ВВОДНАЯ ИНФОРМАЦИЯ
1.1. Эволюция работы с SQL в ABAP: от Open SQL к Core Data
Services
Наиболее сильным из таких ограничений является следующее. Команды классического SQL можно
разделить на три подмножества:
Из этих трёх подмножеств в Open SQL реализован только DML. Конструирование объектов БД
выполняется через инструментарий ABAP Dictionary (транзакция SE11 и т.п.). А настройки
полномочий через DCL вообще нерелевантны для ABAP, так как полномочия пользователей
никогда не определяются на уровне объектов БД.
Если же вернуться к DML, то и его стандартные возможности доступны в Open SQL не полностью.
Вот только некоторые из возможностей классического DML, недоступные в Open SQL:
Команда UNION
Условия ветвления (команда CASE)
Вычисляемые значения в условиях WHERE
Вычисляемые поля в списке после SELECT
SQL-функции
Full/right outer join
Non-equi-join (то есть возможность использования знаков неравенства в условиях WHERE
при сравнении значений полей из двух таблиц)
Определение ракурсов БД не только на основе таблиц, но и на основе других ракурсов.
Обойти столь жёсткие ограничения позволет использование так называемого Native SQL. В
программном блоке между командами EXEC SQL и ENDEXEC можно написать SQL-выражение,
использующее возможности, специфические для той конкретной СУБД, на которой развёрнут
сервер приложений. Однако такой подход имеет свои особенности и риски. Наиболее очевидный из
которых – невозможность простой миграции такого приложения на другую СУБД.
Есть две основных причины серьёзных коллизий в использовании Open SQL. Во-первых, являясь
частью языка ABAP, команды Open SQL должны обеспечивать одинаковый и корректный результат
работы вне зависимости от того, на какой СУБД развёрнут сервер приложений. И если какие-то
операции DML могут быть по-разному реализованы в различных СУБД (например – округление
при арифметических вычислениях), то такие операции исключаются из Open SQL. Во-вторых, при
работе с классическими СУБД считается, что для улучшения производительности необходимо
максимально переносить вычислительную нагрузку с уровня БД на уровень сервера приложений. А
для него не требуются развитые возможности SQL.
Перевод картинки:
Classic Approach – Классическое выполнение кода
Intensive computations in APPLICATION layer – Основные расчёты на сервере приложений
Database – База данных
Application Programming Models – Программный код приложений
Data Centric Approach – Выполнение кода на уровне данных
Intensive computations in DATABASE layer – Основные расчёты в СУБД
С появлением SAP HANA также связано и ещё одно важное изменение в разработке приложений.
Возможности SAP HANA XS позволяют создавать приложения непосредственно на базе данных, а
не на сервере приложений. Такая разработка, в свою очередь, влечёт необходимость в
инструментарии работы с метаданными (вместо ABAP Dictionary). Этот инструментарий не может
ограничиваться просто созданием таблиц или ракурсов БД. Он должен также обладать широкими
возможностями семантического обогащения этих ракурсов. Например, определять удобные
словесные названия для полей, выделять специфические поля, содержащие тексты, обозначения
языка, валюты, единиц измерения, и т.д. Также появляется необходимость и в определении
полномочий напрямую на создаваемых объектах БД. Для решения этих задач SAP предоставил Core
Data Services (CDS). CDS – это совокупность из трёх предметно-ориентированных языков,
предназначенных для создания и использования семантически обогащённых моделей данных.
Задачи, решаемые каждым из этих языков, проиллюстрированы на Рис.2:
Перевод картинки:
Итак, Data-Centric Logic перенесла массивные вычисления с сервера приложений на уровень БД.
CDS расширил возможности использования SQL в программном коде ABAP. И в то же время
появился подход, при котором логика работы пользовательского интерфейса (UI Application Logic)
стала отделяться от основного приложения, а иногда и переноситься на сторону клиента или
отдельного сервера приложений. Разделение UI-логики и бизнес-логики приложений позволило
разделить жизненные циклы соответствующих частей программного кода. Всё это вместе привело к
архитектурным изменениям, как в системном ландшафте, так и в разработке приложений.
Классическое «распределение обязанностей» проиллюстрировано на Рис.3:
Перевод картинки:
Перевод картинки:
Перевод картинки:
Но помимо этого, появляются ещё и возможности, ранее недоступные при разработке приложений:
Перевод картинки:
Ниже по тексту будет часто использоваться термин «CDS-ракурс». Это некоторое упрощение,
сделанное для краткости. На самом деле, в зависимости от контекста, речь может идти про один из
трёх объектов:
Перевод картинки:
Перевод картинки:
Можно предположить, что дальним предком такой VDM являлись так называемые инфо-наборы,
уже давно появившиеся в старых версиях SAP ERP. Там с помощью транзакций SQ01-SQ03
продвинутый пользователь, не прибегая к помощи SAP-консультантов (а тем более программистов
ABAP), мог составить простейшие соединения из нескольких таблиц, оформить селекционный
экран для ограничения выборки данных, создать простейший «дизайн» своего отчёта. Более
сложным инструментом подобной разработки является Report Painter. Самым гибким подходом, но
в то же время и требующим самой глубокой профессиональной квалификации, является разработка
операционных отчётов на данных SAP ERP с помощью ABAP-программирования.
С появлением нового поколения SAP-систем, построенных на базе SAP HANA, было предложено
такое развитие концепции инфо-наборов, как HANA Live. Вендор предлагал очень широкий спектр
заранее разработанных HANA-моделей, позволявших строить разнообразную операционную
отчётность по данным различных модулей в ERP. Совокупность моделей, предложенного контента
и образовывала VDM над таблицами HANA. Такая модель была ориентирована на удобное для
пользователей представление данных при использовании в операционной отчётности. При этом,
разумеется, вступали в игру все преимущества SAP HANA, связанные с быстродействием и
способностью обрабатывать в режиме реального времени большие объемы первичной информации.
Однако работа с моделями данных на уровне HANA имела и свои недостатки:
Учитывая перечисленные проблемы, SAP заявил, что дальнейшее развитие продукта HANA Live
прекращено. Продолжением развития стала концепция VDM на основе ракурсов CDS. Эта
виртуальная модель данных появилась и развивается в системах SAP S/4HANA (см. Рис. 9)
Перевод картинки:
Перевод картинки:
Перевод картинки:
Резюмируя преимущества VDM, можно сказать, что она является стабильной, расширяемой,
доступной для повторного использования различными потребителями. На уровне VDM
упрощается имплементация нового функционала сразу для всех потребителей, что снижает общие
затраты на использование систем. (см. Рис.12)
Рис.12. VDM позволяет предоставлять новый функционал всем потребителям одновременно
Перевод картинки:
Basic view. Базовый ракурс создаётся для того, чтобы представить в VDM ключевые сущности
(например, контрагента или сбытовой заказ) в простой неизбыточной форме. Неизбыточность
означает, что каждый объект представлен ровно один раз. Причём в представление объекта
включены только неотъемлемо относящиеся к нему поля, которые не могут быть вычислены из
других полей. Базовые ракурсы определяются универсально, независимо от способа их
дальнейшего использования в VDM.
Базовые ракурсы – это единственный тип CDS Views, в определении которых могут
быть напрямую использованы таблицы базы данных.
Composite view. Композитные ракурсы строятся на основе одного или нескольких базовых
ракурсов. Между составляющими базовыми ракурсами могут быть определены семантические
взаимосвязи (в упрощённом понимании – аналог операции JOIN в SQL). Могут использоваться
операции фильтрации, агрегирования, вычисляемые поля. Строение композитного ракурса может
учитывать цель и способ его дальнейшего использования в модели. В зависимости от сложности
модели, могут быть определены несколько уровней композитных ракурсов, построенных друг на
друге. По определению данные в композитных ракурсах представляются в избыточной форме,
ориентированной на дальнейшее использование для анализа.
Совокупность базовых и композитных ракурсов называется Interface views. Интерфейсные ракурсы
создаются так, чтобы образовать целостную модель данных, ориентированную на представление их
бизнес-семантики. Эти ракурсы должны быть пригодны для повторного использования в новых
конструкциях VDM.
Consumption view. Ракурс использования. Данные ракурсы строятся с использованием одного или
нескольких интерфейсных ракурсов. Ракурс использования должен предоставлять приложению-
потребителю широкую функциональность:
Перевод картинки:
База знаний
Практика освоения ABAP CDS для непрограммистов. Часть 2
Виталий Васильев
Прочитать позже
1392
2. ИНСТАЛЛЯЦИЯ, КОНФИГУРИРОВАНИЕ,
ПОДГОТОВКА ДАННЫХ для примеров
Часть 1
Продолжение статьи.
2.1. Настройки ABAP Backend
Чтобы работать с CDS, пользователь в первую очередь должен иметь для этого необходимые
полномочия. При настройке полномочий в каждой конкретной системе, администраторы SAP Basis
могут как шаблоны использовать две стандартных роли: SAP_BC_DWB_ABAPDEVELOPER -
роль, содержащая все необходимые полномочия для создания, редактирования и использования
ABAP CDS Views; SAP_BC_DWB_WBDISPLAY – роль с полномочиями, достаточными только
для использования готовых ракурсов в аналитических приложениях. Более тонкие настройки
полномочий, входящих в данные роли, детально разобраны в официальной документации:
http://help.sap.com/download/netweaver/adt/SAP_ADT_Configuration_Guide_Backend_en.pdf (см.
раздел 2 «Providing Roles and User Authorizations»)
Также для корректной работы с новыми инструментами редактирования кода в среде Eclipse,
необходимо в ABAP-системе активировать ряд ICF-сервисов. Это делается с помощью транзакции
SICF. Как правило, данная задача также выполняется администраторами SAP Basis. Перечень
необходимых сервисов приведён в разделе 3 «Activating ICF Services in Development Systems»
указанного выше официального гайда.
SAP GUI версии не ниже 7.40. Это ПО обеспечивает коммуникацию с ABAP BackEnd
Java Runtime (JRE) 1.8. Необходима версия 32 или 64-bit в соответствии с разрядностью
Windows. Ссылки на текущие версии JRE находятся по адресу
http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html
Microsoft VC Runtime. Необходимо установить пакет библиотек MS VS2010, также 32 или 64
бита в соответствии с разрядностью Windows
Далее процесс установки проходит стандартно: принять лицензионное соглашение, выбрать папку
для установки. При первом запуске программа предложит выбрать папку для сохранения локальных
рабочих файлов (workspace). Нужно выбрать удобную папку, например – предложенную по
умолчанию. И включить галку «Use this as default and do not ask again» (см. Рис.15).
Рис.15. Настройка Workspace при первом запуске Eclipse
В открывшемся рабочем окне среды Eclipse перейти по меню Window->Preferences. Появится окно
всевозможных настроек. В левой части выбрать пункт Install/Update->Available Software Sites (см.
Рис.16).
В этом меню можно управлять источниками, по которым происходит поиск обновлений или новых
компонент для установки. Источниками могут быть сайты проекта Eclipse или локальные файлы
дистрибутивов. К тем источникам, которые указаны по умолчанию, необходимо добавить источник
для установки ADT. Для этого нажать кнопку «Add…» и в поле «Location» добавить адрес
https://tools.hana.ondemand.com/oxygen (см. Рис.17).
Рис.17. Подключение нового сайта обновлений к Eclipse
Подтвердить адрес кнопкой «OK» и закрыть настройки кнопкой «Apply and Close». Теперь можно
запустить проверку и установку обновлений среды Eclipse через меню Help->Check for Updates.
Если в указанных источниках будут найдены обновления, программа выведет их список. Возможно,
для продолжения установки потребуется принять лицензионные соглашения. После чего пойдёт
автоматический процесс загрузки и установки требуемых файлов. По завершении этого процесса
появится сообщение о том, что необходим перезапуск программы (см. Рис.18).
Для продолжения нормальной работы нужно принять это предложение и нажать «Restart Now».
В поле, где по умолчанию написано «type filter text», ввести название нужного компонента. Для
удобства просмотра результатов рекомендуется отключить галку «Group items by category». Затем в
верхней части окна раскрыть выпадающий список в поле «Work with» и выбрать из него «All
Available Sites». Рекомендуется выбирать эту настройку после предыдущих, так как выбор сайтов
немедленно запускает поиск по ним. И если не ввести заранее название компонента, то поиск будет
долгим и выдаст огромный список лишних пунктов. А при рекомендованной последовательности
результат будет таким, как показано на Рис.20. Здесь и далее на рисунках отражены версии
компонент, актуальные на момент написания текста. Пользователь, применяющий описанные
рекомендации, может увидеть более свежие версии.
Если какая-то из компонент не появляется в результатах поиска, попробуйте отключить галку «Hide
items that are already installed». Тогда искомый компонент может появиться, отображённый серым
цветом (см. Рис.21).
После установки всех предварительных пакетов, в окне поиска нужно вновь включить галку «Group
items by category» ввести название компонента «ABAP Development Tools». Результат показан на
Рис.22.
Рис.22. Установка ADT – стартовое окно
Теперь нужно или выбрать верхний компонент, или просто нажать кнопку «Select All». И далее
пройти по обычному пути установки.
Чтобы убедиться в корректной установке, можно сделать следующее. Во-первых, нужно вывести в
верхней части рабочего окна набор кнопок (toolbar). Если его там нет, то сначала выполнить
команду меню Window->Appearance->Show Toolbar. Теперь появится кнопочное меню. В том числе
кнопка «Open Perspective» (см. Рис.23).
Если установка ADT прошла правильно, то при нажатии на данную кнопку появится список, в
котором будет указана перспектива ABAP (см. Рис.24).
Рис.24. Включение ABAP-перспективы в среде Eclipse
Для дальнейшей работы с ADT нужно выбрать эту перспективу и нажать Open. В кнопочном меню
появится кнопка «ABAP» (крайняя справа на Рис.25):
Окно «Welcome» заслоняет почти всё рабочее пространство. Поэтому нужно закрыть его, нажав
крестик на заголовке. В результате текущим станет как раз окно ABAP (см. Рис.26).
Рис.26. Рабочий вид ABAP-перспективы
Окно «Feature Explorer» в правой части экрана тоже не потребуется для работы, оно представляет
только вводную информацию для начинающих. Его также можно закрыть.
Для установки HANA Studio потребуется скачать её дистрибутив а также специальную программу-
архиватор, используемую только компанией SAP. Это так называемый SAPCAR. Найти архиватор
можно следующим образом. В верхней части web-страницы выбрать из списка раздел Downloads и
ввести слово SAPCAR в поле поиска (см. Рис.27).
Перейдя по этой ссылке, видим, что текущей версией программы SAPCAR является 7.21 (см.
Рис.29).
Рекомендуется скачать этот файл в отдельную папку. Например, C:\Studio. И переименовать для
удобства просто в SAPCAR.EXE.
Теперь ищем дистрибутив для самой SAP HANA Studio. Так же вносим это название в поле поиска
(см. Рис.31).
Рис.31. Поиск дистрибутива SAP HANA Studio
В результатах поиска ищем строку, где указан продукт «SAP HANA STUDIO 2» с пояснением
«Maintenance Software Component» (см. Рис.31a).
Перейдя по ссылке, так же выбираем из списка подходящую версию Windows. И в данном случае
мы получим довольно большой список различных доступных версий для скачивания (см. Рис.32).
Рис.32. Дистрибутивы SAP HANA Studio для ОС Windows и различных ревизий HANA
Какой из этих файлов выбрать? Если предполагается работа с системой на основе SAP HANA, то
лучше всего уточнить у администраторов SAP Basis, какая ревизия HANA используется в вашей
системе. И скачать версию Studio с таким же номером ревизии. Например – 223.00. Загруженный
файл помещаем в ту же папку C:\Studio. Для удобства его тоже можно переименовать в
STUDIO2.SAR (см. Рис.33).
Рис.35. Командная строка Windows (здесь Master – имя текущего пользователя ОС)
Теперь нужно переключиться в ту папку, в которой лежат дистрибутивы. Это делается командой cd
с указанием требуемой папки. После ввода команды и нажатия Enter командная строка
переключится в нужную папку. Это будет видно по заголовку строки (см. Рис.36).
Программа установки HANA Studio запускается через файл hdbsetup.exe. Возможно, что для его
корректной работы от пользователя потребуются полномочия администратора на данном
компьютере. В остальном процесс установки типичен для приложений Windows. В частности, на
экране выбора устанавливаемых опций нужно выбрать все доступные галочки (см. Рис.40).
После окончания установки в меню «Пуск» появляется папка «SAP HANA» с ярлыком для запуска
HANA Studio.
Дистрибутив состоит из одного файла в формате ZIP. Сложностей с выбором здесь нет, так как
версия только одна и от операционной системы она не зависит (см. Рис.43).
Здесь можно видеть префикс jar:file перед названием файла. Это нормально, система добавляет его
автоматически, когда с помощью кнопки «Archive…» выбран нужный файл.
Подключение ADT к системе BackEnd выполняется в перспективе ABAP. Для того, чтобы хранить
параметры подключения и локальные файлы со служебной информацией, требуется создать так
называемый ABAP-проект. Для этого в левой части ABAP-перспективы выбрать закладку Project
Explorer (см. Рис.45).
Создать проект можно двумя способами. Либо выполнить пункт меню File->New->ABAP Project,
либо правой кнопкой мыши вызвать контекстное меню на пустом свободном месте в Project
Explorer. И там тоже выполнить New->ABAP Project (см. Рис.46).
Рис.46. Создание ABAP-проекта в ADT. Первый шаг
В открывшемся окне будут перечислены те системы, которые созданы в SAP Logon (см. Рис.47).
Следует выделить нужную систему и нажать кнопку «Next». В следующем окне будут видны
подробные настройки соединения с ABAP-системой, считанные из SAP Logon. При необходимости
их можно скорректировать (см. Рис.48).
Рис.48. Создание ABAP-проекта в ADT. Параметры подключения к Backend-системе
Затем ещё раз нажать «Next». В следующем окне ввести обычные параметры для входа в систему,
как и при работе в SAP Logon: логин, пароль, мандант и язык (см. Рис.49).
Затем ещё раз нажать «Next». Будет выполнена проверка соединения с ABAP-системой,
корректность пароля и полномочия указанного пользователя. Если всё пройдёт успешно, то
появится завершающее окно. В нём можно будет скорректировать (если нужно) предложенное
системой техническое имя проекта. Например, иногда бывает удобно убрать из имени логин
пользователя и язык подключения. А также добавить суффикс ABAP (так как в Project Explorer
могут создаваться и проекты других типов). Пример приведён на Рис.49
Рис.50. Создание ABAP-проекта в ADT. Завершающий этап
Здесь же удобной опцией является выбор избранных пакетов разработки (Favorite Packages). Дело в
том, что все доступные пользователю ABAP-пакеты будут видны в проекте в виде иерархического
дерева. Если полномочия пользователя широки, то число доступных пакетов может быть огромным.
И тогда ориентироваться в этом дереве долго и неудобно. Поэтому некоторые пакеты, с объектами
которых наиболее часто приходится работать, можно сделать избранными. Такие пакеты выводятся
отдельным компактным списком. Для целей дальнейших примеров можно добавить в избранное
пакет $TMP. Для этого нажать кнопку «Add» и ввести имя пакета (или его часть) в строку поиска.
Будет выведен список всех пакетов, чьё техническое имя содержит введённую строку (см. Рис.51).
Теперь процесс создания ABAP-проекта завершается нажатием кнопки «Finish» (см. Рис.52).
Созданный проект появляется в Project Explorer. Поскольку при создании были введены логин и
пароль, то соединение с BackEnd-системой уже установлено. Поэтому пиктограмма проекта имеет
вид раскрытой папки (см. Рис.53).
Иерархию объектов, доступных для работы, можно раскрывать и далее, используя либо значки >
слева от строк иерархии, либо двойной щелчок мышью. Например, можно раскрыть и увидеть
список избранных пакетов (см. Рис.54).
Рис.54. Избранные пакеты разработки в ABAP-проекте
Здесь также видны такие параметры подключения проекта, как SID системы, мандант 001, логин
пользователя (VVV), язык подключения. Соответственно, объекты пакета $TMP тоже выводятся те,
которые ассоциированы с этим пользователем.
Когда работа с системой закончена, необходимо правой кнопкой щёлкнуть на папке проекта и
выбрать в контекстном меню команду Close Project. Это аналог привычной команды выхода из
системы в SAP GUI. При следующем входе в Project Explorer папка проекта будет выглядеть
закрытой (см. Рис.55).
При двойном щелчке по папке появится окно, требующее ввести пароль (см. Рис.56).
Важно заметить, что здесь требуется только ввод пароля. Такие параметры, как номер
манданта, логин и язык входа – фиксируются в процессе создания проекта и не могут
быть изменены. Это, в частности, связано с тем, что некоторые настроечные данные
проекта сохраняются на компьютере локально. Поэтому они должны быть неизменны и
доступны только правильному пользователю.
При непосредственном запуске программы через транзакцию SA38, выводится стартовый экран
(см. Рис.57).
Основным параметром при запуске программы является объем данных (число записей), которые
будут сгенерированы при заполнении таблиц. Для целей тестирования, конечно, интереснее иметь
достаточно большие массивы данных. Как указано на стартовом экране, массивы размеров
«Maximum» и «Monster» могут быть созданы только через запуск программы в фоновом режиме.
Для фонового запуска в системе уже предусмотрены стандартные варианты:
Запустить программу в фоновом режиме с одним из этих вариантов можно через транзакцию SM36.
Подробности создания, запуска фонового задания и мониторинга его исполнения здесь не
приводятся, так как это типичная общеизвестная задача.
Практика освоения ABAP CDS для непрограммистов. Часть 3
Виталий Васильев
Прочитать позже
1130
Часть 1 Часть 2
Продолжение статьи.
3. АННОТАЦИИ
3. АННОТАЦИИ
3.1. Общие определения
Аннотации – это команды, имеющие специфический синтаксис и используемые в DDL-источниках
для описания дополнительной семантической информации. Например, аннотации помогают
организовать большую модель, выделить в ней различные уровни элементов: частные, повторно
используемые, аналитические.
Совокупность доступных для использования аннотаций предопределена SAP. Она содержит ABAP-
аннотации, используемые средой во время выполнения, определяющие семантику и поведение
CDS-сущности. Также предусмотрены аннотации, необходимые для работы в других средах (таких
как OData или UI5). Метаданные таких аннотаций доступны приложениям-потребителям через
специальные API (см. Рис.58).
Перевод картинки:
Analytics – Аналитика
Search – Поиск
BI-Tools – Приложения BI
Planning – Планирование
Business Logic – Бизнес-логика
#BASIC – Базовый ракурс, самый низкий уровень VDM. Как уже говорилось, это
единственный уровень, на котором допустимо прямое обращение к таблицам БД при
определении ракурса. Базовые ракурсы почти всегда представляют собой неизбыточную
нормализованную модель данных
#COMPOSITE – Композитный ракурс. Определяется на основе нескольких базовых или
других композитных ракурсов. Здесь зачастую не требуется нормализация данных. Более
приоритетной является возможность повторного использования композитных ракурсов, их
адаптация под специфические области данных и под удобное сочетание с другими
ракурсами.
#CONSUMPTION – Ракурсы использования. Они потребляют ракурсы с нижележащих
уровней, но сами не предназначены для повторного использования. Задача таких ракурсов –
обеспечить информацией приложения-потребители VDM.
#EXTENSION – Ракурс расширения. Содержит ключевое поле и все дополнительные поля,
используемые при расширении стандартной VDM.
Analytics.query: blank (=true), true, false - «Истинное» значение данной аннотации указывает,
что ракурс предназначен для обработки аналитическим движком. Этот движок может
обрабатывать такие специфические конструкции, как ограниченные показатели, формулы и
показатели со специальной агрегацией. Как правило, ракурсы вида query строятся на основе
ракурса категории #CUBE. Ракурсы вида query являются ракурсами потребления и не имеют
никакой категории данных. Более точно, для таких ракурсов необходимо использовать
аннотацию @Analytics.dataCategory = #NONE
Analytics.dataExtraction.enabled: true, false – Аннотация указывает: может ли ракурс быть
использован для экстракции (как источник данных для BW).
Некоторые другие аннотации будут описаны при построении демонстрационных примеров, так как
там можно более наглядно пояснить предназначение этих аннотаций. Общее число аннотаций,
доступных в синтаксисе CDS, очень велико. Полный их перечень может меняться в зависимости от
версии используемой ABAP-системы. Однако большинство аннотаций доступны во всех версиях.
Полный справочник доступных аннотаций на примере SAP Netweaver 7.5 SPS10 можно найти по
ссылке.
Чтобы создать CDS-ракурс, необходимо открыть ADT (в среде Eclipse или в SAP HANA Studio) и
соединиться с BackEnd-системой, раскрыв папку ABAP-проекта (см. Рис.54).
Затем необходимо выбрать пакет разработки, в котором будет создан ракурс. Это может быть пакет,
ранее внесённый в список избранных для удобства. Либо можно раскрыть полный список
доступных пакетов System Library.
Правой кнопкой вызвать контекстное меню выбранного пакета. Выбрать команду New->Other
ABAP Repository Object (см. Рис.60).
В открывшемся окне найти папку Core Data Services и выбрать в ней объект типа Data Definition
(см. Рис.61).
Рис.61. Выбор типа создаваемого объекта
Нажать кнопку «Next». В следующем окне можно выбрать пакет разработки, в котором будет
создан ракурс (по умолчанию там указан пакет, на котором мы выше вызывали контекстное меню),
указать техническое имя ракурса и его текстовое название (см. Рис.62).
Затем снова нажимаем «Next». В следующем окне предлагаются опции, позволяющие включить
создаваемый ракурс в ранее созданный транспортный запрос, либо создать новый запрос (см.
Рис.64).
В нашем примере все эти опции неактивны, так как работа идёт в пакете $TMP, объекты из
которого никуда не переносятся. Снова нажимаем «Next». Следующее окно предложит
использовать при создании ракурса один из предустановленных шаблонов (см. Рис.65).
Рис.65. Мастер создания DDL Source:выбор шаблонного кода
Вверху слева указан список шаблонов. При выборе любого шаблона вверху справа появится его
краткое описание. А в нижней части окна можно видеть тот код, который по умолчанию будет
вписан из шаблона в создаваемый DDL Source. Для начального примера достаточно использовать
простейший шаблон Define View и нажать «Finish». В результате будет создан ракурс с выбранным
техническим именем, откроется окно для редактирования кода этого ракурса и в это окно будут
вписаны строки из выбранного шаблона (см. Рис.66).
После оператора define view следует имя ZI_AIRLINE. По терминологии, описанной в разделе 1.1,
это техническое имя для CDS View, который будет создан при активации данного DDL Source. По
умолчанию это имя совпадает с именем самого DDL Source.
Вместо текста data_source_name необходимо указать имя таблицы, из которой ракурс будет
получать данные. Для этого можно воспользоваться такой удобной функцией редактора в ADT, как
Code Completion. Выделяем текст data_source_name и нажимаем сочетание клавиш CTRL+SPACE.
Система, анализируя код, сама «понимает», что в данном месте текста нужно указать имя таблицы.
И предлагает выбор из списка доступных таблиц (см. Рис.67).
Рис.67. Использование Code Completion для выбора исходной таблицы базового ракурса
Разумеется, весь список таблиц слишком велик. Чтобы сократить поиск, можно начать набор имени
нужной таблицы. При каждом изменении набранного текста список в Code Completion будет
обновляться, в нём останутся только те названия, которые содержат набранный нами набор
символов. Например, если набрать «scar», то останутся только две таблицы (см. Рис.68).
После того, как источник данных указан, можно обратить внимание на левую нижнюю часть
рабочего окна (под списком Project Explorer). Это так называемый Outline (см. Рис.70).
Данный инструмент анализирует код текущего DDL Source и в удобной графической форме
отображает все его элементы: источники данных, взаимосвязи с другими ракурсами и таблицами
(ассоциации) и прочие элементы. На данный момент отображается только одна таблица-источник.
Однако при работе со сложными ракурсами, где много кода, использование Outline удобно для того,
чтобы увидеть общий обзор устройства ракурса. А также для навигации по коду. Например, если
выполнить двойной щелчок по источнику scarr в окне Outline, то курсор автоматически
переместится в соответствующее место кода и выделит источник (см. Рис.71).
Ещё одна удобная опция, привычная для многих программистов – это нумерация строк в редакторе
кода. Если она выключена, то нужно в любом месте редактора вызвать контекстное меню правой
кнопкой мыши. И выбрать команду Preferences. В открывшемся окне включить следующую галку
«Show line numbers» (см. Рис.72).
Рис.72. Опция нумерации строк в редакторе DDL-кода
Рис.73. Фигурные скобки указывают место для списка полей в коде ракурса
Устанавливаем курсор в начало этой строки и вновь вызываем Code Completion нажатием
CTRL+SPACE. В этот раз система «видит», что мы описываем выборку из таблицы scarr, причём по
синтаксису в этом месте должен быть список полей. Именно его нам и предлагают (см. Рис.74).
Распространённый приём в SQL – использование псевдонимов (aliases) для выбираемых полей. При
определении CDS-ракурсов этот приём становится ещё более значимым. Как уже много раз
говорилось, одна из задач VDM – это представить данные пользователю в семантически
обогащённой и понятной форме. Псевдонимы очень полезны при решении такой задачи. Ведь
буквосочетание carrid ничего не говорит конечному пользователю. А название «Airline» выглядит
значительно яснее. Поэтому, добавив поле scarr.carrid, присваиваем ему псевдоним так же, как
обычно в SQL (см. Рис.75).
Затем через запятую включаем в выборку ещё два поля: валюту авиакомпании и её web-адрес (см.
Рис.76).
При активации в нижней части окна на закладке Problems появится предупреждение (см. Рис.78).
Теперь активация кода проходит без дополнительных сообщений. При описании следующих
примеров, как правило, про активацию завершённого кода специально упоминать не будем.
Созданный DDLSource теперь отображается в Project Explorer (см. Рис.80).
Через контекстное меню в окне редактора кода можно выбрать команду Open With->Data Preview
(см. Рис.81).
В то же время, можно проконтролировать как данный ракурс виден на стороне ABAP-словаря. Для
этого в транзакции SE11 или SE12 нужно ввести техническое имя ракурса, указанное в аннотации
@AbapCatalog.sqlViewName (см. Рис.83).
После нажатия кнопки «Display» система в строке состояния выдаст вполне ясное предупреждение
(см. Рис.84).
Имя DDL Source, код которого мы написали только что в ADT, указано в поле «DDL Source».
Технические имена полей приведены в соответствии с теми псевдонимами, какие записаны в DDL.
Но приведены к заглавным буквам, так как ABAP-словарь поддерживает только их. В то же время
элементы данных, типы данных и словесные описания полей в Short Description автоматически
подтянулись из соответствующих полей таблицы SCARR.
Здесь же есть удобная возможность увидеть SQL-код, автоматически созданный при генерации
данного ракурса. Для просмотра нужно перейти в меню Extras -> CREATE Statement (см. Рис.86).
При написании аннотаций также можно использовать Code Completion. Сначала при выборе
аннотации, как на Рис.89
Следующая аннотация, которую следует указать – это аналитическая категория данных. В нашем
случае описан справочник, поэтому нужно указать категорию #DIMENSION (см. Рис.91).
Однако, если теперь попытаться активировать DDL-код, то появится сообщение об ошибке (см.
Рис.92).
Сообщение справедливо указывает, что для нашего справочника необходимо указать ключевые
поля. Строго говоря, необходимо выполнить два требования:
1. Перед каждым полем, которое входит в состав первичного ключа, вписать слово key
2. Если полей первичного ключа несколько, то необходимо выделить одно из них: то, которое
наиболее полно выражает специфику описываемого справочника. Такое поле называется
representative key. Его необходимо указать в общих (не семантических) аннотациях ракурса
через следующий синтаксис: @ObjectModel.representativeKey: ‘<Name key field>’
Например, в стандартной модели данных справочник основных счетов всегда идёт со ссылкой на
план счетов. То есть первичный ключ в таком справочнике состоит из двух полей: счёт и план
счетов. Но как правило, план счетов – это константа в рамках компании. И настоящим
информативным полем, наиболее полно отражающим специфику справочника, является счёт. Он в
этом примере и является репрезентативным ключом.
Для ракурса ZI_AIRLINE ключевое поле только одно – код авиакомпании (см. Рис.93).
Эта аннотация будет описана ниже, после знакомства с понятиями «ассоциация» и «Path
Expression». На данном этапе в ней нет необходимости, эту строчку удаляем.
Затем добавляем две семантических аннотации к полям валюты и количества. Как уже говорилось,
семантические аннотации должны быть указаны внутри фигурных скобок (где идёт перечисление
полей) и должны быть вписаны непосредственно перед соответствующими полями. Результат
показан на Рис.96
Наличие семантических аннотаций отразится на пиктограммах этих полей в Outline (см. Рис.97).
Единственной особенностью, отличающей этот ракурс от ранее созданных, является тип ракурса
(Consumption), указанный аннотацией в строке 5.
DDL Source
SQL View
Ключевые слова (операторы). Должны быть набраны либо полностью в верхнем регистре,
либо полностью в нижнем, либо с заглавной буквы. Например: SELECT, select, Select.
Недопустимо использование смешанного регистра: SeLect, seleCT.
Имена. Не чувствительны к регистру. Максимальная длина – 30 символов.
Литералы. Числовые литералы – всегда в полной нотации, десятичный знак – точка.
Допустимо: 1 или 2.0 или 0.5 Недопустимо: .5 или 1,3. Символьные литералы набираются в
окружении апострофов: ‘LH’ или ‘0001’.
Комментарии. Двойной слэш // обозначает, что с этого места и до конца строки следует
комментарий. Если необходимо в явном виде обозначить начало и окончание комментария
(если он вставлен в середине строки или занимает несколько строк), то используются
символы /* и */.
Виталий Васильев
Прочитать позже
1218
Часть 1 Часть 2 Часть 3
Продолжение статьи.
5. АССОЦИАЦИИ, PATH EXPRESSIONS И ИХ ИСПОЛЬЗОВАНИЕ В ДЕМОНСТРАЦИОННОЙ
МОДЕЛИ
Идея создания ассоциаций в VDM заключалась в том, чтобы не просто отразить такие взаимосвязи,
но и сделать их частью модели данных, вписать их в метаданные CDS-ракурсов и тем самым
обеспечить их повторное использование. Ассоциация описывается в каком-то CDS-ракурсе один
раз, и там ей может быть присвоен псевдоним (alias). А все последующие сущности, использующие
этот ракурс, могут просто ссылаться на ассоциацию по присвоенному псевдониму. Как говорилось,
VDM строится иерархически, снизу вверх, в несколько уровней. Таким же образом «вырастают»
один из другого и CDS-ракурсы: базовые, композитные, ракурсы использования. В этом смысле
соотношения между ракурсами можно представить себе как древовидный граф. Тогда ассоциации –
это рёбра графа, так как они отражают взаимосвязи между вершинами. Приложение-потребитель
имеет дело с ракурсами использования, то есть с самой «вершиной» такого дерева. От вершины
древовидного графа можно спуститься, переходя от одной вершины к другой по связующим их
рёбрам, до самых нижних вершин. Таким же образом и повторное использование ассоциаций
позволяет получать информацию с самого нижнего уровня VDM без повторного явного
«прописывания» всех полей на каждом уровне модели. Такое повторное прописывание хорошо
знакомо тем, кто имеет опыт создания HANA Calculation Vews. Подчас такая работа становится
утомительной и рутинной. А изменение HANA-модели на нижнем уровне требует тщательного
контроля всех вышележащих уровней, так как целостность модели нарушается. Использование
ассоциаций в VDM значительно упрощает эти аспекты моделирования. И в этом существенное
отличие и преимущество ассоциаций по сравнению с обычными операциями join. Хотя и эти
последние тоже могут использоваться в DDL.
Итак, у нас есть ракурсы ZI_AIRLINE и ZI_AIRLINETEXT. Чтобы максимально упростить первый
пример ассоциации, оба ракурса используют только одну таблицу SCARR и имеют одинаковые
ключевые поля Airline, идущие из исходного поля carrid. Ракурс ZI_AIRLINE содержит основные
данные, поэтому при создании ассоциации он является источником (source entity). А ракурс
ZI_AIRLINETEXT присоединяется к источнику через ассоциацию, то есть является целью
ассоциации (target entity). Ассоциация описывается после названия источника данных и перед
открывающей фигурной скобкой с перечислением полей (см. Рис.103).
Здесь в квадратных скобках указана так называемая кардинальность ассоциации, то есть возможное
количество записей в target entity, соответствующих одной записи в source entity. Подробнее о
кардинальности сказано далее.
В качестве псевдонима (alias) для присоединяемой ассоциации указано имя _Text. Начинать
псевдоним ассоциации с нижнего подчёркивания – это рекомендуемая практика. Она позволяет
избежать путаницы (случайного совпадения) между названиями полей и названиями ассоциаций.
В строке 10 вместо имени source entity использовано служебное слово $projection. Это также
стандартный элемент DDL-синтаксиса. Его назначение описано далее.
Уже было отмечено, что ассоциации позволяют передавать данные по иерархии ракурсов VDM
«снизу вверх» без детального прописывания и перечисления отдельных полей. И данный пример
иллюстрирует эту возможность. Вместо всех полей, входящих в ракурс ZI_AIRLINETEXT, указан
только псевдоним соответствующей ассоциации. Теперь все ракурсы, которые будут использовать
ZI_AIRLINE, смогут также задействовать и поля из ZI_AIRLINETEXT, ссылаясь на них по
псевдониму ассоциации. В следующем разделе это будет более детально проиллюстрировано при
разборе понятия Path Expressions.
Также Outline позволяет определить список других ракурсов, использующих текущий ракурс.
Чтобы узнать это, нужно в Outline правой кнопкой мыши вызвать контекстное меню на
техническом имени ракурса. И выбрать команду «Get Where-used List». На примере
ZI_AIRLINETEXT это показывает Рис.107
В результате в нижней части окна SAP HANA Studio на закладке Search появится список ракурсов,
использующих текущий ракурс. И будет указано, каким именно способом используется текущий
ракурс. Например – является целью ассоциации, или является источником, из которого выбираются
поля в SELECT-лист. В нашем примере будет показано, что ракурс ZI_AIRLINE использует
ZI_AIRLINETEXT в качестве target entity для ассоциации (см. Рис.108).
Теперь перед нами стоит задача: получить в ракурсе VIEW3 значение поля element и вписать его
отдельно в SELECT-лист ракурса. Это можно сделать с помощью следующего
выражения:_Assoc3._Assoc2._Assoc1.element
Цепочка Path Expression может оканчиваться как отдельным полем (как в приведённом примере),
так и ассоциацией. При этом действуют следующие правила:
Если окончанием цепочки является поле, то это должно быть поле из target entity в
последней ассоциации цепочки.
Если окончанием цепочки является ассоциация, то её роль определяется тем местом в DDL-
источнике, где использована цепочка. При использовании цепочки в SELECT-листе
конечная ассоциация становится элементом этого листа. Она будет доступна для
использования в последующих CDS-ракурсах. Именно это происходит с ассоциацией _Text в
SELECT-листе ракурса ZI_AIRLINE.
Если окончанием цепочки является ассоциация, а при этом сама цепочка перечислена после
оператора FROM, то такая ассоциация считается источником (target или source).
DDL-синтаксис, определяющий ракурсы, использует OpenSQL. Поэтому в DDL Source,
помимо оператора FROM или SELECT-листа могут использоваться и традиционные SQL-
конструкции с операторами WHERE или HAVING. По самому смыслу таких операторов, в
них должны быть описаны только ограничения на отдельные поля. Поэтому использовать
Path Expression после WHERE или HAVING можно только при условии, что цепочка
заканчивается отдельным полем.
@AbapCatalog.sqlViewName: 'SALES_ORDER_VW'
define view sales_order as
select from snwd_so
association [0..1] to snwd_text_key as _note_header
on $projection.note_guid = _note_header.node_key
{ * }
Использование символа * в последней строке означает, что в SELECT-лист вошли все поля обеих
таблиц, включённых в ассоциацию.
Следующий ракурс присоединяет sales_order к таблице snwd_bpa:
@AbapCatalog.sqlViewName: 'BPA_VW'
define view business_partner as
select from snwd_bpa
association [0..*] to sales_order as _sales_order
on $projection.node_key = _sales_order.buyer_guid
{ * }
Наконец, третий ракурс использует эти две ассоциации, а также определяет ещё одну:
@AbapCatalog.sqlViewName: 'SALESO_INV_VW'
define view invoice as
select from
business_partner._sales_order[
lifecycle_status <> 'C' and lifecycle_status <> 'X']
as bpa_so
association [0..1] to snwd_so_inv_head as _invoice_header
on $projection.node_key = _invoice_header.so_guid
{ key bpa_so.node_key,
bpa_so.so_id,
bpa_so.note_guid,
bpa_so.lifecycle_status,
_invoice_header.dunning_level,
bpa_so._note_header }
where _invoice_header.dunning_level > '0'
Источником и целью могут быть таблица базы данных, определённая в ABAP-словаре, или
другой CDS-ракурс
В процессе активации CDS-ракурса, использующего path expression, соответствующие
ассоциации компилируется в операцию join (присоединение) между источником и целью.
При этом ON-condition из ассоциации переходит в ON-condition присоединения. Вид
присоединения зависит от того в каком месте DDL-источника упомянут path expression: если
после оператора FROM, то будет inner join; в остальных случаях – left outer join (в котором,
разумеется, source entity расположен слева). Вид присоединения может быть переопределён,
если указать его явно. Например, если в SELECT-листе перечисляется поле assocfield из
ассоциации _assoc, то синтаксис _assoc.assocfield приведёт к генерации left outer join.
Переопределить это в Inner join можно синтаксисом _assoc[inner].assocfield
Поля из source entity, включённые в ON-condition, необходимо упоминать с использованием
в качестве префикса служебного слова $projection, а не с собственным именем source entity.
Необходимость использования специального служебного слова вызвана тем, что
определение ассоциации происходит до перечисления в SELECT-листе всех полей,
выбираемых в состав текущего CDS-ракурса. Но при этом определение ассоциации
использует поля SELECT-листа. Такое «опережающее» указание полей оформляется через
ссылку на SELECT-лист с помощью слова $projection.
Все поля из source entity, включённые в ON-condition, необходимо в явном виде перечислить
в SELECT-листе. Это обеспечивает возможность построения упомянутой выше операции
join в момент компиляции DDL-кода.
Поля из target entity, включённые в ON-condition, необходимо упомянуть с именем
ассоциации в качестве префикса.
Использование псевдонима (alias) для присоединяемой ассоциации не является
обязательным, хотя и настоятельно рекомендуется для удобства дальнейшего понимания
кода и использования ассоциации в path expression. Если псевдоним не задан, то система по
умолчанию использует вместо него имя target entity.
На словах указанные правила звучат сложно иабстрактно, поэтому проще будет проиллюстрировать
их примерами. Возьмем описанный выше ракурс ZI_AIRLINE и создадим его копию с техническим
именем ZI_ASSOC_TEST. Код нового ракурса модифицируем таким образом, чтобы в нём дважды
вызывалась одна и та же ассоциация _Text с одинаковым фильтром по коду авиакомпании (см.
Рис.109).
Рис.109. DDL Source для тестирования аннотации compareFilter
Здесь ассоциация использована в строках 17 и 18, причём оба раза установлен фильтр на код
авиакомпании ‘AA’. Также в строке 17 для поля _Text.Airline создан псевдоним, так как поле Airline
уже есть в строке 12.
Очевидно, что полученный код лучше, чем первый вариант без использования аннотации. Второй
вариант кода не только легче читать и понимать, но он также и более оптимален при исполнении.
Таким образом, при использовании ассоциаций и path expressions рекомендуется всегда указывать
аннотацию @AbapCatalog.compiler.compareFilter: true
Как уже говорилось, основой нового ракурса становится таблица SPFLI (см. Рис.114).
В фигурных скобках перечислим поля этой таблицы, которые войдут в SELECT-лист. Ключевые
поля – те же два, что и в исходной таблице. И сразу укажем семантически понятные названия этих
полей вместо технических имён (см. Рис.115).
В SELECT-листе есть такие поля как CARRID (код авиакомпании), AIRPFROM (аэропорт вылета),
AIRPTO (аэропорт назначения). Ранее мы уже создали базовые ракурсы ZI_AIRLINE (справочник
авиакомпаний) и ZI_AIRPORT (справочник аэропортов). Поэтому здесь у нас появляется
возможность семантически обогатить данные таблицы SPFLI с помощью дополнительных сведений
из этих справочников. При этом справочник ZI_AIRPORT потребуется дважды: как для аэропорта
вылета, так и для аэропорта назначения. Все эти взаимосвязи определяются с помощью ассоциаций
между соответствующими полями SELECT-листа и репрезентативными ключами справочников
(см. Рис.116).
Теперь в конец SELECT-листа нужно добавить перечисление трёх созданных ассоциаций, чтобы
они в дальнейшем могли быть использованы в path expressions (см. Рис.118).
В описании таблицы SPFLI можно видеть, что поле DISTANCE – это числовая величина, для
которой требуется обязательно указывать единицу измерения. Причём в данном случае единица
измерения содержится в той же таблице, в поле DISTID (см. Рис.119).
Необходимо ту же самую информацию указать и в коде ракурса. Для этого используются уже
описанные ранее семантические аннотации (см. Рис.120).
Рис.120. Связь между числовым полем таблицы и единицей измерения в DDL Source
Если теперь активировать созданный ракурс, то около четвёртой строки появится пиктограмма
информационного сообщения (см. Рис.121).
Увидеть текст сообщения можно, если навести курсор мыши на пиктограмму. Либо можно
прочитать этот текст в нижней части окна SAP HANA Studio, на закладке Problems (см. Рис.122).
На самом деле это тот же момент, который уже обсуждался при выборе поля, являющегося
репрезентативным ключом. Таким полем является FlightConnection. А второе ключевое поле
ракурса – это как раз Airline. Поскольку оно не является репрезентативным, то рекомендуется его
детализацию представить в другом ракурсе через ассоциацию. И такая ассоциация _Airline у нас
уже есть. Поэтому нужно просто «сказать системе», что именно _Airline и детализирует данные по
ключевому полю Airline. Такое указание делается с помощью семантической аннотации
@ObjectModel.foreignKey.association (см. Рис.123).
Таким же образом можно дать и уточнения для имеющихся ассоциаций аэропортов вылета и
прибытия.
Виталий Васильев
Прочитать позже
707
Часть 1 Часть 2 Часть 3 Часть 4
Заключение.
6. ДЕМОНСТРАЦИОННАЯ МОДЕЛЬ: БАЗОВЫЙ И КОМПОЗИТНЫЙ КУБЫ
7.2 Указание строк и столбцов отчёта. Создание фильтров для селекционного экрана. Создание
расчётного показателя
6. ДЕМОНСТРАЦИОННАЯ МОДЕЛЬ:
БАЗОВЫЙ И КОМПОЗИТНЫЙ КУБЫ
6.1. Базовый куб
Продолжим построение демонстрационного примера. Теперь нам требуется создать ракурс
ZI_FLIGHT, использующий не основные, а транзакционные данные о конкретных авиарейсах, их
датах, количествах и суммах произведённых бронирований. Эти данные содержатся в таблице
SFLIGHT. Данные требуется обогатить информацией из основных данных: авиакомпании, типы
воздушных судов, авиарейсы. Ракурс, в котором таблица транзакционных данных обогащается
присоединением ряда справочников должен относиться уже к категории данных #CUBE. И это
несмотря на то, что в качестве таблицы фактов используется таблица БД, а не другой ракурс
категории #FACT. Кроме того, новый ракурс уже не будет использован как справочник в
последующих ракурсах нашей модели. Итак, категория данных для нового ракурса – это #CUBE.
Тем не менее, ракурс основан на таблице БД, поэтому он должен быть определён как базовый.
Учитывая всё сказанное, создадим новый ракурс, указав в его заголовке набор аннотаций как на
Рис.125.
Рис.125. Аннотации в заголовке ракурса ZI_FLIGHT
Указываем, что источником данных для ракурса является таблица SFLIGHT (см. Рис.126).
Добавляем поля из этой таблицы в SELECT-лист. Сразу присваиваем этим полям семантически
удобные имена. И указываем ключевые поля, соответствующие ключу таблицы SFLIGHT (см.
Рис.127).
Отметим, что ассоциация с ZI_FLIGHTCONNECTION идёт сразу по двум полям, так как в этом
ракурсе два ключевых поля.
Не забываем сразу же включить эти ассоциации в SELECT-лист (см. Рис.129).
Всё что остаётся теперь – это добавить семантические аннотации к полям SELECT-листа. Все эти
аннотации уже знакомы и разбирались ранее: это указание на способ агрегации и на единицы
измерения числовых полей, на поля, являющиеся единицами измерения. Поля, соответствующие
денежным суммам, измеряются в валюте суммы. А поля, подсчитывающие количество мест в
самолёте, не имеют никаких единиц измерения. Также мы снова используем аннотации
@ObjectModel.foreignKey.association для «прикрепления» основных данных как средств поиска к
полям SELECT-листа. Итоговый код ракурса ZI_FLIGHT показан на Рис.130.
Рис.130. Код ракурса ZI_FLIGHT
Как уже говорилось, уровень композитных ракурсовнужен для адаптации базовых ракурсов под
специфические области данных, для организации взаимного сочетания базовых ракурсов. Поэтому
слой композитных ракурсов образует промежуток между базовыми ракурсами в основании VDM и
ракурсами использования «на вершине» VDM. Базовые ракурсы строятся таким образом, чтобы
исключить или хотя бы минимизировать избыточность данных. Ракурсы использования, напротив,
должны представить максимально широкий набор данных, так как этот набор будет источником
информации для приложений-потребителей. Таким образом, прослойка из композитных ракурсов
должна осуществить это преобразование и составить из нескольких базовых ракурсов максимально
расширенный набор данных.
В данном ракурсе не потребуется определять какие-либо ассоциации, так как все необходимые
ассоциации уже были заданы в ракурсах базового уровня. И поскольку они были опубликованы там
в соответствующих SELECT-листах, то могут быть повторно использованы в новом ракурсе
благодаря функциональности path expressions.
В открывшемся списке выбрать «Insert all elements». Таким образом, в SELECT-лист будут
автоматически добавлены все поля из ракурса ZI_FLIGHT. Причём уже с семантически понятными
именами, которые были в нём определены. Более того, будут автоматически опубликованы «по
наследству» и все ассоциации, ранее опубликованные в ZI_FLIGHT (см. Рис.134).
Добавим также в список доступных аналитик поля AirportFrom и AirportTo. Этих полей нет в
ZI_FLIGHT. Но они есть в ассоциации _FlightConnection, опубликованной в ZI_FLIGHT. Поэтому
мы добавим эти поля, воспользовавшись возможностями path expressions. Под новые поля добавим
две пустых строки в SELECT-лист после поля FlightDate. Вызовем список Code Completion в первой
добавленной строке и начнём набор символов _Fl… Появится имя нужной ассоциации (см.
Рис.136).
Выберем это имя. Затем нужно набрать точку, после которой снова вызвать Code Completion.
Теперь уже появится список полей из SELECT-листа ассоциации _FlightConnection. В нём
выбираем нужное поле (см. Рис.137).
Это то условие синтаксиса CDS, о котором уже говорилось: все ключевые поля должны быть
перечислены подряд и идти в начале SELECT-листа. А наши два новых поля разрывают
последовательность ранее указанных ключевых полей. Но поскольку новые поля добавлены тоже
как будущие аналитики в отчётах, то и они должны быть объявлены ключевыми. Что сразу
устраняет ошибку (см. Рис.139).
При этом никакого нового определения ассоциаций не требуется, все определения наследуются из
ранее сделанных.
На этом подготовка кода для ракурса ZI_FLIGHTBYAIRPORT завершена, его можно сохранить и
активировать.
После этого выполнение транзакции покажет описание ракурса, которое может быть полезно для
разработчика аналитических отчётов. Например, для полей ракурса с помощью привычных для SAP
BW пиктограмм описывается возможность использования соответствующих справочников с
атрибутами, текстами, иерархиями (см. Рис.146).
Нужно отметить, что к именам аналитических объектов здесь добавлен префикс 2C. Это
стандартный префикс, предусмотренный в SAP при работе с CDS-аналитикой.
Развернув это описание детальнее, разработчик может уяснить для себя используемые типы
данных, названия полей и так далее. На примере поля AircraftType это показывает Рис.147.
Рис.147. Подробный просмотр свойств поля CDS-ракурса в транзакции RSRTS_ODP_DIS
Здесь пиктограммой показано, что данная аналитика содержит основные данные. Также указано,
какой CDS-ракурс реализует эти основные данные: это ракурс, у которого имя SQL View -
ZIAIRCRAFTT. Указано краткое описание этого ракурса, чтобы разработчик мог понимать, какие
атрибуты справочника AircraftType есть в его распоряжении.
Поэтом, например, в столбцах Airfare и Booking Total вместо сумм стоят символы *. Это
объясняется тем, что в исходных данных есть суммы в различных валютах. И просто так
складывать такие суммы будет, разумеется, некорректно. Чтобы увидеть эти подробности,
необходимо детализировать данные по валютам. Сделать это возможно, например, нажав на
пиктограмму «детализировать по строкам» рядом с аналитикой валют (см. Рис.149).
7. ДЕМОНСТРАЦИОННАЯ МОДЕЛЬ:
РАКУРС ИСПОЛЬЗОВАНИЯ
7.1 Создание аналитического ракурса
Продолжим построение демонстрационного примера. Ранее с помощью ассоциаций был определён
ракурс ZI_FLIGHTBYAIRPORT. Это композитный ракурс, имеющий категорию данных #CUBE. На
основе этого ракурса теперь создадим аналитический отчёт (Query). Как указывалось ранее,
аналитический отчёт – это ракурс специального вида. Во-первых, он должен быть определён как
ракурс использования. Во-вторых, для этого ракурса не указывается никакая категория данных. В-
третьих, в заголовке ракурса требуется указать аннотацию @Analytics.query: true. Техническим
именем ракурса будет ZC_FLIGHTBYAIRPORTQUERY.
Также предусмотрим возможность публикации ракурса как OData-сервиса. Для этого используется
аннотация @OData.publish: true. При наличии OData-сервиса можно использовать данные CDS-
ракурса в работе Fiori-приложений. В следующих частях данной публикации будут рассмотрены
примеры таких приложений.
Учитывая сказанное, в заголовке ракурса нужно использовать следующие аннотации (см. Рис.151).
Но в данном случае мы формируем ракурс использования, то есть «вершину» нашей VDM. Поэтому
здесь перечисление ассоциаций нужно удалить: они не нужны, так как не будет последующих
вышестоящих ракурсов. Также можно исключить те поля, которые не потребуются нам в
создаваемом отчёте. Например – CurrentBookingsTotalAmount.
Также нужно учитывать, что для числовых полей способ агрегации (@DefaultAggregation) был
определён в предыдущих ракурсах. Поэтому здесь повторного определения не требуется.
Следующий важный новый пример аннотаций – это фильтры. Если использовать такие аннотации,
то при запуске аналитического ракурса пользователь сначала увидит селекционный экран. На этом
экране пользователь сможет указать критерии фильтрации при выборе данных в отчёт. Несколько
примеров аннотаций для фильтров:
В нашем примере укажем, что на селекционном экране должны быть представлены фильтры по
аэропортам отправления и прибытия. Причём в качестве каждого из фильтров должно быть
выбрано ровно одно значение. И пользователь обязан сделать выбор по аэропорту отправления.
Отметим, что три приведённых примера аннотаций начинаются одинаково со слов
@Consumption.filter. В этом случае синтаксис CDS позволяет перечислить такие однотипные
аннотации не через несколько отдельных строк, а в одной строке. Перечисление однотипных
аннотаций обрамляется фигурными скобками. Пример такого синтаксиса – на Рис.154.
Ещё один пример новых аннотаций – это создание вычисляемых полей (формул). Отметим, что
такие поля можно определить и на более низких уровнях иерархии VDM, например – в
композитных ракурсах. В нашем SELECT-листе есть поля MaximumNumberOfSeats (максимальная
вместимость самолёта) и NumberOfOccupiedSeats (количество мест, которые уже забронированы).
Разность двух этих чисел даст количество мест, свободных для бронирования. Вычислим эту
разность и добавим её в SELECT-лист. Новое поле назовём NumberOfAvailableSeats. Важной
особенностью такого определения является указание способа агрегации. Следует использовать
аннотацию @DefaultAggregation: #FORMULA. Остальные аннотации уже нам знакомы, в целом
определение нового поля показано на Рис.155.
При использовании формул важно понимать: в какой момент выполняется этот расчёт. Мы создали
формулу на финальном этапе, в последнем ракурсе нашей VDM. Поэтому расчёт формулы будет
выполняться не отдельно для каждой строчки исходных данных, а уже по агрегированным данным,
пришедшим из композитного ракурса ZI_FLIGHTBYAIRPORT. В нашем примере это не имеет
существенного значения: неважно, будем ли мы считать сначала разность по каждой строчке, а
потом агрегируем все эти разности; либо сначала просуммируем для всех строчек значения
MaximumNumberOfSeats и значения NumberOfOccupiedSeats, а потом вычтем одну сумму из
другой. Но в других случаях способ расчёта формул может иметь существенное значение для
получения корректного результата. Примером могут служить формулы, рассчитывающие средние
значения. Там некорректно рассчитывать среднее отдельно по каждой строчке, а потом
суммировать. Корректным будет как раз расчёт среднего уже по агрегированным значениям.
Обратим внимание, что если в показанной ситуации нажать клавишу ENTER, то к техническому
имени запроса подтянется ещё и имя источника данных (в терминологии BW это инфо-провайдер).
Для нашего ракурса источником является ZI_FLIGHTBYAIRPORT. Он имеет SQL-имя ZIFLIGHTA.
Результат показан на Рис.158.
После запуска транзакции появится селекционный экран отчёта. Его вид определён аннотациями в
нашем ракурсе (см. Рис.159).
Перевод картинки:
Часть 6. Продолжение.
Часть 1 Часть 2 Часть 3 Часть 4 Часть 5
Оглавление
1. СОЗДАНИЕ ПЛИТКИ SAP FIORI ИЗ CDS-РАКУРСА
Браузер. Обычный веб-клиент, который может быть использован как на персональном компьютере
пользователя, так и на мобильных устройствах. Браузер визуализирует для пользователя интерфейс
Fiori-приложений. Для доступа ко всем приложениям пользователь использует единую
централизованную точку входа, единый URL. Эта точка называется SAP Fiori Launchpad. Он
содержит ссылки на все приложения, доступные пользователю в рамках присвоенных ему
полномочий. Визуально эти ссылки оформлены так, что напоминают ряды плиток. Поэтому они и
получили название «плитки» (Tiles).
SAP Web Dispatcher. Это прокси-сервер специального типа, так называемый Reverse Proxy. Задача
данного сервера – перенаправлять запросы, поступающие через веб-браузер, к тем серверам,
которые предназначены для обработки этих запросов. Но при этом конечный пользователь работает
с единым интерфейсом, с одним URL. То есть пользователь «не замечает» того, что обработка его
запросов поручается различным серверам системы. Необходимость использования Reverse Proxy
объясняется двумя основными соображениями. Во-первых, между Reverse Proxy и остальными
элементами архитектуры можно установит файрволлы, что существенно повысит уровень
безопасности. Во-вторых, Reverse Proxy обеспечивает различную обработку веб-запросов в
зависимости от типа Fiori-приложения. Существуют следующие типы Fiori-приложений:
Транзакционные. Это аналоги обычных транзакций в SAP GUI. Они предназначены для
создания, изменения отдельных проводок и документов, для их согласования и т.п.
Операционные отчёты (Fact Sheet). Это приложения, позволяющие пользователю получить
полный обзор текущей контекстной информации по какому-то заданному объекту
Аналитические. Приложения данного типа предоставляют доступ к большому объему
обобщённых, агрегированных бизнес-данных, позволяя пользователю контролировать и
оценивать как стратегические, так и операционные KPI.
В зависимости от типа Fiori-приложения, Reverse Proxy направляет запросы из браузера к тому или
иному из серверов, изображённых на Рис.1. Подготовка данных для аналитических приложений
происходит на уровне сервера SAP HANA. Для операционных отчётов запросы направляются на
сервер Back-End (то есть непосредственно в ABAP-систему S/4HANA). Для всех трёх типов Fiori-
приложений требуется «завернуть» данные в пользовательский интерфейс. Для этого Reverse Proxy
направляет запрос к серверу Front-End.
-End Server. Работа этой системы обеспечивается сервером приложений ABAP на основе
платформы SAP Netweaver. На сервере Front-End хранится и выполняется вся специфическая
логика, обеспечивающая работу интерфейса приложений SAP Fiori. При использовании
сервера Front-End в ландшафте S/4HANA, на нём также инсталлируются дополнительные
компоненты SAP Fiori for SAP S/4HANA. Они содержат интерфейсную логику тех
приложений, которые включены в стандартную поставку системы S/4HANA. В состав
сервера входит также компонент SAP Gateway. Он обеспечивает механизм доступа к данным
и приложениям бизнес-логики в системе Back-End. Данный механизм носит название OData
Services.
-End Server. Эта система является центральным компонентом ландшафта S/4HANA. На
данном сервере хранится и выполняется вся бизнес-логика, обеспечивающая стандартную
функциональность в S/4HANA. В частности, это приложения S/4HANA Embedded Analytics,
основанные на CDS-ракурсах стандартной VDM, либо на пользовательских ракурсах.
Database. База данных, обеспечивающая хранение информации и функционирование сервера
Front-End. Это может быть как in-memory база SAP HANA, так и базы с традиционным
дисковым хранением данных: SAP MaxDB или SAP/Sybase ASE.
HANA. Платформа, которая обеспечивает как СУБД для инсталляции сервера Back-End, так
и обработку запросов от аналитических приложений.
https://support.sap.com/content/dam/SAAP/Sol_Pack/Library/Configuration/MAA_S4HANA17
09_BB_ConfigGuide_EN_XX.docx
Для функционирования S/4HANA Embedded Analytics требуется специальным образом
сконфигурировать продуктивный мандант в системе Back-End. Инструкции по
конфигурации даны в SAP-ноте 2289865. Здесь эти вопросы не рассматриваются, далее
предполагается, что все настройки уже проведены администраторами SAP Basis.
Запоминать указанный веб-адрес или сохранять его в закладках браузера необязательно. Вызвать
SAP Fiori Launchpad можно напрямую из SAP GUI, набрав код транзакции /n/UI2/FLP.
При входе по указанной ссылке пользователю потребуется указать логин и пароль, так же как при
обычном входе в систему через SAP GUI (см. Рис.3).
Рис.3. Экран входа в SAP Fiori Launchpad
Нужно подчеркнуть, что Fiori Launchpad Designer не является инструментом разработки Fiori-
приложений. Для этого используется отдельный самостоятельный инструмент SAP Web IDE.
https://support.sap.com/content/dam/SAAP/Sol_Pack/Library/Configuration/MAG_S4HANA1709_BB_C
onfigGuide_EN_XX.docx (см. разделы 3.2-3.4). Далее предполагается, что в целях выполнения
демонстрационных примеров созданы каталог Z_RDS_BC, группа Z_RDS_BCG и роль
Z_RDS_BCR, описанные в этой документации.
Для того, чтобы данные из ракурса использования стали доступны «внешним» потребителям (в том
числе и системе Front-End) через OData Service, нужно всего лишь добавить в DDL-код аннотацию
@OData.publish: true. После повторной активации ракурса рядом с аннотацией появится
пиктограмма с предупреждением. Чтобы увидеть подробности, достаточно подвести курсор мыши к
пиктограмме. Тот же текст предупреждения можно увидеть и ниже, на закладке Problems (см.
Рис.4).
Итак, нужно через SAP GUI войти в систему Front-End и запустить транзакцию
/IWFND/MAINT_SERVICE. Поскольку код транзакции начинается с символа /, то SAP GUI не
может его корректно интерпретировать без дополнительных указаний. Чтобы транзакция
запустилась, необходимо перед кодом добавить стандартную команду /o или /n (см. Рис.6).
Для активации нового сервиса нужно нажать кнопку . В открывшемся окне сначала
требуется заполнить поле System Alias. Это поле – псевдоним той ABAP-системы, в которой
выполняется OData-сервис. В нашем случае необходимо выбрать Alias, указывающий на систему
Back-End. Этот Alias уже доступен для выбора из списка, если проведены настройки, упомянутые в
завершении раздела «Архитектура SAP Fiori». Как правило, имя такого псевдонима составляется из
SID системы (её трёхсимвольного имени), букв CLNT и трёх цифр с номером рабочего манданта.
Например: SIDCLNT001 (см. Рис.8).
Нужно отметить, что S/4HANA может быть развёрнута в конфигурации Embedded Deployment,
когда компоненты Back-End и Front-End установлены вместе на одной системе. Тогда, разумеется, и
OData-сервис выполняется в той же системе. В таком случае следует выбрать для Alias значение
LOCAL.
Затем нужно заполнить поле Technical Service Name. Выше уже говорилось о том, как получается
его значение (см. Рис.9).
Единственное поле, которое требуется заполнить – это Package Assignment. Поскольку в нашем
случае речь идёт о демо-примере, то достаточно нажать , чтобы был указан локальный
пакет $TMP. После подтверждения введённой информации появится информационное сообщение о
том, что сервис успешно активирован (см. Рис.12).
Здесь можно проверить корректность работы сервиса. Для этого необходимо выделить его
техническое имя, как это показано на Рис.13. (Если выделить не Technical Service Name, а всю
строчку, то корректного результата получить не удастся). При этом в окне ICF Nodes должен
появиться узел с именем ODATA и зелёный «светофор». А в окне System Aliases появляется
псевдоним системы Back-End. Затем нужно нажать кнопку . Появится окно с
тестовой командой для проверки сервиса (см. Рис.14).
Здесь нужно нажать . Если всё настроено правильно, должен появиться отклик «ОК»,
статус отклика – 200, а также xml-код с информацией о ракурсе (см. Рис.15).
Рис.15. Результат успешного тестирования OData-сервиса
Аналогичную процедуру следует проделать и в системе Back-End. Только в качестве System Alias
указывать уже значение LOCAL.
https://support.sap.com/content/dam/SAAP/Sol_Pack/Library/Configuration/MAA_S4HANA1709_BB_C
onfigGuide_EN_XX.docx
Необходимо особо подчеркнуть, что для успешной работы доверенных RFC-соединений между
системами Front-End и Back-End необходимо, чтобы пользователь с именем FIORI_ADM был
создан в обеих системах. То же самое относится и к любым пользователям SAP Fiori.
SAP_BR_PURCHASING_MANAGER
SAP_BR_ANALYTICS_SPECIALIST
SAP_BR_EMPLOYEE
Z_RDS_BCR
Z_RT_ADMIN
ZSAP_UI2_ADMIN
Здесь роли SAP_BR_*** - это стандартные бизнес-роли SAP. Присвоение этих ролей позволяет
пользователю видеть в Fiori Launchpad соответствующие группы плиток. Например, бизнес-роль
аналитика делает доступными такие приложения, как KPI Modeler и Query Browser.
Роли Z*** должны быть созданы в соответствии с теми указаниями, которые даны в упомянутой
документации SAP. Эти роли дают необходимые полномочия по созданию/изменению плиток.
Такую роль следует создать как в системе Front-End, так и в Back-End. И в обеих системах
присвоить роль пользователю FIORI_ADM. Далее предполагается, что все действия будет
выполнять пользователь FIORI_ADM.
С указанными полномочиями этот пользователь при запуске Fiori Launchpad будет в верхней части
страницы видеть список групп, доступных ему (см. Рис.18).
Рис.18. Выбор групп плиток, доступных пользователю по его полномочиям во Fiori Launchpad
Нажатие на название группы вызовет прокрутку страницы и пользователь увидит плитки этой
группы. Пример выбора группы KPI Design см. на Рис.19.
Наконец, в правом конце строки с заголовками групп есть выпадающий список всех доступных
групп. С его помощью также возможна быстрая навигация между группами плиток (см. Рис.20).
Рис.20. Быстрая навигация по группам плиток
В частности, здесь кроме групп из стандартной поставки SAP Fiori, доступна и созданная вручную
группа Z_RDS_BCG. Но в ней пока ещё нет ни одной плитки (см. Рис.21).
Запускаем Fiori Launchpad Designer (ссылка для запуска указана выше). Первое действие – это
создать новую плитку. Создать её можно только в существующем каталоге. Поэтому в верхнем
левом углу следует выбрать «Catalogs», как показано на Рис. 22.
Рис.22. Список каталогов при работе в Fiori Launchpad Designer
В зависимости от полномочий пользователя, список доступных каталогов может быть очень велик.
Поэтому его удобно ограничить. Нам нужен ранее созданный каталог Z_RDS_BC. Достаточно в
поле поиска ввести начало этого имени и нажать на кнопку . Будут выбраны все каталоги по
частичному совпадению имён (см. Рис. 23).
На Рис. 23 имя каталога выделено. При этом справа видно, что в каталоге пока ещё нет ни одной
плитки. Для создания новых плиток используется кнопка . Если её нажать, открывается выбор
типов создаваемой плитки (см. Рис. 24).
Рис.24. Возможные типы плиток, создаваемых в Fiori Launchpad Designer
Вариант «App Launcher - Dynamic» создаёт плитку, которая отражает некое число, значение KPI.
Это число формируется в приложении, выполняемом системой Back-End. Число динамически
изменяется в зависимости от изменения тех данных, которые использует это приложение.
Вариант «App Launcher - Static» создаёт плитку со статической надписью. Но этот вариант, как и
предыдущий, при нажатии на плитку приводит к запуску Fiori-приложения, привязанного к этой
плитке.
Для нашего примера используем вариант «App Launcher - Dynamic». Откроется окно с параметрами
настройки плитки (см. Рис. 25).
Конечно, в нашем простом примере данное имя и так известно. Но в более сложных разработках его
можно узнать описанным здесь способом. Вообще говоря, это имя может содержать не только
заглавные, но и строчные буквы. Поэтому надёжнее всего скопировать это имя из xml, а не
набирать его вручную. И затем вставить скопированное имя в конец тестового URL (см. Рис. 27).
На Рис. 28 можно видеть описание ракурса а также содержание первой записи – три поля,
описывающие авиакомпанию American Airlines.
Итак, ракурс содержит 18 записей. А то, что получилось в поле тестового URL, как раз и нужно
добавить для плитки в Fiori Launchpad Designer. Копируется вся служебная строка, начиная с
первого символа / (см. Рис. 30).
Рис.30. Указание Service URL для данных, получаемых в плитке
В поле «Icon» можно из списка выбрать любую пиктограмму. Она будет отображаться на плитке.
Например, можно найти и выбрать пиктограмму с изображением самолёта. Затем требуется
отключить галку навигации по семантическому объекту (см. Рис. 31).
Данная настройка в нашем примере не требуется, так как создаваемая плитка не будет
инициировать работу какого-либо Fiori-приложения.
На этом настройки плитки завершены. Остаётся нажать «Save» в нижнем правом углу окна
настроек. Теперь Fiori Launchpad Designer отобразит новую плитку, как показано на Рис. 32.
Можно заметить, что на Рис. 32 слева, рядом с именем каталога появилась цифра 1. Она отражает
число плиток в данном каталоге.
Теперь созданную плитку необходимо включить в группу Z_RDS_BCG. Тогда плитку смогут
видеть пользователи, имеющие полномочия на эту группу. Для добавления в группу необходимо в
окне Fiori Launchpad Designer нажать «Groups». И так же как с каталогами, можно воспользоваться
полем фильтрации, чтобы быстро найти нужную группу (см. Рис. 33).
Здесь добавить предварительно созданную плитку можно также кнопкой . Появится окно, в
верхней части которого есть список всех доступных каталогов (см. Рис. 34).
Из списка выбираем каталог Z_RDS_BC. Можно, например, нажать кнопку в поле выбора
каталога. Откроется полный список доступных каталогов. В нём можно снова воспользоваться
поиском по частичному совпадению имени (см. Рис. 35).
Рис.35.Поиск каталога, из которого плитка будет добавлена к группе
В нашем примере плитка всего одна. И под ней есть серый ярлычок со знаком +. Это значит, что
плитку можно добавить в текущую группу. Нажимаем на ярлычок. Его цвет меняется на зелёный, а
символ + заменяется на «галку». Это значит, что плитка успешно добавлена в группу. Возвращаясь
к просмотру группы, мы также видим, что плитка добавлена (см. Рис. 37).
Часть 7. Продолжение.
Часть 1 Часть 2 Часть 3 Часть 4 Часть 5 Часть 6
Оглавление
2. СОЗДАНИЕ ПРИЛОЖЕНИЯ FIORI В СРЕДЕ WEB IDE
Как видно из этой схемы, SAP Web IDE соединяется с системой Front-End и использует в своей
работе предварительно активированные OData-сервисы, поставляющие данные из CDS-ракурсов.
Затем готовые приложения публикуются в репозитарии системы Front-End. Из репозитария
приложения могут быть размещены на SAP Fiori Launchpad для конечных пользователей. На Рис.
40 изображена обобщённая последовательность действий и «распределение обязанностей» при
разработке SAPUI5-приложений.
Рис.40. Этапы создания Fiori-приложения, соответствующие им роли и инструменты
Использование среды разработки SAP Web IDE возможно в двух режимах: Trial или Production.
Режим Trial предполагает, что программа инсталлируется на компьютере пользователя и
используется локально для работ по разработке и тестированию, которые выполняет один
пользователь. Режим Production нужен для разработок, которые будут использоваться в
продуктивных системах. Для этого режима требуется подключение к SAP Cloud Platform, доступное
на условиях платной подписки.
После установки SAP Web IDE и подготовки файла с параметрами подключения, необходимо из
папки C:\SAPWebIDE\eclipse запустить файл orion.exe. В результате появится DOS-окно, которое
через несколько секунд заполнится несколькими строчками технических сообщений (см. Рис. 41).
При первом подключении необходимо нажать «Create a new account» (см. Рис. 43). В появившемся
окне указать произвольно выбранные логин и пароль. Имеет смысл сделать их такими же, как
логин/пароль вашего пользователя в Front-End-системе. Также следует указать свой e-mail, после
чего нажать «Sign up».
В дальнейшем можно будет сразу входить в рабочую среду SAP WebIDE по этому логину/паролю,
нажимая на стартовой странице кнопку .
Откроется окно мастера, с помощью которого за несколько последовательных шагов можно ввести
все необходимые параметры и создать приложение по одному из стандартных шаблонов (см. Рис.
45).
Так как наша задача – обеспечить табличный просмотр данных из CDS-ракурса, то выбор варианта
List Report Application является очевидным. Важно обратить внимание на значение в поле SAPUI5
Version. По соображениям совместимости это значение не должно быть больше, чем версия
SAPUI5, используемая в системе Front-End. Узнать эту версию можно, открыв в браузере ссылку
<protocol>://<server>:<port>/sap/public/bc/ui5_ui5/ Как видно из Рис. 46, многие библиотеки в
SAPUI5 могут быть доступны в нескольких версиях. Достаточно ориентироваться на наименьшую
версию. И если необходимо, выбрать из списка в поле SAPUI5 Version номер версии пониже.
Рис.46. Версии UI5, доступные в системе Front-End
После этого нажать Next и перейти к следующему шагу мастера (см. Рис. 47).
В поле Project Name нужно ввести техническое имя будущего приложения. В поле Title – словесное
описание. Для нашего примера укажем «AirlineList» и «Airline List» соответственно. Снова
нажимаем Next.
В этом списке будут видны системы, для которых правильно подготовлены и размещены файлы с
параметрами соединения (см. предыдущий раздел). В список выводятся текстовые описания систем,
которые указаны в разделе Description этих файлов. Как только будет выбрана конкретная система,
появится всплывающее окно (см. Рис. 50).
Рис.50. Ввод логина и пароля для подключения приложений SAPUI5 к системе Front-End
Поскольку сервисов может быть очень много, то удобно воспользоваться контекстным поиском,
вводя в поле Services часть названия нужного сервиса. Для нашего примера это сервис
ZC_AIRLINEQUERY_CDS (см. Рис. 52).
При необходимости можно иерархически развернуть данные о полях сервиса, используя значок >
слева от названия (см. Рис. 53).
Чтобы выбрать сервис для его дальнейшего использования, нужно нажать кнопку слева от его
названия. Цвет стрелки на кнопке изменится с тёмного на светлый. Используя кнопку ,
можно увидеть дополнительные технические сведения о сервисе. В том числе, проверить его
текущий статус (см. Рис. 54).
Приложение можно протестировать локально здесь же. Для этого нужно выделить его название и
перейти по командам меню Run->Run As->SAP Fiori Launchpad Sandbox. Возможно, что на этом
этапе появится сообщение о том, что ваш браузер блокирует всплывающие окна. В таком случае
нужно добавить адрес http://localhost:8080 в список исключений блокировщика. Затем снова
возникнет небольшое всплывающее окно, в котором потребуется ввести логин и пароль для
системы Front-End. После ввода этих данных запустится тестовая веб-страница с приложением.
Первоначально она может оказаться пустой (см. Рис. 57).
Теперь необходимо сформировать условия фильтрации. Для этого нажимаем кнопку «Адаптировать
фильтр» (см. правую область экрана на Рис. 57). Появится окно настройки фильтров (верхняя часть
Рис. 59). Переходим по ссылке «Прочие фильтры» и вновь выбираем все три поля (средняя часть
Рис. 59). После подтверждения этого выбора система предложит указать условия фильтрации для
выбора данных из CDS-ракурса (нижняя часть Рис. 59).
Рис.59. Последовательные шаги указания фильтра на данные в приложении
Здесь можно ничего не вводить, то есть выбрать все данные без дополнительной фильтрации. В
нашем примере это некритично, ведь из предыдущей главы уже известно, что ракурс содержит
всего 18 записей. Поэтому в окне адаптации фильтра сразу нажимаем «Применить». Получаем
строку с фильтрами и полный табличный просмотр данных из CDS-ракурса (см. Рис. 60).
Рис.60. Приложение Airline List в режиме тестирования
Также необходимо в транзакции SICF проверить, что активен сервис /sap/bc/adt. При
необходимости – активировать его. Дополнительно потребуется активировать сервисы, отвечающие
за CHIPs (элемент технологии WebDynpro). Например, можно использовать фильтр по названиям
(см. Рис. 62).
Рис.62. Поиск необходимых сервисов в транзакции SICF
Выполнив эти настройки, можно вернуться к работе в SAP Web IDE . Нужно вызвать контекстное
меню нашего проекта и перейти по командам Deploy->Deploy to SAPUI5 ABAP Repository (см. Рис.
63).
Откроется простой мастер. На его первом шаге достаточно выбрать Front-End-систему из списка и
оставить опцию «Deploy a new application» (см. Рис. 64).
Рис.64. Первый экран мастера публикации приложений в SAP Web IDE
На следующем шаге нужно ввести техническое имя создаваемого приложения, его текстовое
описание и пакет разработки. Техническое имя должно удовлетворять определённым
ограничениям, которые накладывает работа в ABAP-словаре. Увидеть эти требования можно, если
подвести указатель мыши к вопросительному знаку рядом с названием поля (см. Рис. 65).
Для нашего примера укажем техническое имя ZAIRLINELIST, название Airline List и пакет $TMP.
Нужно отметить, что имя пакета невозможно ввести вручную, необходимо выбрать его из
имеющихся в репозитарии, выполнив поиск по кнопке Browse (см. Рис. 66).
Рис.67. Сообщения SAP Web IDE во время публикации Fiori-приложения в системе Front-End
Здесь для дальнейшего нам потребуется имя сервиса в контексте SAPUI5. Для этого двойным
щелчком открываем просмотр сервиса из каталога ui5_ui5 (см. Рис. 69).
Рис.69. Полное имя сервиса опубликованного приложения
Полное имя сервиса – это его имя, плюс путь к сервису от default_host. В нашем примере получаем
/sap/bc/ui5_ui5/sap/zairlinelist/
Далее так же, как было описано в предыдущей главе, нужно войти в SAP Fiori Launchpad Designer и
найти каталог Z_RDS_BC. Необходимо создать Target Mapping. То есть (см. предыдущую главу)
связать действие конечного пользователя (нажатие плитки) с выполнением конкретного
приложения, реализующего это действие. Для этого в выбранном каталоге нажимается кнопка
«Target Mapping» (см. Рис. 71).
Рис.71. Переход к списку созданных Target Mapping
Сейчас список настроек Target Mapping для нашего каталога пуст. В нижней части окна открываем
создание нового мэппинга (см. Рис. 72).
Сначала нужно описать «намерение» пользователя (Intent). Как уже говорилось, намерение
описывается как семантический объект плюс то действие, которое пользователь намеревается
выполнить. Эти значения нужно выбрать из списков в соответствующих полях (см. Рис. 73).
Рис.73. Указание «намерения», которое должен выполнить данный Target Mapping
Следующий шаг – указать «цель» (Target) данного «намерения». То есть приложение, которое
должно «выполнить» это «намерение». Тип приложения для нашего примера выбираем из списка -
SAPUI5 Fiori App. Название по-прежнему будет Airline List. В поле URL указываем полное имя
сервиса из транзакции SICF (см. Рис. 69). Наконец, в поле ID необходимо указать имя приложения.
Необходимо учесть, что это имя указывается так, как был назван проект в SAP WebIDE! В
итоге для нашего примера параметры будут такими, как показано на Рис. 74. В завершение
необходимо сохранить созданный Target Mapping (кнопка Save в нижнем правом углу).
Теперь на основе описанного мэппинга можно создавать плитку. Это делается так же, как описано в
предыдущей главе. Только в текущем примере нужно выбрать шаблон «Static», так как плитка
предназначена для вывода табличной информации и не содержит на себе динамически
обновляемых цифр. В окне создания плитки описываем то же самое «намерение», которое мы выше
привязали к Fiori-приложению через мэппинг (см. Рис. 75).
Остаётся сохранить созданную плитку. И добавить её в группу Z_RDS_BCG так же, как это было
описано в предыдущей главе. Теперь при запуске Fiori Launchpad пользователь FIORI_ADM видит
в группе Z_RDS_BCG уже две плитки (см. Рис. 77).
При нажатии на плитку Airline List открывается такое же окно, как выше было при тестировании
приложения в SAP Web IDE. Поэтому в данном окне также требуется определить список
отображаемых столбцов и задать условия фильтрации. После этого пользователь увидит таблицу с
данными из CDS-ракурса, созданного в системеBack-End (см. Рис. 78).
Рис.78. Приложение Airline List запущено в Fiori Launchpad
Часть 8. Продолжение.
Часть 1 Часть 2 Часть 3 Часть 4 Часть 5 Часть 6 Часть 7
Оглавление
3. АНАЛИЗ ДАННЫХ В CDS С ПОМОЩЬЮ QUERY BROWSER
Открыть ракурс для анализа данных. При этом используется встроенный в систему OLAP-клиент. С его
помощью возможен просмотр данных как в формате сводной таблицы, так и в виде диаграммы.
Помещать отдельные ракурсы в список «Избранное». Это может быть удобно в тех случаях, когда
полный список доступных ракурсов слишком велик и требуется много времени на постоянный поиск
в нём.
Добавлять к отдельным ракурсам произвольные тэги (пометки). Эти тэги можно затем видеть в
общем списке ракурсов рядом с их техническими именами.
Фильтровать список ракурсов.
Сортировать список ракурсов.
Просмотреть технические детали выбранного ракурса: список его полей, их названия и ABAP-типы.
В приводимых далее примерах будет использоваться логин FIORI_ADM. Основной перечень его
полномочий описан ранее. Но чтобы получить доступ к необходимым плиткам приложений на Fiori
Launchpad, дополнительно требуется в системе Front-End присвоить этому пользователю роли
SAP_BR_ANALYTICS_SPECIALIST и SAP_BR_EMPLOYEE.
Помимо этого, нужно самостоятельно или с помощью администраторов SAP BASIS активировать в
транзакции /IWFND/MAINT_SERVICE следующие OData-сервисы:
RSAO_ODATA_SRV
BSANLY_APF_RUNTIME_SRV
VDM_CDSVIEW_BROWSER.
При активации выбрать Alias, указывающий на систему Back-End (как уже было показано на Рис.
8).
Наконец, необходимо проверить через транзакцию SICF, активированы ли следующие сервисы или
ветки в иерархии сервисов:
/sap/bw/ina
/sap/bw/Mime
/sap/bc/ui5_ui5/sap/sbrt_appss1
/sap/bc/ui5_ui5/ui2/tilechips
/sap/bc/ui5_ui5/sap/viewbrowsers1
/sap/bc/ui5_ui5/sap/cdsbrowsers1
Сервисы по фильтру *sb_apps* в ветке /sap/bc/ui5_ui5/sap/
Нажатие плитки «Query Browser» запускает стартовое окно этого приложения. В нём приводится
список всех аналитических CDS-ракурсов, доступных пользователю в соответствии с
присвоенными ему ролями (см. Рис. 80).
Рис.80. Список доступных ракурсов в Query Browser
Подчеркнём, что в этот список попадают не все CDS-ракурсы, а только аналитические. То есть
ракурсы использования, в заголовке которые указана аннотация @Analytics.query: true. Список
содержит как стандартные ракурсы из поставки S/4HANA, так и пользовательские ракурсы.
Рис.82. Кнопки работы с выделенным ракурсом: добавить в избранное, создать тэг, открыть в
аналитическом приложении
Нажатие на эту кнопку добавляет ракурс в «Избранное». Теперь он и в списке также помечен
пиктограммой-звездой (см. Рис. 83).
Чтобы после запуска Query Browser увидеть избранные ракурсы, нужно слева над общим списком
выбрать опцию «Show Favorites». Это отфильтрует весь список по признаку «Избранное» (см. Рис.
84).
Аналогично можно добавить к ракурсу произвольную краткую текстовую пометку (тэг). Это
делается с помощью кнопки «Add Tags» (см. Рис. 82). В появившееся текстовое поле вводится
пометка, как показано на Рис. 85.
Сохранить или отменить введённый тэг можно кнопкой с многоточием. Можно таким образом
добавить сразу несколько тэгов. Информация о наличии тэгов и об их количестве будет отражена в
общем списке ракурсов (см. Рис. 86).
Рис.86. Отображение тэгов в списке ракурсов
Помимо поля поиска, вверху справа над списком ракурсов есть кнопка для сортировки и
фильтрации этого списка (см. Рис. 87).
Нажатие на техническое имя ракурса отображает более детальную информацию о нём: имена и
названия полей, их ABAP-типы данных (см. Рис. 88).
Поля селекционного экрана имеют справа характерные пиктограммы для выбора значений из
списка: . Нажатие на эту пиктограмму в нашем примере выводит список кодов аэропортов и их
названий. В верхней части окна есть поле контекстного поиска. Например, если нам нужен
аэропорт Нью-Йорка (код JFK), то при наборе первых букв список автоматически фильтруется (см.
Рис. 91).
Рис.91. Контекстный поиск при выборе параметра селекционного экрана
Работа этого списка является хорошей иллюстрацией возможностей VDM. В самом деле: на Рис.88
мы видели, что поля AIRPORTFROM и AIRPORTTO имеют тип CHAR3. Откуда же система берёт
здесь полноценные названия и города? Для ответа вернёмся в ADT и откроем DDL-код ракурса
ZC_FLIGHTBYAIRPORTQUERY. В нём для поля AIRPORTFROM с помощью аннотаций
@Consumption.filter указано, что это должен быть обязательный для ввода параметр, содержащий
ровно одно значение (см. Рис. 92).
Мы можем как бы «раскрутить назад» иерархию ракурсов VDM, чтобы найти первоисточник
данных для поля AIRPORTFROM. Источником данных ракурса ZC_FLIGHTBYAIRPORTQUERY
является интерфейсный ракурс ZI_FLIGHTBYAIRPORT. В его DDL-коде видим следующую
строчку:
a. ZI_FLIGHT._FlightConnection.AirportFrom
Как видим, поле AirportFrom заполняется из поля airpfrom стандартной таблицы SPFLI. Ключевым
моментом является использование для этого поля аннотации @ObjectModel.foreignKey.association.
Она указывает на ассоциацию _AirportFrom (а следовательно – на ракурс ZI_AIRPORT) как на
справочник значений для поля AirportFrom. Ранее, разбирая пример с созданием ракурса
ZI_FLIGHTCONNECTION, мы уже упоминали эту аннотацию. Она говорит системе о том, что если
поле AirportFrom нужно будет заполнить на селекционном экране приложения SAPUI5, то в
качестве справочника к полю выбора будут подтягиваться данные из ракурса ZI_AIRPORT.
Именно эти аннотации позволяют системе выводить в список выбора на селекционном экране не
только трёхсимвольные ключевые значения из справочника аэропортов, но и текстовые пояснения к
ним. Важно подчеркнуть, что такая функциональность доступна только при использовании данных
из VDM через интерфейс OData Service. Например, если бы мы посмотрели Data Preview ракурса
ZC_FLIGHTBYAIRPORTQUERY непосредственно в ADT, то там не было бы никаких текстовых
названий для полей AIRPORTFROM и AIRPORTTO. Но поскольку приложение Query Browser
использует интерфейс OData Service, то здесь доступны все семантические возможности этих
аннотаций.
В верхней правой части экрана, над таблицей, видны элементы управления, позволяющие изменять
и настраивать визуализацию. Кнопки, выделенные красным на Рис.98, позволяют переключать
режимы визуализации. Слева направо это будут режимы: только диаграмма, диаграмма и под ней
сводная таблица, только сводная таблица. На Рис. 98 видно, что выбран режим таблицы. Правее
расположена кнопка-«шестерёнка», нажатие на которуювыводит для пользователя ряд
дополнительных настроек. Их выпадающий список также показан на Рис. 98. Наконец, самая правая
кнопка в этом ряду разворачивает визуализацию на всё окно браузера, скрывая всю «шапку»,
расположенную выше
Если в списке, показанном на Рис.98, выбрать опцию «Show Prompts», то снова будет выведен
селекционный экран. Это позволит при необходимости изменить критерии выбора. Опцию «Chart
Settings» рассмотрим далее, она позволяет менять визуализацию диаграммы. Опция «Swap Axes»
позволяет за один клик транспонировать табличное отображение данных – то есть поменять
местами строки и столбцы. Иногда это бывает удобно для более наглядного представления
информации (см. Рис. 99).
Кнопка «Filters» (см. Рис. 97, вверху справа) выводит список всех аналитик и числовых показателей
ракурса, позволяя задать дополнительную фильтрацию данных. В случае с числовыми
показателями (Measures) фильтрация будет означать: визуализируется показатель или нет.
Например, можно посмотреть только данные по полётам за 19.04.2017 (см. Рис. 102). Чтобы
увидеть новые отфильтрованные данные, нужно нажать кнопку «Go».
Рис.102. Пример дополнительной фильтрации просматриваемых данных
Рядом с каждым фильтром здесь имеется галочка «Show on Filter Bar». Если не включать её, то мы
увидим результат фильтрации, а справа от кнопки «Filters» будет показано количество наложенных
условий фильтрации. Если же эту галку включить, то после выполнения фильтрации можно будет
нажать кнопку «Show Filter Bar». И тогда будет показано – какое именно условие фильтрации
добавлено (см. Рис. 103). Здесь же критерий фильтрации можно изменить.
Рис.103. Вывод подробной информации о наложенных фильтрах
Здесь, как видим, можно настроить отображение аналитики (пункт «Display»): только ключ (то есть
трёхсимвольные значения), текст или ключ и текст вместе. Отображение текста для аэропортов
возможно в силу использованных в VDM аннотаций. Так же, как и на селекционном экране выше.
Возможна сортировка таблицы по значениям аналитики: как по ключу, так и по тексту (пункт
«Sort»). Если бы данная аналитика имела иерархии, определённые методами CDS, то показанная на
Рис.104 опция позволит организовать строки таблицы в соответствии с иерархией. Также в пункте
«Totals» доступны настройки вывода или подавления промежуточных итогов (относительно
группировки строк по одинаковым значениям данной аналитики). И подавление вывода строк с
нулевыми значениями числовых показателей. Отдельно на Рис. 104 выделена опция «Attributes».
Она предназначена для вывода в таблицу дополнительных атрибутов аналитики. Для аэропорта
таким дополнительным атрибутом является Time Zone. Доступность именно этого атрибута также
определяется аннотациями из VDM. А сам атрибут на нижнем уровне VDM заполняется в ракурсе
ZI_AIRPORT (см. Рис. 95). Атрибут отображается рядом со своей аналитикой (см. Рис. 105).
Контекстное меню числового показателя содержит две опции (см. рис. 106).
Рис.106. Контекстное меню числового показателя в Query Browser
Опция «Number format» даёт возможность регулировать точность отображения чисел (см. Рис. 107).
Здесь с помощью списка Decimal Places можно изменить количество отображаемых знаков после
запятой. А коэффициент масштабирования (Scaling Factor) позволяет сделать более удобным и
наглядным просмотр больших чисел. Например, если показатель содержит крупные денежные
суммы, то можно установить коэффициент 1000. И тогда суммы будут показаны не в рублях, а в
тысячах рублей. Тем самым числа будут для пользователя выглядеть удобнее, чтобы можно было
бегло оценить их «на глаз».
Поэтому прежде чем переходить к диаграммам, нужно выбрать только необходимые аналитики и
показатели. Сделать это можно в табличном режиме. Например, сравним количество
нераспроданных мест по авиакомпаниям. В табличном режиме можно убрать все остальные
аналитики из визуализации, используя классический приём drag-and-drop. То есть название
аналитики в разделах ROWS или COLUMNS зажимаем левой кнопкой мыши и перетаскиваем в
раздел DIMENSIONS. Во время перетаскивания курсор характерно изменяется на крестообразный.
В итоге останется только детализация данных по авиакомпаниям (см. Рис. 110).
Рис.110. Для работы с диаграммой оставляем только аналитику Airline
Оставить для работы только нужный показатель можно с помощью кнопки «Filters», о которой уже
говорилось. Выбор фильтра по показателям и результат его применения показаны на Рис. 111.
Теперь исходная большая сводная таблица приведена к удобному для графического анализа
агрегированному виду. И переключение в режим диаграммы даёт результат, который удобно
воспринимать, оценивать и анализировать (см. Рис. 112). На этом рисунке также видно, что при
наведении курсора на столбец появляется всплывающая подсказка: к какой авиакомпании этот
столбец относится и каково точное значение числового показателя.
Рис.112. Диаграмма, построенная по выбранным аналитикам и показателям
Возвращаясь к опции «Chart Settings» (см. Рис. 98). Наиболее интересной возможностью этого
пункта является выбор типа диаграммы. Например, можно изменить тип диаграммы со столбчатой
на круговую. Это наглядно покажет доли авиакомпаний в ассортименте нераспроданных билетов.
Помимо этого, пункт настройки диаграмм позволяет работать с масштабированием числовых осей
графика.
Часть 9.
Часть 1 Часть 2 Часть 3 Часть 4 Часть 5 Часть 6 Часть 7 Часть 8
Оглавление
4. KPI MODELER
4. KPI MODELER
4.1. Основные этапы работы в KPI Modeler
Одна из стандартных возможностей, имеющихся в арсенале инструментов Fiori Launchpad – это
создание плиток, визуализирующих уровень одного из ключевых показателей эффективности
бизнеса (KPI). Пользователи могут обычным путём разместить эту плитку на своей стартовой
странице и контролировать важный показатель, не переходя ни в какие дополнительные
приложения. В то же время, если плитка-индикатор (KPI-плитка) покажет неудовлетворительный
уровень показателя, есть возможность открыть отчёт для детального анализа ситуации.
Инструменты, позволяющие конструировать подобные плитки-индикаторы, собраны в группе KPI
Design и носят название KPI Modeler (см. Рис. 113).
Создание KPI-плитки состоит из нескольких этапов. Можно проходить эти этапы не прерываясь,
последовательно, в итоге сразу получив готовую плитку (этот подход будет проиллюстрирован
примерами далее). Но также можно и повторно использовать объекты, созданные на одном шаге,
чтобы создать несколько вариантов на следующем этапе. Для этого все этапы выведены
отдельными плитками в группе KPI Design. Перечислим эти этапы:
Создание анализируемого показателя (KPI). На этом этапе нужно указать: какой массив данных будет
использоваться (имя CDS-ракурса и другие технические параметры доступа к данным), какой
числовой показатель из этого массива нужно отслеживать, какое «поведение» показателя считать
«правильным». Под «правильным поведением» понимается бизнес-интерпретация показателя.
Например, если мы отслеживаем сумму оборотов в сети магазинов, то с точки зрения бизнеса этот
показатель «чем больше, тем лучше». А если мы отслеживаем процент отходов сырья на
производстве, то наоборот – чем меньше, тем лучше.
Следующий этап – создание так называемой оценки. Задача KPI-плитки – это отражение «хорошего»
или «плохого» уровня отслеживаемого показателя. И на этапе оценки нужно указать: какие
конкретно значения являются пороговыми для того, чтобы признать уровень показателя «хорошим»
или «плохим». Кроме того, слово «оценка» имеет здесь ещё один смысл. Нам нужно указать
значения параметров, фильтрующих данные из CDS. Параметры соответствуют тем, которые заданы
в CDS-ракурсе (например, аэропорты вылета и назначения в ракурсе ZC_FLIGHTBYAIRPORTQUERY).
Таким образом, определяется массив оцениваемых данных.
Третий этап – конфигурирование KPI-плитки. Здесь можно выбрать один из предлагаемых
стандартом вариантов визуализации. И в зависимости от выбранного варианта заполнить ряд
соответствующих параметров.
Создание детальных отчётов. На этом этапе создаются отчёты (в виде таблиц или диаграмм),
которые пользователь сможет увидеть, если нажмёт на KPI-плитку. Отчётов может быть несколько.
Их задача – используя тот же источник данных, что и плитка, показать пользователю детальный
анализ показателя, чтобы помочь установить причины его негативной динамики.
На последнем этапе готовая KPI-плитка размещается на Fiori Launchpad. Здесь выполняются те же
действия, как и в примерах, рассмотренных ранее.
Для работы KPI Modeler необходимо выполнить несколько предварительных настроек в системе
Front-End. Во-первых, в транзакции SICF активировать сервис /sap/bc/ui5_ui5/sap/sb_apps_kpis1. Во-
вторых, в транзакции /IWFND/MAINT_SERVICE активировать OData-сервисы
SMART_BUSINESS_RUNTIME_SRV и SMART_BUSINESS_DESIGNTIME_SRV. Как и раньше,
эти сервисы должны использовать Alias, указывающий на систему Back-End. В-третьих,
необходимы те же настройки, которые описаны выше для Query Designer. И те же роли для
пользователя FIORI_ADM, под которым создаются все рассматриваемые здесь примеры.
Ниже расположена следующая группа полей. Она описывает технические параметры источника, из
которого будут извлекаться анализируемые данные (см. Рис. 115).
Рис.115. Параметры источника данных для KPI
В поле «CDS View» нужно указать имя CDS-ракурса: ZC_FLIGHTBYAIRPORTQUERY. Как обычно, здесь
есть удобная возможность выбора имени из списка, с контекстным поиском.
Для нашего ракурса создан и активирован OData-сервис, поэтому заполнение следующего поля
«OData Service» становится элементарным: там список доступных сервисов содержит только то
значение, которое нужно.
Затем также легко заполняется выбором единственной строчки списка и поле «Entity Set». Оно
указывает на тот массив данных, который нужно считывать через ранее выбранный OData-сервис.
Дело в том, что SAP Gateway имеет широкие возможности создания и конструирования сложных
OData-сервисов. В нашем примере сервис ZC_FLIGHTBYAIRPORTQUERY_CDS просто публикует для
приложений-потребителей данные из одного CDS-ракурса. Именно они и образуют единственный
массив данных, доступных через этот сервис. Но в более сложных разработках OData-сервис может
предоставлять доступ к нескольким массивам данных. И тогда список выбора в поле «Entity Set»
будет перечислять все эти массивы.
Теперь, когда указан массив анализируемых данных, остаётся выбрать из списка в поле «Value
Measure» нужный показатель.
Определение KPI и его источника данных на этом завершено. Переходим к следующему этапу,
нажав кнопку «Activate and Add Evaluation» (см. Рис. 115). Назначение других кнопок,
расположенных рядом, представляется очевидным. При нажатии указанной кнопки появляется
окно, предлагающее поместить создаваемый объект в транспортный запрос. Для целей данного
примера можно указать в этом окне, что созданный KPI является локальным объектом.
Информацию об источнике данных оставим без изменения и перейдём к следующей группе полей,
определяющих фильтр для отбираемых из CDS-ракурса данных (см. Рис. 117).
Поскольку в DDL-коде ракурса только аэропорт вылета был указан как обязательный для
заполнения элемент селекционного экрана, то именно это поле и выведено на Рис. 117. Как и в
случае с Query Browser, выберем для примера фильтрацию по нью-йоркскому аэропорту JFK. Есть
также возможность добавить и необязательные фильтры по другим аналитикам ракурса, если
воспользоваться ссылкой «Optional Filters».
Наконец, в последней группе полей остаётся указать пороговые значения показателя, по которым
создаваемая оценка будет определять: является ли значение хорошим или критическим. На Рис. 114
уже показано, что оцениваемый KPI считается «тем лучше, чем меньше». Оценка работает по
принципу светофора, то есть должна иметь три уровня: хороший (зелёный), тревожный (жёлтый) и
критический (красный). Учитывая это, заполним параметры так, как показано на Рис. 118.
Рис.118. Определение пороговых значений для оценки KPI
Чтобы перейти к следующему этапу работы, нужно нажать кнопку «Activate and Configure Tile».
Выбрать подходящий вариант можно, нажав на него левой кнопкой мыши. При этом состав полей с
настроечными параметрами, расположенных ниже, автоматически изменится в соответствии с
выбранным вариантом (см. Рис. 120). Также подходящий вариант можно выбрать из списка в поле
«Tile Format». Для нашего примера выбран формат Dual Tile. Это формат, предполагающий плитку
увеличенного, двойного размера. В ней как бы расположены рядом сразу две плитки. Слева – общая
оценка для KPI, в которой его числовая величина окрашена цветом в соответствии с пороговыми
значениями. Справа – более детализированный анализ значений KPI.
Как уже говорилось, левая часть двойной плитки показывает числовую величину KPI. Это указано в
параметре «Visualization Left», изменить который невозможно. А вот правая часть плитки может
быть настроена. Мы выберем для поля «Visualization Right» вариант Comparison Tile. Этот вариант
позволяет отразить несколько значений KPI в разрезе определённой аналитики. Например, мы
хотим сравнить число нераспроданных мест на рейсах различных авиакомпаний. Поэтому в поле
«Dimension» нужно выбрать из списка аналитику Airline. Теперь значение KPI по каждой
авиакомпании будет отображено в виде горизонтальной полоски (образец такого дизайна можно
видеть на Рис. 119). При этом длина полоски пропорциональна значению KPI. Размеры плитки
ограничены, поэтому дизайн позволяет отобразить только три таких полоски. Какие именно
авиакомпании окажутся видны на плитке, определит условие сортировки в поле «Sorting Order».
Сортировать можно как по числовым значениям KPI, так и по значениям аналитики, указанной в
поле «Dimension». В нашем примере анализируется показатель, значения которого желательно
минимизировать. Поэтому имеет смысл вывести на плитку те авиакомпании, у которых показатели
самые плохие (то есть большие). Для этого выбираем вариант сортировки Measure Descending.
Три полоски расположены друг под другом, чтобы значения показателей было удобно сравнивать.
В зависимости от значения показателя, часть полоски будет раскрашена в том цвете, который
указан в поле «Semantic Color», а часть останется светло-серой. Удобнее всего выбрать контрастный
красный цвет – то есть значение Critical.
Наконец, нужно определить реакцию KPI-плитки на нажатие. В нашем случае необходимо перейти
к аналитическому отчёту (либо диаграмме), детализирующему поведение отслеживаемого
показателя. Это делается заполнением группы параметров «Navigation» как показано на Рис. 121.
После выбора аналитик и показателей откроется окно настроек диаграммы. Сами настройки
расположены в левой части, а большую часть окна занимает шаблон, предварительный эскиз,
позволяющий оценить примерный внешний вид диаграммы, соответствующий сделанным
настройкам. В левой верхней части окна расположена область «Measures and Dimensions». В ней
перечислены те аналитики и показатели, которые мы выбрали на Рис. 122. Как и раньше, нас
интересуют в первую очередь «плохие» (то есть большие) значения показателя Available Seats.
Поэтому нужно нажать кнопку Settings (пиктограмма с шестерёнками) справа от этого показателя и
задать сортировку по убыванию (см. рис. 123).
После подтверждения этой настройки внешний вид эскиза диаграммы сразу отразит сделанное
изменение. Также рядом с названием показателя Available Seats появится треугольник-стрелочка,
обозначающее направление сортировки.
Теперь нужно указать, что диаграмма должна сравнивать не абсолютные значения показателей, а их
доли. Для этого переходим в левой части окна к группе настроек «Visualization Type» и для
настройки «Scaling» выбираем значение «Percentage Values». Далее, в поле «View Title» вписываем
заголовок диаграммы. А в настройке «Data» вместо условных данных выбираем отображение
настоящих цифр – «Actual Backend Data» (см. Рис. 124).
Второй вариант – сразу перейти к тому шагу, который нужно настроить. Это также делается одной
из плиток, изображённых на Рис. 113. В нашем примере нужно нажать плитку Configure Drill-Down.
Слева откроется список всех имеющихся в системе оценок. Рядом с каждой указано количество
аналитических отчётов, созданных для этой оценки. В списке доступен контекстный поиск. С его
помощью находим нашу оценку, название которой задано на Рис. 116. Результат показан на Рис.
125.
В нижней части страницы нужно нажать кнопку Configure. Над эскизом диаграммы отобразится
набор кнопок, позволяющих редактировать и удалять существующие диаграммы либо создавать
новые. В частности, создание новой диаграммы выполняется нажатием кнопки со знаком + (см.
рис. 126).
Рис.126. Создание дополнительной аналитической диаграммы/отчёта
При нажатии этой кнопки процесс снова начинается с выбора аналитик и показателей, как на Рис.
122. Поэтому без подробностей повторим все описанные настройки. Отличием этой диаграммы от
предыдущей будет то, что она сравнивает не процентные доли, а абсолютные значения показателей.
По умолчанию столбцы с абсолютными значениями расположены один рядом с другим. Но нам
нужно, чтобы оба показателя были отображены разными цветами в одном столбце (как это
показано на эскизе в Рис. 125). Чтобы добиться этого, нужно справа от настроек «Visualization
Type» нажать кнопку Settings (с пиктограммой шестерёнок). И в появившемся окне включить
галочку Enable Stacking (см. Рис. 127).
Также в настройке «Scaling» выбираем значение «Absolute Values». В качестве названия диаграммы
естественным будет указать «Departure/Destination (absolute)». Сделанные настройки
подтверждаются нажатием кнопки ОК.
Чтобы аналитические отчёты, выводящие детальную информацию для плитки, могли корректно
работать, нужно перед их первым запуском сбросить кэш соответствующего OData-сервиса. Для
этого запустить через SAP GUI транзакцию /N/IWFND/CACHE_CLEANUP. В поле Model Identifier
ввести имя OData-сервиса (для нашего примера это был ZC_FLIGHTBYAIRPORTQUERY_CDS). И
снять галочку «Cleanup Cache for all Models» (см. Рис. 128).
Рис.128. Очистка кэша для OData-сервиса
При нажатии на плитку открывается сконфигурированная нами аналитическая диаграмма (см. Рис.
130).
В завершение остаётся отметить, что слева над диаграммой есть раскрывающийся список. Он
позволяет перейти к просмотру других диаграмм, созданных для этой плитки (если таковые есть). В
нашем примере этот список содержит две диаграммы, как показано на Рис. 131.