ExpressionScript-motor – Hurtigstartguide
From LimeSurvey Manual
Hurtigstartguide
I LimeSurvey kan du tilpasse undersøkelsene dine ytterligere ved hjelp av ExpressionScript (kort: ES). Merk: «ExpressionScript het Expression Manager (EM) i tidligere versjoner. Hvis du ser Expression Manager et sted, er det bare det gamle navnet på ES.»
ES kan brukes til å spesifisere følgende:
- Navigering/forgrening – lar en respondents svar endre rekkefølgen spørsmålene vises i;
- Tilpasning/piping – hjelper deg med å formulere spørsmålet (for eksempel ved å vise til tidligere svar, eller bøye setninger basert på alder eller kjønn til deltakerne) eller hvordan du lager egendefinerte rapporter (som vurderingspoeng eller tilpassede råd);
- Validering – sikrer at svarene oppfyller bestemte kriterier, for eksempel minimums- og maksimumsverdier eller et bestemt inndatamønster.
ES gir en intuitiv måte å spesifisere logikken for hver av disse funksjonene. Nesten alt du kan skrive som en vanlig matematisk ligning, er et gyldig uttrykk.
ES gir for øyeblikket tilgang til 70 funksjoner, og den kan enkelt utvides med flere. Den lar deg også få tilgang til variablene dine ved hjelp av lesbare variabelnavn (i stedet for SGQA-navn).
De neste avsnittene viser hovedstedene der ES brukes.
Noen undersøkelser bruker «Goto-logikk», slik at hvis du svarer på Question1 med alternativ C, blir du sendt videre til Question5. Denne tilnærmingen er svært begrenset, siden den er vanskelig å validere. Dessuten går den lett i stykker når du må endre rekkefølge på spørsmål. ES bruker derimot boolske relevanseligninger for å spesifisere alle betingelsene der et spørsmål kan være gyldig. Hvis spørsmålet er relevant, vises det. Ellers er det ikke aktuelt, og verdien «NULL» lagres i databasen.
For å forstå relevanse-konseptet bedre, la oss se på følgende undersøkelse, som beregner kroppsmasseindeksen (KMI/BMI) til respondentene. Du kan laste den ned ved å klikke på denne lenken: Eksempelundersøkelse om kroppsmasseindeks.
Relevanseligningen vises nedenfor i kolonnen Relevanse etter variabelnavnet. Relevansverdiene for weight, weight_units, height og height_units er alle 1 (standardverdi), noe som betyr at disse spørsmålene alltid vises. Relevansen for BMI er derimot {!is_empty(height) and !is_empty(weight)}, noe som betyr at BMI bare beregnes hvis deltakeren oppgir en verdi for både høyde og vekt (slik at du unngår risikoen for en nullfeil). Spørsmålet «Report» vises også bare hvis respondenten besvarer alle de fire hovedspørsmålene (height, heightunits, weight, weightunits).

Relevanse vises og kan redigeres når:
- du vil vise/redigere relevanse på spørsmålsnivå
- du vil vise/redigere relevanse på gruppenivå
Vise / redigere relevanse på spørsmålsnivå
Denne ligningen beregner kroppsmasseindeksen (BMI). Det spørres bare om den hvis personen oppgir høyde og vekt.

Dette er redigeringsskjermen for spørsmålet «BMI».

Merk at du ikke bruker krøllparenteser når du skriver inn en relevanseligning.
Vise / redigere relevanse på gruppenivå
La oss nå se på et annet eksempel – en enkel folketellingsundersøkelse. Du kan laste den ned ved å klikke på denne lenken: Eksempelundersøkelse om folketelling.
Den første siden spør hvor mange personer som bor sammen med deg, og lagrer det i variabelen «cohabs». Denne siden vises bare hvis du har mer enn én samboer (den vises for den andre personen som bor sammen med deg). Dessuten vises p2name, p2age og p2sum bare hvis spørsmålet før hver av dem har en besvarelse.

Gruppen har altså også relevanskriterier på spørsmålsnivå, slik at noen spørsmål bare vises hvis du har besvart bestemte spørsmål før dem (f.eks. vises p2age hvis p2name er besvart). ES kombinerer relevans på gruppenivå og spørsmålsnivå for deg. Spørsmål i en gruppe stilles bare hvis gruppen som helhet er relevant. Deretter stilles bare den delmengden av spørsmålene i gruppen som er relevante.
Her er skjermbildet for redigering av relevansen på gruppenivå for Cohabitant 2:

Merk at du ikke bruker krøllparenteser når du skriver inn en relevanseligning.
Tilpasning/Piping
Med ES kan du enkelt utføre både enkel og avansert betinget tilpasning. Noen ganger trenger du bare en enkel erstatning, for eksempel: «Du sa at du kjøpte [Produkt]. Hva likte du best ved det?». Andre ganger trenger du betinget erstatning, som «[Hr./Fru] [Etternavn], vil du være villig til å fullføre undersøkelsen vår?». I dette tilfellet vil du bruke «Hr. eller Fru» basert på personens kjønn. Andre ganger trenger du enda mer avansert erstatning (for eksempel basert på en matematisk beregning). ES støtter alle disse typene tilpasning/piping.
Betingede ligninger
Eksempelet med kroppsmasseindeks viser hvordan man kan beregne en persons BMI, selv om personen kan oppgi høyde og vekt i to ulike enheter (cm mot tommer og kg mot lbs):

I dette tilfellet er weightkg {if(weightunits == "kg", weight, weight * 0.453592)}. Funksjonen «if()» betyr at hvis deltakeren oppgir vekten i kilogram, brukes den verdien. Ellers multipliseres den oppgitte verdien (alternativet er pund) med 0.453592 for å konvertere den til kilogram. Variabelen heightm bruker en lignende fremgangsmåte for å beregne personens høyde i meter (høyde i cm/100), selv om personen har oppgitt høyden i tommer (1 meter = 3.28084 tommer).
BMI beregnes slik: {weightkg / (heightm * heightm)}.
Til slutt tilpasser rapporten meldingen betinget for deltakeren og viser hva vedkommende har oppgitt (f.eks. «Du sa at du er 2 meter høy og veier 70 kg.»).
På bildet nedenfor bruker weightstatus nestede «if()»-setninger for å kategorisere personen fra undervektig til alvorlig overvektig. Du kan se ligningen ved å sjekke logikken:

I redigeringsvinduet for dette spørsmålet kan du se to ting:
- Ved tilpasning må uttrykk omgis av krøllparenteser
- Uttrykk kan strekke seg over flere linjer hvis du, som i dette tilfellet, vil gjøre den nestede betingede logikken lettere å lese.

Tilpassede spørsmål, svar og rapporter
BMI-rapporten ser slik ut:

Her er redigeringsvinduet for det samme spørsmålet.

Alt innenfor krøllparenteser behandles som et uttrykk og er syntaksutheving (fargekodet) på forrige bilde. Hvis du har skrivefeil (for eksempel feilstavede eller udefinerte variabelnavn eller funksjoner), vil ES vise en feil. I eksempelet nedenfor:
- er heightunit.shown et udefinert variabelnavn (det riktige er heightunits.shown) og
- er «rnd()» en udefinert funksjon (det riktige funksjonsnavnet er «round()»).
I begge tilfeller er feilene markert med en rød boks, slik at de er lettere å oppdage og rette.

Du kan også se at du raskt kan opprette avanserte rapporter, for eksempel en tabell med oppgitte verdier eller tilpassede råd.
Husk at all tilpasning må omgi uttrykk med krøllparenteser, slik at LimeSurvey vet hvilke deler av spørsmålet som er fritekst, og hvilke som skal tolkes av ExpressionScript-motoren.
Validering
ES styrer hvordan de fleste avanserte spørsmålsinnstillingene fungerer. Disse styrer ting som minimum/maksimum antall svar, minimum/maksimum enkeltverdier, minimum/maksimum sumverdier, og kontroll av at oppgitte verdier samsvarer med angitte tekstmønstre. Enhver verdi i ett av disse feltene anses som et uttrykk, slik at du kan ha minimum/maksimum-kriterier med avanserte betingede sammenhenger til andre spørsmål.
I alle disse tilfellene bruker du ikke krøllparenteser når du angir verdien, siden den avanserte spørsmålsattributten alltid anses som et uttrykk.
Siden med eksempelundersøkelser viser mange fungerende eksempler med en rekke valideringsuttrykk.
ExpressionScript - presentasjon
Hvis du vil finne ut mer om ExpressionScript og hvordan du kan bruke ulike uttrykk til å forbedre undersøkelsen din, kan du klikke på følgende lenke.