Функции 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"
Синтаксис аргумента:
Булево выражение применяется последовательно к каждой колонке исходной таблицы данных и не может ссылаться на колонку, но может использовать следующие заданые функции для доступа к тестовой колонке:
-
colname() - для доступа к имени колонки;
-
colindex() - для доступа к индексу колонки, рассчитываемого с 1;
-
coltype() - для доступа к типу колонки: "numerical" (числовой), "integer" (целочисленный), "yesno" (булевый), "string" (строковый), "datetime" (время/дата), "stringid" (строковый идентификатор), "text" (текстовый), "numid" (числовой идентификатор).
Если выражение возвращает yes, то колонка добавляется к обработке.
"delimiter"
Аргумент delimiter - это строковое выражение, используемое в функции colconcat, соответствующее опции "Строка-разделитель, заданная пользователем" узла Агрегирование.