Примерни проучвания на Expression Manager
From LimeSurvey Manual
Въведение
Най-добрият начин да научите как да използвате ExpressionScript е да си поиграете с работещи примери и да ги модифицирате според вашите нужди.
Можете да намерите по-долу набор от примерни проучвания, за да демонстрирате (и тествате) как EM може да се използва за подобряване на вашето проучване. Тези проучвания могат да бъдат намерени в папката /docs/demosurveys на разпространението.
Уместност, приспособяване и уравнения
Общ преглед
Следващият пример изчислява ИТМ (индекс на телесна маса) на всеки респондент. Вижте по-долу функциите, които са демонстрирани в този пример.
Демонстрирани EM функции
- 'Релевантност - поддръжка за мощна условна логика;
- Piping / Tailoring - предлага възможност за канализиране или персонализиране на отговори и метаданни за въпроси;
- Динамично приспособяване - обърнете внимание, че отчетите се променят на страницата, докато отговаряте на въпроси.
- Micro-Tailoring - условно приспособяване с изречения и отчети, използващи оператори if()
- 'Уравнения - нов тип въпрос, който ви позволява да правите изчисления и да съхранявате резултатите в базата данни, дори ако изчислението е скрито
- Условно валидиране' - валидиране критерии, като например минималната допустима стойност, могат да бъдат условни - например въз основа на уравнения.
Екранни снимки
Този пример изчислява индекса на телесна маса, изчисление на вашето тегло и височина, за да се определи дали сте с наднормено тегло. Имайте предвид, че първоначално всичко, което виждате, са четирите задължителни въпроса:

След като въведете информацията си (и можете да изберете дали да използвате метрични или неметрични единици), ще видите персонализиран отчет, който обобщава въведеното от вас, като ви казва състоянието на вашето тегло:

Ето различен пример, използващ неметрични единици, за да покаже как резултатът се променя динамично:

Има скрити въпроси от тип уравнение на вътрешно ниво, което преобразува данните в метрика (ако е необходимо), съхранявайки метричната височина, тегло, ИТМ и статус на тегло в базата данни, без да е необходим персонализиран JavaScript .
Можете да видите в следващия набор от примери как можете да използвате математически и други функции в рамките на персонализирани отчети. Ето как изглежда страницата преди да въведете данни. Има условна логика за показване на празни клетки, ако не са въведени (или нечислови) данни, вместо да се показва „NaN“ или „Делене на нула“.

Докато се въвеждат числа, отчетът на страницата се променя, за да покаже извършеното изчисление и неговия резултат.

В това примерно проучване има много други примери. Например екранната снимка по-долу показва един от десетките начини, по които можете да попълните страницата за динамично съответствие. Както се отбелязва в помощния текст, опитайте различни възрасти и особено нелогични комбинации от отговори, за да видите забавните съобщения, генерирани в долната част. Също така имайте предвид, че ако кажете, че имате повече от едно дете, съобщението ще гласи „Надявам се да обичате да играете с вашите X деца“, вместо „Надявам се да ви харесва да играете с вашето дете“. Това показва как можете лесно да приспособите микроизречения, за да съответстват на пола и/или броя на вашите субекти. Можете дори лесно да спрягате глаголи и да отклонявате съществителни въз основа на род и число.

Изтегляне
За достъп до извадката от проучването, моля, щракнете върху следната връзка: LS3_em_tailoring.zip.
Примерно преброяване
Общ преглед
Това е пример за преброяване, който пита колко хора има във вашето домакинство.
Той демонстрира как уместността на ниво група може да улесни прилагането на „цикъл“ от въпроси. След като създадох групата за Лице 1, експортирах групата. Тъй като използвах имена на променливи на qcode като p1_name вместо SGQA кода, можех да използвам текстов редактор за бързо редактиране и повторно импортиране на групата няколко пъти (напр. отне около 10 секунди за редактиране и повторно импортиране на всяка повтаряща се група, гарантирайки че всички променливи имат уникални имена на променливи и че логиката на ниво група е правилна).
Можете също да използвате функцията копиране на въпрос, но тя няма да бъде толкова бърза, колкото предложената по-горе опция.
Това също така показва как можете да предотвратите показването на съобщението Готово, докато анкетата наистина не приключи (напр. когато всички необходими групи са попълнени).
Демонстрирани EM функции
- 'Уместност на ниво група' - Групите за проследяване (лице 1-5) се показват само за посочения брой съжителстващи;
- 'Скрояване' - Крайният доклад обобщава демографските данни за всеки съжител;
- Прогресивно показване на въпроси - Независимо дали в групов режим или в режим "всичко в едно", следващите въпроси се показват едва след като се отговори на предходните.
Екранни снимки
Проучването генерира персонализиран отчет, показващ демографията на посочения брой съжителстващи лица:

Ако превключите на режим въпрос по време, ще видите, че индексът приспособява въпросите. Тъй като потребителят каза, че лицето е жена, той пита "Как се казва". И тъй като отговорихме "Мери", следващият въпрос гласи "На колко години е Мери"?

Изтегляне
За да изтеглите извадката от проучването, щракнете тук: 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 срещу Qcodes), не сте сами. Въпреки че основната документация описва как да съставяте имена на променливи в Qcode, нищо не може да го види в работеща демонстрация. Тази анкета показва как можете да получите достъп до атрибути на въпроси и отговори с помощта на ExpressionScript.
Съдържание
- Примери за всеки тип въпроси
- Всички типове въпроси, които могат да използват "други", са включени, за да можете да видите как това се отразява на именуването на променливи
- Стойности по подразбиране за всички типове въпроси, които приемат стойности по подразбиране
- Приспособяване - Отчети на и извън страницата, показващи всичките 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 - сумата за всички отговори за въпроса трябва да е равна на тази стойност
- валидация - това е проверката на регулярния израз за въпроса - може да се прилага към отделни клетки
Екранни снимки
Използвайки нови 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 функции
Той също така показва динамично отчитане на броя въпроси, на които е отговорено в основните въпроси.
Екранни снимки
Промяната на броя на видимите редове динамично променя сумата. Маркирането на подвъпрос като неуместен не изчиства стойността му. По-скоро, ако е без значение, стойностите му не допринасят за нито едно уравнение.


Обърнете внимание какво се случва, когато поставим отметка на "Пети подвъпрос" за първия въпрос "Кои редове трябва да се появят отдолу". Обърнете внимание, че сумата за втория въпрос „Въведете няколко числа“ вече е 5. Въпреки че подвъпрос 5 за този въпрос все още има стойност 14 (напр., ако махнете отметката от петия подвъпрос, ще видите отново стойността 14) , тази стойност не допринася за сумата, тъй като в момента е без значение. Всички неподходящи данни се изчистват (NULL в базата данни) при изпращане, но остават достъпни на страницата, в случай че потребителите искат или трябва да променят мнението си относно отговорите.

Изтегляне
За да изтеглите нашия пример, щракнете тук: ls2_subquestion_relevance.lss.
Използване на запетая като разделител на радикса (десетична точка)
Общ преглед
ExpressionScript гарантира, че само валидни числа могат да бъдат въведени в числови полета. Ако въведете невалиден номер, ще бъдете предупредени, че нещо не е наред (напр. в случая с плодовата тема целият въпрос е "червено-червено").
Обърнете внимание, че числовите стойности винаги се преобразуват с помощта на точка като разделител на основата в базата данни. По този начин статистическите анализи ще работят правилно.
За да промените разделителя на основата, отворете опциите Текстови елементи, намиращи се под раздела Настройки, и потърсете функционалността десетичен знак.
Типове въпроси, използващи радикс-разделител
- Числово въвеждане [ 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 са скрити), рандомизирането остава същото за субекта; но всеки различен предмет ще има отделна рандомизация.
Демонстрирани характеристики
- Тип въпрос на уравнение
- Функции за рандомизиране
- Условна (ако) функция
Екранни снимки
Това е Group0, която използва тип въпрос на уравнение, за да избере произволни стойности от 1 до 6 за всяка група (с изключение на последната група, която има само 4 въпроса). Обърнете внимание, че функцията "if()" първо проверява дали ask1 вече е зададен и ако е така, използва тази стойност. Ако стойността не е зададена, тогава се използва произволна стойност, за да зададе стойността на ask1.

Тази група показва как променливата (ask4) от Group0 се използва за контрол кой въпрос се вижда в четвъртата група.

Изтегляне
За да изтеглите горния пример за проучване, щракнете тук: Случайни въпроси в рамките на пример за групово проучване.
Произволно задаване на определен брой въпроси в група (подмножество от въпроси)
Общ преглед
Това проучване показва как да зададете произволна подгрупа от въпроси в група. Например, покажете 5 произволни въпроса от 10 въпроса, разположени в група.
The survey has one group containing 10 questions. All questions are assigned the same randomization group name. As a result, they will be displayed in a random order on page load. Each question is given a relevance equation that the sum of the "relevanceStatus" of all other questions in the group is less than the number of questions you want to show. Since relevanceStatus is assigned as questions are rendered, this effectively totals the number of preceding questions.
So, in our 5 out of 10 example, the equation for Q1 would be:
sum(Q2.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5
For Q2, it would be:
sum(Q1.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5
And so on...
Features Demonstrated
Download
To download the above example, click on the following link: Random 5 out of 10 survey example.
Rating User-Entered List of Products
Overview
The below example shows how you can ask users to list a set of products that interest them, and then have them rate those products.
EM Features Demonstrated
- Tailoring answers - when rating products, the labels come from the comment field of the preceding multiple choice question
- Tailoring scales - many advanced questions options, like scale headings, can also be tailored.
Screenshots
This image shows that even though only products 1,3, and 5 were selected, only those 3 are displayed (using the array_filter attribute). Moreover, the row labels in the second question are either the product numbers (if nothing is entered into the comment field) or the contents of the comment fields.

This image shows how the tailored answers are specified:

Here is the Show Logic File for that question, which lets us verify that the conditional logic works as desired (e.g., to see whether there are any syntax errors):

The next image shows a group in which you specify a 5 point rating scale (Options 1-5), the title of the scale, and the products you want to rate. The final question shows that each of the parts of the array question can be tailored:

The next image shows the logic file view of the last question. As you can observe, the subquestions, answers, and scale headers can be tailored.

Download
To download the survey example from above, click on the following link: Rating user-entered list of products survey example.