В SURVEYSTUDIO можно использовать как ротацию, так и рандомизацию вопросов или ответов. Но для начала давайте разберёмся, в чём между ними разница.
Ротация — последовательный сдвиг на один шаг вопросов или ответов для каждого следующего интервью. Например, если в первом интервью варианты ответа были показаны в порядке 1,2,3,4, то во втором будут 2,3,4,1, в третьем — 3,4,1,2 и так далее.
Рандомизация — перемешивание вопросов или ответов случайным образом. Важно понимать, что именно случайным (неконтролируемо): одинаковый порядок несколько раз подряд — это нормально, хотя может казаться, что рандомизация не работает.
В бумажных анкетах использование ротации было оправдано, так как обеспечить случайный порядок в полевых условиях сложно. Что именно включать в электронных анкетах — решать вам. Давайте только договоримся, что в этой статье для упрощения обе функции будут называться перемешивание.
Независимо от порядка вопросов и ответов во время заполнения анкеты, в массиве порядок всегда один и тот же: как в редакторе анкеты.
Ответы (строки, колонки)
Чаще всего в анкетах нужно просто перемешать между собой варианты ответа в простом вопросе с выбором или строки таблицы, и сделать это очень просто. Достаточно в редакторе вопроса, на вкладке Опции, поставить необходимый флаг:
- Рандомизация вариантов ответа (строк) перед показом
- Ротация вариантов ответа (строк) перед показом
Второй способ — добавить в Подготовку скрипт:
Q1.answers.randomize();
Q1.answers.rotate();
Чтобы ответ всегда оставался на своём месте и не перемешивался, нужно поставить флаг Не подлежит рандомизации / ротации в редакторе ответа.
Нюанс ротации.
Ротируются всегда все ответы, включая скрытые. То есть, если в вопросе включена ротация, и показываются только ранее выбранные ответы, то работа ротации может быть не видна, потому что отображаются не все ответы. Если это не подходит — используйте рандомизацию.
В скриптах показаны примеры перемешивания ответов в обычном вопросе с выбором. Если вам нужно перемешать строки или варианты ответа в таблице — просто заменяйте answers
на rows
(строки) или columns
(ответы в таблице).
Только заданные коды
Когда необходимо перемешивать только некоторые ответы, а не все, используйте такой скрипт:
- Рандомизация
- Ротация
Рандомизировать только коды 1, 3 и 5:
Q.answers.randomize([1,3,5]);
Рандомизировать коды с 1 по 10 (имеется ввиду сплошная нумерация: 1,2,3,4…10):
Q.answers.randomizeFromTo(1, 10);
Ротировать только коды 1, 3 и 5:
Q.answers.rotate([1,3,5]);
Ротировать коды с 1 по 10 (имеется ввиду сплошная нумерация: 1,2,3,4…10):
Q.answers.rotateFromTo(1, 10);
Группы кодов
Иногда бывает нужно перемешивать группы ответов между собой, например 3 блока с кодами 1-3, 4-6 и 7. Это делается так:
- Рандомизация
- Ротация
Q.answers.randomizeGroups([ [1,3], [4,6], [7,7] ]);
Q.answers.rotateGroups([ [1,3], [4,6], [7,7] ]);
[1,3]
буквально означает: взять все ответы между кодами 1 и 3. Это могут быть ответы с любыми кодами, которые находятся внутри: 1, 2, 44, 5… 3.
Одинаковый порядок ответов в двух вопросах
Допустим, ответы перемешаны в Q1, и нужно в Q2 вывести их в таком же порядке. Для этого добавьте в Q2 такой скрипт перед показом:
Q.answers.setOrder(Q1.answers.getCodes());
Воспользовавшись методом setOrder(), вы можете устанавливать ответам (строкам, колонкам) какой угодно порядок, без использования ротации и рандомизации. Например, менять порядок ответов 1,2,3,4,5 на обратный при каждом втором запуске анкеты можно так:
if (rotationCounter % 2 === 0) Q.answers.setOrder([5,4,3,2,1]);
Записать порядок ответов
Если в массиве нужна информация о порядке ответов, который был в момент заполнения вопроса (например, Q34), то добавьте после Q34 текстовый вопрос, в котором будет сохраняться порядок кодов, и скрипт перед показом:
if (Q.isAnswered) return answered;
Q.openValueTxt = Q34.answers.getVisibleCodes().join();
return answered;
Вопросы
В отличие от ответов, которые можно перемешивать в любом месте анкеты и при каких-то условиях (если выбран ответ 1, то перемешать так, а если 2, то перемешать сяк), перемешивать вопросы можно только в Подготовке и без привязки к ответам.
Если вам нужно менять порядок вопросов, в зависимости от какого-то ответа, то это задача на логику и решается переходами от вопроса к вопросу по условию.
Методы ротации и рандомизации вопросов такие же, как у ответов, поэтому просто коротко покажем примеры их использования.
Частой ошибкой новичков является прописывание перехода к вопросу, который перемешивается с другими. Например, где-то в середине анкеты меняются местами вопросы 30,31,32, и где-то есть переход к Q30. При запуске анкеты порядок вопросов может быть таким: 31,32,30. Что будет, если мы сразу попадём на Q30? Он будет задан, а Q31 и Q32 окажутся пропущенными. Поэтому важно внимательно прописывать логику переходов.
Только заданные номера
- Рандомизация
- Ротация
questions.randomize([1,3,5]);
questions.randomizeFromTo(1, 10);
questions.rotate([1,3,5]);
questions.rotateFromTo(1, 10);
Группы номеров
- Рандомизация
- Ротация
questions.randomizeGroups([ [1,3], [4,6], [7,7] ]);
questions.rotateGroups([ [1,3], [4,6], [7,7] ]);
Вопросы в цикле
Чтобы перемешать вопросы, находящиеся внутри цикла, можно, конечно, воспользоваться вышеуказанными методами, однако проще перед созданием цикла перемешать ответы исходного вопроса. Например:
Q1.answers.randomize();
questions.repeat(2, 3, 1);
Записать порядок вопросов
Представим, что в анкете перемешиваются вопросы 4-8, и нужна информация в массиве о порядке только отвеченных из них.
Для этого добавляем текстовый вопрос со скриптом перед показом:
if (Q.isAnswered) return answered;
let firstQn = 3; // номер вопроса перед Q4
let lastQn = 9; // вопрос после Q8
let numbers = questions.getNumbers();
let start = numbers.indexOf(firstQn) + 1;
let end = numbers.indexOf(lastQn);
let nums = [];
for (let i = start; i < end; i++) {
let Qx = questions[numbers[i]];
if (Qx.isAnswered) nums.push(Qx.number);
}
Q.openValueTxt = nums.join();
return answered;
Элементы массива
В скриптах бывает необходимо перемешивать массивы с каким-либо элементами. Для рандомизации в SURVEYSTUDIO есть функция randomizeArray(), для ротации можно использовать такую функцию.
Повторный запуск анкеты и просмотр интервью
Перемешивание выполняется один раз, при первом запуске анкеты, если оно сделано флагом или в скрипте Подготовка. При этом в просмотре интервью порядок вопросов и ответов будет таким же, как при заполнении анкеты.
Если перемешивание выполняется в скрипте перед показом или после ответа, то оно будет срабатывать при каждом показе вопроса (при переходе на него), а порядок в просмотре — таким, какой был в последний раз.