x

Hovedkapitler

  1. LimeSurvey Cloud vs LimeSurvey CE
  2. Hurtigstartveiledning - LimeSurvey 3.0+
  3. Installasjon - LimeSurvey CE
  4. Hvordan lage en god undersøkelse (veiledning)
  5. Komme i gang
  6. Administrere LimeSurvey
  7. Undersøkelser - introduksjon
  8. Innstillinger for undersøkelse
  9. Meny for undersøkelse
  10. Undersøkelsesstruktur
  11. Spørsmål - introduksjon
  12. Spørsmålsgrupper - introduksjon
  13. Undersøkelser - administrasjon
  14. Verktøylinjen for undersøkelsen
  15. Flerspråklig undersøkelse
  16. ExpressionScript-motor – Hurtigstartguide
  17. Ukategoriserte og avanserte funksjoner
  18. Vanlige spørsmål (generelt)
  19. Feilsøking
  20. Løsninger og omveier
  21. Lisens
  22. Versjonsendringer
  23. Tillegg
 Actions

Eksempler på ExpressionScript

From LimeSurvey Manual

Denne siden kan være maskinoversatt og kan inneholde feil. Vis den engelske originalen · Forbedre denne oversettelsen
This page is a translated version of the page ExpressionScript examples and the translation is 100% complete.
Hjelp oss gjerne med å utvide denne artikkelen ved å legge til dine egne eksempler. Det hjelper andre med å komme i gang med uttrykkskript.


Oppbygning

Den første delen av artikkelen beskriver hva uttrykk kan brukes til, og hvor du finner/legger til et uttrykk. Den andre delen gir eksempler på hvordan du bruker uttrykk.


Kategorier av uttrykk

LimeSurvey bruker uttrykk til følgende formål:


Relevanse

Formål: Skjule spørsmålsgrupper/spørsmål

Relevans styrer om en spørsmålsgruppe eller et spørsmål vises eller skjules. Hvis resultatet av uttrykket er «sant» (dvs. 1), vises elementet. Ellers (hvis resultatet av uttrykket er «usant», dvs. 0) skjules elementet.

Type Viser/skjuler Hvor du finner det Skjermbilde
Relevanse for spørsmålsgruppe spørsmålsgruppe Opprett/rediger spørsmålsgruppe -> "Relevanseligning:"
Relevanse for spørsmål spørsmål Opprett/rediger spørsmål -> "Relevanseligning:"
Relevanse for underspørsmål underspørsmål Rediger underspørsmål -> "Relevanseligning:"


Validering

Formål: Validere inndata/handlinger i spørsmål/underspørsmål/svar

Validering styrer om respondentens inndata i et spørsmål eller en handling er gyldig. Hvis resultatet av uttrykket er «sant» (dvs. 1), brukes klassen «good» på elementet og valideringsmeldingen. Hvis resultatet av uttrykket derimot er «usant» (dvs. 0), brukes klassen «error» på elementet og valideringsmeldingen. Du kan definere en stil for disse klassene i template.css.

Type Validerer Hvor du finner det Skjermbilde
Validering av spørsmål spørsmål Opprett/rediger spørsmål -> "Logikk-fanen" -> "Spørsmålets valideringsligning"
Validering av underspørsmål underspørsmål Opprett/rediger spørsmål -> "Logikk-fanen" -> "Valideringsligning for underspørsmål" ‎

Tekstutdata

Formål: (Gjøre noe og) skrive ut tekst

Et uttrykk kan brukes til å skrive ut tekst. Du kan for eksempel teste eller beregne noe og bestemme utdataene ut fra resultatet av testen eller beregningen. Det kan også brukes til å sette inn spørsmålsteksten, svar, spørsmålstyper osv. fra et spørsmål som er brukt før uttrykket. Tekstutdata kan brukes overalt der tekst vises, og kan returnere alle typer resultater.

Bruksområde Beskrivelse
Mikrotilpasning Tilpasse en tekst, f.eks. skrive «herr» eller «fru» avhengig av et kjønnsspørsmål som er stilt tidligere
Beregning Beregne en verdi og skrive den ut, f.eks. «Familieinntekten din er xxx»
Referanse Sette inn en tekst fra et element, f.eks. «Du heter xxx. Hvor gammel er du?»


Lagring av svar

Formål: (Gjøre noe,) (skrive ut tekst) og lagre noe i databasen

Spørsmålstypen Ligning kan brukes til å lagre noe i databasen. Du kan gjøre noe med et uttrykk, vise ligningsspørsmålet (som ligner på tekstvisning) og lagre resultatet av uttrykket i databasen. Svaret lagres i svartabellen. Resultatet kan deretter brukes i statistikkfunksjonen, eller det kan eksporteres til et av formatene som eksportfunksjonen i LimeSurvey tilbyr.

Eksempler på uttrykk

Sette inn et svar fra et tidligere spørsmål

Formål Sette inn et svar fra et tidligere spørsmål
Type Referanse
Eksempel Spørsmål én (spørsmålskode "Q00"): Hvilken by bor du i?
Spørsmål to (spørsmålskode "Q01"): Hvor lenge har du bodd i BY?
Oppgave: Svaret fra spørsmål én skal brukes i stedet for «BY» i det andre spørsmålet.
Uttrykk {QOO}
Beskrivelse Svaret som er gitt i Q00, erstatter Q00-feltet i det andre spørsmålet
Trinn Opprett/rediger spørsmål to
Skriv inn "Hvor mange år har du bodd i {QOO}?" i spørsmålsteksten

Bruke et skjult ligningsspørsmål til å fylle ut et svar automatisk

Problem: Anta at du har to spørsmål, Q1 og Q2. Q1 spør respondentene om alderen deres. Q2 deler respondentene inn i tre grupper: alder under 20 år, alder lik 20 og alder over 20. Q2 skal derfor bruke verdiene «1», «2» og «3», som tilsvarer betingelsene ovenfor. Vi må også huske å gjøre Q2 usynlig (spørsmålet vises ikke i undersøkelsen, men verdiene lagres via «bakgrunnsprosessen» i svartabellen).

Slik fyller du ut databasen med spørsmålstypen Ligning:

  • Opprett først et spørsmål med kode Q1 som et numerisk spørsmål.
  • Opprett deretter et nytt spørsmål med kode Q2 som et ligningsspørsmål.
  • Under fanen «Visningsinnstillinger» for Q2:
    • sett feltet "Skjul alltid dette spørsmålet" til "På"
    • skriv inn uttrykket i feltet "Ligning":
{if(Q1.NAOK < 20, "1", if(Q1.NAOK > 20, "3", "2"))}

Opprette en sammendragsside med plassholdere

Denne veiledningen viser hvordan du kan lage en oversikt på slutten av undersøkelsen som viser alle spørsmål og svar via ExpressionScript-plassholdere. Den viser også hvordan du begrenser en slik oversikt til kun besvarte spørsmål.

Eksempelet vårt kan lastes ned her: Eksempelundersøkelse med plassholdere.


Spørsmålstyper som brukes her:

1. Enkeltvalgsspørsmål / enkle tekst-/numeriske spørsmål

  • Liste (rullegardinliste)
  • Liste (radioknapper) [L]
  • Ja/Nei [Y]
  • Lang fritekst [T]
  • Kort fritekst [S]
  • Numerisk [N]
  • Ligning [*]


2. Spørsmål med underspørsmål

  • Flere korte tekstfelt [Q]
  • Flervalg [M]
  • Matrise [F]
  • Matrise (ja/nei/usikker) [C]
  • Matrise (10 poengsvalg) [B]


3. Spørsmål med 2 skalaer

  • Matrise dobbel skala [1]


4. Spørsmål med X- og Y-skalaer

  • Matrise (tall) [:]


5. Lukkede spørsmål

  • Tekstvisning [X]


I dette enkle eksempelet blir oversikten vår en enkel liste med:

- Spørsmålstekst: Brukerens svar


Enkeltvalgsspørsmål / enkle tekst-/numeriske spørsmål

For alle disse spørsmålstypene lagrer LimeSurvey ett enkelt svar:

  • Liste (rullegardinliste)
  • Liste (radioknapper)
  • Liste med kommentar
  • 5-punkts valg
  • Ja/Nei
  • Kort fritekst
  • Lang fritekst
  • Ekstra lang fritekst
  • Numerisk
  • Ligning
  • Dato
  • Kjønn

Hvis spørsmålskoden til spørsmålet er q1, kan vi referere til spørsmålsteksten og svaret med:

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

Eksempel:

- Hvor gammel er du?: 25


Hvis du vil sjekke om spørsmålet er besvart, kan du sette en IF-setning rundt utdataene:

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

Dette «oversettes» til: HVIS spørsmålet med spørsmålskode q1 ikke er tomt, skriv ut «- » OG spørsmålsteksten OG «: » OG svarteksten (funksjonen join() slår sammen elementer til en ny streng); ELLERS: skriv ut ingenting ("" betyr tom streng).

Spørsmål med underspørsmål

For alle disse spørsmålstypene bruker LimeSurvey underspørsmål:

  • Flere korte tekstfelt
  • Flervalg
  • Flervalg med kommentarer
  • Matrise
  • Matrise (5-poengsvalg)
  • Matrise (10 poengsvalg)
  • Matrise (ja/nei/usikker)
  • Matrise (øk/uendret/reduser)
  • Matrise etter kolonne

Hvis spørsmålskoden til spørsmålet er q2 og underspørsmålene er nummerert SQ001, SQ002 (automatisk nummerering utført av LimeSurvey), kan vi referere til spørsmålsteksten og svaret med:

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

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

For flervalgsspørsmål er det fornuftig å ikke vise teksten til det avmerkede underspørsmålet, men å vise en Y for hvert valgt alternativ:

- {q2_SQ001.question}: {q2_SQ001}

- {q2_SQ002.question}: {q2_SQ002}

...

Merk at det foreløpig ikke er mulig å skrive ut spørsmålsteksten til spørsmål med underspørsmål, se denne funksjonsforespørselen.


Eksempel 1 (forutsatt at spørsmålstypen er flervalg)

- Kjenner du disse bilmerkene?

-- Mercedes: Y

-- Audi: N

-- Volvo: Y


Hvis du bare vil vise avkryssede elementer, kan du legge en IF-setning rundt utdataene og sjekke verdien til avkryssingsboksen:

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


Bruk funksjonen listifop hvis du vil vise en liste over kun de valgte elementene, f.eks.: Mercedes, Volvo

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


Her utvides  that.q2  til alle underspørsmålene i q2. Se self, this og that for mer informasjon.


Eksempel 2 (forutsatt at spørsmålstypen er Matrise (10 poengsvalg))

- Vurder kvaliteten på bilmerkene nedenfor på en skala fra 1=svært dårlig til 10=svært bra?

-- Mercedes: 7

-- Audi: 9

-- Volvo: 9


Hvis du bare vil vise vurderte elementer, kan du legge en IF-setning rundt utdataene og sjekke om det aktuelle underspørsmålet er besvart ved å bruke:

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


Bruk funksjonen listifop hvis du for eksempel bare vil vise en liste over valgte elementer med verdi større enn åtte, f.eks.: Audi / Volvo

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


Spørsmål med to skalaer

Dette gjelder kun spørsmålstypen med dobbel skala.


La oss anta at følgende koder brukes:

  • Spørsmålskode: q4
  • Underspørsmålskoder: SQ001, SQ002, ...
  • Svarkoder skala 1: A1, A2, ...
  • Svarkoder skala 2: B1, B2, ...


For å henvise til resultatet av et bestemt underspørsmål på en bestemt skala må du bruke QuestionCode . '_' . SubQuestionCode . '_' . ScaleID. Merk at «ScaleID» er 0 for den første skalaen og 1 for den andre!
Eksempel på henvisning til svaret på det tredje underspørsmålet og den andre skalaen: q4_SQ003_1 - spørsmål 4, underspørsmål 3, andre skala.


La oss vise resultatene for begge skalaene og de to første underspørsmålene:

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

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

For å vise teksten til underspørsmålet må du legge til skala-ID-en i plassholderen (selv om tekstene er like for begge skalaene). Så i stedet for {q4_SQ001.question} må vi bruke {q4_SQ001_0.question} eller {q4_SQ001_1.question}.

Hvis du bare vil eksportere/vise resultatene for underspørsmål med minst ett svar, bruker du denne syntaksen for hvert underspørsmål:

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

Spørsmål med X- og Y-skalaer

Dette gjelder alle matrisespørsmål som tillater et svar for hver celle (ikke bare for hver rad, slik som vist tidligere):

  • Matrise (tekst)
  • Matrise (tall)


Forutsatte koder:

  • Spørsmålskode: q5
  • Underspørsmålskoder: SQ001, SQ002, ...
  • Svarkoder: A1, A2, ...

For å referere til resultatet av et bestemt underspørsmål fra en bestemt kolonne må du bruke Spørsmålskode . '_' . Underspørsmålskode . '_' . Svarkode. Eksempel for å referere til svaret på det tredje underspørsmålet og den andre kolonnen: q5_SQ003_A2.

La oss skrive ut resultatene for kolonne 1–3 for de to første underspørsmålene:

- {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}


Siden hver celle (kombinasjonen av X-akse og Y-akse) tilsvarer ett svaralternativ for disse spørsmålstypene, må det gjøres en test for eksisterende data for hver enkelt celle. Eksempel:

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


For å skrive ut underspørsmålsteksten må du legge til svarkoden i plassholderen (selv om tekstene er like for alle svaralternativer). Så i stedet for {q5_SQ001.question} må vi bruke {q5_SQ001_A1.question} eller {q5_SQ001_A2.question}.

Skjul spørsmål hvis svaret fra forrige spørsmål er tomt

Formål Skjul spørsmål hvis svaret fra forrige spørsmål er tomt
Type Spørsmålsrelevanse
Eksempel Spørsmål én: spørsmålskode "name", spørsmålstekst "Hva heter du?"
Spørsmål to: spørsmålstekst "{name}, hvor gammel er du?"
Oppgave: Skjul spørsmål to hvis tekstfeltet i spørsmål én er tomt
Uttrykk !is_empty(name)
Beskrivelse is_empty() avgjør om en variabel regnes som tom. «!» negerer resultatet. Hvis variabelen ikke er tom, blir uttrykket sant, og spørsmålet vises
Trinn Opprett/rediger spørsmål to
Skriv inn "!is_empty(name)" i "Relevanseligning"
Eksempelfil Hide_question_if_empty_question_group.zip


Skjul spørsmålsgruppe hvis svaret fra forrige spørsmål er Ja eller Nei

Formål Skjul spørsmålsgruppe hvis svaret fra forrige spørsmål er Ja eller Nei
Type Relevanse for spørsmålsgruppe
Eksempel Side én, spørsmålsgruppe én, spørsmål én: spørsmålskode "PET", spørsmålstekst "Har du et kjæledyr?" -Ja -Nei
Side to, spørsmålsgruppe to: Tittel "Om kjæledyret/kjæledyrene dine"
Oppgave: Vis/skjul spørsmålsgruppe to avhengig av om svaret på spørsmål én er Ja/Nei
Uttrykk PET == "Y"
Beskrivelse PET er spørsmålskoden til spørsmålet du vil sjekke svaret på. Hvis du ikke bruker et suffiks, bruker EM «Qcode.code». Du sammenligner altså svarkoden fra PET-spørsmålet med verdien «Y». Hvis deltakeren svarer «Ja», blir uttrykket sant, og spørsmålsgruppen «Om kjæledyret/kjæledyrene dine» vises.
Trinn Opprett/rediger spørsmålsgruppe to
Skriv inn "PET == "Y"" i "Relevanseligning"
Eksempelfil Hide_question group_if_answer_from_previous_question_is_Yes_or_No.zip


Vis verdien i et felt i et spørsmål med flere svarfelt

Formål Vis verdien i et felt i et spørsmål med flere svarfelt
Type Referanse
Eksempel Spørsmål én: spørsmålskode "AskChildAge", spørsmålstekst "Hvor gamle er barna dine?". Underspørsmålskoder -Child1 -Child2 -Child3 - ChildXXX
Spørsmål to: spørsmålskode "ReportChildAge", spørsmålstekst "Om det første barnet ditt: - CHILD1 er AGE1."
Uttrykk {AskChildAge_Child1.question}, {AskChildAge_Child1.value}
Beskrivelse Du vil bruke verdien til et underspørsmål i et påfølgende spørsmål. Du får tilgang til underspørsmålets verdi med et uttrykk av denne typen: QcodeQuestion_QcodeSubquestion.value
Trinn Opprett/rediger det andre spørsmålet
Skriv inn denne teksten i beskrivelsen: "Om det første barnet ditt: - {AskChildAge_Child1.question} er {AskChildAge_Child1.value}."
Eksempelfil Display_value_of_a_multiple_answer_input_question_field.zip

Valider antall avkryssede bokser per rad for et «Matrise (tall)»-spørsmål med avkryssingsbokser

Formål Valider antall avkryssede bokser per rad
Type Validering
Eksempel Spørsmål av typen "Matrise (tall)" med "Visning av avkryssingsboks"
Uttrykk sum(...)
Beskrivelse (sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X) avgjør om høyst X avkryssingsbokser i rad A er avkrysset.
Hvis du vil sjekke alle tre radene (A, B, C), kan du koble sammen uttrykkene 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)
Trinn Opprett/rediger spørsmål av typen "Matrise (tall)" med "Visning av avkryssingsboks".
Skriv inn uttrykket ovenfor i "Spørsmålets valideringsligning" under de avanserte spørsmålsinnstillingene (du må kanskje justere variabelnavnene!).
Eksempelfil Validate number of boxes ticker per row for an Array (Numbers) Checkbox.lss

Beregn differansen mellom to datoer

Formål Beregn differansen mellom to datoer
Type Relevanse / spørsmålstypen Ligning / Validering
Eksempel Spørsmål én (dato/tid, kode: DOB): Hva er fødselsdatoen din?
Spørsmål to (dato/tid, kode: datetoday): Hvilken dato er det i dag?
Spørsmål tre (tekstvisning): Du er XXXX dager gammel.
Oppgave: Beregn og vis antall dager mellom datoen oppgitt i spørsmål 1 og spørsmål 2.
Uttrykk {(strtotime(datetoday)-strtotime(DOB))/60/60/24}
Beskrivelse strtotime beregner antall sekunder mellom 1. januar 1970 og den oppgitte datoen. Uttrykket ovenfor beregner antall sekunder mellom de to oppgitte datoene. Leddet «/60/60/24» regner bare om antall sekunder til antall dager.
I stedet for å spørre etter «datetoday» kan du også bruke strtotime('now') eller ganske enkelt time(), som direkte returnerer antall sekunder fra januar 1970 til nå (altså tidspunktet undersøkelsen ble besvart). På den måten kan du raskt finne alderen til en person i år med ligningen {(time() - strtotime(DOB)) / 60 / 60 / 24 / 365.25} I alle disse tilfellene er det avgjørende at datoen er skrevet inn i et riktig format, ellers vil ikke funksjonen strtotime() fungere som den skal.
Trinn Opprett to datospørsmål (for fødselsdato og for dagens dato) og et tekstvisningsspørsmål.
Skriv inn i spørsmålsteksten til tekstvisningsspørsmålet: "Den {datetoday} var du {(strtotime(today)-strtotime(dob))/60/60/24} dager gammel."

Merk: Funksjonen strtotime fungerer med MANGE, men ikke alle datoformater. Hvis du får problemer, kan du sette undersøkelsens datoformat til mm/dd/åååå, åååå-mm-dd eller dd.mm.åååå"
Eksempelfil Date_difference.zip

Bruke ExpressionScript for vurderinger

Her er et eksempel til på hvordan du bruker ExpressionScript med matrisespørsmål og vurderinger:</ br>

La oss si at du har to matrisespørsmål og vil lagre resultatet av beregningen i databasen din. Det er egentlig enkelt: Du må opprette og teste matrisene dine og sende inn en prøvebesvarelse for å se om det fungerer og gir deg resultatene på siden for fullført undersøkelse.


Gjennomføring:

  • legg til et spørsmål av typen ligning
  • legg til følgende linje, forutsatt at Q1 er spørsmålskoden til matrisespørsmålet ditt og Q2 er det andre:
    • {sum(Q1_SQ001.value,Q2_SQ001.value)}

Merk at SQ001 er standardkoden for alle underspørsmål. Hvis du endrer underspørsmålskoden, må du justere ligningen ovenfor tilsvarende.


Bruke em_validation_q i en matrise

Du kan bruke spørsmålets valideringsligning til å kontrollere en matrise med en hvilken som helst betingelse.


Gjennomføring:

  • for den første matrisen: matrise med enkeltvalg
    • Spørsmålskoden er ARRAY
    • Underspørsmålskodene er SQ01, SQ02, SQ03 og SQ04
    • oppdater valideringsligningen for hele spørsmålet og skriv inn
      !is_empty(ARRAY_SQ01) and !is_empty(ARRAY_SQ03) 
  • for den andre matrisen: matrise med tekst
    • Spørsmålskoden er ARRAYTEXT
    • Underspørsmålskodene på Y-aksen er SY01, SY02, SY03 og SY04
    • Oppdater valideringsligningen for hele spørsmålet og skriv inn
      count(self.sq_SY01 >= 1) and count(self.sq_SY03 >= 3)