Exempelenkäter för ExpressionScript
From LimeSurvey Manual
Introduktion
Det bästa sättet att lära sig använda ExpressionScript är att prova fungerande exempel och anpassa dem efter dina behov.
Nedan hittar du en samling exempelenkäter som visar (och låter dig testa) hur EM kan användas för att förbättra din enkät. Enkäterna finns i mappen /docs/demosurveys i distributionen.
Relevans, anpassning och ekvationer
Översikt
Följande exempel beräknar BMI (Body Mass Index, kroppsmassaindex) för varje respondent. Nedan ser du vilka funktioner som visas i exemplet.
EM-funktioner som visas
- Relevans - stöd för kraftfull villkorsstyrd logik;
- Piping / anpassning - möjlighet att föra in eller anpassa svar och metadata för frågor;
- Dynamisk anpassning - observera att rapporterna ändras på sidan medan du besvarar frågorna.
- Mikroanpassning - villkorsstyrd anpassning inom meningar och rapporter med if()-uttryck
- Ekvationer - en ny frågetyp som låter dig göra beräkningar och spara resultaten i databasen, även om beräkningen är dold
- Villkorsstyrd validering - valideringskriterier, till exempel det minsta tillåtna värdet, kan vara villkorsstyrda - t.ex. baserade på ekvationer.
Skärmbilder
Det här exemplet beräknar kroppsmassaindex, en beräkning utifrån din vikt och längd som visar om du är underviktig, normalviktig, överviktig eller fet. Observera att du till en början bara ser de fyra obligatoriska frågorna:

När du har angett dina uppgifter (och valt om du vill använda metriska eller icke-metriska enheter) visas en anpassad rapport som sammanfattar det du angav och talar om din viktstatus:

Här är ett annat exempel med icke-metriska enheter som visar hur resultatet ändras dynamiskt:

Det finns dolda frågor av typen Ekvation på den interna nivån som konverterar data till metriska enheter (vid behov) och sparar längd, vikt, BMI och viktstatus i metriska enheter i databasen, utan att du behöver någon egen JavaScript.
I nästa exempel kan du se hur du kan använda matematiska och andra funktioner i anpassade rapporter. Så här ser sidan ut innan du har angett några data. Det finns villkorsstyrd logik som visar tomma celler om inga (eller icke-numeriska) data har angetts, i stället för att visa "NaN" eller "Divide by Zero".

När du anger siffror ändras rapporten på sidan så att den visar beräkningen som utförs och dess resultat.

Det finns många andra exempel i den här exempelenkäten. Skärmbilden nedan visar till exempel ett av dussintals sätt att fylla i sidan Dynamic Relevance. Som hjälptexten anger kan du prova olika åldrar, och framför allt ologiska kombinationer av svar, för att se de underhållande meddelandena som genereras längst ned. Observera också att om du anger att du har fler än ett barn står det i meddelandet "I hope you enjoy playing with your X children" i stället för "I hope you enjoy playing with your child". Det visar hur du enkelt kan mikroanpassa meningar så att de passar könet och/eller antalet hos dina deltagare. Du kan till och med enkelt böja verb och substantiv utifrån kön och antal.

Ladda ner
Om du vill komma åt exempelenkäten, klicka på följande länk: LS3_em_tailoring.zip.
Exempel på folkräkning
Översikt
Det här är ett folkräkningsexempel som frågar hur många personer som ingår i ditt hushåll.
Det visar hur relevans på gruppnivå kan göra det enklare att skapa en "loop" av frågor. När jag hade skapat gruppen för Person 1 exporterade jag gruppen. Eftersom jag använde variabelnamn baserade på qcode, som p1_name, i stället för SGQA-koden kunde jag använda en textredigerare för att snabbt redigera och importera om gruppen flera gånger (det tog till exempel ungefär 10 sekunder att redigera och importera om varje upprepad grupp, samtidigt som alla variabler fick unika namn och logiken på gruppnivå blev korrekt).
Du kan också använda funktionen Kopiera fråga, men den är inte lika snabb som alternativet som föreslås ovan.
Detta visar också hur du kan förhindra att meddelandet om slutförd enkät visas innan enkäten verkligen är slutförd (t.ex. när alla nödvändiga grupper är ifyllda).
Demonstrerade EM-funktioner
- Relevans på gruppnivå - Uppföljningsgrupperna (Person 1–5) visas bara upp till det angivna antalet personer i hushållet;
- Skräddarsydd text (tailoring) - Den avslutande rapporten sammanfattar demografiska uppgifter för varje person i hushållet;
- Progressiv visning av frågor - Oavsett om enkäten visas grupp för grupp eller allt på en gång visas nästa fråga först när de föregående har besvarats.
Skärmbilder
Enkäten genererar en skräddarsydd rapport som visar demografin för det angivna antalet personer i hushållet:

Om du byter till läget en fråga i taget ser du att indexet anpassar frågorna. Eftersom användaren angav att personen är en kvinna frågar enkäten "Vad heter hon?". Och eftersom vi svarade "Mary" lyder nästa fråga "Hur gammal är Mary?".

Ladda ner
Om du vill ladda ner exempelenkäten klickar du här: LS3_group_relevance.zip.
Kaskadande samlingsfilter
Översikt
Den här enkäten bygger på en enkätdesign som tillhandahållits av Joy Lane Research, LLC.
Skärmbilder
Observera följande:
- Q02 visar bara de produkter som markerades i Q01 (med hjälp av array_filter)
- Q02 visar också "Another product", den text som angavs i fältet "Other electronic" i Q01
- Q04 visar bara produkter från Q02 som markerades (så samlingsfiltret kaskadar)
- Q05 visar bara produkter från Q02 som inte markerades i Q02 (med ett kaskadande array_filter_exclude)


Ladda ner
Klicka på följande länk för att ladda ner exemplet ovan: Enkätexempel LS2_cascading_array_filter.
Piping/skräddarsydd text med alla frågetyper och attribut
Översikt
Om du är osäker på hur du ska namnge dina variabler (SGQA eller Qcodes) är du inte ensam. Även om huvuddokumentationen beskriver hur du bygger upp variabelnamn med Qcode går inget upp mot att se det i en fungerande demo. Den här enkäten visar hur du kan komma åt frågeattribut och svar med ExpressionScript.
Innehåll
- Exempel på alla frågetyper
- Alla frågetyper som kan använda "Annat" ingår, så att du kan se hur det påverkar namngivningen av variabler
- Standardvärden för alla frågetyper som accepterar standardvärden
- Skräddarsydd text (tailoring) - Rapporter på och utanför sidan som visar alla 16 tillgängliga EM-suffix i punktnotation.
- Rapporterna visar alla data som hittills har angetts (så att du ser hur du kan skapa egna utskrivbara rapporter för användare i stället för skärmen för utskrift av svar)
- Korrekt namngivning av alla variabler med Qcode och SGQA
Skärmbilder
Det här är en mycket stor enkät, så vi har valt att inte ta med några skärmbilder. Ladda i stället ner den och testa själv.
Ladda ner
Klicka på följande länk för att ladda ner enkäten: LS3_EM_question_attributes.lss
Traditionell validering i ny tappning
Översikt
Här visas alla valideringstyper som använder uttryck och hur de påverkar var och en av de frågetyper som stöder validering. I många fall är valideringstipsen dolda från början och visas bara om en fråga inte uppfyller valideringskriterierna (de försvinner alltså igen när frågan uppfyller kriterierna).
Valideringstyper som visas
- min_num_value_n - minsta värde för ett svar
- max_num_value_n - största värde för ett svar
- min_answers - minsta antal svar som krävs
- max_answers - största antal svar som tillåts
- multiflexible_min - minsta värde som tillåts för ett svar (för frågetypen flervalsnummer)
- multiflexible_max - största värde som tillåts för ett svar (för frågetypen flervalsnummer)
- min_num_value - minsta tillåtna summa av alla svar på frågan
- max_num_value - största tillåtna summa av alla svar på frågan
- equals_num_value - summan av alla svar på frågan måste vara lika med detta värde
- validation - detta är valideringen med reguljärt uttryck för frågan - den kan gälla enskilda celler
Skärmbilder
Med nya CSS-stilar visas varje valideringstyp som ett eget tips. Om de visas kan de döljas med alternativet hide_tip. Standardinställningen är att visa dem med röd text om frågan inte uppfyller valideringskriterierna och grön text om den uppfyller dem:

En användare kan inte skicka en sida som innehåller valideringsfel. Användaren varnas direkt om felaktig information har angetts:

Validering kan användas på enskilda celler i en samling, som i det här exemplet där validering med reguljära uttryck säkerställer att varje inmatning är ett korrekt formaterat amerikanskt telefonnummer inklusive riktnummer.

Ladda ner
Klicka på följande länk för att ladda ner exemplet ovan: LS3_Validation_tests.zip.
Valideringsekvationer
Översikt
Ibland behöver du anpassad validering som inte går att uppnå med de traditionella min/max-kriterierna. Då använder du alternativen em_validation_q och em_validation_sq, som låter dig skapa komplexa valideringsekvationer på fråge- respektive delfrågenivå.
EM-funktioner som visas
- em_validation_q - detta är en ekvation som avgör om hela frågan är giltig
- em_validation_q_tip - detta är meddelandet som visas om frågan inte uppfyller kriterierna i em_validation_q
- em_validation_sq - detta är ekvationen som avgör om varje delfråga (samlingscell) är giltig
- em_validation_sq_tip - detta är meddelandet som visas om någon av delfrågorna är ogiltig.
När em_validation_sq används blir bakgrundsfärgen för en cell i regel röd om cellen är ogiltig, för att visa att det finns ett fel.
Skärmbilder

Den här frågan säkerställer att du anger barnens åldrar i fallande ordning genom att använda följande valideringsekvation:
q1_sq1 >= q1_sq2 && q1_sq2 >= q1_sq3 && q1_sq3 >= q1_sq4

I exemplet nedan säkerställer valideringen att högst 3 frågor besvaras på varje rad, genom att använda följande valideringsekvation:
(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)
Du kan också skriva det på följande sätt, så omvandlar LimeSurvey det automatiskt vid körning till uttrycket ovan.
(sum(self.sq_A) <= 3) && (sum(self.sq_B) <= 3) && (sum(self.sq_C) <= 3)

Ladda ner
Om du vill ladda ner enkätexemplet som används i exemplen ovan klickar du på följande länk: ls2_test_em_sq_validation.lss.
Relevans för delfrågor
Översikt
Detta visar hur array_filter och valideringskriterier kan samverka. För valideringar som gäller summor beaktas endast relevanta (synliga) värden.
EM-funktioner som demonstreras
Det visar också dynamisk rapportering av antalet besvarade frågor bland kärnfrågorna.
Skärmbilder
Om du ändrar antalet synliga rader ändras summan dynamiskt. Om en delfråga markeras som irrelevant rensas inte dess värde. Om delfrågan är irrelevant bidrar i stället dess värden inte till någon ekvation.


Notera vad som händer när vi markerar "Fifth subquestion" för den första frågan "Which rows should appear below". Summan för den andra frågan "Enter some numbers" är nu 5. Även om delfråga 5 i den frågan fortfarande har värdet 14 (om du avmarkerar den femte delfrågan ser du värdet 14 igen) bidrar värdet inte till summan, eftersom det för tillfället är irrelevant. All irrelevant data rensas (sätts till NULL i databasen) när enkäten skickas, men den finns kvar på sidan om respondenter vill eller behöver ändra sina svar.

Ladda ner
Om du vill ladda ner vårt exempel klickar du här: ls2_subquestion_relevance.lss.
Använda komma som decimaltecken
Översikt
ExpressionScript ser till att endast giltiga tal kan matas in i numeriska fält. Om du matar in ett ogiltigt tal får du en varning om att något är fel (t.ex. markeras hela frågan i rött i temat fruity).
Observera att numeriska värden alltid konverteras så att de använder punkt som decimaltecken i databasen. På så sätt fungerar statistiska analyser som de ska.
Om du vill ändra decimaltecknet går du till alternativen för Textelement under fliken Inställningar och letar efter funktionen Decimaltecken.
Frågetyper som använder decimaltecken
- Numerisk inmatning [N]
- Flera numeriska inmatningar [K]
- Samling (tal/siffor) [:]
- Samling (text) [;], när attributet numbers_only används
- Lista (radio) [L], när attributet other_numbers_only används
- Kort fritext [S], när attributet numbers_only används
- Flera korta textsvar [Q], när attributet numbers_only används
- Flervalsfråga [M], när attributet other_numbers_only används
- Flervalsfråga med kommentarer [P], när attributet other_numbers_only används
Skärmbilder
I skärmbilderna nedan ser du att komma kan användas som decimaltecken.

Ladda ner
Om du vill ladda ner exemplet ovan klickar du på följande länk: ls2_comma_as_radix_separator.lss.
Slumpmässiga grupper
Översikt
Den här enkäten visar hur du använder attributet random_group.
Om det här attributet används slumpas frågornas ordning varje gång du startar enkäten. När enkäten väl har startats ligger dock slumpordningen fast, även om du byter språk.
Skärmbilder
Låt oss titta på exemplet nedan. Den första slumpade frågan på sidan blir antingen Q1, Q4 eller Q7. Den andra slumpade frågan på sidan blir antingen Q2, Q5 eller Q8.

Här är slumpordningen som skapades första gången jag testade den här enkäten.

En annan slumpordning skapades när jag testade enkäten andra gången.

Men när jag bytte till franska (utan att starta om enkäten) låg slumpordningen kvar oförändrad.

Ladda ner
Om du vill ladda ner exemplet ovan klickar du på följande länk: Randomization_Group_Test.lss
Slumpmässigt ställa en fråga per grupp
Översikt
Den här enkäten visar hur du konfigurerar en enkät så att en slumpmässig fråga visas per grupp. Den innehåller 5 grupper med 6 frågor vardera. I början, i Grupp 0, fylls fem dolda ekvationsfrågor, kallade ask1-ask5, i. Var och en har värdet {floor(rand(1,6.9999))} i fältet för frågetext, vilket innebär att variablerna ask1-ask5 får ett värde mellan 1 och 6. Därefter har varje fråga i gruppen en relevansekvation som "ask1==N", där N är den N:e frågan i gruppen (den tredje frågan i grupp 1 har alltså relevansekvationen "ask1==3").
Den här enkäten fungerar lika bra i läget hela enkäten samtidigt, grupp för grupp och fråga för fråga. Eftersom slumpningen sätts i den första gruppen, och den gruppen i praktiken är dold (eftersom alla frågor ask1-ask5 är dolda), förblir slumpningen densamma för deltagaren, men varje deltagare får en egen slumpordning.
Funktioner som visas
- Frågetypen Ekvation
- Slumpfunktioner
- Villkorsfunktionen (if)
Skärmbilder
Det här är Group0, som använder frågetypen Ekvation för att välja slumpmässiga värden från 1 till 6 för varje grupp (utom den sista gruppen, som bara har 4 frågor). Observera att funktionen "if()" först kontrollerar om ask1 redan har satts och i så fall använder det värdet. Om värdet inte har satts används ett slumpmässigt värde för att sätta värdet på ask1.

Den här gruppen visar hur variabeln (ask4) från Group0 används för att styra vilken fråga som är synlig i den fjärde gruppen.

Ladda ner
Om du vill ladda ner enkätexemplet ovan klickar du här: Exempel på enkät med slumpmässiga frågor i en grupp.
Slumpmässigt ställa ett visst antal frågor i en grupp (en delmängd av frågorna)
Översikt
Den här enkäten visar hur du ställer en slumpmässig delmängd av frågorna i en grupp. Du kan till exempel visa 5 slumpmässiga frågor av 10 frågor i en grupp.
Enkäten har en grupp med 10 frågor. Alla frågor har tilldelats samma namn på slumpgrupp. Därför visas de i slumpmässig ordning när sidan laddas. Varje fråga får en relevansekvation som kräver att summan av "relevanceStatus" för alla andra frågor i gruppen är mindre än antalet frågor som du vill visa. Eftersom relevanceStatus tilldelas när frågorna renderas, blir detta i praktiken summan av antalet föregående frågor.
I vårt exempel med 5 av 10 skulle ekvationen för Q1 alltså vara:
sum(Q2.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5
För Q2 skulle den vara:
sum(Q1.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5
Och så vidare...
Funktioner som demonstreras
Ladda ner
Om du vill ladda ner exemplet ovan klickar du på följande länk: Enkätexempel med 5 slumpmässiga av 10.
Betygsätta en användarinmatad lista med produkter
Översikt
Exemplet nedan visar hur du kan be användare att lista en uppsättning produkter som intresserar dem och sedan låta dem betygsätta dessa produkter.
ES-funktioner som demonstreras
- Anpassning av svar - vid betygsättning av produkter hämtas etiketterna från kommentarsfältet i den föregående flervalsfrågan
- Anpassning av skalor - många avancerade frågealternativ, till exempel skalrubriker, kan också anpassas.
Skärmbilder
Den här bilden visar att eftersom endast produkterna 1, 3 och 5 valdes visas bara dessa tre (med hjälp av attributet array_filter). Dessutom är radetiketterna i den andra frågan antingen produktnumren (om inget har angetts i kommentarsfältet) eller innehållet i kommentarsfälten.

Den här bilden visar hur de anpassade svaren anges:

Här är logikfilen (Show Logic File) för den frågan. Med den kan vi kontrollera att den villkorsstyrda logiken fungerar som önskat (till exempel om det finns några syntaxfel):

Nästa bild visar en grupp där du anger en betygsskala med 5 steg (alternativ 1–5), skalans rubrik och de produkter som du vill betygsätta. Den sista frågan visar att varje del av samlingsfrågan kan anpassas:

Nästa bild visar logikfilsvyn för den sista frågan. Som du ser kan delfrågor, svar och skalrubriker anpassas.

Ladda ner
Om du vill ladda ner enkätexemplet ovan klickar du på följande länk: Enkätexempel: betygsätta en användarinmatad lista med produkter.