Суммарная информация
Процессор Калькулятор поля может быть использован для вычисления значения. Процессор вычисляет выражение для получения необходимого значения. Выражение может включать буквенные строки, числовые константы и данные событий, взятые из поименованных полей обрабатываемого события GeoEvent. Вычисленное значение может быть записано в существующее поле, может перезаписать текущие данные в этом поле или оно может быть записано в новое поле, созданное процессором.
Примеры
- Процессор Калькулятор поля можно использовать для добавления или вычитания времени из значения даты/времени, чтобы выровнять метку времени с местным часовым поясом. Это можно сделать путем добавления или вычитания значения времени в миллисекундах (как длинное целое число) из метки времени записи события, выраженного в миллисекундах (также как длинное целое число). Измененное значение временной метки может быть заполнено в новом поле типа date.
- Процессор может преобразовывать множество единиц измерения, таких как расстояние, скорость, время, температура, высота, вес и многое другое.
- Процессор можно использовать для данных реальном времени, полученных от работников в поле. Строковые функции, такие как replace(), toLowerCase(), toUpperCase() и concat() могут использоваться для обеспечения соответствия данных, поступающих из поля, определенным критериям или спецификации в режиме реального времени. Например, concat() можно использовать для удаления пробелов из собранных данных. Кроме того, toLowerCase() может использоваться для применения строчных букв во всех собранных данных. Выходные данные этих строковых функций могут быть записаны обратно в слой сервиса объектов в режиме реального времени.
- Процессор можно использовать для рекурсивного поиска ключевых слов или фраз из поля комментариев (строки) в векторном слое Survey123 for ArcGIS. Используя строковую функцию contains(), в комментариях, отправленных пользователями, можно выполнять поиск описаний состояния дороги, таких как выбоина, мусор, затопление, растрескивание или блокирование. Если этот тип содержимого существует, вычисление поля возвращает логическое значение true. Запись события со значением true может быть отфильтрована и обработана в режиме реального времени, чтобы немедленно уведомить коммунальные службы или другие ответственные организации.
Примечания по использованию
- Процессор Калькулятор поля является универсальным. Относительно постоянные выражения, такие как Distance * 0.3048, могут быть использованы для вычисления эквивалентного расстояния в метрах для исходного расстояния в футах. Процессор также поддерживает целый ряд функций Java String, таких как выражение replaceAll(Description, 'foo', 'bar'), например, которое может быть использовано для того, чтобы заменить все вхождения подстроки foo на подстроку bar в поле описания каждого события. Процессор также поддерживает несколько математических функций. Например, вы можете определить, какое из двух полей события GeoEvent содержит большее значение, используя max(Time1, Time2), или сгенерировать случайное число с использованием random().
- Процессор может быть сконфигурирован для хранения выходного вычисления в существующем поле или новом поле с помощью параметра Целевое поле. Изменение схемы записи события путем добавления нового поля требует от GeoEvent Server создания нового определения GeoEvent. Новое определение GeoEvent будет управляться GeoEvent Server и удаляется, если изменения вносятся в процессор или в сервис GeoEvent, в котором используется процессор.
- При указании существующего поля для записи вычисляемого значения(й) не требуется, чтобы сначала было указано определение GeoEvent. Выбор определения GeoEvent из меню Определение служит только для сужения списка доступных полей для выбора в меню Поле.
Операторы и функции, поддерживаемые процессором Калькулятор поля, показаны ниже.
Операторы и функции, поддерживаемые Калькулятором поля
Операция | Оператор | Пример |
---|---|---|
Сложение |
|
Выражение служит для вычисления простой суммы путем сложения числовых значений полей Odom1 и Odom2. Поддерживается также конкатенация строк (например, 'Hello' + 'World'). |
Вычитание |
|
Выражение служит для вычисления простой разности путем вычитания числовых значений полей с тегами VALUEA и VALUEB. В отличие от операции сложения, поддерживающей конкатенацию строк, операцию вычитания нельзя использовать для вычисления разности двух строк. |
Умножение |
|
Выражение служит для вычисления простого произведения путем умножения числового значения поля с именем Altitude на константу 0.3048 (в данном случае-выполняется преобразование футов в метры). |
Деление |
|
Выражение служит для вычисления простого частного путем деления числового значения поля с именем Distance на константу 1.609344 (преобразование километров в мили). |
Модуль |
|
Выражение служит для вычисления остатка от деления числового значения поля с тегом VALUEA на числовое значение поля с тегом VALUEB и возвращения результата в виде числа двойной точности. |
Логическое И |
|
Выражение служит для выполнения операции логического И над булевыми значениями полей с именами Flag1 и Flag2, и для возвращения результата в виде булева значения. Входные поля должны быть булева типа. Строковые литералы (например, TRUE) и константы (например, 1) в выражении не конвертируются при вычислении в эквивалентные булевы значения. |
Логическое ИЛИ |
|
Выражение служит для выполнения операции логического ИЛИ над булевыми значениями полей с именами Flag1 и Flag2 и возвращения результата в виде булева значения. |
Логическое НЕ |
|
Выражение служит для выполнения операции логического отрицания над булевым значением поля с именем Flag1 и возвращения результата в виде булева значения. Поддерживает вложенные выражения типа !(Flag1 && Flag2). |
Больше |
|
Выражение служит для выполнения операции сравнения, определяющей истинность утверждения о том, что значение поля с именем Altitude больше заданной константы (результат является значением булевого типа). |
Больше или равно |
|
Выражение служит для выполнения операции сравнения, определяющей истинность утверждения о том, что значение поля с именем Altitude больше или равно заданной константе (результат является значением булевого типа). |
Меньше |
|
Выражение служит для выполнения операции сравнения, определяющей истинность утверждения о том, что значение поля с именем Altitude меньше заданной константы (результат является значением булевого типа). |
Меньше или равно |
|
Выражение служит для выполнения операции сравнения, определяющей истинность утверждения о том, что значение поля с именем Altitude меньше или равно заданной константе (результат является значением булевого типа). |
Равенство |
|
Выражение служит для выполнения операции сравнения, определяющей истинность утверждения о том, что значения полей с тегами VALUEA и VALUEB равны (результат является значением булевого типа). Операция Равенство выполняется только над числовыми типами, поддерживаемыми в исходной версии продукта (10.2.0). |
Неравенство |
|
Выражение служит для выполнения операции сравнения, определяющей истинность утверждения о том, что значения полей с тегами VALUEA и VALUEB не равны (результат является значением булевого типа). Операция Неравенство выполняется только над числовыми типами, поддерживаемыми в исходной версии продукта (10.2.0). |
Примечание:
Процессор Калькулятор поля пытается автоматически конвертировать значения при наличии смешанных типов. Например, выражение 10.0 + 5 должно быть преобразовано для выполнения суммирования сложением двух значений с плавающей точкой. Смешанные числовые значения и строковые значения, такие как codeValue + 'SomeString', где codeValue является числовым значением, приводят к непредсказуемым результатам. Правильным подходом будет конвертация codeValue в строковое значение с помощью такой строчной функции, как valueOf(object), описанной ниже.Примечание:
Операторы равенства и неравенства процессора Калькулятор поля не должны применяться напрямую к значениям с плавающей запятой. Для корректного определения равенства двух десятичных значений нужно сначала масштабировать их, округлить значения до длинных целых чисел и затем сравнить полученные значения типа длинное целое число.
- Не сравнивайте MyFloat1 == MyFloat2.
- Вместо этого сравнивайте round(MyFloat1*1000) == round(MyFloat2*1000).
Процессор Калькулятор поля содержит функции, соответствующие функциям из java.lang.Math. Полную техническую спецификацию и список функций см. в документации разработчика Java. Ниже приводится краткое описание наиболее популярных функций.
Константы для Процессора Калькулятора поля
Функция | Описание |
---|---|
E() | Возвращает число Эйлера (е), возведенное в степень, заданную числом двойной точности |
PI() | Возвращает представление числа Пи (отношения длины окружности к ее диаметру) в виде числа двойной точности |
Временные функции Процессора Калькулятора поля
Функция | Описание |
---|---|
currentTime() | Возвращает текущее время как длинное целое число периодов в миллисекундах |
receivedTime() | Возвращает метку времени, когда входной коннектор создал событие |
currentOffsetUTC() | Возвращает разницу между текущей датой/временем локального сервера и UTC |
Общие функции процессора Калькулятора поля
Функция | Описание |
---|---|
abs(значение) | Возвращает абсолютную величину аргумента |
ceil(число двойной точности) | Возвращает ближайшее к заданному числу двойной точности большее целое число |
floor(число двойной точности) | Возвращает ближайшее к заданному числу двойной точности меньшее целое число |
hypot(double x, double y) | Возвращает sqrt((x*x) + (y*y)) без промежуточных переполнения или потери значимости |
max(значение a, значение b) | Возвращает большее из двух заданных значений аргумента |
min(значение a, значение b) | Возвращает меньшее из двух заданных значений аргумента |
random() | Возвращает число двойной точности, большее или равное 0.0 и меньшее 1.0 |
round(значение) | Возвращает ближайшее к аргументу (числу двойной точности) длинное целое число |
Примечание:
Процессор Калькулятор поля выполняет, когда это возможно, преобразования числовых типов. Например, если в функции указаны аргументы различных числовых типов (например, max(3.14159,25)), то для выполнения сравнения значения будут преобразованы в сравнимые типы (int, float или double). Процессор также преобразует вычисленные значения при записи их в поле атрибутов события (например, 6 + 7 будет записано в виде 13.0, если поле события имеет тип double).
Показатели для процессора Калькулятора поля
Функция | Описание |
---|---|
sqrt(double) | Возвращает квадратный корень заданного числа двойной точности |
cbrt(значение) | Возвращает кубический корень заданного числа двойной точности |
exp(double) | Возвращает число Эйлера (е), возведенное в степень, заданную числом двойной точности |
pow(double, double) | Возвращает значение первого аргумента, возведенное в степень, заданную вторым аргументом |
Логарифмы для процессора Калькулятора поля
Функция | Описание |
---|---|
log(double) | Вычисляет натуральный логарифм (по основанию е) числа двойной точности |
log10(double) | Вычисляет логарифм по основанию 10 числа двойной точности |
Строковые функции процессора Калькулятора поля
Функция | Описание |
---|---|
В качестве справки, приведенные ниже примеры синтаксиса используют следующие входные данные: | |
Длина( string ) Возвращает: integer Пример: 'TrackID length: ' + length(TrackID) | Возвращает длину строки. Результат: "TrackID length: 7" |
isEmpty(string) Возвращает: boolean Пример: isEmpty(EmptyStr) | Возвращает true, если длина источника 0. Результат: true |
isNull(string) Возвращает: boolean Пример: isNull(NullValue) | Возвращает true, если значение источника равно null. Результат: true |
equals(string, string) Возвращает: boolean Пример: equals(TrackID, EmptyStr) | Возвращает true, если заданные значения атрибутов строки эквивалентны. Возвращает false, если эти строки неэквивалентны; null, если к качестве входных данных были указаны значения, отличные от строк. Результат: false |
equalsIgnoreCase(string, string) Возвращает: boolean Пример: equalsIgnoreCase(TrackID, toString(TrackNum)) | Сравнивает исходную строку с другой строкой, игнорируя разные регистры. Возвращает true, если заданные значения атрибутов строки эквивалентны, игнорируя регистр. Возвращает false, если эти строки неэквивалентны; null, если к качестве входных данных были указаны значения, отличные от строк. Результат: false Объяснение: "AA-1234" не является эквивалентом "1234" |
equalsIgnoreCase(string, string) Возвращает: integer Пример: compareTo('ABCXD', 'ABCZD') | Лексикографическое сравнение двух строк. Возвращает значение 0, если обе эти строки эквивалентны; отрицательное значение, если первая строка лексикографически меньше второй строки; значение больше zero, если первая строка источника лексикографически больше, чем вторая. Результат: -2 Объяснение: int('X') - int('Z') возвращает -2, потому что в алфавите 'X' на две позиции меньше, чем 'Z'. |
equalsIgnoreCase(string, string) Возвращает: integer Пример: compareToIgnoreCase('abcde', 'ABCDE') | Выполняет лексикографическое сравнение двух строк без учета регистра. Результат: 0 |
startsWith(string, value) Возвращает: boolean Пример: startsWith('Programming', 'Program') | Возвращает true, если строка начинается с заданного префикса; в других случаях возвращает false. Второй аргумент, значение может быть строковым или целочисленным значением, которое может быть без колебаний внесено в строку. Результат: true |
startsWith(string, value) Возвращает: boolean Пример: endsWith(TrackID, TrackNum) | Возвращает true, если строка заканчивается заданным суффиксом; в других случаях возвращает false. Второй аргумент, значение может быть строковым или целочисленным значением, которое может быть без колебаний внесено в строку. Результат: true Объяснение: "AA-1234" заканчивается на "1234" |
indexOf(string, string, startIndex) Возвращает: integer Пример: indexOf('ABCDABCBCA','BC',3) | Возвращает первый индекс, на котором указанная подстрока находится в строке поиска, начиная с указанного индекса. Для поиска индексов с самого начала строки укажите начало поиска с индекса 0. Результат: 5 Объяснение: Начиная с символа в позиции 3, первое местонахождение подстроки 'BC' находится в позиции 5. |
lastIndexOf(string, string, startIndex) Возвращает: integer Пример: lastIndexOf(TrackID,'-',length(TrackID)) | Возвращает последний индекс, на котором указанная подстрока находится в строке поиска, выполняя поиск в обратном направлении, начиная с указанного индекса. Для поиска индексов с конца строки укажите начало поиска с length(source). Результат: 2 Объяснение: Начав в конце строки и выполняя поиск в обратном направлении, подстрока '-’ находилась в позиции 2. |
substring(string, intIndexBegin, intIndexEnd) Возвращает: string Пример: substring('ABCDABCXYZABCDABC',7,10) | Возвращает подстроку, извлеченную из исходной строки, в качестве новой строки. Подстрока начинается в заданном beginIndex и продолжается до знака на индексе (intIndexEnd - 1). Третий параметр может быть выражен как вложенная длина функции (исходная) или -1, что подразумевает конец строки. Результат: "XYZ" Объяснение: Начиная с индекса символа 7 ('X') возвращают три символа в позициях 7, 8 и 9. |
concat(string, string) Возвращает: string Пример: concat('Hello', 'World') | Соединяет указанную строку с концом строки источника. Результат: "HelloWorld" |
matches(string, regex) Возвращает: boolean Пример: matches(TrackID, '[A-Z]+[-][0-9]+') | Возвращает true, если указанный шаблон регулярного выражения соответствует указанной строке; в других случаях возвращает false. Шаблон регулярного выражения (regex) указывается как вторая строка. Результат: true Объяснение: Весь TrackID соответствует шаблону «одна или несколько букв, тире, одна или несколько цифр». |
contains(строка, подстрока) Возвращает: boolean Пример: contains(TrackID,'-') | Возвращает true, если исходная строка содержит заданную подстроку. Результат: true Объяснение: TrackID содержит литерал '-' где-то в значении строки. |
replaceFirst(string, regex, replacement) Возвращает: string Пример: replaceFirst(TrackID,'[0-9]+','nnnnn') | Замещает первую подстроку, соответствующую заданному шаблону регулярного выражения, другой заданной строкой, возвращая результат как новую строку. Результат: "AA-nnnnn" Объяснение: Первая подстрока, соответствующая шаблону «одна или несколько цифр», была заменена строкой из букв 'nnnnn’. |
replaceAll(string, regex, replacement) Возвращает: string Пример: replaceAll('ABABCABABABD','AB','X') | Заменяет каждую подстроку строки источника, соответствующую регулярному выражению, заданной заменой. Возвращает итоговую строку в качестве новой строки. Результат: "XXCXXXD" Объяснение: Каждое появление шаблона регулярного выражения 'AB' заменено буквенной строкой 'X'. |
replace(source, target, replacement) Возвращает: string Пример: replace('2017-12-31','-','/') | Заменяет каждое появление подстроки, заданной как буквенная строка, заданной замещающей подстрокой (которая также задана как строка из букв). Возвращает итоговую строку в качестве новой строки. Результат: " 2017/12/31" |
toLowerCase(string) Возвращает: string Пример: TrackID + ' to lower: ' + toLowerCase(TrackID) | Конвертирует все символы строки источника в символы нижнего регистра, используя правила локали по умолчанию. Возвращает после соответствующего преобразования строку с символами нижнего регистра в качестве новой строки. Результат: "AA-1234 to lower: aa-1234" |
toUpperCase(string) Возвращает: string Пример: TrackID + ' to upper: ' + toUpperCase(TrackID) | Конвертирует все символы строки источника в символы верхнего регистра, используя правила локали по умолчанию. Возвращает строку с символами верхнего регистра. Результат: "AA-1234 to upper: AA-1234" Объяснение: В данном примере алфавитная часть TrackID была уже в верхнем регистре. |
trim(string) Возвращает: string Пример: | Возвращает копию строки источника с удаленными пробелами в начале и конце строки. Результат: "GeoEvent Server" |
toString(fieldName) Возвращает: string Пример: toString(Geometry) Пример: toString(Epoch) | Возвращает представление строки со значением в заданном поле атрибута события. Эти функции предназначены для вставки строковых представлений атрибутов Дата и Геометрия в другие функции, такие как подстрока, чтобы при выполнении анализа в реальном времени можно было извлекать информацию из типа данных более высокого порядка. Результат: "{""x"":32.125,""y"":-117.125,""spatialReference"":{""wkid"":4326}}" Результат: "Fri Nov 03 17:07:56 PDT 2017" |
valueOf(fieldName) Возвращает: string Пример: valueOf(Geometry) Пример: valueOf(Epoch) | Возвращает представление строки со значением в заданном поле атрибута события. Функции toString( ) и valueOf( ) работают идентично. |
Тригонометрические функции процессора Калькулятора поля
Функция | Описание |
---|---|
acos(double) | Возвращает арккосинус числа (угол в диапазоне от 0.0 до π) |
asin(double) | Возвращает арксинус числа (угол в диапазоне от -π/2 до π/2) |
atan(double) | Возвращает арктангенс числа (угол в диапазоне от -π/2 до π/2) |
atan2(double y, double x) | Возвращает угол θ из преобразования прямоугольных координат (x,y) в полярные (r,θ) |
cos(double) | Возвращает тригонометрический косинус угла |
cosh(double) | Вычисляет гиперболический косинус числа двойной точности |
sin(double) | Вычисляет тригонометрический синус угла |
sinh(double) | Вычисляет гиперболический синус числа двойной точности |
tan(double) | Вычисляет тригонометрический тангенс угла |
tanh(double) | Вычисляет гиперболический тангенс числа двойной точности |
toDegrees(double) | Преобразует значение угла в радианах в приблизительное значение в градусах |
toRadians(double) | Преобразует значение угла в градусах в приблизительное значение в радианах |
Параметры
Параметр | Описание |
---|---|
Имя | Описательное имя процессора, используемое для справочной информации в GeoEvent Manager. |
Процессор | Имя выбранного процессора. |
Выражение | Выражение, которое вычисляется процессором для каждой записи входящего события. Выражения могут быть математическими или лексическими. Возможные входные данные для этого параметра:
Полный список поддерживаемых операторов и функций, которые могут использоваться процессором как часть выражения, см. в разделе выше Поддерживаемые операторы и функции. Примечание:Пример простого выражения: Altitude + 100. Выражение записывается для оценки значения поля, называемого Altitude, чтобы добавить 100 к нему. Если поле Altitude из записи события имеет сохраненное значение 12500, выражение выдаст новое значение 12600 (12500 + 100 = 12600). Оно может сохраняться в поле с типом string или integer. Если подобное выражение задано как ‘Altitude’ + 100, то выражение записывается, чтобы взять буквенную строку, Altitude, и добавить к ней 100. Если новое поле, в котором хранится результат выражения, является строкой, выходными данными будет Altitude100, так как поддерживается конкатенация строк. Если новое поле, в котором хранятся выходные данные выражения, имеет целочисленный тип данных, то выражение является логически недопустимым и не приведет к получению значения. Если выражение использует строковую функцию, например, length(Altitude), выражение записывается для подсчета общего количества символов в строке из поля Altitude. Если высота выражается как целочисленный тип данных (например, 12500), приведенное выше выражение является логически недопустимым и не приведет к значению. Причина в том, что length() – строковое выражение, которое ожидает строковое значение в скобках, а не целое число. Но если высота выражается в виде строки, приведенное выше выражение будет возвращать значение 5, так как строка 12500 содержит символы 5). |
Целевое поле | Задает целевое поле для значения(й), вычисляемых процессором. Целевое поле – это место, куда будет записан результат выражения. По умолчанию – Существующее поле.
|
Имя нового поля (Условия) | Имя нового поля, в которое будут записаны значения, вычисленные процессором. Свойство отображается, когда для Целевого поля установлено Новое поле, и скрыто, когда выбрано Существующее поле. |
Тип нового поля (Условия) | Укажите тип данных нового поля, создаваемого процессором. По умолчанию – Boolean. Доступные типы данных:
Свойство отображается, когда для Целевого поля установлено Новое поле, и скрыто, когда выбрано Существующее поле. |
Тег нового поля (Условия) | Имя существующего тега поля, который будет применен к новому полю. Для этого параметра отсутствует значение по умолчанию. Примечание:Тег должен уже существовать, чтобы новое поле было им отмечено. Процессор не создает теги динамически. Дополнительные сведения об управлении и создании тегов см. в разделе Управление тегами. Свойство отображается, когда для Целевого поля установлено Новое поле, и скрыто, когда выбрано Существующее поле. |
Имя нового определения GeoEvent (Условия) | Имя, которое присваивается для нового Определения GeoEvent. Новое определение GeoEvent объединит схему записи входящего события с новым полем, используемым для хранения вычисленных значений. Свойство отображается, когда для Целевого поля установлено Новое поле, и скрыто, когда выбрано Существующее поле. |
Имя существующего поля | Имя существующего поля, в которое будут записаны значения, вычисленные процессором. Для этого параметра отсутствует значение по умолчанию. Примечание:Используйте меню Определение, чтобы задать определение GeoEvent записей входящих событий. Указание определения GeoEvent сузит область доступных полей для выбора. Используйте меню Поле, чтобы выбрать имя существующего поля, в которое будут записаны значения, вычисленные процессором. |
Советы и ограничения
- Некоторые аспекты, которые следует учитывать при использовании процессора Калькулятор поля:
- Выражения могут быть как математическими, так и лексическими (на основе строк, а не числовых значений).
- При работе с текстовыми строками, всегда заключайте их в одинарные кавычки: 'Cat' + ' ' + 'Dog'.
- Процессор будет выводить нулевое (null) значение, в случае неудачи преобразования типов или невозможности вычисления выражения.
- Операндами выражения могут быть буквенные имена полей или теги, примененные к полям в определении GeoEvent. Например, выражение Odom1 + Odom2 можно использовать для сложения значений полей Odom1 и Odom2 и вычисления простой суммы. Если поле Odom1 было отмечено тегом MILEAGEA, а поле Odom2 – тегом MILEAGEB, то можно использовать выражение MILEAGEA + MILEAGEB.
- Добросовестные усилия будут направлены на обработку данных различных типов в выражении. Например, 325 + 0.125, будет преобразовано в эквивалентное 325.0 + 0.125. Если указанное поле вывода ожидает длинное целое значение, то вычисленное значение двойной точности будет обрезано.
- Следите за переполнением при создании выражений. Например, каждый элемент в выражении 60 * 60 * 80 * 10000 является коротким целым, но результат превосходит 32-битный диапазон нормального целого. Объявление каждого члена выражения значением двойной точности, подобно 60.0 * 60.0 * 80.0 * 10000.0, поможет избежать данной проблемы.
- Запись вычисленного значения в новое поле изменяет схему записи события, что требует от GeoEvent Server создания нового Определения GeoEvent. При использовании процессора для создания нового поля необходимо указать имя поля и тип данных. Для определения GeoEvent может быть указано имя и дополнительный тег, который, если он задан, будет применяться к новому полю в результирующем определении GeoEvent.
- Если обработка или фильтрация включена в состав любого сервиса GeoEvent, общая пропускная способность записей событий уменьшается из-за вычислительных затрат. Учитывайте это при разработке сервиса GeoEvent, который применяет процессор Калькулятор поля или любой другой процессор. Чтобы повысить производительность сервиса GeoEvent или всего сайта GeoEvent Server, рассмотрите возможность предварительной обработки или фильтрации данных в реальном времени.
- Учитывайте типы данных поля или поля с тегом при построении выражения в процессоре Калькулятор полей. Иногда выражения являются логически недопустимыми из-за типа данных поля и не возвращают значение. В других случаях выражения логически корректны, но могут привести к неожиданному результату из-за задействованных типов данных. Например, попытка вычислить математическую сумму двух чисел, выраженных в виде строк, для хранения в новом поле с типом данных double недопустима. То же самое выражение допустимо, однако, если новое поле, получающее значение, является строкой, но результирующее значение может отличаться от ожидаемого. Каждое из чисел будет объединено вместе, а не математически сложено.