Перевірка логіки опитування - Розширена
From LimeSurvey Manual
Загальні відомості
Важлива опція, яка допомагає створювати складні опитування та легко їх підтримувати, — Перевірка логіки опитування.
Під час розробки й тестування опитування, а також перед його активацією, дуже важливо перевірити логіку опитування. Це особливо актуально, коли ви використовуєте складні рівняння релевантності, персоналізації та перевірки — потрібно бути впевненим, що нічого не зламається під час проходження опитування.
Ця функція дає змогу швидко перевірити правильність вашого опитування, груп(и) та питань(я). Доступ до неї можна отримати з параметрів меню верхньої панелі, розташованих серед налаштувань опитування. Вона доступна через меню Інструменти:
Як видно вище, цю опцію можна запустити окремо для кожної мови, яка використовується в опитуванні.
Опис
Опція Перевірка логіки опитування показує все, що ви вказали для кожного питання та групи (наприклад, ім'я, текст, довідку, умови/релевантність, правила перевірки, значення за умовчанням, підпитання, відповіді), у зручному табличному форматі. Вона підсвічує помилки та дає змогу клацнути на ідентифікатори питань і груп (або змінні, використані в рівняннях), щоб відкрити нові вкладки браузера для редагування цих питань або груп. Це дозволяє швидко виправити будь-які помилки й оновити сторінку перевірки логіки, щоб переконатися в правильності опитування перед його активацією.
Відображення також розраховане на те, щоб його могли читати дослідники та спонсори дослідження й самостійно перевіряти правильність дизайну та логіки опитування. Перевірка логіки опитування оновлює кеш усіх виразів, використаних в активному опитуванні.
Вона містить такі стовпці:
- # - показує порядкові номери груп і питань, починаючи з 0.
- Ім'я [ID] - показує код питання для групи/питання/підпитання. Ці коди можна використовувати як змінні у виразах. ID — це ідентифікатор питання (QID) або групи (GID). У цьому полі також показано тип питання (наприклад, Множинний вибір [M]).
- Актуальність [Перевірка] (За умовчанням) - показує таке:
- Актуальність - рівняння релевантності для питання або групи з підсвіченим синтаксисом. Якщо воно завжди істинне (питання показується в будь-якому сценарії), значенням буде 1.
- Перевірка - ExpressionScript автоматично генерує рівняння перевірки на основі вибраних атрибутів питання (наприклад, мінімальної/максимальної кількості відповідей, мінімальних/максимальних/рівних значень суми, мінімальних/максимальних окремих значень або перевірки регулярним виразом). Цей розділ показує згенероване рівняння перевірки, щоб ви могли виявити помилки (наприклад, невизначені змінні).
- Перевірка на рівні питання показує рівняння, потрібне для перевірки описаних вище атрибутів питання
- Перевірка на рівні підпитання показує рівняння, потрібне для реалізації array_filter, array_filter_exclude та exclusive_option
- За умовчанням - якщо для питання задано значення за умовчанням, його показано тут із підсвіченим синтаксисом (оскільки значенням за умовчанням може бути вираз).
- Текст [Help] (Підказка) - показує таке:
- Текст - текст групи, питання, підпитання або відповіді. Його синтаксис підсвічується, щоб показати вбудовану персоналізацію, що дає змогу переконатися, що ви оголосили всі змінні, які плануєте використовувати в персоналізації.
- Допомога - показує текст довідки для питання, також із підсвіченим синтаксисом.
- Підказка - показує внутрішньо згенеровану підказку щодо перевірки на основі атрибутів питання. Ця сама підказка використовується в усіх стилях опитування, а також у друкованому опитуванні та на екранах вводу даних.
- Атрибути питання - показує таблицю всіх відповідних атрибутів цього питання. Атрибути, які можуть бути рівняннями, мають підсвічений синтаксис, щоб ви могли перевірити їх правильність.
Рядки позначено кольорами таким чином:
- Групи - показано зі світло-сірим фоном
- Питання - показано зі світло-зеленим фоном
- Підпитання - показано з блідо-жовтим фоном
- Відповіді - показано зі звичайним білим фоном
Відповіді мають додатковий атрибут у стовпці Актуальність:
- Значення - це внутрішнє значення за умовчанням, яке використовується в обчисленнях. Якщо ви використовуєте оцінювання, це буде значення оцінки. В іншому разі воно збігатиметься з назвою відповіді.
Використання
Угорі сторінки розташоване підсумкове повідомлення. Якщо все гаразд, там буде написано «Ніяких синтаксичних помилок не виявлено у цьому опитуванні» або «Ця група» чи «Це питання» «саме по собі не містить синтаксичних помилок». Якщо ж навпаки, буде написано «X питань мають синтаксичні помилки, які потрібно виправити».
Кожне питання із синтаксичними помилками отримує червоний колір фону в крайньому лівому стовпці (тобто #). Також під стовпцем Ім'я [ID] буде показано попередження з мінімальною кількістю помилок питання. Поширені такі помилки:
- Невизначена змінна - якщо ви не визначили всі свої змінні або допустили помилку в array_filter (або використали різні набори варіантів відповідей для array_filter), деякі з ваших питань перевірки показуватимуть помилки. Невизначені змінні показано червоним текстом в обрамленні червоною лінією.
- Неправильний синтаксис - коли ви починаєте використовувати рівняння релевантності, ви можете поставити забагато або замало дужок. Такі синтаксичні проблеми підсвічуються й обводяться червоним. Якщо навести вказівник миші на такий текст у червоній рамці, спливаюча підказка опише помилку.
Кольори в синтаксисі ExpressionScript
Умови та рівняння підсвічуються, щоб було легше зрозуміти, що ви бачите:
- Зелений / Світло-блакитний: змінна, що посилається на питання, розташоване раніше в опитуванні
- Синій: функція
- Сірий: рядковий вираз
- Коричневий: вираз TOKEN (дані учасника)
- Чорний: оператор
На що звернути увагу:
- Фіолетовий: змінна, що посилається на питання, розташоване далі в опитуванні. Зазвичай це помилка, яку потрібно перевірити.
- Червоний або червона рамка: неіснуюча змінна, посилання на попереднє питання або синтаксична помилка — зазвичай це потрібно перевірити.
Невизначені змінні
Якщо використовуються невизначені змінні, відповідне ім'я змінної буде позначено червоним кольором і обведено червоною лінією. Якщо навести вказівник миші на ім'я змінної, з'явиться повідомлення «undefined variable»:


}}
Некоректний синтаксис
Більшість помилок, пов’язаних із виразами, спричинені некоректним синтаксисом. Адміністратори опитувань зазвичай забувають додати фігурну дужку, неправильно використовують круглі дужки або помилково застосовують вирази:


Тут наведено багато хороших прикладів використання підсвічування синтаксису.
Некоректний користувацький JavaScript
Помилки JavaScript також підсвічуються під час перевірки логіки опитування:

Пришвидшення редагування та перевірки
Увесь текст із підсвіченим синтаксисом має вбудовані підказки, на які можна клацати:
- Підказки
- Функції - наведіть курсор миші, щоб побачити призначення та опис синтаксису функції;
- Назви змінних - наведіть курсор миші, щоб побачити позицію (групу, порядковий номер питання), текст питання та допустимі відповіді на питання.
- Дії
- Назви змінних - клацання на назві змінної відкриває нове вікно, у якому можна редагувати питання. Це спрощує навігацію та перевірку логіки: просто клацайте на назвах змінних у критеріях релевантності або перевірки питання, щоб побачити, звідки вони беруться і як використовуються.
Приклади
Наведені нижче приклади взято з зразків опитувань ExpressionScript. На цій сторінці ви знайдете знімки екрана запущених опитувань, пояснення та файли для завантаження.
Індекс маси тіла
Ось знімки екрана цього прикладу.
Це подання зі зміною порядку питань для обчислення індексу маси тіла. Ви можете побачити рівняння релевантності для ваги, зросту та ІМТ у стовпці Питання:

Для кращого огляду опитування перегляньте сторінку перевірки логіки опитування:

Цей приклад опитування також є хорошим прикладом вкладених операторів if() для формування «weightstatus».

Каскадна логіка
Ось знімки екрана цього прикладу.
Він показує логіку перевірки підпитань, яка автоматично генерується під час використання array_filter та array_filter_exclude. Цей приклад також показує, як можна підставити адаптоване значення «Інше» (відповіддю для Q02_other є Q01_other).

Q05 у цьому прикладі показує одночасне використання array_filter та array_filter_exclude для Q01 та Q02 відповідно. Цей приклад демонструє можливості каскадного array_filter. Зверніть увагу: одна з основних причин показу критеріїв перевірки на рівні питання та підпитання - допомогти переконатися, що ви не припустилися друкарських помилок у назвах змінних array_filter або array_filter_exclude (або якщо ви використовуєте різні назви змінних для списку відфільтрованих підпитань). Якщо такі помилки є, усі недійсні назви змінних відображатимуться червоним кольором як невизначені, що дозволяє швидко виправити проблему.

Динамічна релевантність
Цей приклад демонструє динамічну каскадну логіку релевантності для керування видимістю питань. Ви можете завантажити цей приклад тут.
Також зверніть увагу, що питання відображаються лише за виконання певних критеріїв перевірки. Наприклад, якщо особа вказує, що має двох дітей, респондент має заповнити певні питання (kid1 та kid2).

Релевантність на рівні групи
Цей приклад показує, як релевантність на рівні групи відображається під час перевірки логіки. Тут наведено знімки екрана прикладу, описаного нижче.
Як видно, рівняння релевантності на рівні групи (cohabs > 1 && p1_rel != "") відображається в сірому рядку Person 2 для G-2.
Ви також можете помітити, що всі питання є обов'язковими. Однак якщо група нерелевантна, то нерелевантними є й усі її питання. Тому ці питання насправді обов'язкові лише тоді, коли група релевантна.
Ви також можете помітити, що деякі питання відображаються лише тоді, коли відповідь на попереднє питання не порожня. Нижче видно, що якщо p2_sex не заповнено, p2_name не відображатиметься, хоча це обов'язкове питання. Обов'язкове питання p2_age також не відображатиметься, якщо p2_name не заповнено. Такі питання можна вважати «умовно обов'язковими».
Крім того, зверніть увагу, що повідомлення-підказки також створюються автоматично. Вони впорядковані за діапазоном значень (мін./макс.), діапазоном суми значень (мін./макс./дорівнює), кількістю відповідей (мін./макс.) тощо (залежно від використаного типу питання та активних атрибутів). Іноді потрібно перевірити діапазон відповіді, але не показувати користувачеві підказки з перевірки, які можуть здаватися недоречними. У таких випадках можна скористатися опцією питання hide_tip (як у цьому прикладі, щоб не повідомляти користувачеві, що вік має бути від 0 до 115, доки він не спробує ввести неправильне значення - див. p2_age).

Кома як десятковий роздільник
Хоча LimeSurvey повністю підтримує використання коми як десяткового роздільника під час проходження опитування, під час створення опитування (наприклад, при вказанні мін./макс. значень у розширених атрибутах питання) все одно потрібно використовувати крапку як десятковий роздільник. Робочий приклад можна знайти тут.
Також пам'ятайте, що логіка перевірки створюється автоматично на основі ввімкнених атрибутів питання. Рівняння можуть виглядати складними, але турбуватися про них не потрібно.

