Множественный выбор
Вопросы типа select_multiple позволяют респондентам выбирать один или несколько вариантов из заранее определённого списка.
Тип вопроса select_multiple отображает список, в котором респондент может выбрать один или несколько вариантов. По умолчанию варианты отображаются в виде флажков. Хранимое значение — это разделённый пробелами список всех выбранных значений вариантов.
Базовая спецификация XLSForm
Лист survey:
| type | name | label |
|---|---|---|
| select_multiple crops | crops_grown | Какие культуры выращивает домохозяйство? |
Лист choices:
| list_name | name | label |
|---|---|---|
| crops | maize | Кукуруза |
| crops | beans | Фасоль |
| crops | rice | Рис |
| crops | vegetables | Овощи |
| crops | other | Другое |
Дополнительную информацию см. в спецификации XLSForm.
Формат хранимых данных
Экспортированный столбец содержит разделённый пробелами список выбранных значений:
maize beans vegetables
Используйте функцию selected() — а не = — при проверке значений select_multiple в выражениях (см. ниже).
Применение
Вопросы типа select_multiple используются для:
- Сбора нескольких применимых ответов (например, источники дохода, выращиваемые культуры, симптомы)
- Элементов согласия с флажками (например, «Выберите всё применимое»)
- Перечней языков или навыков
- Любого вопроса, где одновременно допустимы несколько ответов
Варианты внешнего вида
| Внешний вид | Описание |
|---|---|
| (нет) | Флажки по умолчанию, по одному в строке |
minimal | Выпадающий список с множественным выбором |
compact | Компактная сетка, количество столбцов адаптируется к ширине экрана |
compact-N | Компактная сетка, принудительно N столбцов |
horizontal | Варианты расположены горизонтально в ряд (веб) |
horizontal-compact | Горизонтально, компактный отступ (веб) |
label | Показывает только метки, без флажков (используйте с list-nolabel) |
list-nolabel | Показывает только флажки, без меток (используйте с label) |
columns(N) | Отображение в N столбцах (расширение rtSurvey) |
Пример: 3-колоночный компактный макет
| type | name | label | appearance |
|---|---|---|---|
| select_multiple symptoms | symptoms | Выберите все наблюдаемые симптомы | compact-3 |
Использование selected() в выражениях
Поскольку хранимое значение является строкой, разделённой пробелами, для проверки выбора конкретного варианта необходимо использовать selected(). Использование = работать правильно не будет.
В relevant
Показать следующий вопрос только если выбрано “другое”:
| type | name | label | relevant |
|---|---|---|---|
| select_multiple crops | crops_grown | Какие культуры выращиваются? | |
| text | crops_other | Пожалуйста, укажите другие культуры | selected(${crops_grown}, 'other') |
В constraint
Требовать выбора не менее 2 вариантов:
| type | name | constraint | constraint_message |
|---|---|---|---|
| select_multiple issues | issues | count-selected(.) >= 2 | Выберите не менее 2 вопросов |
Ограничить максимум 3 вариантами:
| type | name | constraint | constraint_message |
|---|---|---|---|
| select_multiple priorities | priorities | count-selected(.) <= 3 | Выберите не более 3 приоритетов |
Шаблон «Ничего из вышеперечисленного» / эксклюзивный вариант
Распространённый шаблон — сделать один вариант взаимоисключающим с остальными. Используйте constraint для соблюдения этого:
| type | name | label | constraint | constraint_message |
|---|---|---|---|---|
| select_multiple issues | issues | Выберите все имеющиеся проблемы | not(selected(., 'none') and count-selected(.) > 1) | «Нет» нельзя выбирать вместе с другими вариантами |
choices:
| list_name | name | label |
|---|---|---|
| issues | water | Нехватка воды |
| issues | roads | Плохие дороги |
| issues | health | Отсутствие медицинских услуг |
| issues | none | Ничего из вышеперечисленного |
Подсчёт и обобщение выборов
| Функция | Пример | Результат |
|---|---|---|
count-selected(field) | count-selected(${crops_grown}) | Количество выбранных вариантов |
selected(field, value) | selected(${crops_grown}, 'maize') | true/false |
selected-at(field, index) | selected-at(${crops_grown}, 0) | Первое выбранное значение |
choice-label(field, value) | choice-label(${crops_grown}, 'maize') | Метка для значения |
Лучшие практики
- Всегда используйте
selected()вrelevant,constraintиcalculate— никогда=или!=. - Добавляйте ограничение для лимита максимального количества выборов, если дизайн вопроса требует этого.
- Включайте вариант «Нет» или «Не применимо», когда ноль выборов является допустимым ответом.
- Для длинных списков (15+ вариантов) используйте
minimal(выпадающий список) во избежание чрезмерной прокрутки. - Экспортируйте данные и используйте разбиение строк в инструменте анализа — формат с пробелами требует разделения перед сводными таблицами.
Ограничения
- Значения select_multiple нельзя напрямую сравнивать с помощью
=. Всегда используйтеselected(). - Компактный вид может плохо отображаться для очень длинных меток вариантов.
- При фильтрации вариантов с помощью
choice_filterфильтрация применяется ко всем отображаемым вариантам, как и вselect_one.