x

Основные главы

  1. LimeSurvey Cloud и LimeSurvey CE: сравнение
  2. Краткое руководство по началу работы - LimeSurvey 3.0+
  3. Установка - LimeSurvey CE
  4. Как разработать хороший опрос (руководство)
  5. Начиная
  6. Администрирование LimeSurvey
  7. Опросы - Вступление
  8. Настройки опроса
  9. Меню опроса
  10. Структура опроса
  11. Вопросы — введение
  12. Группы вопросов - введение
  13. Опросы - управление
  14. Параметры панели инструментов опроса
  15. Многоязычный опрос
  16. Движок ExpressionScript — краткое руководство
  17. Не классифицированы и расширенные функции
  18. ЧаВо
  19. Устранение неполадок
  20. Обходные пути
  21. Лицензия
  22. Журнал изменений версий
  23. Плагины
 Actions

Примеры опросов для Expression Manager

From LimeSurvey Manual

Эта страница, возможно, переведена машинным способом и может содержать ошибки. Показать английский оригинал · Улучшить этот перевод
This page is a translated version of the page Expression Manager sample surveys and the translation is 100% complete.


Введение

Лучший способ научиться использовать ExpressionScript — поработать с готовыми примерами и изменить их под свои задачи.

Ниже приведён набор примеров опросов, которые демонстрируют (и позволяют протестировать), как с помощью EM можно улучшить ваш опрос. Эти опросы находятся в папке /docs/demosurveys дистрибутива.


Условие, персонализация и уравнения

Обзор

В следующем примере вычисляется ИМТ (индекс массы тела) каждого респондента. Ниже перечислены возможности, которые демонстрирует этот пример.

Демонстрируемые возможности EM

  1. Условие — поддержка мощной условной логики;
  2. Подстановка / персонализация — возможность подставлять или персонализировать ответы и метаданные вопросов;
  3. Динамическая персонализация — обратите внимание, что отчёты на странице изменяются по мере ответов на вопросы.
  4. Микроперсонализация — условная персонализация внутри предложений и отчётов с помощью операторов if()
  5. Уравнения — новый тип вопроса, позволяющий выполнять вычисления и сохранять результаты в базе данных, даже если вычисление скрыто
  6. Условная проверка — критерии проверки, например минимально допустимое значение, могут быть условными, например зависеть от уравнений.


Снимки экрана

Этот пример вычисляет индекс массы тела — расчёт на основе вашего веса и роста, позволяющий определить, есть ли у вас избыточный вес. Обратите внимание, что изначально отображаются только четыре обязательных вопроса:



После ввода данных (вы можете выбрать метрические или неметрические единицы измерения) отображается персонализированный отчёт, который обобщает введённую информацию и сообщает ваш статус веса:



Вот другой пример с неметрическими единицами измерения, показывающий, как динамически изменяется результат:



На внутреннем уровне используются скрытые вопросы типа «Уравнение», которые преобразуют данные в метрические единицы (при необходимости) и сохраняют в базе данных рост, вес, ИМТ и статус веса в метрической системе без использования собственного кода JavaScript.

В следующем наборе примеров показано, как использовать математические и другие функции в персонализированных отчётах. Так выглядит страница до ввода каких-либо данных. Предусмотрена условная логика, которая показывает пустые ячейки, если данные не введены (или введены нечисловые данные), вместо «NaN» или «Divide by Zero».



По мере ввода чисел отчёт на странице изменяется и показывает выполняемое вычисление и его результат.



В этом примере опроса есть много других примеров. Например, на снимке экрана ниже показан один из десятков способов заполнить страницу динамического условия. Как сказано в тексте справки, попробуйте разные возраста и особенно нелогичные сочетания ответов, чтобы увидеть забавные сообщения, формируемые внизу. Также обратите внимание: если вы укажете, что у вас больше одного ребёнка, сообщение будет звучать как «I hope you enjoy playing with your X children», а не «I hope you enjoy playing with your child». Это показывает, как легко можно микроперсонализировать предложения, чтобы они соответствовали полу и/или числу ваших респондентов. Можно даже легко спрягать глаголы и склонять существительные в зависимости от пола и числа.



Скачивание

Чтобы получить пример опроса, перейдите по следующей ссылке: LS3_em_tailoring.zip.

Пример переписи

Обзор

Это пример переписи, в котором спрашивается, сколько человек проживает в вашем домохозяйстве.

Он демонстрирует, как условие на уровне группы упрощает реализацию «цикла» вопросов. После создания группы для Человека 1 я экспортировал её. Поскольку я использовал имена переменных qcode, например p1_name, вместо кода SGQA, я мог с помощью текстового редактора быстро изменить и повторно импортировать группу несколько раз (например, на изменение и повторный импорт каждой повторяющейся группы уходило около 10 секунд, при этом все переменные получали уникальные имена, а логика на уровне группы оставалась корректной).

Вы также можете воспользоваться функцией Копировать вопрос, но это будет не так быстро, как вариант, предложенный выше.

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


Демонстрируемые возможности EM

  1. Условие на уровне группы - последующие группы (Человек 1-5) отображаются только в пределах указанного количества проживающих;
  2. Тейлоринг (персонализация) - итоговый отчёт обобщает демографические данные по каждому проживающему;
  3. Последовательное отображение вопросов - как в групповом режиме, так и в режиме «все в одном», следующие вопросы появляются только после ответа на предыдущие.


Скриншоты

Опрос формирует персонализированный отчёт с демографическими данными указанного количества проживающих:



Если переключиться в режим «вопрос за вопросом», вы увидите, что указатель подстраивает вопросы. Поскольку пользователь указал, что этот человек - женщина, задаётся вопрос «Как её зовут». А так как мы ответили «Мария», следующий вопрос звучит: «Сколько лет Марии?»



Скачивание

Чтобы скачать пример опроса, нажмите здесь: LS3_group_relevance.zip.


Каскадные фильтры массива

Обзор

Этот опрос основан на дизайне опроса, предоставленного компанией Joy Lane Research, LLC.


Скриншоты

Обратите внимание на следующее:

  • Q02 показывает только набор продуктов, отмеченных в Q01 (с помощью array_filter)
  • Q02 также показывает «Другой продукт» - текст, введённый в поле «Другая электроника» в Q01
  • Q04 показывает только те продукты из Q02, которые были отмечены (то есть фильтр массива работает каскадно)
  • Q05 показывает только те продукты из Q02, которые не были отмечены в Q02 (с помощью каскадного array_filter_exclude)




Скачивание

Нажмите на следующую ссылку, чтобы скачать приведённый выше пример: Пример опроса LS2_cascading_array_filter.


Подстановка и персонализация с использованием всех типов вопросов и атрибутов

Обзор

Если вы не уверены, как называть переменные (SGQA или Qcode), вы не одиноки. Хотя в основной документации описано, как составлять имена переменных Qcode, ничто не сравнится с работающей демонстрацией. Этот опрос показывает, как получить доступ к атрибутам вопросов и ответам с помощью ExpressionScript.


Для этого примера рекомендуем отключить встроенный Редактор HTML (или переключить его во всплывающий режим) при редактировании этого опроса. Отображение больших HTML-отчётов в режиме редактирования может занять минуту и более.


Содержание

  • Примеры каждого типа вопроса
  • Включены все типы вопросов, которые могут использовать вариант «Другое», чтобы вы могли увидеть, как это влияет на именование переменных
  • Значения по умолчанию для всех типов вопросов, которые их поддерживают
  • Персонализация - отчёты на странице и вне страницы, показывающие все 16 доступных суффиксов точечной нотации EM
  • Эти отчёты показывают все введённые на данный момент данные (то есть показывают, как можно создать собственные печатные отчёты для пользователей вместо экрана печати ответов)
  • Правильное именование всех переменных в формате Qcode и SGQA


Скриншоты

Это очень большой опрос, поэтому мы решили не добавлять скриншоты. Вместо этого скачайте его и попробуйте самостоятельно.


Скачивание

Нажмите на следующую ссылку, чтобы скачать опрос: LS3_EM_question_attributes.lss


Традиционная проверка в новом свете

Обзор

Этот пример демонстрирует все типы проверки, использующие выражения, и то, как они влияют на каждый из типов вопросов, поддерживающих проверку. Во многих случаях подсказки по проверке изначально скрыты и появляются только в том случае, если вопрос не соответствует критериям проверки (и снова исчезают, как только вопрос начинает им соответствовать).


Демонстрируемые типы проверки

  1. min_num_value_n - минимальное значение ответа
  2. max_num_value_n - максимальное значение ответа
  3. min_answers - минимальное необходимое количество ответов
  4. max_answers - максимально допустимое количество ответов
  5. multiflexible_min - минимальное допустимое значение ответа (для типа вопроса «Массив (числа)» с несколькими гибкими полями)
  6. multiflexible_max - максимальное допустимое значение ответа (для типа вопроса «Массив (числа)» с несколькими гибкими полями)
  7. min_num_value - минимально допустимая сумма всех ответов на вопрос
  8. max_num_value - максимально допустимая сумма всех ответов на вопрос
  9. equals_num_value - сумма всех ответов на вопрос должна быть равна этому значению
  10. validation - проверка ответа на вопрос с помощью регулярного выражения; может применяться к отдельным ячейкам


Скриншоты

Благодаря новым стилям CSS каждый тип проверки отображается в виде отдельной подсказки. Показанные подсказки можно скрыть с помощью опции hide_tip. По умолчанию подсказки отображаются красным шрифтом, если вопрос не соответствует критериям проверки, и зелёным, если соответствует:



Пользователь не может отправить страницу с ошибками проверки. Если он введёт неверные данные, то сразу получит предупреждение:



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



Загрузка

Чтобы загрузить приведённый выше пример, перейдите по следующей ссылке: LS3_Validation_tests.zip.


Уравнения для проверки

Обзор

Иногда требуется особая проверка, которую нельзя реализовать с помощью традиционных критериев минимума и максимума. Для этого используйте опции em_validation_q и em_validation_sq, позволяющие составлять сложные уравнения проверки на уровне вопроса и подвопроса соответственно.


На уровне подвопроса также доступна переменная «this», которая позволяет легко проверять каждую ячейку массива, не зная имени её переменной. Подробнее о ней читайте здесь.


Демонстрируемые возможности EM

  1. em_validation_q - уравнение, определяющее, является ли весь вопрос допустимым
  2. em_validation_q_tip - сообщение, которое отображается, если вопрос не соответствует критериям em_validation_q
  3. em_validation_sq - уравнение, определяющее, является ли допустимым каждый подвопрос (ячейка массива)
  4. em_validation_sq_tip - сообщение, которое отображается, если какой-либо из подвопросов недопустим.

Как правило, при использовании em_validation_sq цвет фона недопустимой ячейки становится красным, сигнализируя об ошибке.


Скриншоты


Этот вопрос гарантирует, что возраст ваших детей вводится в порядке убывания, с помощью следующего уравнения проверки:

q1_sq1 >= q1_sq2 && q1_sq2 >= q1_sq3 && q1_sq3 >= q1_sq4





В приведённом ниже примере проверка гарантирует, что в любой строке дано не более 3 ответов, с помощью следующего уравнения проверки:

(sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= 3) && (sum(Test_B_1, Test_B_2, Test_B_3, Test_B_4, Test_B_5) <= 3) && (sum(Test_C_1, Test_C_2, Test_C_3, Test_C_4, Test_C_5) <= 3)

Можно записать это и так: LimeSurvey автоматически преобразует такую запись во время выполнения в приведённое выше выражение.

(sum(self.sq_A) <= 3) && (sum(self.sq_B) <= 3) && (sum(self.sq_C) <= 3)



Скачать

Чтобы скачать образец опроса, использованный в примерах выше, перейдите по следующей ссылке: ls2_test_em_sq_validation.lss.


Условие для подвопросов

Обзор

Этот пример показывает, как взаимодействуют array_filter и критерии проверки. Для проверок, применяемых к суммам, учитываются только релевантные (видимые) значения.


Демонстрируемые возможности EM

  1. array_filter
  2. array_filter_exclude
  3. min_num_value
  4. max_num_value
  5. equals_num_value

Он также показывает динамическое отображение количества вопросов, на которые получены ответы, в основных вопросах.


Скриншоты

Изменение количества видимых строк динамически меняет сумму. Если подвопрос помечен как нерелевантный, его значение не удаляется. Вместо этого, пока подвопрос нерелевантен, его значения не участвуют ни в одном уравнении.



Обратите внимание, что происходит, когда мы отмечаем «Пятый подвопрос» в первом вопросе «Какие строки должны отображаться ниже». Сумма для второго вопроса «Введите несколько чисел» теперь равна 5. Хотя в пятом подвопросе этого вопроса по-прежнему сохранено значение 14 (например, если снять отметку с пятого подвопроса, вы снова увидите значение 14), это значение не участвует в сумме, так как сейчас оно нерелевантно. Все нерелевантные данные очищаются (в базе данных записывается NULL) при отправке, но на странице они остаются доступными на случай, если пользователи захотят изменить свои ответы.



Скачать

Чтобы скачать наш пример, нажмите здесь: ls2_subquestion_relevance.lss.


Использование запятой в качестве десятичного разделителя

Обзор

ExpressionScript следит за тем, чтобы в числовые поля вводились только допустимые числа. Если вы введёте недопустимое число, появится предупреждение об ошибке (например, в теме fruity весь вопрос подсвечивается красным).

Обратите внимание, что в базе данных числовые значения всегда преобразуются к виду с точкой в качестве десятичного разделителя. Благодаря этому статистический анализ работает корректно.

Чтобы изменить десятичный разделитель, откройте параметры Текстовые элементы на вкладке Настройки и найдите функцию Десятичный знак.


Дополнительную информацию о том, что такое десятичный разделитель, можно найти [https://en.wikipedia.org/wiki/Radix_point


Типы вопросов, использующие десятичный разделитель

  1. Числовой ввод [N]
  2. Многократный числовой ввод [K]
  3. Массив (числовой) [:]
  4. Массив (текстовый) [;], при использовании атрибута numbers_only
  5. Список (Один ответ) [L], при использовании атрибута other_numbers_only
  6. Короткий произвольный текст [S], при использовании атрибута numbers_only
  7. Несколько коротких текстов [Q], при использовании атрибута numbers_only
  8. Несколько ответов [M], при использовании атрибута other_numbers_only
  9. Несколько ответов с комментариями [P], при использовании атрибута other_numbers_only


Скриншоты

На скриншотах ниже видно, что в качестве десятичного разделителя можно использовать запятую.



Скачать

Чтобы скачать приведённый выше пример, перейдите по следующей ссылке: ls2_comma_as_radix_separator.lss.


Группы рандомизации

Обзор

Этот опрос демонстрирует, как использовать атрибут random_group.

Если этот атрибут используется, то при каждом запуске опроса порядок вопросов случайным образом меняется. Однако после начала опроса порядок остаётся неизменным, даже если вы смените язык.


Скриншоты

Давайте вместе рассмотрим пример ниже. Первым случайным вопросом на странице будет Q1, Q4 или Q7. Вторым случайным вопросом на странице будет Q2, Q5 или Q8.



Вот порядок, сгенерированный при первом тестировании этого опроса.



При втором тестировании опроса был сгенерирован другой порядок.



Но когда я переключился на французский язык (не перезапуская опрос), порядок рандомизации остался прежним.



Скачать

Чтобы скачать приведённый выше пример, перейдите по следующей ссылке: Randomization_Group_Test.lss


Случайный показ одного вопроса из каждой группы

Обзор

Этот опрос показывает, как настроить опрос так, чтобы из каждой группы случайным образом отображался один вопрос. В нём 5 групп по 6 вопросов в каждой. В начале, в группе 0, заполняются пять скрытых вопросов типа «Уравнение» с названиями ask1-ask5. В поле «Текст вопроса» каждого из них указано значение {floor(rand(1,6.9999))}, то есть переменные ask1-ask5 будут иметь значение от 1 до 6. Затем у каждого вопроса в группе есть уравнение условия вида «ask1==N», где N — номер вопроса в группе (так, у третьего вопроса в группе 1 уравнение условия «ask1==3»).

Этот опрос одинаково хорошо работает в режимах «весь опрос сразу», «группа за группой» и «вопрос за вопросом». Поскольку рандомизация задаётся в первой группе, а эта группа фактически скрыта (все вопросы ask1-ask5 скрыты), для одного респондента рандомизация остаётся неизменной, но у каждого нового респондента она будет своей.


Демонстрируемые возможности

  1. Тип вопроса «Уравнение»
  2. Функции рандомизации
  3. Условная функция (if)


Скриншоты

Это группа 0, в которой используется тип вопроса «Уравнение» для выбора случайных значений от 1 до 6 для каждой группы (кроме последней, в которой всего 4 вопроса). Обратите внимание, что функция «if()» сначала проверяет, было ли уже задано значение ask1, и если да, использует его. Если значение не задано, функция использует случайное значение, чтобы задать ask1.



Эта группа показывает, как переменная (ask4) из группы 0 используется для управления тем, какой вопрос отображается в четвёртой группе.



Скачать

Чтобы скачать приведённый выше пример опроса, нажмите здесь: Пример опроса со случайными вопросами в группе.


Случайный показ заданного числа вопросов в группе (подмножества вопросов)

  Это относится только к случайным вопросам из одной группы и только при использовании формата Группа за группой или Весь целиком.



Обзор

Этот опрос показывает, как задать случайное подмножество вопросов в группе. Например, показать 5 случайных вопросов из 10 вопросов, расположенных в одной группе.

В опросе есть одна группа, содержащая 10 вопросов. Всем вопросам присвоено одно и то же название группы рандомизированных вопросов. В результате при загрузке страницы они будут отображаться в случайном порядке. Каждому вопросу задано уравнение условия: сумма значений «relevanceStatus» всех остальных вопросов группы меньше количества вопросов, которое вы хотите показать. Поскольку relevanceStatus назначается по мере отображения вопросов, это фактически даёт общее число предыдущих вопросов.

Итак, в нашем примере «5 из 10» уравнение для Q1 будет таким:

sum(Q2.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5

Для Q2 оно будет таким:

sum(Q1.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5

И так далее...


Демонстрируемые возможности

  1. переменная relevanceStatus
  2. Рандомизация


Скачивание

Чтобы скачать приведённый выше пример, перейдите по следующей ссылке: пример опроса «5 случайных вопросов из 10».

Оценка списка продуктов, введённого пользователем

Обзор

В примере ниже показано, как попросить пользователей перечислить интересующие их продукты, а затем оценить эти продукты.


Демонстрируемые возможности EM

  1. Адаптация ответов - при оценке продуктов подписи берутся из поля комментария предыдущего вопроса типа «Несколько ответов»
  2. Адаптация шкал - многие расширенные параметры вопросов, например заголовки шкалы, также можно адаптировать.


Снимки экрана

На этом изображении видно, что, хотя были выбраны только продукты 1, 3 и 5, отображаются только эти три (с помощью атрибута array_filter). Кроме того, подписи строк во втором вопросе - это либо номера продуктов (если в поле комментария ничего не введено), либо содержимое полей комментариев.



На этом изображении показано, как задаются адаптированные ответы:



Вот файл логики для этого вопроса, позволяющий убедиться, что условная логика работает как задумано (например, проверить наличие синтаксических ошибок):



На следующем изображении показана группа, в которой вы задаёте 5-балльную шкалу оценки (варианты 1-5), название шкалы и продукты, которые хотите оценить. Последний вопрос показывает, что каждую из частей вопроса типа «массив» можно адаптировать:



На следующем изображении показан вид файла логики последнего вопроса. Как видите, подвопросы, ответы и заголовки шкалы можно адаптировать.



Скачивание

Чтобы скачать приведённый выше пример опроса, перейдите по следующей ссылке: пример опроса по оценке списка продуктов, введённого пользователем.