Exempelenkäter för Expression Manager
From LimeSurvey Manual
Introduktion
Det bästa sättet att lära sig använda ExpressionScript är att experimentera med fungerande exempel och anpassa dem efter dina behov.
Nedan hittar du ett antal exempelenkäter som visar (och låter dig testa) hur EM kan användas för att förbättra din enkät. Dessa enkäter finns i mappen /docs/demosurveys i distributionen.
Relevans, anpassning och ekvationer
Översikt
Följande exempel beräknar BMI (kroppsmassaindex) för varje respondent. Nedan beskrivs de funktioner som visas i exemplet.
EM-funktioner som visas
- Relevans - stöd för kraftfull villkorsstyrd logik;
- Piping / anpassning - möjlighet att infoga eller anpassa svar och metadata för frågor;
- Dynamisk anpassning - observera att rapporter ändras på sidan medan du besvarar frågor.
- Mikroanpassning - villkorsstyrd anpassning inom meningar och rapporter med if()-satser
- 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, som 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 för att avgöra om du är överviktig. Observera att du inledningsvis 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) ser du en anpassad rapport som sammanfattar det du angav och visar 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 den metriska längden, vikten, BMI och viktstatus i databasen utan behov av 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 anges, i stället för att visa "NaN" eller "Divide by Zero".

När siffror anges ändras rapporten på sidan och visar beräkningen som utförs och dess resultat.

Det finns många fler 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 roliga 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 deltagarnas kön och/eller antal. Du kan till och med enkelt böja verb och substantiv utifrån kön och antal.

Ladda ner
Klicka på följande länk för att komma åt exempelenkäten: 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. Efter att ha skapat gruppen för Person 1 exporterade jag gruppen. Eftersom jag använde qcode-variabelnamn som p1_name i stället för SGQA-koden kunde jag använda en textredigerare för att snabbt redigera och importera gruppen på nytt flera gånger (det tog t.ex. cirka 10 sekunder att redigera och importera varje upprepad grupp, vilket säkerställde att alla variabler hade unika variabelnamn och att logiken på gruppnivå var korrekt).
Du kan också använda funktionen Kopiera fråga, men den blir inte lika snabb som alternativet ovan.
Detta visar också hur du kan förhindra att meddelandet Slutförd 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 endast för upp till det angivna antalet personer i hushållet;
- Anpassning (tailoring) - Den avslutande rapporten sammanfattar demografiska uppgifter för varje person i hushållet;
- Progressiv visning av frågor - Oavsett om du använder gruppläge eller allt-i-ett-läge visas nästa fråga först när de föregående har besvarats.
Skärmbilder
Enkäten genererar en anpassad 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 enkätexemplet klickar du här: LS3_group_relevance.zip.
Kaskadformade samlingsfilter
Översikt
Den här enkäten bygger på utformningen av en enkät som tillhandahållits av Joy Lane Research, LLC.
Skärmbilder
Observera följande:
- Q02 visar endast de produkter som markerats i Q01 (genom att använda array_filter)
- Q02 visar också "Another product", den text som angetts i fältet "Other electronic" i Q01
- Q04 visar endast de produkter från Q02 som markerades (så samlingsfiltret kaskadar)
- Q05 visar endast de produkter från Q02 som inte markerades i Q02 (med ett kaskadformat 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/anpassning 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. Den huvudsakliga dokumentationen beskriver hur du bygger Qcode-variabelnamn, men inget slår 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å varje frågetyp
- 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
- Anpassning - Rapporter på och utanför sidan som visar alla 16 tillgängliga EM-suffix i punktnotation.
- Rapporterna visar alla data som hittills angetts (så att du ser hur du kan skapa egna utskrivbara rapporter åt 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
Detta är en mycket stor enkät, så vi har valt att inte inkludera några skärmbilder. Ladda i stället ner den och experimentera med den.
Ladda ner
Klicka på följande länk för att ladda ner enkäten: LS3_EM_question_attributes.lss
Traditionell validering, nytänkt
Ö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 (och försvinner 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 tillåtna värde för ett svar (för frågetypen flexibla numeriska samlingar)
- multiflexible_max - största tillåtna värde för ett svar (för frågetypen flexibla numeriska samlingar)
- 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
- validering - 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 separat 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 om den uppfyller dem:

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

Validering kan tillämpas på enskilda celler i en samling, som i detta exempel där validering med reguljära uttryck säkerställer att varje post är ett korrekt formaterat amerikanskt telefonnummer inklusive riktnummer.

Ladda ner
Om du vill ladda ner exemplet ovan klickar du på följande länk: LS3_Validation_tests.zip.
Valideringsekvationer
Översikt
Ibland behöver du anpassad validering som inte går att uppnå med de traditionella min/max-kriterierna. För detta 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 (cell i samlingen) ä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 i allmänhet bakgrundsfärgen för en cell 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 dina barns åldrar i fallande ordning genom att tillämpa 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 tillämpa 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, där LimeSurvey automatiskt konverterar det 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
Här visas hur array_filter och valideringskriterier kan samverka. För valideringar som gäller summor beaktas endast relevanta (synliga) värden.
EM-funktioner som demonstreras
Den visar också dynamisk rapportering av antalet besvarade frågor bland kärnfrågorna.
Skärmbilder
Om du ändrar antalet synliga rader ändras summan dynamiskt. Att markera en delfråga som irrelevant rensar inte dess värde. I stället gäller att om den är irrelevant bidrar 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 respondenterna 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 varnas du för 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 de statistiska analyserna som de ska.
Om du vill ändra decimaltecknet öppnar du 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.
Slumpningsgrupper
Översikt
Den här enkäten visar hur du använder attributet random_group.
Om det här attributet används slumpas frågeordningen varje gång du startar enkäten. När enkäten väl har startats förblir slumpordningen dock densamma, även om du byter språk.
Skärmbilder
Låt oss gå igenom exemplet nedan. Den första slumpade frågan på sidan är antingen Q1, Q4 eller Q7. Den andra slumpade frågan på sidan är antingen Q2, Q5 eller Q8.

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

En annan slumpning genererades när jag testade enkäten andra gången.

Men när jag bytte till franska (utan att starta om enkäten) förblev slumpordningen oförändrad.

Ladda ner
Om du vill ladda ner exemplet ovan klickar du på följande länk: Randomization_Group_Test.lss
Ställ slumpmässigt en fråga per grupp
Översikt
Den här enkäten visar hur du kan konfigurera en enkät så att en slumpmässigt vald 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 frågetextfältet, 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:te frågan i gruppen (så den tredje frågan i grupp 1 har relevansekvationen "ask1==3").
Den här enkäten fungerar lika bra i lägena enkät åt gången, 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 ask1-ask5-frågor är dolda), förblir slumpningen densamma för respondenten, men varje respondent får en egen slumpning.
Funktioner som demonstreras
- Frågetypen Ekvation
- Slumpfunktioner
- Villkorsfunktionen (if)
Skärmbilder
Detta ä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änds 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 visas i den fjärde gruppen.

Ladda ner
Om du vill ladda ner enkätexemplet ovan klickar du här: Enkätexempel med slumpmässiga frågor inom en grupp.
Ställ slumpmässigt 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 läses in. Varje fråga får en relevansekvation som anger att summan av "relevanceStatus" för alla andra frågor i gruppen ska vara mindre än antalet frågor som du vill visa. Eftersom relevanceStatus tilldelas när frågorna visas, 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 lista en uppsättning produkter som intresserar dem och sedan låta dem betygsätta dessa produkter.
EM-funktioner som demonstreras
- Anpassning av svar - när produkter betygsätts hämtas etiketterna från kommentarsfältet i den föregående flervalsfrågan
- Anpassning av skalor - många avancerade frågealternativ, som skalrubriker, kan också anpassas.
Skärmbilder
Den här bilden visar att trots att bara produkterna 1, 3 och 5 valdes visas endast 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, som gör det möjligt att kontrollera att den villkorsstyrda logiken fungerar som önskat (t.ex. för att se 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 titel och de produkter 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 kan se kan delfrågorna, svaren och skalrubrikerna anpassas.

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