Соединение (Join) в PaPM — это функция доступа к данным, которая соединяет результаты двух или более других функций на основе определенных правил.
Соединение (Join) в PaPM: Заголовок функции
В заголовке определяется основное поведение соединения:
Поле Тип соединения
- Неявные поля — поля, поступающие из входных данных, автоматически учитываются во время процедуры соединения. Если поле отображается в нескольких правилах соединения (или входных данных), можно использовать опцию Автозаполнение.
- Явные поля — поля ввода определяются вручную и поддерживаются конфигуратором. Затем эти поля будут учтены при обработке.
Поле Автозаполнение
Опция “Автоматическое заполнение”. Возможны следующие настройки:
- Нет – если поле определено в правиле соединения в нескольких входах, содержимое поля берется из первого ввода, содержащего поле.
- Если Null, то с первого по последний – берется первое не Null значение, и если все значения равны Null, для этого поля возвращается начальное значение.
- Если Null/начальное, то с первого по последний – берется первое не Null и не начальное значение, и если все значения равны Null или начальному, для этого поля возвращается начальное значение.
Остальные поля заголовка соответствуют общим определениям для заголовка функции в PaPM.
Соединение (Join) в PaPM: Вкладки
Вкладка Ввод (Input Tab)
Определяет функцию ввода и список полей, участвующих в обработке данных. Работа с вкладкой аналогична другим функциям.
Вкладка Правила (Rules)
Возможны следующие Типы правила:
From: Это всегда первое правило уровня. То есть, если создается новый уровень в нем должно быть первое правило From.
Left Outer Join: Этот тип соединения возвращает все строки из правила выше, а также столбцы и строки из текущего правила, в которых совпадают условия соединения в разделе Предикаты объединения.
Inner Join: Этот тип соединения возвращает все строки, если в приведенном выше правиле и в текущем правиле есть хотя бы одно совпадение условий соединения в разделе Предикаты объединения.
Full Outer Join: Этот тип соединения возвращает все (совпадающие или не совпадающие) строки как из правила выше, так и из текущего правила.
Cross Join: Этот тип соединения возвращает декартово произведение приведенного выше правила и этого правила.
Union All: Это объединение ведет себя так же, как Union, но повторяющиеся записи не удаляются.
Проиллюстрировать можно следующей картинкой:
Lookup: Ищет поля и заполняет их в первом правиле без поиска выше, где совпадают предикаты. По крайней мере одно поле должно быть определено как поле поиска.
Lookup Auto Predicate: Ищет поля и заполняет их в первом правиле без поиска, где совпадают все общие поля. По крайней мере одно поле должно быть определено как поле поиска.
Для иллюстрации Left Outer Join и Lookup Auto Predicate рассмотрим следующий пример
(пример не имеет практического смысла, сделан только для демонстрации возможностей функционала):
Тут Left Outer Join обеспечивает дополнительную выборку данных из таб. ACDOCA. Будут взяты все записи результата функции ввода (“левая” таблица) и при совпадении условий соединения (на вкладке Предикаты объединения) для каждой записи “левой” таблицы из “правой” таблицы (таб. ACDOCA) будут добавлены дополнительные поля. Также выполняется поиск дополнительных данных в таб. CSKS.
В результате такого набора правил с двумя уровнями получаем следующую хранимую процедуру:
Примечание: просмотреть созданные объекты и их содержимое можно выбрав <Атрибуты функции> наверху левой панели окна Среда моделирования, там, где дерево функций:
Сутевая часть следующая (если убрать код, который обеспечивает проверки и формирует лог):
Примечание: если посмотреть через Hana Studio, то форматирование скрипта еще хуже, там одна строка длинной более 2000 символов.
Если сократить код, убрав большинство полей выборки, то структура будет следующая:
То есть Lookup Auto Predicate обеспечивает выборку максимального значения для указанных полей из заданной таблицы в рамках манданта. Дополнительным условием (WHERE …) для поиска значений будут все поля, которые одновременно есть в правиле выше и в текущем правиле (общие поля для двух таблиц). Так как на данном уровне только одно правило (таблица) выше, то будут использованы все общие с ней поля. Если на данном уровне добавить еще одно правило (таблицу) над правилом Lookup Auto Predicate, то будут использованы общие поля с новым правилом.
Примечание: в данном случае практического смысла в конструкции нет, так как в ключе таб. CSKS есть еще поля, которых в данном случае нет в результате функции ввода (таб. среды MTE3) и, соответственно, они не являются общими и их нет в условии WHERE. Конструкция для примера. Тип правила Lookup Auto Predicate можно использовать в простейшем случае, когда есть однозначные соответствия и для набора полей в правиле выше есть одно значение в таблице для поиска.
Другой пример Lookup Auto Predicate
Другой пример показывает, что расширение состава полей в правиле выше с типом правила Lookup Auto Predicate обеспечивает наличие в условии WHERE бОльшего набора общих полей:
в данном случае для простоты сделан один уровень.
Все тот же сложный для восприятия скрипт
Сокращенный код с меньшим перечнем полей выборки.
Теперь пример, более похожий на реальность
В исходных данных нет Даты проводки документа и Контроллинговой единицы, чтобы выборка основных данных МВЗ (правило Look-up) была по ключу и, соответственно, уникальной, недостающие данные выбираются из таб. ACDOCA и используются в правиле с типом правила Look-up:
Тип правила Look-up позволяет указывать условия WHERE на вкладке Предикаты объединения аналогично типу правила Left Outer Join.
Все тот же сложный для восприятия скрипт.
Сокращенный код с меньшим перечнем полей выборки в котором условие WHERE для вложенных SELECT, которые обеспечивают выборки значений для полей и списка Полей Look-up.
Для определение полей Look-up необходимо выбрать <Редактировать поля Look-up>:
Предварительно укажите необходимые поля в разделе Действие на вкладке Ключи для того, чтобы поля были доступны для выбора для Look-up:
В результате получаем обогащенные данные с учетом интервала действия основных данных МВЗ:
Остальные вкладки функции:
- Доп. ракурс – можно определить дополнительные выборки, формулы, агрегации и порядок сортировки для каждого правила.
- Комплексные критерии выбора – при необходимости можно определить сложные выборки с помощью формул и функций SQL.
- Комплексные предикаты – при необходимости можно ввести здесь сложные предикаты для правил соединения и поиска, используя формулы и функции SQL.