Ранжирование
Вопросы типа rank позволяют респондентам упорядочивать набор вариантов по предпочтению или приоритету.
Тип вопроса rank представляет список вариантов, которые респондент должен перетащить в нужном порядке (или иначе упорядочить от первого до последнего). Результат хранится в виде разделённого пробелами списка значений вариантов в выбранном порядке, с наиболее приоритетным вариантом первым.
Базовая спецификация XLSForm
| type | name | label |
|---|---|---|
| rank priorities | main_priority | Упорядочите потребности сообщества от наиболее до наименее важных |
Варианты определяются в листе choices так же, как для select_one:
survey:
| type | name | label |
|---|---|---|
| rank priorities | main_priority | Упорядочите потребности от наиболее до наименее важных |
choices:
| list_name | name | label |
|---|---|---|
| priorities | water | Чистая вода |
| priorities | health | Здравоохранение |
| priorities | education | Образование |
| priorities | roads | Дороги |
| priorities | electricity | Электричество |
Формат хранимого значения
Хранимое значение — это разделённый пробелами список значений вариантов в ранжированном порядке (первый = наивысший приоритет):
water education health roads electricity
Извлечение ранжированных позиций
Используйте selected-at() для получения варианта на конкретной позиции ранга:
| type | name | label | calculation |
|---|---|---|---|
| rank priorities | main_priority | Упорядочите потребности сообщества | |
| calculate | top_priority | selected-at(${main_priority}, 0) | |
| calculate | second_priority | selected-at(${main_priority}, 1) |
selected-at(${main_priority}, 0) возвращает значение, поставленное первым (индекс 0 = наивысший ранг).
Использование rank-index() с группами повторений
Когда rank используется внутри группы повторений, rank-index() позволяет ссылаться на порядковый ранг извне повторения:
| type | name | label | calculation |
|---|---|---|---|
| calculate | first_ranked | rank-index(1, ${score}) |
Подробности о rank-index() и rank-index-if() см. в Функции — Функции для повторяющихся полей.
Применение
Вопросы типа rank обычно используются для:
- Ранжирования приоритетов — просьба сообществ упорядочить потребности в развитии
- Упорядочивания предпочтений — ранжирование функций продукта, атрибутов услуги или вариантов политики
- Упорядочивания элементов экзамена — расстановка шагов в процессе
- Отбора Top-N — в сочетании с
selected-at()для извлечения только 1, 2 или 3 лучших вариантов
Лучшие практики
- Держите список коротким (3–7 элементов) — ранжирование становится когнитивно затруднительным при более чем 7–8 вариантах.
- Используйте чёткие, взаимоисключающие метки вариантов, чтобы избежать путаницы в значении “первого”.
- Добавьте текст подсказки, объясняющий направление ранжирования (например, “Перетащите для упорядочивания: первый = наиболее важный”).
- Используйте
count-selected(.) = xдля проверки, что все варианты ранжированы.
Ограничения
- Виджет перетаскивания требует сенсорного экрана или мыши — он может плохо работать в средах только с клавиатурой.
- На некоторых старых мобильных клиентах виджет ранжирования может переходить к интерфейсу с числовым вводом.
- Нельзя выполнять частичное ранжирование (то есть ранжировать только часть вариантов) — все варианты должны быть упорядочены.