Платформа 3V/Выражение/Расчет выражений: различия между версиями
(не показаны 32 промежуточные версии 7 участников) | |||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE:Расчет выражений}} | {{DISPLAYTITLE:Расчет выражений}} | ||
+ | |||
+ | '''Актуальную информацию о функциях на платформе 3V вы найдете здесь:''' https://docs.3v-group.net/ru/DataCalculations/Expression | ||
+ | |||
== Синтаксис == | == Синтаксис == | ||
* Операнды задаются в квадратных скобках, например '''[0]'''. | * Операнды задаются в квадратных скобках, например '''[0]'''. | ||
− | * Параметры функций перечисляются через запятую. | + | * Параметры функций перечисляются через запятую. |
* Логические операторы (не функции): and (или &&), or (или ||), not (или !). | * Логические операторы (не функции): and (или &&), or (или ||), not (или !). | ||
* Логические константы: true, false | * Логические константы: true, false | ||
+ | |||
+ | Также добавлен [https://3v.3v-group.net/swagger/index.html?urls.primaryName=Engine#/Calculation/Calculation_NCalcCalculator онлайн расчет выражений] | ||
+ | с моделью: | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | { | ||
+ | "expression": "FindIndex([1], [2])", | ||
+ | "operandValues": [ | ||
+ | { | ||
+ | "id": 1, | ||
+ | "value": [ | ||
+ | 1, | ||
+ | 2, | ||
+ | 3 | ||
+ | ] | ||
+ | }, | ||
+ | { | ||
+ | "id": 2, | ||
+ | "value": 2 | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | где '''expression''' - текст формулы, а '''operandValues''' - операнды для формулы, для каждого из операндов необходимо указать соответствующий id, как с формуле и value (допускается как единичное значение, так и множественное) | ||
+ | |||
+ | ==Приведение == | ||
+ | * приведение числа к строке можно воспользоваться операцией сложения. '' + [0] - в данном случае т.к. первый элемент строка, то вторая часть выражения приведется к строке. | ||
== Функции == | == Функции == | ||
=== Логические === | === Логические === | ||
* if([условие], [если true], [если false]) | * if([условие], [если true], [если false]) | ||
− | * in([ | + | * in([значение, с которым сравнивать], [одно или более значений/массивов через запятую, которые сравнивать]) |
=== Связанные с null'ом === | === Связанные с null'ом === | ||
* Coalesce([операнды через запятую]) - возвращает первый не null, либо null, если все null | * Coalesce([операнды через запятую]) - возвращает первый не null, либо null, если все null | ||
* Null() - возвращает null | * Null() - возвращает null | ||
* IsNull([0]) - проверяет на null | * IsNull([0]) - проверяет на null | ||
+ | * IsNullOrEmpty([0]) - проверяет значение на null и пустоту | ||
+ | * '''ВНИМАНИЕ!!!''' в КАРТОЧКАХ при расчете Expression при передаче параметров в формулу значение null меняется на пустую строку. <br> | ||
+ | Пример: if([0] = '', true, false), тут если придет null в качестве значения параметра 0, то карточки приведут его значение к пустой строке и формула вернет true.<br> | ||
+ | Но если используется какая то функция в самой формуле которая может вернуть null, то такая проверка не сработает.<br> | ||
+ | Пример: if(if([0] = '', Null(), [0]) = '', true, false), тут результат вложенного if вернет null и тогда верхний if вернет false. | ||
+ | |||
=== Агрегатные === | === Агрегатные === | ||
С любыми типами данных: | С любыми типами данных: | ||
Строка 39: | Строка 74: | ||
* IEEERemainder([число], [число]) | * IEEERemainder([число], [число]) | ||
* LinearRegression([массив чисел], [массив чисел], [число]) | * LinearRegression([массив чисел], [массив чисел], [число]) | ||
+ | * Median([массив чисел]) - вычисление медианы набора чисел. | ||
* Log([число], [число]) | * Log([число], [число]) | ||
* Log10([число]) | * Log10([число]) | ||
− | * Pow([число], [ | + | * Pow([число], [степень]) - Возведение в степень |
* Round([число], [целое число]) | * Round([число], [целое число]) | ||
* Sign([число]) | * Sign([число]) | ||
Строка 48: | Строка 84: | ||
* Tan([число]) | * Tan([число]) | ||
* Truncate([число]) | * Truncate([число]) | ||
+ | |||
=== Строковые === | === Строковые === | ||
* Concatenate([разделитель:строка], [строка 1], ..., [строка N]) - объединение строк | * Concatenate([разделитель:строка], [строка 1], ..., [строка N]) - объединение строк | ||
Строка 55: | Строка 92: | ||
* Padleft([строка], [ожидаемая длина строки], [символ "замощения" слева]) | * Padleft([строка], [ожидаемая длина строки], [символ "замощения" слева]) | ||
* Substring([строка], [начальный индекс, начиная с 0]'', [кол-во символов]'') | * Substring([строка], [начальный индекс, начиная с 0]'', [кол-во символов]'') | ||
+ | * Split([0], [1]) - Разбивает строку на коллекцию строковых элементов через разделитель | ||
+ | * Join([0], [1]) - Объединяет коллекцию через разделитель в строку | ||
=== Для работы с датами === | === Для работы с датами === | ||
− | * DateToString([дата]'', | + | * DateToString([дата]'', 'формат: строка''') - преобразование даты в строку с учетом формата; если формат не задан, то подставляется "dd.MM.yyyy"; [https://metanit.com/sharp/tutorial/19.2.php подробнее о форматах] |
− | * DayOfMonth([дата]) | + | * DayOfMonth([дата]) - возвращает число: день месяца |
* DayOfYear([дата]) | * DayOfYear([дата]) | ||
* DayOfWeek([дата]) | * DayOfWeek([дата]) | ||
* DaysInMonth([год:число], [месяц:число]) | * DaysInMonth([год:число], [месяц:число]) | ||
* FullYears([дата начала], [дата окончания]) - кол-во полных лет | * FullYears([дата начала], [дата окончания]) - кол-во полных лет | ||
− | * IsLeapYear([год:число]) | + | * IsLeapYear([год:число]) - високосный ли год |
− | * Month([дата]) | + | * Month([дата]) - возвращает число: номер месяца |
− | * Now() | + | * Now() - возвращает сегодняшнее число и текущее время |
− | * Today() | + | * Today() - возвращает сегодняшнее число (время 00:00:00) |
− | * Year([дата]) | + | * Year([дата]) - возвращает число: год |
+ | * ComposeDate([год:число], [месяц:число], [день:число]) - возвращает дату | ||
+ | * ComposeDate([год:число], [месяц:число], [день:число], [час:число], [минута:число], [секунда:число]) - возвращает дату-время | ||
+ | * TrimTime([дата]) - возвращает дату без часов, минут, миллисекунд в формате dd.MM.yyyy , если на входе будет null, упадет ошибка | ||
+ | |||
+ | * AddMinutes([дата], [количество минут: вещественное или целое число]) - добавление минут к дате. | ||
+ | * AddHours([дата], [количество часов: вещественное или целое число]) - добавление часов к дате. | ||
+ | * AddDays([дата], [количество дней: вещественное или целое число]) - добавление дней к дате. | ||
+ | * AddMonths([дата], [количество месяцев: целое число]) - добавление месяцев к дате. | ||
+ | * AddYears([дата], [количество лет: целое число]) - добавление годов к дате. | ||
+ | |||
+ | === Преобразование === | ||
+ | * ToString([значение]) - преобразовывает значение в строку | ||
+ | * ToInt([значение]) - преобразовывает значение в целое число | ||
+ | * ToDouble([значение]) - преобразовывает значение в число с плавающей запятой | ||
+ | * ToBoolean([значение]) - преобразовывает значение в логическое значение | ||
+ | * ToDate([значение]) - преобразовывает значение в дату | ||
+ | |||
+ | === Random === | ||
+ | * RandomInt() - возвращает целочисленное случайное число. | ||
+ | * RandomInt([максимальное значение]) - возвращает целочисленное случайное число, которое будет ограничено максимальным значением. | ||
+ | * RandomInt([минимальное значение],[максимальное значение]) - возвращает целочисленное случайное число, которое будет ограничено минимальным и максимальным значением. | ||
+ | * RandomDouble() - возвращает вещественное случайное число в диапазоне [0,1). | ||
+ | |||
+ | === Работа с коллекциями === | ||
+ | #Детально расписано в статье: [[Платформа 3V/Расчет выражений/Работа с коллекциями]] | ||
+ | === Прочее === | ||
+ | |||
+ | <div align="right">'''''Реализовано в [[Описание_релизов/0.40.0 | версии 0.40]]'''''</div> | ||
+ | '''Format()''' | ||
+ | Чтобы изменить формат числа следует использовать функцию формата Format(<Source_Template>, <Collection_Values>) или Format(<Source_Template>, <Value0>, <Value1>, <Value2>...), где | ||
+ | *Source_Template - шаблон для вставки, где вставка значения обозначается {0}. Подробнее про возможные шаблоны читай [https://docs.microsoft.com/ru-ru/dotnet/standard/base-types/standard-numeric-format-strings здесь] | ||
+ | *Value - вставляемое значение. Счётчик идентификатора для значения начинается с 0. | ||
+ | Пример задания формата вида 000 000, 00 USD. | ||
+ | <div style="width:700px;> | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | { | ||
+ | "expression": "Format('{0:N2} USD', [1])" | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | </div> | ||
+ | Где: <br> | ||
+ | * N - шаблон, результатом которого являются цифры целой и дробной частей, разделители групп и разделитель целой и дробной частей с необязательным отрицательным знаком <br> | ||
+ | * 2 - два знака после запятой<br> | ||
+ | * USD - фиксированный текст, который добавляется в конце значения.<br> | ||
+ | |||
+ | ''Важно!'' Если функция используется для форматирования числовых данных, то требуется проверить, что операнд возращает числовое значение, если же возвращается строка, то воспользуйтесь функцией toDouble([1]), чтобы преобразовать строку в число. | ||
+ | |||
+ | <div align="right">'''''Реализовано в [[Описание_релизов/0.43.0 | версии 0.43]]'''''</div> | ||
+ | '''CurrentLocale()''' | ||
+ | При необходимости вернуть текущую локаль следует использовать метод CurrentLocale() | ||
+ | <div style="width:700px;> | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | { | ||
+ | "expression": "CurrentLocale()", | ||
+ | "operands": [], | ||
+ | "id": 3, | ||
+ | "name": "Текущая локаль", | ||
+ | "code": null | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | </div> |
Текущая версия на 20:42, 24 апреля 2023
Актуальную информацию о функциях на платформе 3V вы найдете здесь: https://docs.3v-group.net/ru/DataCalculations/Expression
Содержание
Синтаксис
- Операнды задаются в квадратных скобках, например [0].
- Параметры функций перечисляются через запятую.
- Логические операторы (не функции): and (или &&), or (или ||), not (или !).
- Логические константы: true, false
Также добавлен онлайн расчет выражений с моделью:
1 {
2 "expression": "FindIndex([1], [2])",
3 "operandValues": [
4 {
5 "id": 1,
6 "value": [
7 1,
8 2,
9 3
10 ]
11 },
12 {
13 "id": 2,
14 "value": 2
15 }
16 ]
17 }
где expression - текст формулы, а operandValues - операнды для формулы, для каждого из операндов необходимо указать соответствующий id, как с формуле и value (допускается как единичное значение, так и множественное)
Приведение
- приведение числа к строке можно воспользоваться операцией сложения. + [0] - в данном случае т.к. первый элемент строка, то вторая часть выражения приведется к строке.
Функции
Логические
- if([условие], [если true], [если false])
- in([значение, с которым сравнивать], [одно или более значений/массивов через запятую, которые сравнивать])
Связанные с null'ом
- Coalesce([операнды через запятую]) - возвращает первый не null, либо null, если все null
- Null() - возвращает null
- IsNull([0]) - проверяет на null
- IsNullOrEmpty([0]) - проверяет значение на null и пустоту
- ВНИМАНИЕ!!! в КАРТОЧКАХ при расчете Expression при передаче параметров в формулу значение null меняется на пустую строку.
Пример: if([0] = , true, false), тут если придет null в качестве значения параметра 0, то карточки приведут его значение к пустой строке и формула вернет true.
Но если используется какая то функция в самой формуле которая может вернуть null, то такая проверка не сработает.
Пример: if(if([0] = , Null(), [0]) = , true, false), тут результат вложенного if вернет null и тогда верхний if вернет false.
Агрегатные
С любыми типами данных:
- Count
- NullsCount
- NotNullsCount
- DistinctCount
С числами и датами:
- Min
- Max
С числами:
- Sum
- Avg
Со строками:
- Concatenate([разделитель:строка], [строка 1], ..., [строка N]) - объединение строк
Математические
- Abs([число]) - модуль числа
- Acos([число])
- Asin([число])
- Atan([число])
- Ceiling([число])
- Cos([число])
- Exp([число])
- Floor([число])
- IEEERemainder([число], [число])
- LinearRegression([массив чисел], [массив чисел], [число])
- Median([массив чисел]) - вычисление медианы набора чисел.
- Log([число], [число])
- Log10([число])
- Pow([число], [степень]) - Возведение в степень
- Round([число], [целое число])
- Sign([число])
- Sin([число])
- Sqrt([число])
- Tan([число])
- Truncate([число])
Строковые
- Concatenate([разделитель:строка], [строка 1], ..., [строка N]) - объединение строк
- IndexOf([строка, в которой ищем], [строка, которую ищем]) - возвращает индекс первого символа строки, которую ищем или -1, если не найдена
- Length([строка]) - возвращает длину строки
- Letter([целое число - индекс латинской буквы]) - возвращает букву от A до Z
- Padleft([строка], [ожидаемая длина строки], [символ "замощения" слева])
- Substring([строка], [начальный индекс, начиная с 0], [кол-во символов])
- Split([0], [1]) - Разбивает строку на коллекцию строковых элементов через разделитель
- Join([0], [1]) - Объединяет коллекцию через разделитель в строку
Для работы с датами
- DateToString([дата], 'формат: строка') - преобразование даты в строку с учетом формата; если формат не задан, то подставляется "dd.MM.yyyy"; подробнее о форматах
- DayOfMonth([дата]) - возвращает число: день месяца
- DayOfYear([дата])
- DayOfWeek([дата])
- DaysInMonth([год:число], [месяц:число])
- FullYears([дата начала], [дата окончания]) - кол-во полных лет
- IsLeapYear([год:число]) - високосный ли год
- Month([дата]) - возвращает число: номер месяца
- Now() - возвращает сегодняшнее число и текущее время
- Today() - возвращает сегодняшнее число (время 00:00:00)
- Year([дата]) - возвращает число: год
- ComposeDate([год:число], [месяц:число], [день:число]) - возвращает дату
- ComposeDate([год:число], [месяц:число], [день:число], [час:число], [минута:число], [секунда:число]) - возвращает дату-время
- TrimTime([дата]) - возвращает дату без часов, минут, миллисекунд в формате dd.MM.yyyy , если на входе будет null, упадет ошибка
- AddMinutes([дата], [количество минут: вещественное или целое число]) - добавление минут к дате.
- AddHours([дата], [количество часов: вещественное или целое число]) - добавление часов к дате.
- AddDays([дата], [количество дней: вещественное или целое число]) - добавление дней к дате.
- AddMonths([дата], [количество месяцев: целое число]) - добавление месяцев к дате.
- AddYears([дата], [количество лет: целое число]) - добавление годов к дате.
Преобразование
- ToString([значение]) - преобразовывает значение в строку
- ToInt([значение]) - преобразовывает значение в целое число
- ToDouble([значение]) - преобразовывает значение в число с плавающей запятой
- ToBoolean([значение]) - преобразовывает значение в логическое значение
- ToDate([значение]) - преобразовывает значение в дату
Random
- RandomInt() - возвращает целочисленное случайное число.
- RandomInt([максимальное значение]) - возвращает целочисленное случайное число, которое будет ограничено максимальным значением.
- RandomInt([минимальное значение],[максимальное значение]) - возвращает целочисленное случайное число, которое будет ограничено минимальным и максимальным значением.
- RandomDouble() - возвращает вещественное случайное число в диапазоне [0,1).
Работа с коллекциями
- Детально расписано в статье: Платформа 3V/Расчет выражений/Работа с коллекциями
Прочее
Format() Чтобы изменить формат числа следует использовать функцию формата Format(<Source_Template>, <Collection_Values>) или Format(<Source_Template>, <Value0>, <Value1>, <Value2>...), где
- Source_Template - шаблон для вставки, где вставка значения обозначается {0}. Подробнее про возможные шаблоны читай здесь
- Value - вставляемое значение. Счётчик идентификатора для значения начинается с 0.
Пример задания формата вида 000 000, 00 USD.
1 {
2 "expression": "Format('{0:N2} USD', [1])"
3 }
Где:
- N - шаблон, результатом которого являются цифры целой и дробной частей, разделители групп и разделитель целой и дробной частей с необязательным отрицательным знаком
- 2 - два знака после запятой
- USD - фиксированный текст, который добавляется в конце значения.
Важно! Если функция используется для форматирования числовых данных, то требуется проверить, что операнд возращает числовое значение, если же возвращается строка, то воспользуйтесь функцией toDouble([1]), чтобы преобразовать строку в число.
CurrentLocale() При необходимости вернуть текущую локаль следует использовать метод CurrentLocale()
1 {
2 "expression": "CurrentLocale()",
3 "operands": [],
4 "id": 3,
5 "name": "Текущая локаль",
6 "code": null
7 }