#1.4 Переменные в Loginom

На прошлом занятии мы создали простой сценарий конвертации файла в формат lgd со статичными настройками узлов. Однако для реальных задач нам потребуется гораздо большая гибкость управления логикой сценариев, для вычислений, и для изменений настроек узлов в автоматическом режиме. А также для подстановки в SQL запрос и команды запуска программ. И для этого в Loginom существует функционал переменных. Откройте сценарий, который вы сделали из предыдущего задания, и удалите в нем экспорт в lgd.

Для работы с переменными предусмотрен целый набор узлов. Напомним, что переменные передаются между узлами через полукруглые порты.

Как мы можем создать и начать использовать переменные? Самый простой вариант — создать их непосредственно в узле, где мы хотим их использовать. На некоторых узлах, как импорт файла с продажами, порт переменных виден изначально. И он не является обязательным, т.к. обведен пунктиром. Но что, если мы хотим использовать переменные в узле фильтрации?

На самом деле, почти в каждом узле есть возможность подавать на вход переменные. Для этого нужно щелкнуть ПКМ по узлу, и выбрать пункт меню «Показать порт управляющих переменных».

Теперь у нас виден опциональный входной порт для переменных.

Щелкните по нему ПКМ, и выберите пункт Настроить порт.

Давайте добавим переменную со следующими настройками.

Как вы можете заметить, у переменных надо задавать тип данных. От этого типа зависят возможности дальнейшего использования переменной. При создании переменной таким образом, мы можем задать ей только константное значение. Пусть здесь будет значение 0. Переменным также можно задавать раздельные метки и имена. Но лично я предпочитаю делать из одинаковыми, чтобы потом не путаться. По классике, в начале имени переменной лучше ставить отличительный префикс, чтобы в будущем легко отличать имена переменных от имен полей.

Результат:

Кстати, обратите внимание на неактивную настройку «Назначение» во время создания переменной. Некоторые узлы подразумевают, что входящие поля/переменные должны быть привязаны к определенным ролям внутри этого узла (например, при маппинге данных). Поэтому иногда эта настройка может быть активной, и нам нужно будет ее задавать. Либо же назначение поля или переменной появится по мере настройки узла, когда будем выполнять операции с ними.

Теперь, зайдем в настройку узла фильтрации, и добавим условие по полю «Выручка с НДС после возвратов», знак «>». Обратите внимание, что напротив поля с выбором значения сравнение появился значок. Когда на вход узла подаются переменные, то в тех настройках, куда можно подставить переменную, появляется переключатель.

Щелкните по нему, и вместо константы вы сможете указать переменную с подходящим типом данных как источник значения.

Убедитесь, что у вас стоит оператор И между условиями сравнения.

Выполните сценарий и убедитесь, что теперь отфильтровывается намного больше значений чем раньше.

Вычисляемые переменные

Потрясающе, мы сделали наш первый сценарий с переменными! Но если подумать, то чего мы добились? Просто пишем константное значение не в настройку узла, а в переменную. Давайте разберем, как привнести сюда больше интерактива.

Порт переменных может не только создавать переменные внутри себя, но и принимать их из других узлов. И в этих других узлах создание переменных может идти гораздо более интересными способами, нежели просто указание статичного значения. Давайте осмотримся, что у нас вообще есть с точки зрения работы с переменными.

Наблюдательный аналитик уже наверняка заметил, что в левом верхнем углу у нас уже висят какие-то порты переменных. Это блок переменных пакета.

Чтобы посмотреть их содержимое, нужно выполнить их узел, щелкнув по 4-м квадратам под ними, и нажав уже знакомую нам кнопку.

В основном эти переменные относятся к разной системной информации. Посмотрите сами, что там есть. Порты отличаются составом передаваемых переменных.

Последний порт в этом наборе — Переменные пользователя. Там можно создавать переменные по аналогии с тем, как мы создали их на входном порте узла Фильтр. Каких-то доп. опций с точки зрения динамических вычислений там нет, поэтому не будем останавливаться на этом.

Создавать переменные таким образом имеет смысл только для каких-то немногочисленных глобальных настроек сценария. И учитывайте, что для применения этих переменных нужно будет дотащить их до точки назначения через порты.

Вычисляемые переменные мы можем собрать на основе данных. Для этого нам поможет узел «Таблица в переменные». Добавим его в сценарий.

Кстати, если вы теряетесь в дереве элементов, то пользуйтесь поиском. Так, слово «пере» сразу покажет нам все, что относится к переменным.

Подадим на вход данные по продажам, и перейдем в настройку узла.

Перетащим в правую часть поля «Выручка…» и «День».

Переменная может содержать только одно значение. А в таблице внутри полей значений множество. Поэтому при трансформации в переменную значения поля будут агрегированы. Щелкните 2 раза ЛКМ по полю День, чтобы открыть настройки агрегации. В зависимости от формата поля, вам будут доступны разные опции. можно выбрать сразу несколько вариантов. Это приведет к созданию нескольких переменных и соответствующей агрегацией. Для поля День установим агрегацию Максимум. Для поля Выручка — Среднее.

Если вы используете узел, чтобы сконвертировать в переменные некую настроечную таблицу, например из БД, где каждая строка содержит значение, которое должно быть помещено в переменную (в т.ч. текст), то можно использовать агрегацию Первый или Последний.

Выполним сценарий. На выходе узла Таблица в переменные появилось 2 переменные, которые мы можем увидеть в быстром просмотре. Все прекрасно, но только имена у этих переменных какие-то не важные. Давайте поправим это.

Имена полей и переменных можно править разными способами. Один из них — через настройки портов. Давайте зайдем в настройки выходного порта узла Таблицы в переменные.

Переключите экран в режим Связи для наглядности. Каждый входной или выходной порт имеет свой собственный вход и выход. Между этими входами и выходами мы можем управлять:

  1. Количеством полей/переменных, которые выйдут из порта. Т.е. мы можем подать на вход входного порта таблицу на 100 полей. Но в узел пропустить только 3 поля, которые нам нужны там для вычислений;
  2. Наименованиями полей и переменных, выходящих из порта.
Пример на основе выходного порта

Глобально, схема выглядит так:

Этот процесс называется Синхронизация. По умолчанию во всех портах включена автосинхронизация. Это означает, что сколько полей/переменных зашло в порт — столько из него и вышло. И не надо в явном виде задавать соответствие входных и выходных полей, даже если их набор поменялся.

Понять, активна ли автосинхронизация, можно по этому значку. Изменение имен выходных полей/переменных не отключает автосинхронизацию.

Также, можно понять статус автосинхранизации по наличию точки на порте при просмотре сценария. Если точка есть — значит автосинхронизация отключена. Если точки нет — значит включена.

Отключенная автосинхронизация означает, что узел чувствителен к составу входных/выходных полей.

Отключение автосинхронизации может быть полезно при разработке составных компонентов. Мы разберем это позже. А сейчас задайте имена переменным как на картинке.

Ну вот, совсем другое дело.

Вычисления над значениями переменных

Динамические значения переменных могут формироваться не только на основе таблиц с данными, но и на основе вычислений над самими переменными. Для этого нам нужен узел «Калькулятор (переменные)». Заметьте, что в библиотеке также есть калькулятор для таблиц. Но нам нужны именно переменные.

Интересный факт: входной порт в калькуляторе переменных является опциональным. Потому что сам калькулятор может быть использован для создания переменных, без каких-либо входных данных. Например, там можно создать переменную vToday, которая будет считаться от функции today(). и использовать ее, например, для отбора данных в фильтре.

Калькулятор переменных выглядит идентично калькулятору для таблиц. Слева внизу — список доступных переменных из входного порта, которые можно использовать в выражениях. Слева вверху — список созданных переменных на основе выражений.

Давайте создадим переменную vMinDate. Не забываем указать ей правильный тип данных — Дата. В качестве формулы, вычтем из vMaxDate число 365.

При расчете переменных, вы можете ссылаться на переменные, созданные в этом блоке. При условии, что они стоят выше по списку чем та переменная, которая на них ссылается.

Сделайте переменную vAnotherDate, которая будет считаться как vMinDate-365.

Также, в настройках переменной можно увидеть чекбокс «Промежуточное». Он определяет, будет ли переменная удалена после завершения вычислений в калькуляторе. Таким образом, можно упаковывать громоздкие конструкции, которые вам нужно использовать в расчетах в отдельные переменные. И с помощью галочки «Промежуточное» не выводить их на выходные порты, т.к. они в самом сценарии вам не нужны.

На выходном порте калькулятора переменных нас должен ждать вот такой результат:

Теперь, подадим наши переменные на вход фильтра, и зайдем в настройки. Установите условие, что выручка должна быть больше чем переменная vAvgSales.

Установите условие, что поле День больше или равно переменной vMinDate.

Выполните сценарий, и проверьте кол-во строк, удовлетворяющих условиям фильтра.

Теперь вы знакомы с основами работы переменных в Loginom. Следующий уровень их использования — управление циклами. Однако прежде чем пойти в эту тему, в следующей части немного устаканим понимание логики выполнения сценариев.

Добавить комментарий

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

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.