Соединение (Join) в PaPM

Posted under PaPM (FS-PER), PaPM: Функции обработки данных On By Plank

Соединение (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.

Leave a comment

Ваш адрес email не будет опубликован.