Actions

Примерни проучвания на ExpressionScript

From LimeSurvey Manual

This page is a translated version of the page ExpressionScript sample surveys and the translation is 100% complete.


Въведение

Най-добрият начин да научите как да използвате ExpressionScript е да си поиграете с работещи примери и да ги модифицирате според вашите нужди.

Можете да намерите по-долу набор от примерни проучвания, за да демонстрирате (и тествате) как EM може да се използва за подобряване на вашето проучване. Тези анкети могат да бъдат намерени в папката /docs/demosurveys на разпространението.


Уместност, приспособяване и уравнения

Общ преглед

Следващият пример изчислява ИТМ (индекс на телесна маса) на всеки респондент. Вижте по-долу функциите, които са демонстрирани в този пример.

Демонстрирани EM функции

  1. 'Релевантност - поддръжка за мощна условна логика;
  2. Piping / Tailoring - предлага възможност за канализиране или персонализиране на отговори и метаданни за въпроси;
  3. Динамично приспособяване - имайте предвид, че отчетите се променят на страницата, докато отговаряте на въпроси.
  4. Micro-Tailoring - условно приспособяване в рамките на изречения и отчети с помощта на оператори if()
  5. 'Уравнения - нов тип въпрос, който ви позволява да правите изчисления и да съхранявате резултатите в базата данни, дори ако изчислението е скрито
  6. Условно валидиране' - валидиране критерии, като например минималната допустима стойност, могат да бъдат условни - например въз основа на уравнения.


Екранни снимки

Този пример изчислява индекса на телесната маса, изчисление на вашето тегло и височина, за да се определи дали имате поднормено тегло, нормално тегло, наднормено тегло или затлъстяване. Имайте предвид, че първоначално всичко, което виждате, са четирите задължителни въпроса:



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



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



Има скрити въпроси от тип уравнение на вътрешно ниво, което преобразува данните в метрика (ако е необходимо), съхранявайки метричната височина, тегло, ИТМ и статус на тегло в базата данни, без да е необходим персонализиран JavaScript.

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



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



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



Изтегляне

За достъп до извадката от проучването, моля, щракнете върху следната връзка: 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)


Файл:cascading_array_filter.jpg


Файл:cascading_array_filter2.jpg


Изтегляне

Кликнете върху следната връзка, за да изтеглите горния пример: LS2_cascading_array_filter пример за проучване.


Тръбопроводи/приспособяване с използване на всички типове въпроси и атрибути

Общ преглед

Ако сте объркани как да наименувате вашите променливи (SGQA срещу Qcodes), не сте сами. Въпреки че основната документация описва как да съставяте имена на променливи в Qcode, нищо не може да го види в работеща демонстрация. Тази анкета показва как можете да получите достъп до атрибути на въпроси и отговори с помощта на ExpressionScript.


Template:Забележка


Съдържание

  • Примери за всеки тип въпроси
  • Всички типове въпроси, които могат да използват "други", са включени, за да можете да видите как това се отразява на именуването на променливи
  • Стойности по подразбиране за всички типове въпроси, които приемат стойности по подразбиране
  • Приспособяване - Отчети на и извън страницата, показващи всичките 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 - минимална разрешена стойност за отговор (за тип въпрос с мултифлекси числа)! N!#multiflexible_max - максимална допустима стойност за отговор (за тип въпрос с мултифлекси числа)
  6. min_num_value - минимална позволена сума за всички отговори за въпроса
  7. max_num_value - максималната позволена сума за всички отговори за въпроса
  8. equals_num_value - сумата за всички отговори за въпроса трябва да е равна на тази стойност
  9. валидация - това е проверката на регулярния израз за въпроса - може да се прилага към отделни клетки


Екранни снимки

Използвайки нови CSS стилове, всеки тип проверка показва отделен съвет. Ако са показани, те могат да бъдат скрити чрез опцията hide_tip. Опцията по подразбиране е да се показват с червен шрифт, ако въпросът не отговаря на критериите за валидиране, и зелен, ако ги изпълни:



Потребителят не може да изпрати страница с грешки при проверката. Той ще бъде незабавно предупреден, ако е въвел грешна информация:



Валидирането може да се приложи към отделни клетки в рамките на масив, като например в този пример, където валидирането на регулярни изрази гарантира, че всеки запис е правилно форматиран телефонен номер в САЩ, включително код на област.



Изтегляне

За да изтеглите горния пример, щракнете върху следната връзка: LS3_Validation_tests.zip.


Уравнения за валидиране

Общ преглед

Понякога се нуждаете от персонализирано валидиране, което не може да бъде постигнато с традиционните критерии за мин./макс. За целта ще трябва да използвате опциите em_validation_q и em_validation_sq, които ви позволяват да конструирате сложни уравнения за валидиране съответно на ниво въпрос и подвъпрос.


Template:Забележка


Демонстрирани 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. Въпреки че подвъпрос 5 за този въпрос все още има стойност 14 (напр., ако махнете отметката от петия подвъпрос, ще видите отново стойността 14) , тази стойност не допринася за сумата, тъй като в момента е без значение. Всички неподходящи данни се изчистват (NULL в базата данни) при изпращане, но остават достъпни на страницата, в случай че потребителите искат или трябва да променят мнението си относно отговорите.



Изтегляне

За да изтеглите нашия пример, щракнете тук: ls2_subquestion_relevance.lss.


Използване на запетая като разделител на радикса (десетична точка)

Общ преглед

ExpressionScript гарантира, че само валидни числа могат да бъдат въведени в числови полета. Ако въведете невалиден номер, ще бъдете предупредени, че нещо не е наред (напр. в случая с плодовата тема целият въпрос е "червено-червено").

Обърнете внимание, че числовите стойности винаги се преобразуват с помощта на точка като разделител на основата в базата данни. По този начин статистическите анализи ще работят правилно.

За да промените разделителя на основата, отворете опциите Текстови елементи, намиращи се под раздела Настройки, и потърсете функционалността десетичен знак.


Template:Забележка


Типове въпроси, използващи радикс-разделител

  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 е N-тият въпрос в групата (така че третият въпрос в група 1 има уравнението на релевантност "ask1==3").

Тази анкета работи еднакво добре в режими анкета по време, група по група и въпрос по въпрос. Тъй като рандомизирането е зададено в първата група и тази група е ефективно скрита (тъй като всички въпроси от ask1-ask5 са скрити), рандомизирането остава същото за субекта; но всеки различен предмет ще има отделна рандомизация.


Демонстрирани характеристики

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


Екранни снимки

Това е Group0, която използва тип въпрос на уравнение, за да избере произволни стойности от 1 до 6 за всяка група (с изключение на последната група, която има само 4 въпроса). Обърнете внимание, че функцията "if()" първо проверява дали ask1 вече е зададен и ако е така, използва тази стойност. Ако стойността не е зададена, тогава се използва произволна стойност, за да зададе стойността на ask1.



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



Изтегляне

За да изтеглите горния пример за проучване, щракнете тук: Случайни въпроси в рамките на пример за групово проучване.


Произволно задаване на определен брой въпроси в група (подмножество от въпроси)

Template:Предупреждение


Общ преглед

Това проучване показва как да зададете произволна подгрупа от въпроси в група. Например, покажете 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. променлива за релевантностСъстояние
  2. Произволно подреждане

Изтегляне

За да изтеглите горния пример, щракнете върху следната връзка: Пример за произволно проучване 5 от 10.

Оценка на въведен от потребителя списък с продукти

Общ преглед

Примерът по-долу показва как можете да помолите потребителите да изброят набор от продукти, които ги интересуват, и след това да ги накарате да оценят тези продукти.


Демонстрирани функции на ES

  1. 'Приспособяване на отговорите' - когато оценявате продуктите, етикетите идват от полето за коментари на предходния въпрос с множествен избор
  2. Приспособяване на скали' - много разширени опции за въпроси, като заглавия на скали, могат също да бъдат съобразени.


Екранни снимки

Това изображение показва, че тъй като са избрани само продукти 1, 3 и 5, се показват само тези 3 (с помощта на атрибута array_filter). Освен това, етикетите на редовете във втория въпрос са или номерата на продуктите (ако нищо не е въведено в полето за коментар), или съдържанието на полетата за коментари.



Това изображение показва как се определят персонализираните отговори:



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



Следващото изображение показва група, в която определяте скала за оценка от 5 точки (Опции 1-5), заглавието на скалата и продуктите, които искате да оцените. Последният въпрос показва, че всяка от частите на въпроса за масива може да бъде персонализирана:



Следващото изображение показва изгледа на логическия файл на последния въпрос. Както можете да видите, подвъпросите, отговорите и заглавките на скалите могат да бъдат персонализирани.


Изтегляне

За да изтеглите примера за проучване отгоре, щракнете върху следната връзка: Пример за проучване на въведен от потребителя списък с продукти.