Платформа 3V/Выражение/Расчет выражений: различия между версиями

Материал из 3v-wiki
Перейти к навигации Перейти к поиску
(Новая страница: «{{DISPLAYTITLE:Расчет выражений}} == Синтаксис == * Операнды задаются в квадратных скобках, наприм...»)
 
 
(не показаны 33 промежуточные версии 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([>= 2 операндов через запятую])
+
* 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]) - объединение строк
* IndexOf([строка, в которой ищем], [строка, которую ищем])
+
* IndexOf([строка, в которой ищем], [строка, которую ищем]) - возвращает индекс первого символа строки, которую ищем или -1, если не найдена
 +
* Length([строка]) - возвращает длину строки
 
* Letter([целое число - индекс латинской буквы]) - возвращает букву от A до Z
 
* Letter([целое число - индекс латинской буквы]) - возвращает букву от A до Z
 
* Padleft([строка], [ожидаемая длина строки], [символ "замощения" слева])
 
* Padleft([строка], [ожидаемая длина строки], [символ "замощения" слева])
 
* Substring([строка], [начальный индекс, начиная с 0]'', [кол-во символов]'')
 
* Substring([строка], [начальный индекс, начиная с 0]'', [кол-во символов]'')
 +
* Split([0], [1]) - Разбивает строку на коллекцию строковых элементов через разделитель
 +
* Join([0], [1]) - Объединяет коллекцию через разделитель в строку
 
=== Для работы с датами ===
 
=== Для работы с датами ===
* DayOfMonth([дата])
+
* DateToString([дата]'', 'формат: строка''') - преобразование даты в строку с учетом формата; если формат не задан, то подставляется "dd.MM.yyyy"; [https://metanit.com/sharp/tutorial/19.2.php подробнее о форматах]
 +
* 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).

Работа с коллекциями

  1. Детально расписано в статье: Платформа 3V/Расчет выражений/Работа с коллекциями

Прочее

Реализовано в версии 0.40

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]), чтобы преобразовать строку в число.

Реализовано в версии 0.43

CurrentLocale() При необходимости вернуть текущую локаль следует использовать метод CurrentLocale()

1 {
2  "expression": "CurrentLocale()",
3  "operands": [],
4  "id": 3,
5  "name": "Текущая локаль",
6  "code": null
7 }