Actions

ExpressionScript Engine – Кратко ръководство за стартиране

From LimeSurvey Manual

Revision as of 10:33, 23 November 2023 by Maren.fritz (talk | contribs) (Created page with "Обърнете внимание, че не използвате фигурните скоби, когато въвеждате уравнение за релевантност.")


Ръководство за бърз старт

В рамките на LimeSurvey можете допълнително да персонализирате анкетите си чрез използването на ExpressionScript (накратко: ES). Странична бележка: „ExpressionScript беше наречен Expression Manager (EM) в по-ранна версия. Ако сте чели някъде Expression Manager, това е просто старото име на ES."

ES може да се използва за указване на следното:

  1. Навигация/Разклоняване - позволява на отговорите на респондента да променят реда, в който се показват въпросите;
  2. Скрояване/Разклоняване - помага ви да формулирате въпроса (като препращане към предишни отговори или свързване на изречения въз основа на възрастта или пола на вашите субекти) или как да генерирате персонализирани отчети (като оценки за оценка или персонализирани съвети);
  3. Валидиране - гарантира, че отговорите преминават определени критерии, като минимални и максимални стойности или определен модел на въвеждане.

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

В момента ES предоставя достъп до 70 функции и може лесно да бъде разширен, за да поддържа повече. Той също така ви позволява да осъществявате достъп до вашите променливи, като използвате четими за човека имена на променливи (вместо SGQA имена).

Предстоящите раздели показват основните места, където се използва ES.


Уместност (Контролиране на навигация/разклоняване)

Някои проучвания използват „Goto Logic“, така че ако отговорите на Въпрос 1 с опция C, ще бъдете пренасочени към Въпрос 5. Този подход е много ограничен, тъй като е трудно да се потвърди. Освен това лесно се разваля, когато трябва да пренаредите въпросите. От друга страна, ES използва булеви уравнения за релевантност, за да посочи всички условия, при които даден въпрос може да е валиден. Ако въпросът е уместен, той се показва, в противен случай не е приложим и стойността „NULL“ се съхранява в базата данни.

Забележка: Това е подобно на това, което може да се направи чрез Редактор на условия, но ES ви позволява лесно да зададете много по-сложни и мощни критерии (и ви позволява да използвате името на променливата вместо SGQA идентификатори).




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

Уравнението за релевантност е показано по-долу в колоната Релевантност след името на променливата. Стойностите за релевантност на теглото, теглото_единици, височината и височината са всички 1 (стойност по подразбиране), което означава, че тези въпроси винаги се показват. Уместността за ИТМ обаче е {!is_empty(height) и !is_empty(weight)}, което означава, че ИТМ ще бъде изчислен само ако субектът въведе стойност както за височината, така и за теглото (по този начин се избягва рискът от получаване на нулева грешка ). Освен това въпросът „Отчет“ се показва само ако респондентът отговори на четирите основни въпроса (височина, единици за височина, тегло, единици за тегло).



Файл:help.png Забележка: Изображението по-горе идва от логически файл на анкетата, който ви позволява да търсите синтактични грешки, преди да активирате анкетата.


Уместността се показва и може да се редактира, когато:

  • искате да видите/редактирате уместността на ниво въпрос
  • искате да видите/редактирате уместността на ниво група


Преглед/редактиране на уместност на ниво въпрос

Това уравнение изчислява индекса на телесна маса (ИТМ). Пита се само дали човекът въвежда ръста и теглото си.



Това е екранът за редактиране на въпроса "ИТМ".



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


Преглед/редактиране на уместност на ниво група

Let's focus now on another example - a simple census survey. To download it, click on the following link: Census survey example.

The first page asks how many people live with you and stores that in the "cohabs" variable. This page is only shown if you have more than one cohabitant (it is shown for the second person cohabitating with you). Also, p2name, p2age. p2sum are displayed only if the question before each of them contains a response.



So, the group also has question-level relevance criteria, such that some questions only appear if you answered certain questions before them (e.g., p2age is displayed if p2name was answered). ES combines the Group and Question-level relevance for you. Questions in a group are only asked if the group as a whole is relevant. Then, only the subset of questions within the group that are relevant are asked.

Here is the screenshot for editing the group-level relevance of Cohabitant 2:



Note that you do not use the curly braces when you enter a relevance equation.

Tailoring/Piping

ES lets you easily do simple and complex conditional tailoring. Sometimes you just need a simple substitution, like saying, "You said you purchased [Product]. What did you like best about it?". Sometimes you need conditional substitution like "[Mr./Mrs.] [LastName], would you be willing to complete our survey?". In this case, you want to use "Mr. or Mrs." based on the person's gender. Other times you need even more complex substitution (such as based upon a mathematical computation). ES supports each of these types of tailoring/piping.


Conditional Equations

The Body Mass Index example shows the ability to compute a person's BMI, even while letting them enter their height and weight in two different units (cms vs inches and kgs vs lbs):



In this case, weightkg is {if(weightunits == "kg", weight, weight * 0.453592)}. This "if()" function means that if the subject enters the weight using kilograms, use that value, otherwise multiply the entered value (pounds is the alternative) by 0.453592 to convert it to kilograms. The heightm variable uses a similar approach to compute the person's height in meters (height in cms/100), even if he has entered his height in inches (1 meter=3.28084 inches).

BMI is computed as: {weightkg / (heightm * heightm)}.

Lastly, the report conditionally tailors the message for the subject, telling her what he entered. (e.g., "You said you are 2 meters tall and weight 70 kg.")

In the below image, weightstatus uses nested "if()" statements to categorize the person as underweight to severely obese. You can see its equation by checking its logic:



From the edit window for this question, you can see two things:

  1. Tailoring must surround expressions with curly braces
  2. Expressions can span multiple lines if, as in this case, you want to make it easier to read the nested conditional logic.



Tailored Questions, Answers, and Reports

Note: Dynamic tailoring may not work if answer options are made available in select boxes on the same question page. This results from the fact that tailoring inserts a <span> tag which is not valid inside select options.

The BMI report looks like this:



Here is the edit window for the same question.



Anything within curly braces is treated as an expression, being syntax-highlighted (color coded) in the prior image. If you have any typos (such as misspelled or undefined variable names or functions), ES would show an error. In our below example:

  • heightunit.shown is an undefined variable name (it is actually heightunits.shown) and
  • "rnd()" is an undefined function (the proper function name is "round()").

In both cases, the errors are located within a red box to make it easier to spot and fix them.



You can also see that you can quickly create complex reports, such as a table of entered values or tailored advice.

Please remember that all tailoring must surround expressions with curly braces so that LimeSurvey knows which parts of the question are free text and which should be parsed by the ExpressionScript engine.


Validation

ES controls how most of the advanced question options work. These control aspects like min/max numbers of answers, min/max individual values, min/max sum values, and checking that entered values match specified string patterns. Any value in one of those fields is considered an expression, so you can have min/max criteria with complex conditional relationships to other questions.

In all of these cases, since the advanced question attribute is always considered an expression, you do not use curly braces when specifying it.

The sample surveys page shows many working examples containing a variety of validation expressions.

ExpressionScript - presentation

To find out more about ExpressionScript and how you can use different expressions to enhance your survey, please click on the following link.