Приклади опитувань для Expression Manager
From LimeSurvey Manual
Вступ
Найкращий спосіб навчитися користуватися ExpressionScript — поекспериментувати з робочими прикладами та змінити їх відповідно до ваших потреб.
Нижче наведено набір прикладів опитувань, які демонструють (і дозволяють перевірити), як EM можна використовувати для покращення вашого опитування. Ці опитування можна знайти в папці /docs/demosurveys дистрибутива.
Релевантність, адаптація тексту та рівняння
Огляд
У наведеному нижче прикладі обчислюється ІМТ (індекс маси тіла) кожного респондента. Нижче описано можливості, які демонструє цей приклад.
Продемонстровані можливості EM
- Релевантність — підтримка потужної умовної логіки;
- Підстановка / адаптація тексту — можливість підставляти або адаптувати відповіді та метадані питань;
- Динамічна адаптація тексту — зверніть увагу, що звіти на сторінці змінюються в міру того, як ви відповідаєте на питання.
- Мікроадаптація тексту — умовна адаптація в межах речень і звітів за допомогою операторів if()
- Рівняння — новий тип питання, який дозволяє виконувати обчислення та зберігати результати в базі даних, навіть якщо обчислення приховане
- Умовна перевірка — критерії перевірки, наприклад мінімально допустиме значення, можуть бути умовними, зокрема залежати від рівнянь.
Знімки екрана
Цей приклад обчислює індекс маси тіла — розрахунок на основі вашої ваги та зросту, який визначає, чи є у вас надмірна вага. Зверніть увагу, що спочатку ви бачите лише чотири обов'язкові питання:

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

Ось інший приклад із неметричними одиницями, який показує, як результат змінюється динамічно:

На внутрішньому рівні є приховані питання типу «Рівняння», які перетворюють дані в метричні одиниці (за потреби) і зберігають у базі даних зріст, вагу, ІМТ та статус ваги в метричних одиницях без потреби в користувацькому JavaScript.
У наступному наборі прикладів видно, як використовувати математичні та інші функції в адаптованих звітах. Так виглядає сторінка до введення будь-яких даних. Передбачено умовну логіку, яка показує порожні клітинки, якщо дані не введено (або вони нечислові), замість «NaN» чи «Divide by Zero».

У міру введення чисел звіт на сторінці змінюється, показуючи виконуване обчислення та його результат.

У цьому прикладі опитування є багато інших прикладів. Наприклад, на знімку екрана нижче показано один із десятків способів заповнити сторінку «Динамічна релевантність». Як зазначено в тексті довідки, спробуйте різний вік, а особливо нелогічні комбінації відповідей, щоб побачити кумедні повідомлення, які генеруються внизу. Також зверніть увагу: якщо ви вкажете, що маєте більше однієї дитини, повідомлення буде таким: «Сподіваюся, вам подобається грати зі своїми X дітьми», а не «Сподіваюся, вам подобається грати зі своєю дитиною». Це показує, як легко можна виконати мікроадаптацію речень, щоб вони відповідали статі та/або кількості ваших респондентів. Ви навіть можете легко змінювати дієслова за особами та відмінювати іменники залежно від роду й числа.

Завантаження
Щоб отримати доступ до прикладу опитування, натисніть таке посилання: LS3_em_tailoring.zip.
Приклад перепису
Огляд
Це приклад перепису, у якому запитується, скільки людей проживає у вашому домогосподарстві.
Він демонструє, як релевантність на рівні групи може спростити реалізацію «циклу» питань. Створивши групу для особи 1, я експортував цю групу. Оскільки я використовував імена змінних qcode, такі як p1_name, замість коду SGQA, я міг скористатися текстовим редактором, щоб швидко відредагувати та кілька разів повторно імпортувати групу (наприклад, на редагування та повторний імпорт кожної групи, що повторюється, йшло близько 10 секунд, при цьому всі змінні мали унікальні імена, а логіка на рівні групи була правильною).
Ви також можете скористатися функцією Копіювати питання, але вона буде не такою швидкою, як запропонований вище варіант.
Це також показує, як можна запобігти появі повідомлення про завершення, доки опитування не буде справді завершено (наприклад, коли заповнено всі потрібні групи).
Продемонстровані можливості EM
- Релевантність на рівні групи - наступні групи (Особа 1-5) відображаються лише в межах зазначеної кількості співмешканців;
- Адаптація (tailoring) - підсумковий звіт узагальнює демографічні дані про кожного співмешканця;
- Поступове відображення питань - як у режимі «по групах», так і в режимі «все в одному», наступні питання з’являються лише після відповіді на попередні.
Знімки екрана
Опитування генерує адаптований звіт, що показує демографічні дані для вказаної кількості співмешканців:

Якщо перейти в режим «питання за питанням», можна побачити, що індекс адаптує питання. Оскільки користувач вказав, що ця особа — жінка, запитується «Як її звати». А оскільки ми відповіли «Марія», наступне питання звучить «Скільки років Марії»?

Завантаження
Щоб завантажити приклад опитування, натисніть тут: 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.
Piping/Tailoring з використанням усіх типів питань і атрибутів
Огляд
Якщо ви плутаєтеся в тому, як називати змінні (SGQA чи Qcode), ви не самотні. Хоча в основній документації описано як складати імена змінних Qcode, ніщо не зрівняється з робочою демонстрацією. Це опитування показує, як отримати доступ до атрибутів питань і відповідей за допомогою ExpressionScript.
Вміст
- Приклади кожного типу питань
- Включено всі типи питань, які можуть використовувати «Інше», щоб ви могли побачити, як це впливає на іменування змінних
- Значення за замовчуванням для всіх типів питань, що їх підтримують
- Tailoring — звіти на сторінці та поза нею, що показують усі 16 доступних суфіксів EM у точковій нотації.
- Ці звіти показують усі введені на цей момент дані (тож ви побачите, як можна створити власні звіти для користувачів, які можна друкувати, замість екрана друку відповідей)
- Правильне іменування всіх змінних у форматах Qcode та SGQA
Знімки екрана
Це величезне опитування, тому ми вирішили не включати знімки екрана. Натомість завантажте його та поекспериментуйте самостійно.
Завантаження
Натисніть на таке посилання, щоб завантажити опитування: LS3_EM_question_attributes.lss
Традиційна перевірка в новому баченні
Огляд
Цей приклад демонструє всі типи перевірки, які використовують вирази, і те, як вони впливають на кожен із типів питань, що підтримують перевірку. У багатьох випадках підказки щодо перевірки спочатку приховані й з’являються лише тоді, коли питання не відповідає критеріям перевірки (а коли питання проходить перевірку, вони знову зникають).
Продемонстровані типи перевірки
- min_num_value_n - мінімальне значення відповіді
- max_num_value_n - максимальне значення відповіді
- min_answers - мінімальна кількість необхідних відповідей
- max_answers - максимальна кількість дозволених відповідей
- multiflexible_min - мінімальне допустиме значення відповіді (для типу питання «Масив (числа)» з кількома полями)
- multiflexible_max - максимальне допустиме значення відповіді (для типу питання «Масив (числа)» з кількома полями)
- min_num_value - мінімально допустима сума всіх відповідей на питання
- max_num_value - максимально допустима сума всіх відповідей на питання
- equals_num_value - сума всіх відповідей на питання має дорівнювати цьому значенню
- validation - це перевірка питання за регулярним виразом; вона може застосовуватися до окремих комірок
Знімки екрана
Завдяки новим стилям CSS кожен тип перевірки показує окрему підказку. Якщо підказки відображаються, їх можна приховати за допомогою опції hide_tip. За замовчуванням підказки показуються червоним шрифтом, якщо питання не відповідає критеріям перевірки, і зеленим, якщо відповідає:

Користувач не може надіслати сторінку з помилками перевірки. Якщо він ввів неправильну інформацію, його одразу попередять:

Перевірку можна застосовувати до окремих комірок масиву, як у цьому прикладі, де перевірки за регулярними виразами гарантують, що кожен запис є правильно відформатованим телефонним номером США разом із кодом регіону.

Завантаження
Щоб завантажити наведений вище приклад, перейдіть за таким посиланням: LS3_Validation_tests.zip.
Рівняння для перевірки
Огляд
Іноді потрібна нестандартна перевірка, яку неможливо реалізувати за допомогою традиційних критеріїв мінімуму/максимуму. Для цього скористайтеся опціями em_validation_q та em_validation_sq, які дають змогу створювати складні рівняння для перевірки на рівні питання та підпитання відповідно.
Продемонстровані можливості EM
- em_validation_q - це рівняння, яке визначає, чи є все питання коректним
- em_validation_q_tip - це повідомлення, яке показується, якщо питання не відповідає критеріям em_validation_q
- em_validation_sq - це рівняння, яке визначає, чи є коректним кожне підпитання (комірка масиву)
- 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
Також показано динамічне відображення кількості питань, на які надано відповідь, в основних питаннях.
Знімки екрана
Зміна кількості видимих рядків динамічно змінює суму. Позначення підпитання як нерелевантного не очищає його значення. Натомість, якщо підпитання нерелевантне, його значення не враховуються в жодному рівнянні.


Зверніть увагу, що відбувається, коли ми позначаємо «Fifth subquestion» у першому питанні «Which rows should appear below». Сума для другого питання «Enter some numbers» тепер дорівнює 5. Хоча підпитання 5 цього питання все ще має значення 14 (наприклад, якщо зняти позначку з п’ятого підпитання, ви знову побачите значення 14), це значення не враховується в сумі, оскільки наразі воно нерелевантне. Усі нерелевантні дані очищаються (встановлюється NULL у базі даних) під час надсилання, але на сторінці вони залишаються доступними на випадок, якщо респонденти захочуть або будуть змушені змінити свої відповіді.

Завантаження
Щоб завантажити наш приклад, натисніть тут: ls2_subquestion_relevance.lss.
Використання коми як роздільника десяткових розрядів (десяткової коми)
Огляд
ExpressionScript гарантує, що в числові поля можна вводити лише допустимі числа. Якщо ви введете недопустиме число, вас буде попереджено про помилку (наприклад, у темі fruity усе питання «підсвічується червоним»).
Зверніть увагу, що числові значення в базі даних завжди перетворюються на формат із крапкою як роздільником десяткових розрядів. Завдяки цьому статистичний аналіз працюватиме належним чином.
Щоб змінити роздільник десяткових розрядів, відкрийте параметри Текстові елементи, розташовані на вкладці Налаштування, і знайдіть функцію Десяткова відмітка.
Типи питань, що використовують роздільник десяткових розрядів
- Числове введення [N]
- Багаторазове числове введення [K]
- Масив (числа) [:]
- Масив (тексти) [;], під час використання атрибута numbers_only
- Список (одна відповідь) [L], під час використання атрибута other_numbers_only
- Короткий довільний текст [S], під час використання атрибута numbers_only
- Кілька коротких текстів [Q], під час використання атрибута numbers_only
- Множинний вибір [M], під час використання атрибута other_numbers_only
- Множинний вибір з коментарями [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 — це N-те питання в групі (тобто третє питання в групі 1 має рівняння релевантності «ask1==3»).
Це опитування однаково добре працює в режимах «усе опитування одразу», «група за групою» та «питання за питанням». Оскільки рандомізація задається в першій групі, а ця група фактично прихована (адже всі питання ask1-ask5 приховані), рандомізація для респондента залишається незмінною; водночас для кожного нового респондента вона буде іншою.
Продемонстровані можливості
- Тип питання «Рівняння»
- Функції рандомізації
- Умовна функція (if)
Знімки екрана
Це Group0, яка використовує тип питання «Рівняння», щоб вибрати випадкові значення від 1 до 6 для кожної групи (крім останньої групи, яка містить лише 4 питання). Зверніть увагу, що функція «if()» спочатку перевіряє, чи вже задано значення ask1, і якщо так, використовує його. Якщо значення не задано, вона використовує випадкове значення, щоб встановити значення ask1.

Ця група показує, як змінна (ask4) із Group0 використовується для керування тим, яке питання відображається в четвертій групі.

Завантаження
Щоб завантажити наведений вище приклад опитування, натисніть тут: Приклад опитування з випадковими питаннями в групі.
Випадкове запитання певної кількості питань у групі (підмножини питань)
Огляд
Це опитування показує, як поставити випадкову підмножину питань у групі. Наприклад, показати 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
І так далі...
Продемонстровані можливості
Завантаження
Щоб завантажити наведений вище приклад, перейдіть за посиланням: приклад опитування «5 випадкових із 10».
Оцінювання списку продуктів, введеного користувачем
Огляд
У наведеному нижче прикладі показано, як попросити користувачів перелічити продукти, які їх цікавлять, а потім оцінити ці продукти.
Продемонстровані можливості EM
- Адаптація відповідей - під час оцінювання продуктів підписи беруться з поля коментаря попереднього питання з множинним вибором
- Адаптація шкал - багато розширених параметрів питань, як-от заголовки шкали, також можна адаптувати.
Знімки екрана
На цьому зображенні видно, що хоча було вибрано лише продукти 1, 3 і 5, відображаються тільки ці три (за допомогою атрибута array_filter). Крім того, підписи рядків у другому питанні — це або номери продуктів (якщо в поле коментаря нічого не введено), або вміст полів коментарів.

На цьому зображенні показано, як задаються адаптовані відповіді:

Ось файл показу логіки для цього питання, який дає змогу переконатися, що умовна логіка працює належним чином (наприклад, перевірити наявність синтаксичних помилок):

На наступному зображенні показано групу, в якій ви вказуєте 5-бальну шкалу оцінювання (варіанти 1-5), назву шкали та продукти, які потрібно оцінити. Останнє питання показує, що кожну частину табличного питання можна адаптувати:

На наступному зображенні показано перегляд файлу логіки останнього питання. Як видно, підпитання, відповіді та заголовки шкали можна адаптувати.

Завантаження
Щоб завантажити наведений вище приклад опитування, перейдіть за посиланням: приклад опитування з оцінюванням списку продуктів, введеного користувачем.