Перейти к основному содержимому

Ротация и рандомизация

· 6 мин. чтения

В 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);

Группы кодов

Иногда бывает нужно перемешивать группы ответов между собой, например 3 блока с кодами 1-3, 4-6 и 7. Это делается так:

Q.answers.randomizeGroups([ [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.randomizeGroups([ [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()​, для ротации можно использовать такую функцию.

Повторный запуск анкеты и просмотр интервью

Перемешивание выполняется один раз, при первом запуске анкеты, если оно сделано флагом или в скрипте Подготовка. При этом в просмотре интервью порядок вопросов и ответов будет таким же, как при заполнении анкеты.

Если перемешивание выполняется в скрипте перед показом или после ответа, то оно будет срабатывать при каждом показе вопроса (при переходе на него), а порядок в просмотре — таким, какой был в последний раз.