Eksempelundersøkelser for ExpressionScript
From LimeSurvey Manual
Innledning
Den beste måten å lære å bruke ExpressionScript på er å prøve ut fungerende eksempler og tilpasse dem til dine behov.
Nedenfor finner du et utvalg eksempelundersøkelser som viser (og tester) hvordan EM kan brukes til å forbedre undersøkelsen din. Disse undersøkelsene finnes i mappen /docs/demosurveys i distribusjonen.
Relevans, tilpasning og ligninger
Oversikt
Følgende eksempel beregner BMI (kroppsmasseindeks) for hver respondent. Se nedenfor for funksjonene som vises i dette eksempelet.
EM-funksjoner som vises
- Relevans - støtte for kraftig betinget logikk;
- Piping / tilpasning - gjør det mulig å overføre eller tilpasse svar og metadata for spørsmål;
- Dynamisk tilpasning - merk at rapportene endres på siden etter hvert som du svarer på spørsmål.
- Mikrotilpasning - betinget tilpasning i setninger og rapporter ved hjelp av if()-uttrykk
- Ligninger - en ny spørsmålstype som lar deg gjøre beregninger og lagre resultatene i databasen, selv om beregningen er skjult
- Betinget validering - valideringskriterier, for eksempel minste tillatte verdi, kan være betingede - f.eks. basert på ligninger.
Skjermbilder
Dette eksempelet beregner kroppsmasseindeksen (BMI), en beregning basert på vekt og høyde som avgjør om du er undervektig, normalvektig, overvektig eller fedme. Merk at det først bare vises de fire obligatoriske spørsmålene:

Når du har lagt inn opplysningene dine (og du kan velge om du vil bruke metriske eller ikke-metriske enheter), ser du en tilpasset rapport som oppsummerer det du har oppgitt og forteller deg vektstatusen din:

Her er et annet eksempel som bruker ikke-metriske enheter for å vise hvordan resultatet endres dynamisk:

Det finnes skjulte spørsmål av typen ligning på internt nivå som konverterer dataene til metriske enheter (om nødvendig) og lagrer metrisk høyde, vekt, BMI og vektstatus i databasen uten behov for egendefinert JavaScript.
I neste sett med eksempler ser du hvordan du kan bruke matematiske og andre funksjoner i tilpassede rapporter. Slik ser siden ut før du har lagt inn noen data. Det finnes betinget logikk som viser tomme celler hvis det ikke er lagt inn data (eller dataene ikke er numeriske), i stedet for å vise «NaN» eller «Divide by Zero».

Etter hvert som tall legges inn, endres rapporten på siden slik at den viser beregningen som utføres og resultatet av den.

Det finnes mange andre eksempler i denne eksempelundersøkelsen. Skjermbildet nedenfor viser for eksempel én av dusinvis av måter du kan fylle ut siden Dynamic Relevance på. Som hjelpeteksten antyder, kan du prøve ulike aldre, og spesielt ulogiske kombinasjoner av svar, for å se de morsomme meldingene som genereres nederst. Merk også at hvis du oppgir at du har mer enn ett barn, vil meldingen si «I hope you enjoy playing with your X children» i stedet for «I hope you enjoy playing with your child». Dette viser hvordan du enkelt kan mikrotilpasse setninger slik at de samsvarer med kjønn og/eller antall for deltakerne dine. Du kan til og med enkelt bøye verb og substantiv etter kjønn og tall.

Nedlasting
For å få tilgang til eksempelundersøkelsen, klikk på følgende lenke: LS3_em_tailoring.zip.
Eksempel på folketelling
Oversikt
Dette er et eksempel på en folketelling som spør hvor mange personer som bor i husholdningen din.
Det viser hvordan relevans på gruppenivå kan gjøre det enklere å lage en «løkke» av spørsmål. Etter at jeg hadde opprettet gruppen for Person 1, eksporterte jeg gruppen. Siden jeg brukte variabelnavn basert på qcode, som p1_name, i stedet for SGQA-koden, kunne jeg bruke et tekstredigeringsprogram til raskt å redigere og importere gruppen på nytt flere ganger (det tok for eksempel omtrent 10 sekunder å redigere og importere hver gjentatte gruppe, slik at alle variabler fikk unike navn og logikken på gruppenivå var riktig).
Du kan også bruke funksjonen Kopier spørsmål, men den er ikke like rask som alternativet foreslått ovenfor.
Dette viser også hvordan du kan hindre at meldingen om at undersøkelsen er fullført vises før undersøkelsen virkelig er ferdig (for eksempel når alle nødvendige grupper er fullført).
Demonstrerte EM-funksjoner
- Relevans på gruppenivå - Oppfølgingsgruppene (Person 1–5) vises bare for opptil antallet personer i husholdningen som er oppgitt;
- Tilpasning - Den avsluttende rapporten oppsummerer demografiske data for hver person i husholdningen;
- Progressiv visning av spørsmål - Enten du bruker gruppe-for-gruppe- eller alt-på-én-side-modus, vises påfølgende spørsmål først når de foregående er besvart.
Skjermbilder
Undersøkelsen genererer en tilpasset rapport som viser demografien til det oppgitte antallet personer i husholdningen:

Hvis du bytter til modus med ett spørsmål om gangen, ser du at indeksen tilpasser spørsmålene. Siden brukeren oppga at personen er en kvinne, spør den «Hva heter hun?». Og siden vi svarte «Mary», står det i neste spørsmål «Hvor gammel er Mary?».

Last ned
Klikk her for å laste ned eksempelundersøkelsen: LS3_group_relevance.zip.
Kaskaderende matrisefiltre
Oversikt
Denne undersøkelsen er basert på utformingen av en undersøkelse levert av Joy Lane Research, LLC.
Skjermbilder
Legg merke til følgende:
- Q02 viser bare produktene som er avhuket i Q01 (ved hjelp av array_filter)
- Q02 viser også «Another product», teksten som er skrevet inn i feltet «Other electronic» i Q01
- Q04 viser bare produkter fra Q02 som var avhuket (slik at matrisefilteret kaskaderer)
- Q05 viser bare produkter fra Q02 som ikke var avhuket i Q02 (ved hjelp av en kaskaderende array_filter_exclude)


Last ned
Klikk på følgende lenke for å laste ned eksemplet ovenfor: LS2_cascading_array_filter – eksempelundersøkelse.
Pipe-funksjon/tilpasning med alle spørsmålstyper og attributter
Oversikt
Hvis du er usikker på hvordan du skal navngi variablene dine (SGQA mot Qcodes), er du ikke alene. Selv om hoveddokumentasjonen beskriver hvordan du setter sammen Qcode-variabelnavn, går ingenting over å se det i en fungerende demo. Denne undersøkelsen viser hvordan du får tilgang til spørsmålsattributter og svar med ExpressionScript.
Innhold
- Eksempler på alle spørsmålstyper
- Alle spørsmålstyper som kan bruke «Annet» er med, slik at du kan se hvordan det påvirker navngivingen av variabler
- Standardverdier for alle spørsmålstyper som godtar standardverdier
- Tilpasning – rapporter på og utenfor siden som viser alle de 16 tilgjengelige EM-suffiksene i punktnotasjon.
- Disse rapportene viser alle dataene som er skrevet inn så langt (slik at du ser hvordan du kan lage dine egne utskriftsvennlige rapporter for brukere i stedet for skjermbildet for utskrift av svar)
- Riktig navngiving av alle variabler med Qcode og SGQA
Skjermbilder
Dette er en svært stor undersøkelse, så vi har valgt å ikke ta med skjermbilder. Last den heller ned og prøv den selv.
Last ned
Klikk på følgende lenke for å laste ned undersøkelsen: LS3_EM_question_attributes.lss
Tradisjonell validering, nytenkt
Oversikt
Dette viser alle valideringstypene som bruker uttrykk, og hvordan de påvirker hver av spørsmålstypene som støtter validering. I mange tilfeller er valideringstipsene skjult til å begynne med, og vises bare hvis et spørsmål ikke oppfyller valideringskriteriene (de forsvinner altså igjen når spørsmålet oppfyller kriteriene).
Valideringstyper som vises
- min_num_value_n - minimumsverdi for et svar
- max_num_value_n - maksimumsverdi for et svar
- min_answers - minimum antall svar som kreves
- max_answers - maksimum antall svar som er tillatt
- multiflexible_min - minimumsverdi som er tillatt for et svar (for spørsmålstypen multiflexi-tall)
- multiflexible_max - maksimumsverdi som er tillatt for et svar (for spørsmålstypen multiflexi-tall)
- min_num_value - minimum tillatt sum av alle svarene på spørsmålet
- max_num_value - maksimum tillatt sum av alle svarene på spørsmålet
- equals_num_value - summen av alle svarene på spørsmålet må være lik denne verdien
- validation - dette er valideringen med regulært uttrykk for spørsmålet - den kan gjelde for enkeltceller
Skjermbilder
Med nye CSS-stiler vises hver valideringstype som et eget tips. Hvis de vises, kan de skjules med alternativet hide_tip. Standard er at de vises med rød skrift hvis spørsmålet ikke oppfyller valideringskriteriene, og grønn hvis det oppfyller dem:

En bruker kan ikke sende inn en side med valideringsfeil. Brukeren får umiddelbart en advarsel hvis feil informasjon er oppgitt:

Validering kan brukes på enkeltceller i en matrise, for eksempel i dette eksempelet der validering med regulære uttrykk sikrer at hver oppføring er et riktig formatert amerikansk telefonnummer med retningsnummer.

Last ned
Du kan laste ned eksempelet ovenfor via denne lenken: LS3_Validation_tests.zip.
Valideringsligninger
Oversikt
Noen ganger trenger du tilpasset validering som ikke kan oppnås med de tradisjonelle min/maks-kriteriene. Da må du bruke alternativene em_validation_q og em_validation_sq, som lar deg lage komplekse valideringsligninger på henholdsvis spørsmålsnivå og underspørsmålsnivå.
EM-funksjoner som vises
- em_validation_q - dette er en ligning som avgjør om hele spørsmålet er gyldig
- em_validation_q_tip - dette er meldingen som vises hvis spørsmålet ikke oppfyller kriteriene i em_validation_q
- em_validation_sq - dette er ligningen som avgjør om hvert underspørsmål (matrisecelle) er gyldig
- em_validation_sq_tip - dette er meldingen som vises hvis noen av underspørsmålene er ugyldige.
Når em_validation_sq brukes, blir vanligvis bakgrunnsfargen på en celle rød hvis cellen er ugyldig, for å vise at det er en feil.
Skjermbilder

Dette spørsmålet sørger for at du oppgir barnas alder i synkende rekkefølge ved å bruke denne valideringsligningen:
q1_sq1 >= q1_sq2 && q1_sq2 >= q1_sq3 && q1_sq3 >= q1_sq4

I eksempelet nedenfor sørger valideringen for at høyst 3 spørsmål besvares på hver rad, ved å bruke denne valideringsligningen:
(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 også skrive dette som vist nedenfor. LimeSurvey konverterer det automatisk til uttrykket ovenfor under kjøring.
(sum(self.sq_A) <= 3) && (sum(self.sq_B) <= 3) && (sum(self.sq_C) <= 3)

Nedlasting
Hvis du vil laste ned eksempelundersøkelsen som brukes i eksemplene ovenfor, klikker du på følgende lenke: ls2_test_em_sq_validation.lss.
Relevans for underspørsmål
Oversikt
Dette viser hvordan array_filter og valideringskriterier kan samhandle. For valideringer som gjelder summer, tas bare relevante (synlige) verdier med i beregningen.
EM-funksjoner som demonstreres
Det viser også dynamisk rapportering av antall besvarte spørsmål blant kjernespørsmålene.
Skjermbilder
Når du endrer antall synlige rader, endres summen dynamisk. Hvis du markerer et underspørsmål som irrelevant, tømmes ikke verdien. Hvis underspørsmålet er irrelevant, bidrar derimot ikke verdiene til noen ligning.


Legg merke til hva som skjer når vi krysser av for «Fifth subquestion» i det første spørsmålet «Which rows should appear below». Summen for det andre spørsmålet, «Enter some numbers», er nå 5. Selv om underspørsmål 5 i det spørsmålet fortsatt har verdien 14 (hvis du fjerner avkrysningen for det femte underspørsmålet, ser du verdien 14 igjen), bidrar ikke denne verdien til summen, fordi den for øyeblikket er irrelevant. All irrelevant data tømmes (settes til NULL i databasen) når svaret sendes inn, men den forblir tilgjengelig på siden i tilfelle respondentene ønsker eller trenger å endre svarene sine.

Nedlasting
Hvis du vil laste ned eksempelet vårt, klikker du her: ls2_subquestion_relevance.lss.
Bruke komma som desimalskilletegn
Oversikt
ExpressionScript sørger for at bare gyldige tall kan skrives inn i numeriske felt. Hvis du skriver inn et ugyldig tall, får du en advarsel om at noe er galt (for eksempel blir hele spørsmålet «rødfarget» i temaet fruity).
Merk at numeriske verdier alltid konverteres til å bruke punktum som desimalskilletegn i databasen. På den måten fungerer statistiske analyser som de skal.
Hvis du vil endre desimalskilletegnet, åpner du alternativene under Tekstelementer i fanen Innstillinger og leter etter funksjonen Desimalskilletegn.
Spørsmålstyper som bruker desimalskilletegn
- Numerisk [N]
- Numerisk, flere [K]
- Matrise (tall) [:]
- Matrise (tekst) [;], når attributtet numbers_only brukes
- Liste (radioknapper) [L], når attributtet other_numbers_only brukes
- Kort fritekst [S], når attributtet numbers_only brukes
- Flere korte tekstfelt [Q], når attributtet numbers_only brukes
- Flervalg [M], når attributtet other_numbers_only brukes
- Flervalg med kommentarer [P], når attributtet other_numbers_only brukes
Skjermbilder
I skjermbildene nedenfor kan du se at komma kan brukes som desimalskilletegn.

Nedlasting
Hvis du vil laste ned eksempelet ovenfor, klikker du på følgende lenke: ls2_comma_as_radix_separator.lss.
Randomiseringsgrupper
Oversikt
Denne undersøkelsen viser hvordan du bruker attributtet random_group.
Hvis dette attributtet brukes, blir rekkefølgen på spørsmålene randomisert hver gang du starter undersøkelsen. Når undersøkelsen først er startet, forblir imidlertid randomiseringsrekkefølgen den samme, selv om du bytter språk.
Skjermbilder
La oss se på eksemplet nedenfor. Det første tilfeldige spørsmålet på siden vil enten være Q1, Q4 eller Q7. Det andre randomiserte spørsmålet på siden vil enten være Q2, Q5 eller Q8.

Her er randomiseringen som ble generert første gang jeg testet denne undersøkelsen.

Andre gang jeg testet undersøkelsen, ble det generert en annen randomisering.

Men da jeg byttet til fransk (uten å starte undersøkelsen på nytt), forble randomiseringsrekkefølgen uendret.

Last ned
Hvis du vil laste ned eksemplet ovenfor, klikker du på følgende lenke: Randomization_Group_Test.lss
Still ett tilfeldig spørsmål per gruppe
Oversikt
Denne undersøkelsen viser hvordan du kan konfigurere en undersøkelse til å vise ett tilfeldig spørsmål per gruppe. Den har 5 grupper med 6 spørsmål hver. Innledningsvis, i gruppe 0, fylles fem skjulte ligningsspørsmål, kalt ask1–ask5, ut. Hvert av dem har verdien {floor(rand(1,6.9999))} i spørsmålsteksten, noe som betyr at variablene ask1–ask5 hver får en verdi mellom 1 og 6. Deretter har hvert spørsmål i gruppen en relevanseligning som «ask1==N», der N er det N-te spørsmålet i gruppen (så det tredje spørsmålet i gruppe 1 har relevanseligningen «ask1==3»).
Denne undersøkelsen fungerer like godt i formatene alt i ett, gruppe for gruppe og spørsmål for spørsmål. Siden randomiseringen settes i den første gruppen, og den gruppen i praksis er skjult (fordi alle ask1–ask5-spørsmålene er skjult), forblir randomiseringen den samme for deltakeren, men hver deltaker får sin egen randomisering.
Funksjoner som vises
- Ligningsspørsmålstype
- Randomiseringsfunksjoner
- Betinget (if) funksjon
Skjermbilder
Dette er Group0, som bruker ligningsspørsmålstypen til å velge tilfeldige verdier fra 1 til 6 for hver gruppe (unntatt den siste gruppen, som bare har 4 spørsmål). Merk at funksjonen «if()» først sjekker om ask1 allerede er satt, og i så fall bruker den denne verdien. Hvis verdien ikke er satt, bruker den en tilfeldig verdi til å sette verdien til ask1.

Denne gruppen viser hvordan variabelen (ask4) fra Group0 brukes til å styre hvilket spørsmål som er synlig i den fjerde gruppen.

Last ned
Hvis du vil laste ned undersøkelseseksemplet ovenfor, klikker du her: Eksempel på undersøkelse med tilfeldige spørsmål i en gruppe.
Still et bestemt antall tilfeldige spørsmål i en gruppe (en delmengde av spørsmålene)
Oversikt
Denne undersøkelsen viser hvordan du kan stille et tilfeldig utvalg av spørsmål i en gruppe. Du kan for eksempel vise 5 tilfeldige spørsmål av 10 spørsmål i en gruppe.
Undersøkelsen har én gruppe med 10 spørsmål. Alle spørsmålene har samme navn på tilfeldig-gruppe. Dermed vises de i tilfeldig rekkefølge når siden lastes. Hvert spørsmål får en relevanseligning som sier at summen av «relevanceStatus» for alle de andre spørsmålene i gruppen er mindre enn antallet spørsmål du vil vise. Siden relevanceStatus settes etter hvert som spørsmålene vises, gir dette i praksis det totale antallet foregående spørsmål.
I vårt eksempel med 5 av 10 spørsmål vil ligningen for Q1 altså være:
sum(Q2.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5
For Q2 vil den være:
sum(Q1.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5
Og så videre ...
Funksjoner som demonstreres
Last ned
Du kan laste ned eksempelet ovenfor via følgende lenke: Eksempelundersøkelse med 5 tilfeldige av 10 spørsmål.
Vurdering av en brukerangitt liste over produkter
Oversikt
Eksempelet nedenfor viser hvordan du kan be brukerne liste opp en rekke produkter de er interessert i, og deretter be dem vurdere disse produktene.
ES-funksjoner som demonstreres
- Skreddersydde svar - når produkter vurderes, hentes etikettene fra kommentarfeltet i det foregående flervalg-spørsmålet
- Skreddersydde skalaer - mange avanserte spørsmålsvalg, som skalaoverskrifter, kan også skreddersys.
Skjermbilder
Dette bildet viser at siden bare produkt 1, 3 og 5 ble valgt, vises bare disse tre (ved hjelp av attributtet array_filter). I tillegg er radetikettene i det andre spørsmålet enten produktnumrene (hvis ingenting er skrevet inn i kommentarfeltet) eller innholdet i kommentarfeltene.

Dette bildet viser hvordan de skreddersydde svarene angis:

Her er logikkfilen (Show Logic File) for dette spørsmålet. Den lar oss kontrollere at den betingede logikken fungerer som ønsket (for eksempel for å se om det finnes syntaksfeil):

Det neste bildet viser en gruppe der du angir en vurderingsskala med 5 punkter (alternativ 1–5), tittelen på skalaen og produktene du vil vurdere. Det siste spørsmålet viser at hver del av matrisespørsmålet kan skreddersys:

Det neste bildet viser logikkfilen for det siste spørsmålet. Som du kan se, kan underspørsmål, svar og skalaoverskrifter skreddersys.

Last ned
Du kan laste ned eksempelundersøkelsen ovenfor via følgende lenke: Eksempelundersøkelse for vurdering av en brukerangitt liste over produkter.