ExpressionScript Engine - Ghid de pornire rapidă
From LimeSurvey Manual
Ghid de pornire rapidă
În LimeSurvey, vă puteți personaliza în continuare sondajele prin utilizarea ExpressionScript (scurt: ES). Notă laterală: „ExpressionScript a fost numit Expression Manager (EM) în versiunea anterioară. Dacă citiți Expression Manager undeva, este doar vechiul nume al ES."
ES poate fi folosit pentru a specifica următoarele:
- Navigație/Branching - permite răspunsurilor unui respondent să schimbe ordinea în care sunt afișate întrebările;
- Croitorie/Conducte - vă ajută să formulați întrebarea (cum ar fi referirea la răspunsuri anterioare sau conjugarea propozițiilor bazate pe vârsta sau sexul subiecților) sau cum să generați rapoarte personalizate (cum ar fi scoruri de evaluare sau sfaturi personalizate);
- Validare - asigură că răspunsurile trec anumite criterii, cum ar fi valorile minime și maxime sau un anumit model de intrare.
ES oferă o modalitate intuitivă de a specifica logica pentru fiecare dintre aceste caracteristici. Aproape orice puteți scrie ca o ecuație matematică standard este o expresie validă.
ES oferă în prezent acces la 70 de funcții și poate fi extins cu ușurință pentru a susține mai multe. De asemenea, vă permite să vă accesați variabilele folosind nume de variabile care pot fi citite de om (în loc de SGQA names).
Secțiunile următoare arată principalele locuri în care este utilizat ES.
Unele sondaje folosesc „Goto Logic”, astfel încât, dacă răspundeți la întrebarea 1 cu opțiunea C, sunteți redirecționat la întrebarea 5. Această abordare este foarte limitată, deoarece este greu de validat. În plus, se rupe cu ușurință atunci când trebuie să reordonezi întrebările. Pe de altă parte, ES utilizează Ecuații de relevanță booleene pentru a specifica toate condițiile în care o întrebare ar putea fi validă. Dacă întrebarea este relevantă, atunci întrebarea este afișată, în caz contrar, nu este aplicabilă, iar valoarea „NULL” este stocată în baza de date.
Pentru a înțelege mai bine conceptul de relevanță, să ne concentrăm pe următorul sondaj care calculează indicele de masă corporală (IMC) al respondenților la sondaj. Pentru a-l descărca, faceți clic pe următorul link: Exemplu de sondaj cu indicele de masă corporală.
Ecuația relevanței este afișată mai jos în coloana Relevanță după numele variabilei. Valorile de relevanță pentru greutate, greutate_unități, înălțime și înălțime_unități sunt toate 1 (valoare implicită), ceea ce înseamnă că acele întrebări sunt întotdeauna afișate. Cu toate acestea, relevanța pentru IMC este {!is_empty(height) și !is_empty(greutatea)}, ceea ce înseamnă că IMC va fi calculat numai dacă subiectul introduce o valoare atât pentru înălțime, cât și pentru greutate (evitând astfel riscul de a obține o eroare zero). De asemenea, întrebarea „Raport” este afișată numai dacă respondentul răspunde la toate cele patru întrebări principale (înălțime, unități de înălțime, greutate, unități de greutate).


Relevanța este afișată și poate fi editată atunci când:
- doriți să vizualizați/editați relevanța la nivel de întrebare
- doriți să vedeți/editați relevanța la nivel de grup
Vizualizarea / Editarea relevanței la nivel de întrebare
Această ecuație calculează indicele de masă corporală (IMC). Se întreabă doar dacă persoana își introduce înălțimea și greutatea.

Acesta este ecranul de editare pentru întrebarea „IMC”.

Rețineți că nu folosiți acolade atunci când introduceți o ecuație de relevanță.
Vizualizarea/Editarea relevanței la nivel de grup
Să ne concentrăm acum pe un alt exemplu - un simplu sondaj de recensământ. Pentru a-l descărca, faceți clic pe următorul link: Exemplu de sondaj de recensământ.
Prima pagină întreabă câți oameni locuiesc cu tine și stochează asta în variabila „cohabs”. Această pagină este afișată numai dacă ai mai mult de un concubin (este afișată pentru a doua persoană care conviețuiește cu tine). De asemenea, p2name, p2age. p2sum sunt afișate numai dacă întrebarea dinaintea fiecăreia dintre ele conține un răspuns.

Deci, grupul are, de asemenea, criterii de relevanță la nivel de întrebare, astfel încât unele întrebări apar numai dacă ați răspuns la anumite întrebări înaintea lor (de exemplu, p2age este afișat dacă s-a răspuns p2name). ES combină relevanța la nivel de grup și de întrebare pentru tine. Întrebările dintr-un grup sunt adresate doar dacă grupul în ansamblu este relevant. Apoi, sunt adresate doar subsetul de întrebări din cadrul grupului care sunt relevante.
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:
- Tailoring must surround expressions with curly braces
- 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

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.