On this page
calculate
Вычисление
Вопросы типа calculate в XLSForm и rtSurvey используются для выполнения вычислений на основе других полей или значений формы. Такие вопросы не отображаются пользователю, а выполняются в фоновом режиме, сохраняя результаты для дальнейшего использования или отправки.
Синтаксис
В XLSForm вопрос типа calculate определяется следующим образом:
| type | name | label | calculation |
|---|---|---|---|
| calculate | calc_q1 | ${q1} + ${q2} |
- type: всегда “calculate” для данного типа вопроса.
- name: уникальное имя для поля calculate.
- label: обычно оставляется пустым, так как поля calculate не отображаются пользователям.
- calculation: формула для вычисления.
Применение
Вопросы типа calculate обычно используются для:
- Выполнения арифметических операций
- Конкатенации строк
- Применения сложной логики или функций
- Хранения промежуточных результатов для дальнейшего использования
Примеры
Базовая арифметика
| type | name | calculation |
|-----------|----------|-------------|
| calculate | total | ${price} * ${quantity} |
Конкатенация строк
| type | name | calculation |
|-----------|----------|-------------|
| calculate | full_name| concat(${first_name}, ' ', ${last_name}) |
Использование функций
| type | name | calculation |
|-----------|----------|-------------|
| calculate | age | int((today() - ${date_of_birth}) / 365.25) |
Расширенное использование в rtSurvey
Функция pulldata()
rtSurvey поддерживает функцию pulldata() в полях calculate, позволяя получать данные из внешних CSV-файлов:
| type | name | calculation |
|-----------|----------|-------------|
| calculate | city | pulldata('cities', 'city_name', 'zip_code', ${zip_input}) |
Синтаксис
Базовый синтаксис pulldata():
pulldata('csv_filename', 'column_to_return', 'key_column', ${matching_value})
- ‘csv_filename’: имя CSV-файла (без расширения .csv)
- ‘column_to_return’: имя столбца, содержащего нужные данные
- ‘key_column’: имя столбца для сопоставления
- ${matching_value}: значение для поиска в ключевом столбце (часто переменная из формы)
Важные замечания
- CSV-файл должен быть загружен вместе с XLSForm при развёртывании опроса.
- Используйте запятые в качестве разделителей в CSV-файле, а не точки с запятой.
- Избегайте запятых внутри полей данных CSV, так как они могут вызвать проблемы с разбором.
- pulldata() поддерживает только отношения 1-к-1. При нескольких совпадениях возвращается только первое.
- Может существовать ограничение на длину извлекаемого текста (около 76 символов).
- Можно использовать pulldata() в ограничениях для проверки записей по данным CSV.
Условные вычисления
Для условных вычислений можно использовать операторы if():
| type | name | calculation |
|-----------|----------|-------------|
| calculate | discount | if(${total} > 1000, ${total} * 0.1, 0) |
Лучшие практики
- Используйте содержательные имена для полей calculate для улучшения читаемости формы.
- Избегайте слишком сложных вычислений в одном поле; при необходимости разбивайте их на части.
- Тщательно тестируйте вычисления, особенно при использовании сложных формул или внешних данных.
- Помните, что поля calculate выполняются каждый раз при обновлении формы, что может влиять на производительность при большом количестве сложных вычислений.
- При использовании pulldata() убедитесь, что CSV-файлы правильно отформатированы, и тщательно тестируйте с вашими конкретными данными и структурой формы.
Ограничения
- Поля calculate недоступны для прямого редактирования пользователями.
- Результат поля calculate не виден немедленно, если не используется в отображаемом поле или в логике формы.
Была ли эта страница полезной?