Функции SRL, основанные на итерации колонок

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

В языке PolyAnalyst SRL итерация колонок с помощью функций SRL основывается на двух функциях, foreach и accumulate. Их общее свойство - метод, используемый для задания следующих аргументов и функций:

  • name

  • tag

  • test

  • colname()

  • colindex()

  • coltype().

Функции foreach и accumulate выполняют итерацию колонок в исходной таблице данных и применяют определенное правило к этим колонкам.

Вы можете выбрать только один метод итерации.

foreach

Для функции foreach один из вышеупомянутых аргументов будет единственным позиционным аргументом, но вы также можете использовать другие именованные аргументы.

Функция foreach берет колонки из заданной таблицы данных и применяет к этим колонкам правило из аргумента. Эти правила могут включать любые функции SRL, а также специальный аргумент arg, определяющий значение колонки, выбранной итератором. Вы также можете использовать следующие функции:

  • colname() для доступа к имени колонки;

  • colindex() для доступа к индексу колонки, рассчитываемому с 1;

  • coltype() для доступа к типу колонки: "numerical" (числовой), "integer" (целочисленный), "yesno" (булевый), "string" (строковый), "datetime" (время/дата), "stringid" (строковый идентификатор), "text" (текстовый), "numid" (числовой идентификатор).

Функции colname, coltype и colindex не могут использоваться отдельно. Они используются только в составе функций, основанных на итерации колонок, а также с функциями, использующими определенные именованные аргументы для итерации.
Функции colname, coltype and colindex functions могут использоваться в качестве основного аргумента функции foreach и других функций, основанных на итерации колонок.

Функция foreach также может включать именованный аргумент column, с помощью которого можно задать имя новой колонки (по умолчанию этим именем будет arg). Вы также можете использовать любое SRL-выражение, не ссылающееся на другие колонки исходной таблицы данных.

Таким образом, вы можете использовать функцию foreach для создания или замены сразу нескольких колонок в таблице данных.

accumulate

Функция accumulate выполняет итерацию колонок исходной таблицы данных по тем же правилам, что и функция foreach.

Функция accumulate использует аргумент operation для расчета нового значения, но затем использует правило агрегирования, указанное в именованном аргументе aggregation. Таким образом, результатом функции accumulate является одно значение.

Функция accumulate имеет две синонимичных функции с похожим синтаксисом: accumulatebyname и accumulatebytag.

Итерация с помощью именованных аргументов

Следующие аргументы

  • name

  • tag

  • test

  • operation

  • delimiter

  • aggregation

могут использоваться в некоторых функциях, выполняющих итерацию значений в исходной таблице данных, а именно в функциях andn, concat, isnull, max, min, ndef, orn, smooth, sum. Эти аргументы могут использоваться только в том случае, когда позиционные аргументы в этих выражениях не используются; аргументы применяются к колонкам таблицы данных.

Набор таких аргументов немного отличается в зависимости от функции. Аргументы name, tag, test используются во всех таких функциях. Аргумент operation используется во всех функциях, кроме isnull, но эта функция является единственной, в которой используется аргумент aggregation. Аргумент delimiter используется только в функции concat . См. далее полный список аргументов для каждой из функций:

  • andn - name, tag, test, operation

  • concat - name, tag, test, operation, delimiter

  • isnull - name, tag, test, aggregation.

  • max - name, tag, test, operation

  • min - name, tag, test, operation

  • ndef - name, tag, test, operation

  • orn - name, tag, test, operation

  • smooth - name, tag, test, operation

  • sum - name, tag, test, operation

"name"

Используется тот же синтаксис, что и в регулярных выражениях в узле Замена терминов.

Если колонка удовлетворяет выражению, заданному в name, то данная колонка принимается для обработки.

"tag"

Теги для колонок создаются в узле Модификация колонок.

Если колонка содержит заданный тег, то данная колонка принимается для обработки.

"test"

Синтаксис аргумента:

test:=<булево выражение>

Булево выражение применяется последовательно к каждой колонке исходной таблицы данных и не может ссылаться на колонку, но может использовать следующие заданые функции для доступа к тестовой колонке:

  • colname() - для доступа к имени колонки;

  • colindex() - для доступа к индексу колонки, рассчитываемого с 1;

  • coltype() - для доступа к типу колонки: "numerical" (числовой), "integer" (целочисленный), "yesno" (булевый), "string" (строковый), "datetime" (время/дата), "stringid" (строковый идентификатор), "text" (текстовый), "numid" (числовой идентификатор).

Если выражение возвращает yes, то колонка добавляется к обработке.

foreach(arg + 1, test := colindex() ⇐ 10 and left(colname(), 2) = "ax" and coltype() = "integer") инкрементирует первые 10 колонок целочисленного типа, наименования которых начинаются с букв ax.

"delimiter"

Аргумент delimiter - это строковое выражение, используемое в функции colconcat, соответствующее опции "Строка-разделитель, заданная пользователем" узла Агрегирование.

"aggregation"

Аргумент aggregation определяет отношения агрегирования между аргументами. Синтаксис аргумента aggregation:

aggregation:=union(orn)/intersect(andn)

По умолчанию значение равно andn.

"operation"

Аргумент operation может включать любое выражение; вы также можете использовать arg для задания текущей итерируемой колонки.