x

Huvudkapitel

  1. LimeSurvey Cloud vs LimeSurvey CE
  2. Snabbstartsguide - LimeSurvey 3.0+
  3. Installation - LimeSurvey CE
  4. Så utformar du en bra enkät (guide)
  5. Komma igång
  6. Administrera LimeSurvey
  7. Enkäter - introduktion
  8. Enkätinställningar
  9. Enkätmeny
  10. Enkätens struktur
  11. Frågor - introduktion
  12. Frågegrupper - introduktion
  13. Enkäter - hantering
  14. Alternativ i enkätverktygsfältet
  15. Flerspråkig enkät
  16. ExpressionScript-motorn – Snabbstartsguide
  17. Okategoriserade och avancerade funktioner
  18. FAQ
  19. Felsökning
  20. Lösningar och genvägar
  21. Licens
  22. Ändringslogg för versioner
  23. Plugins
 Actions

Exempel på ExpressionScript

From LimeSurvey Manual

Den här sidan kan ha maskinöversatts och kan innehålla fel. Visa det engelska originalet · Förbättra den här översättningen
This page is a translated version of the page ExpressionScript examples and the translation is 100% complete.
Hjälp gärna till att utöka den här artikeln genom att lägga till egna exempel. Det hjälper andra att komma igång med uttrycksskriptet.


Struktur

Den första delen av artikeln beskriver vad uttryck kan användas till och var du hittar eller lägger till ett uttryck. Den andra delen innehåller exempel på hur du använder uttryck.


Kategorier av uttryck

LimeSurvey använder uttryck för följande ändamål:


Relevans

Syfte: Dölja frågegrupper/frågor

Relevans styr om en frågegrupp eller fråga visas eller döljs. Om uttryckets resultat är "sant" (dvs. 1) visas elementet. I annat fall (om uttryckets resultat är "falskt", dvs. 0) döljs elementet.

Typ Visar/döljer Var du hittar det Skärmdump
Relevans för frågegrupp frågegrupp Skapa/redigera frågegrupp -> "Relevansekvation:"
Relevans för fråga fråga Skapa/redigera fråga -> "Relevansekvation:"
Relevans för delfråga delfråga Redigera delfrågor -> "Relevansekvation:"


Validering

Syfte: Validera inmatning/åtgärder för frågor/delfrågor/svar

Validering styr om respondentens inmatning i en fråga eller åtgärd är giltig eller inte. Om uttryckets resultat är "sant" (dvs. 1) tillämpas klassen "good" på elementet och valideringsmeddelandet. Om uttryckets resultat i stället är "falskt" (dvs. 0) tillämpas klassen "error" på elementet och valideringsmeddelandet. Du kan definiera en stil för dessa klasser i template.css.

Typ Validerar Var du hittar det Skärmdump
Frågevalidering fråga Skapa/redigera fråga -> "Logikfliken" -> "Valideringsuttryck för frågan"
Delfrågevalidering delfrågor Skapa/redigera fråga -> "Logikfliken" -> "Valideringsuttryck för deltfrågor" ‎

Textutdata

Syften: (Göra något och) skriva ut text

Ett uttryck kan användas för att skriva ut text. Du kan till exempel testa eller beräkna något och ange utdata beroende på resultatet av testet eller beräkningen. Det kan också användas för att infoga frågetext, svar, frågetyper med mera från en fråga som kommer före uttrycket. Textutdata kan användas överallt där text visas och kan returnera alla slags resultat.

Användningsfall Beskrivning
Mikroanpassning Anpassa en text, t.ex. skriv "Herr" eller "Fru" beroende på en könsfråga som ställts tidigare
Beräkning Beräkna ett värde och skriv ut det, t.ex. "Din familjs inkomst är xxx"
Referens Infoga en text från ett element, t.ex. "Du heter xxx. Hur gammal är du?"


Lagring av svar

Syften: (Göra något,) (skriva ut text) och lagra något i databasen

Frågetypen Ekvation kan användas för att lagra något i databasen. Du kan göra något med ett uttryck, visa ekvationsfrågan (som liknar textvisning) och lagra uttryckets resultat i databasen. Svaret lagras i svarstabellen. Resultatet kan sedan användas i statistikfunktionen eller importeras i något av de format som LimeSurveys exportfunktion erbjuder.

Exempel på uttryck

Infoga ett svar från en föregående fråga

Syfte Infoga ett svar från en föregående fråga
Typ Referens
Exempel Fråga ett (frågekod "Q00"): Vilken stad bor du i?
Fråga två (frågekod "Q01") Hur länge har du bott i STAD?
Att göra: Svaret från fråga ett ska användas i stället för "STAD" i den andra frågan.
Uttryck {QOO}
Beskrivning Svaret som angavs i Q00 ersätter fältet Q00 i den andra frågan
Steg Skapa/redigera fråga två
Infoga "Hur länge har du bott i {QOO} (år)?" i frågetextfältet

Använda en dold ekvationsfråga för att fylla i ett svar automatiskt

Problem: Anta att du har två frågor, Q1 och Q2. Q1 frågar respondenterna om deras ålder. Q2 delar in respondenterna i tre grupper: ålder under 20 år, ålder 20 och ålder över 20. Q2 ska alltså använda värdena "1", "2" och "3", som motsvarar villkoren ovan. Vi får dessutom inte glömma att göra Q2 osynlig (frågan visas inte i enkäten, men värdena sparas via "bakgrundsprocessen" i svarstabellen).

Så här fyller du i databasen med frågetypen Ekvation:

  • Skapa först en fråga med koden Q1 som en numerisk inmatningsfråga.
  • Skapa sedan en ny fråga med koden Q2 som en ekvationsfråga.
  • I fliken "Visningsinställningar" för Q2:
    • ställ in fältet "Dölj alltid denna fråga" på "På"
    • skriv in uttrycket i fältet "Ekvation":
{if(Q1.NAOK < 20, "1", if(Q1.NAOK > 20, "3", "2"))}

Skapa en sammanfattningssida med platshållare

Den här handledningen visar hur du kan skapa en översikt i slutet av enkäten som listar alla frågor och svar med hjälp av platshållare i ExpressionScript. Den visar också hur du begränsar en sådan översikt till enbart besvarade frågor.

Vårt exempel kan laddas ned här: Exempelenkät för platshållare.


Frågetyper som används här:

1. Envalsfrågor / enskilda text-/numeriska frågor

  • Lista (rullgardinslista)
  • Lista (radio) [L]
  • Ja/Nej [Y]
  • Lång fritext [T]
  • Kort fritext [S]
  • Numerisk inmatning [N]
  • Ekvation [*]


2. Frågor med delfrågor

  • Flera korta textsvar [Q]
  • Flervalsfråga [M]
  • Samling [F]
  • Samling (ja/nej/osäker) [C]
  • Samling (10-punktsval) [B]


3. Frågor med 2 skalor

  • Samling med dubbla skalor [1]


4. Frågor med X- och Y-skalor

  • Samling (tal/siffor) [:]


5. Mallfrågor

  • Textvisning [X]


I det här enkla exemplet blir vår översikt en enkel lista med:

- Frågetext: Användarens svar


Envalsfrågor / enskilda text-/numeriska frågor

För alla dessa frågetyper lagrar LimeSurvey ett enda svar:

  • Lista (rullgardinslista)
  • Lista (radio)
  • Lista med kommentarer
  • 5-punktsval
  • Ja/Nej
  • Kort fritext
  • Lång fritext
  • Mycket lång fritext
  • Numerisk inmatning
  • Ekvation
  • Datum
  • Kön

Om frågekoden för frågan är q1 kan vi hänvisa till frågetexten och svaret med:

- {q1.question}: {q1.shown}

Exempel:

- Hur gammal är du?: 25


Om du vill kontrollera om frågan har besvarats kan du lägga en IF-sats runt utdata:

{if(!is_empty(q1),join("- ",q1.question,": ",q1.shown),"")}

Detta "översätts" till: OM frågan med koden q1 inte är tom, skriv ut "- " OCH frågetexten OCH ": " OCH svarstexten (funktionen join() slår ihop element till en ny sträng); ANNARS: skriv ut ingenting ("" betyder tom sträng).

Frågor med delfrågor

För alla dessa frågetyper använder LimeSurvey delfrågor:

  • Flera korta textsvar
  • Flervalsfråga
  • Flervalsfråga med kommentarer
  • Samling
  • Samling (5-punktsval)
  • Samling (10-punktsval)
  • Samling (ja/nej/osäker)
  • Samling (öka, samma, minska)
  • Samling efter kolumn

Om frågekoden för frågan är q2 och delfrågorna är numrerade SQ001, SQ002 (automatisk numrering som görs av LimeSurvey) kan vi hänvisa till frågetexten och svaret med:

- {q2_SQ001.question}: {q2_SQ001.shown}

- {q2_SQ002.question}: {q2_SQ002.shown}

För flervalsfrågor är det lämpligt att inte visa texten för den markerade delfrågan utan i stället visa ett Y för varje valt alternativ:

- {q2_SQ001.question}: {q2_SQ001}

- {q2_SQ002.question}: {q2_SQ002}

...

Observera att det för närvarande inte går att skriva ut frågetexten för frågor med delfrågor, se den här funktionsförfrågan.


Exempel 1 (förutsatt att frågetypen är flervalsfråga)

- Känner du till dessa bilmärken?

-- Mercedes: Y

-- Audi: N

-- Volvo: Y


Om du bara vill visa markerade alternativ kan du lägga en IF-sats runt utdata och kontrollera kryssrutans värde:

{ if( q2_SQ001=="Y", join( "- ", q2_SQ001.question, ": ", q2_SQ001.shown ), "" ) }


Använd funktionen listifop om du vill visa en lista över enbart de valda alternativen, t.ex.: Mercedes, Volvo

{ listifop( 'value', '==', 'Y', 'question', ', ', that.q2.sgqa ) }


Där  that.q2  expanderas till alla delfrågor i q2. Se self, this och that för mer information.


Exempel 2 (förutsatt att frågetypen är Samling (10-punktsval))

- Betygsätt kvaliteten på bilmärkena nedan på en skala från 1=mycket dålig till 10=mycket bra?

-- Mercedes: 7

-- Audi: 9

-- Volvo: 9


Om du bara vill visa betygsatta alternativ kan du lägga en IF-sats runt utdata och kontrollera om den aktuella delfrågan har besvarats genom att använda:

{ if( ! is_empty( q3_SQ001 ), join( "- ", q3_SQ001.question, ": ", q3_SQ001.shown ), "" ) }


Använd funktionen listifop om du till exempel bara vill visa en lista över de valda alternativen som är större än åtta, t.ex.: Audi / Volvo

{ listifop( 'value', '>', 8, 'question', ' / ', that.q3.sgqa ) }


Fråga med två skalor

Detta gäller endast frågetypen med dubbel skala.


Anta att följande koder används:

  • Frågekod: q4
  • Delfrågekoder: SQ001, SQ002, ...
  • Svarskoder skala 1: A1, A2, ...
  • Svarskoder skala 2: B1, B2, ...


För att referera till resultatet av en viss delfråga på en viss skala måste du använda QuestionCode . '_' . SubQuestionCode . '_' . ScaleID. Observera att "ScaleID" är 0 för den första skalan och 1 för den andra!
Exempel på hur man refererar till svaret på den tredje delfrågan och den andra skalan: q4_SQ003_1 - fråga 4, delfråga 3, andra skalan.


Låt oss visa resultaten för båda skalorna och de två första delfrågorna:

- {q4_SQ001_0.question}: {q4_SQ001_0.shown} / {q4_SQ001_1.shown}

- {q4_SQ002_0.question}: {q4_SQ002_0.shown} / {q4_SQ002_1.shown}

För att visa delfrågetexten måste du lägga till skal-ID:t i platshållaren (även om texterna är desamma för båda skalorna). Så i stället för {q4_SQ001.question} måste vi använda {q4_SQ001_0.question} eller {q4_SQ001_1.question}.

Om du vill exportera/visa resultaten för enbart delfrågor med minst ett svar, använd denna syntax för varje delfråga:

{if(count(q4_SQ001_0,q4_SQ001_1)>0,join("- ",q4_SQ001_0.question,": ",q4_SQ001_0.shown," / ",q4_SQ001_1.shown),"")}

Fråga med X- och Y-skalor

Detta gäller alla matrisfrågor som tillåter ett svar för varje cell (inte bara för varje rad, som visades tidigare):

  • Samling (text)
  • Samling (tal/siffor)


Koder som antas användas:

  • Frågekod: q5
  • Delfrågekoder: SQ001, SQ002, ...
  • Svarskoder: A1, A2, ...

För att hänvisa till resultatet för en viss delfråga från en viss kolumn använder du Frågekod . '_' . Delfrågekod . '_' . Svarskod. Exempel för att hänvisa till svaret på den tredje delfrågan och den andra kolumnen: q5_SQ003_A2.

Vi skriver ut resultaten för kolumn 1–3 för de två första delfrågorna:

- {q5_SQ001_A1.question}: {q5_SQ001_A1.shown} | {q5_SQ001_A2.shown} | {q5_SQ001_A3.shown}

- {q5_SQ002_A1.question}: {q5_SQ002_A1.shown} | {q5_SQ002_A2.shown} | {q5_SQ002_A3.shown}


Eftersom varje cell (kombinationen av X-axel och Y-axel) motsvarar ett svarsalternativ för dessa frågetyper måste en kontroll av befintliga data göras för varje cell. Exempel:

{if(!is_empty(q5_SQ001_A1),join("- ",q5_SQ001_A1.question,": ",q5_SQ001_A1.shown),"")}


För att skriva ut delfrågetexten måste du lägga till svarskoden i platshållaren (även om texterna är desamma för alla svarsalternativ). Så i stället för {q5_SQ001.question} måste vi använda {q5_SQ001_A1.question} eller {q5_SQ001_A2.question}.

Dölj fråga om svaret på föregående fråga är tomt

Syfte Dölj fråga om svaret på föregående fråga är tomt
Typ Frågans relevans
Exempel Fråga ett: frågekod "name", frågetext "Vad heter du?"
Fråga två: frågetext "{name}, hur gammal är du?"
Att göra: Dölj fråga två om textfältet i fråga ett är tomt
Uttryck !is_empty(name)
Beskrivning is_empty() avgör om en variabel anses vara tom. "!" negerar resultatet. Om variabeln alltså inte är tom blir uttrycket sant och frågan visas
Steg Skapa/redigera fråga två
Skriv in "!is_empty(name)" i "Relevansekvation"
Exempelfil Hide_question_if_empty_question_group.zip


Dölj frågegrupp om svaret på föregående fråga är Ja eller Nej

Syfte Dölj frågegrupp om svaret på föregående fråga är Ja eller Nej
Typ Frågegruppens relevans
Exempel Sida ett, frågegrupp ett, fråga ett: frågekod "PET", frågetext "Har du ett husdjur?" -Ja -Nej
Sida två, frågegrupp två: Titel "Om ditt/dina husdjur"
Att göra: Visa/dölj frågegrupp två beroende på om svaret på fråga ett är Ja/Nej
Uttryck PET == "Y"
Beskrivning PET är frågekoden för den fråga vars svar du vill kontrollera. Om du inte använder något suffix använder EM "Qcode.code". Du jämför alltså svarskoden från frågan PET med värdet "Y". Om deltagaren svarar "Ja" blir uttrycket sant och frågegruppen "Om ditt/dina husdjur" visas.
Steg Skapa/redigera frågegrupp två
Skriv in "PET == "Y"" i "Relevansekvation"
Exempelfil Hide_question group_if_answer_from_previous_question_is_Yes_or_No.zip


Visa värdet i ett fält i en fråga med flera svarsfält

Syfte Visa värdet i ett fält i en fråga med flera svarsfält
Typ Referens
Exempel Fråga ett: frågekod "AskChildAge", frågetext "Hur gamla är dina barn?". Delfrågekoder -Child1 -Child2 -Child3 - ChildXXX
Fråga två: frågekod "ReportChildAge", frågetext "Om ditt första barn: - CHILD1 är AGE1."
Uttryck {AskChildAge_Child1.question}, {AskChildAge_Child1.value}
Beskrivning Du vill använda värdet från en delfråga i en följande fråga. Du kommer åt delfrågans värde med ett uttryck av den här typen: FrågekodFråga_FrågekodDelfråga.value
Steg Skapa/redigera den andra frågan
Skriv in den här texten i beskrivningen: "Om ditt första barn: - {AskChildAge_Child1.question} är {AskChildAge_Child1.value}."
Exempelfil Display_value_of_a_multiple_answer_input_question_field.zip

Validera antalet markerade rutor per rad för en fråga av typen "Samling (tal/siffor) med kryssrutor"

Syfte Validera antalet markerade rutor per rad
Typ Validering
Exempel Fråga av typen "Samling (tal/siffor)" (Layout med kryssrutor)
Uttryck sum(...)
Beskrivning (sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X) avgör om högst X kryssrutor på rad A är markerade.
Om du vill kontrollera alla tre raderna (A, B, C) kan du koppla ihop uttrycket med "&&":
(sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X)
&& (sum(Test_B_1, Test_B_2, Test_B_3, Test_B_4, Test_B_5) <= X)
&& (sum(Test_C_1, Test_C_2, Test_C_3, Test_C_4, Test_C_5) <= X)
Steg Skapa/redigera en fråga av typen "Samling (tal/siffor)" (Layout med kryssrutor).
Skriv in uttrycket ovan i "Valideringsuttryck för frågan" i de avancerade frågeinställningarna (du kan behöva anpassa variabelnamnen!).
Exempelfil Validate number of boxes ticker per row for an Array (Numbers) Checkbox.lss

Beräkna skillnaden mellan två datum

Syfte Beräkna skillnaden mellan två datum
Typ Relevans / Frågetypen ekvation / Validering
Exempel Fråga ett (datum/tid, kod: DOB): Vilket är ditt födelsedatum?
Fråga två (datum/tid, kod: datetoday): Vilket datum är det i dag?
Fråga tre (textvisning): Du är XXXX dagar gammal.
Att göra: Beräkna och visa antalet dagar mellan datumet i fråga 1 och datumet i fråga 2.
Uttryck {(strtotime(datetoday)-strtotime(DOB))/60/60/24}
Beskrivning strtotime beräknar antalet sekunder mellan den 1 januari 1970 och det angivna datumet. Uttrycket ovan beräknar antalet sekunder mellan de två angivna datumen. Termen "/60/60/24" räknar bara om antalet sekunder till antal dagar.
I stället för att fråga efter "datetoday" kan du också använda strtotime('now') eller helt enkelt time(), som direkt returnerar antalet sekunder från januari 1970 till nu (dvs. tidpunkten då enkäten besvarades). På så sätt kan du snabbt räkna ut en persons ålder i år med ekvationen {(time() - strtotime(DOB)) / 60 / 60 / 24 / 365.25} I samtliga fall är det avgörande att datumet anges i ett korrekt format, annars fungerar inte funktionen strtotime() som den ska.
Steg Skapa två datumfrågor (för födelsedatum och dagens datum) och en textvisningsfråga.
Skriv in följande i frågetexten för textvisningsfrågan: "Den {datetoday} var du {(strtotime(today)-strtotime(dob))/60/60/24} dagar gammal."

Observera: Funktionen strtotime fungerar med MÅNGA men inte alla datumformat. Om du stöter på problem ställer du in enkätens datumformat på mm/dd/åååå eller åååå-mm-dd eller dd.mm.åååå"
Exempelfil Date_difference.zip

Använda ExpressionScript för bedömningar

Här följer ytterligare ett exempel på hur du använder ExpressionScript med frågor av typen samling och bedömningar:</ br>

Anta att du har två samlingsfrågor och vill spara resultaten av beräkningen i databasen. Det är faktiskt enkelt: du behöver skapa och testa dina samlingar och skicka in ett testsvar för att se om det fungerar och ger dig resultaten på sidan för slutförd enkät.


Implementeringsdetaljer:

  • lägg till en fråga av typen ekvation
  • lägg till följande rad, under antagande att Q1 är frågekoden för din första samlingsfråga och Q2 den andra:
    • {sum(Q1_SQ001.value,Q2_SQ001.value)}

Observera att SQ001 är standardkoden för alla delfrågor. Om du ändrar delfrågekoden måste du anpassa ekvationen ovan i enlighet med detta.


Använda em_validation_q i en samling

Du kan använda valideringsuttrycket för frågan för att kontrollera en samling med valfritt villkor.


Implementeringsdetaljer:

  • för den första samlingen: samling med enval
    • Frågekoden är ARRAY
    • Delfrågekoderna är SQ01,SQ02,SQ03 och SQ04
    • uppdatera valideringsuttrycket för hela frågan och skriv in
      !is_empty(ARRAY_SQ01) and !is_empty(ARRAY_SQ03) 
  • för den andra samlingen: samling med text
    • Frågekoden är ARRAYTEXT
    • Delfrågekoderna på Y-axeln är SY01,SY02,SY03 och SY04
    • Uppdatera valideringsuttrycket för hela frågan och skriv in
      count(self.sq_SY01 >= 1) and count(self.sq_SY03 >= 3)