Primjeri upitnika za ExpressionScript
From LimeSurvey Manual
Uvod
Najbolji način za učenje korištenja ExpressionScripta je igranje s radnim primjerima i njihovo prilagođavanje vašim potrebama.
U nastavku možete pronaći skup primjera upitnika koji pokazuju (i omogućuju testiranje) kako se EM može upotrijebiti za poboljšanje vašeg upitnika. Ti se upitnici nalaze u mapi /docs/demosurveys u distribuciji.
Relevantnost, prilagodba i jednadžbe
Pregled
Sljedeći primjer izračunava BMI (indeks tjelesne mase) svakog ispitanika. U nastavku pogledajte značajke koje su prikazane u ovom primjeru.
Prikazane značajke EM-a
- Relevantnost - podrška za snažnu uvjetnu logiku;
- Umetanje / prilagodba - omogućuje umetanje ili prilagodbu odgovora i metapodataka pitanja;
- Dinamička prilagodba - imajte na umu da se izvješća na stranici mijenjaju dok odgovarate na pitanja.
- Mikroprilagodba - uvjetna prilagodba unutar rečenica i izvješća pomoću naredbi if()
- Jednadžbe - novo pitanje vrste jednadžba koje omogućuje izvođenje izračuna i spremanje rezultata u bazu podataka, čak i ako je izračun skriven
- Uvjetna provjera - kriteriji provjere, poput minimalne dopuštene vrijednosti, mogu biti uvjetni - npr. na temelju jednadžbi.
Snimke zaslona
Ovaj primjer izračunava indeks tjelesne mase, izračun na temelju vaše težine i visine kojim se određuje imate li premalu, normalnu ili prekomjernu tjelesnu težinu ili ste pretili. Imajte na umu da u početku vidite samo četiri obavezna pitanja:

Nakon što unesete svoje podatke (a možete odabrati hoćete li koristiti metričke ili nemetričke jedinice), vidjet ćete prilagođeno izvješće koje sažima ono što ste unijeli i prikazuje vaš status težine:

Evo drugog primjera, s nemetričkim jedinicama, koji prikazuje kako se rezultat dinamički mijenja:

Na internoj razini postoje skrivena pitanja vrste jednadžba koja podatke pretvaraju u metričke (ako je potrebno) te spremaju metričku visinu, težinu, BMI i status težine u bazu podataka bez potrebe za prilagođenim JavaScriptom.
U sljedećem nizu primjera možete vidjeti kako se matematičke i druge funkcije mogu koristiti unutar prilagođenih izvješća. Ovako stranica izgleda prije nego što unesete bilo kakve podatke. Postoji uvjetna logika koja prikazuje prazne ćelije ako nisu uneseni podaci (ili su uneseni nenumerički podaci), umjesto prikaza "NaN" ili "Divide by Zero".

Kako se brojevi unose, izvješće na stranici mijenja se i prikazuje izračun koji se izvodi te njegov rezultat.

U ovom primjeru upitnika ima mnogo drugih primjera. Na primjer, donja snimka zaslona prikazuje jedan od desetaka načina na koje možete ispuniti stranicu Dinamička relevantnost. Kao što navodi tekst pomoći, isprobajte različite dobi, a posebno nelogične kombinacije odgovora kako biste vidjeli zabavne poruke koje se generiraju pri dnu. Također imajte na umu da će, ako kažete da imate više od jednog djeteta, poruka glasiti "I hope you enjoy playing with your X children", umjesto "I hope you enjoy playing with your child". To pokazuje kako možete jednostavno mikroprilagoditi rečenice tako da odgovaraju rodu i/ili broju vaših ispitanika. Možete čak i jednostavno provoditi konjugaciju glagola i deklinaciju imenica prema rodu i broju.

Preuzimanje
Za pristup primjeru upitnika kliknite sljedeću poveznicu: LS3_em_tailoring.zip.
Primjer popisa stanovništva
Pregled
Ovo je primjer popisa stanovništva koji pita koliko osoba živi u vašem kućanstvu.
Pokazuje kako relevantnost na razini grupe može olakšati implementaciju "petlje" pitanja. Nakon izrade grupe za Osobu 1, izvezao sam grupu. Budući da sam koristio nazive varijabli qcode poput p1_name umjesto SGQA koda, mogao sam pomoću uređivača teksta brzo urediti i ponovno uvesti grupu nekoliko puta (npr. za uređivanje i ponovni uvoz svake grupe koja se ponavlja trebalo je oko 10 sekundi, uz osiguranje da sve varijable imaju jedinstvene nazive i da je logika na razini grupe ispravna).
Možete koristiti i značajku Kopiranje pitanja, ali ona neće biti tako brza kao gore predložena opcija.
Ovo također pokazuje kako možete spriječiti prikaz poruke o završetku sve dok upitnik doista nije dovršen (npr. kada su dovršene sve potrebne grupe).
Prikazane značajke EM-a
- Relevantnost na razini grupe - Naknadne grupe (Osoba 1-5) prikazuju se samo do navedenog broja osoba koje žive u kućanstvu;
- Prilagodba (Tailoring) - Završno izvješće sažima demografske podatke za svaku osobu u kućanstvu;
- Postupni prikaz pitanja - Bilo u načinu grupu po grupu ili sve na jednoj stranici, sljedeća pitanja prikazuju se tek nakon što se odgovori na prethodna.
Snimke zaslona
Upitnik generira prilagođeno izvješće koje prikazuje demografske podatke za navedeni broj osoba u kućanstvu:

Ako prijeđete na način prikaza jednog pitanja po stranici, vidjet ćete da indeks prilagođava pitanja. Budući da je korisnik naveo da je osoba žena, postavlja se pitanje "Kako se ona zove". A budući da smo odgovorili "Mary", sljedeće pitanje glasi "Koliko godina ima Mary"?

Preuzimanje
Za preuzimanje primjera upitnika kliknite ovdje: LS3_group_relevance.zip.
Kaskadni filtri nizova
Pregled
Ovaj upitnik temelji se na dizajnu upitnika koji je ljubaznošću ustupio Joy Lane Research, LLC.
Snimke zaslona
U nastavku imajte na umu sljedeće:
- Q02 prikazuje samo skup proizvoda označenih u Q01 (korištenjem array_filter)
- Q02 prikazuje i "Another product", tekst unesen u polje "Other electronic" u Q01
- Q04 prikazuje samo proizvode iz Q02 koji su označeni (dakle, filter niza je kaskadni)
- Q05 prikazuje samo proizvode iz Q02 koji nisu bili označeni u Q02 (korištenjem kaskadnog array_filter_exclude)


Preuzimanje
Kliknite na sljedeću poveznicu za preuzimanje gornjeg primjera: Primjer upitnika LS2_cascading_array_filter.
Piping/Tailoring pomoću svih vrsta pitanja i atributa
Pregled
Ako ste zbunjeni načinom imenovanja varijabli (SGQA naspram Qcodes), niste jedini. Iako glavna dokumentacija opisuje kako sastaviti nazive Qcode varijabli, ništa ne nadmašuje prikaz u radnoj demonstraciji. Ovaj upitnik pokazuje kako možete pristupiti atributima pitanja i odgovorima pomoću ExpressionScripta.
Sadržaj
- Primjeri svake vrste pitanja
- Uključene su sve vrste pitanja koje mogu koristiti opciju "Ostalo" kako biste vidjeli kako to utječe na imenovanje varijabli
- Zadane vrijednosti za sve vrste pitanja koje prihvaćaju zadane vrijednosti
- Tailoring - izvješća na stranici i izvan nje koja prikazuju svih 16 dostupnih EM sufiksa točkaste notacije
- Ova izvješća prikazuju sve trenutno unesene podatke (pa vam pokazuju kako možete generirati vlastita izvješća za ispis za korisnike umjesto zaslona za ispis odgovora)
- Ispravno imenovanje svih varijabli prema Qcode i SGQA
Snimke zaslona
Ovo je velik upitnik pa smo odlučili ne uključiti snimke zaslona. Umjesto toga, preuzmite ga i isprobajte.
Preuzimanje
Kliknite na sljedeću poveznicu za preuzimanje upitnika: LS3_EM_question_attributes.lss
Tradicionalna provjera, osmišljena iznova
Pregled
Ovaj primjer prikazuje sve vrste provjere koje koriste izraze i kako utječu na svaku vrstu pitanja koja podržava provjeru. U mnogim slučajevima savjeti za provjeru isprva su skriveni i pojavljuju se samo ako pitanje ne zadovoljava kriterije provjere (a nestaju čim pitanje zadovolji kriterije provjere).
Prikazane vrste provjere
- min_num_value_n - minimalna vrijednost za odgovor
- max_num_value_n - maksimalna vrijednost za odgovor
- min_answers - minimalni potreban broj odgovora
- max_answers - maksimalni dopušteni broj odgovora
- multiflexible_min - minimalna dopuštena vrijednost za odgovor (za vrstu pitanja višestruki fleksibilni brojevi)
- multiflexible_max - maksimalna dopuštena vrijednost za odgovor (za vrstu pitanja višestruki fleksibilni brojevi)
- min_num_value - minimalni dopušteni zbroj svih odgovora na pitanje
- max_num_value - maksimalni dopušteni zbroj svih odgovora na pitanje
- equals_num_value - zbroj svih odgovora na pitanje mora biti jednak ovoj vrijednosti
- validation - ovo je provjera regularnim izrazom za pitanje - može se primijeniti na pojedinačne ćelije
Snimke zaslona
Uz nove CSS stilove svaka vrsta provjere prikazuje zaseban savjet. Ako se prikazuju, mogu se sakriti putem opcije hide_tip. Zadana opcija je prikaz crvenim fontom ako pitanje ne zadovoljava kriterije provjere, a zelenim ako ih zadovoljava:

Korisnik ne može poslati stranicu s pogreškama u provjeri. Odmah će biti upozoren ako je unio pogrešne podatke:

Provjera se može primijeniti na pojedinačne ćelije unutar niza, kao u ovom primjeru, gdje provjere regularnim izrazima osiguravaju da je svaki unos ispravno oblikovan američki telefonski broj, uključujući pozivni broj.

Preuzimanje
Za preuzimanje gornjeg primjera kliknite na sljedeću poveznicu: LS3_Validation_tests.zip.
Jednadžbe za provjeru
Pregled
Ponekad vam je potrebna prilagođena provjera koja se ne može postići tradicionalnim kriterijima minimuma/maksimuma. Za to ćete trebati koristiti opcije em_validation_q i em_validation_sq, koje omogućuju izradu složenih jednadžbi za provjeru na razini pitanja, odnosno potpitanja.
Prikazane značajke EM-a
- em_validation_q - ovo je jednadžba koja određuje je li cijelo pitanje valjano
- em_validation_q_tip - ovo je poruka koja se prikazuje ako pitanje ne zadovoljava kriterije em_validation_q
- em_validation_sq - ovo je jednadžba koja određuje je li svako potpitanje (ćelija niza) valjano
- em_validation_sq_tip - ovo je poruka koja se prikazuje ako je bilo koje potpitanje nevaljano.
Općenito, kada se koristi em_validation_sq, ako je bilo koja ćelija nevaljana, boja pozadine te ćelije postaje crvena kako bi označila pogrešku.
Snimke zaslona

Ovo pitanje osigurava da dob svoje djece unesete silaznim redoslijedom primjenom sljedeće jednadžbe za provjeru:
q1_sq1 >= q1_sq2 && q1_sq2 >= q1_sq3 && q1_sq3 >= q1_sq4

U donjem primjeru provjera osigurava da u bilo kojem retku nije dano više od 3 odgovora primjenom sljedeće jednadžbe za provjeru:
(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)
Isto možete napisati i na sljedeći način, a LimeSurvey će ga tijekom izvođenja automatski pretvoriti u gore navedeni izraz.
(sum(self.sq_A) <= 3) && (sum(self.sq_B) <= 3) && (sum(self.sq_C) <= 3)

Preuzimanje
Za preuzimanje uzorka upitnika korištenog u gornjim primjerima kliknite na sljedeću poveznicu: ls2_test_em_sq_validation.lss.
Relevantnost potpitanja
Pregled
Ovo pokazuje kako array_filter i kriteriji provjere mogu međusobno djelovati. Kod provjera koje se odnose na zbrojeve uzimaju se u obzir samo relevantne (vidljive) vrijednosti.
Prikazane značajke EM-a
Također prikazuje dinamičko izvještavanje o broju odgovorenih pitanja u osnovnim pitanjima.
Snimke zaslona
Promjena broja vidljivih redaka dinamički mijenja zbroj. Označavanje potpitanja kao nerelevantnog ne briše njegovu vrijednost. Umjesto toga, ako je potpitanje nerelevantno, njegove vrijednosti ne sudjeluju ni u jednoj jednadžbi.


Obratite pozornost na to što se događa kada označimo "Peto potpitanje" u prvom pitanju "Which rows should appear below". Zbroj za drugo pitanje "Enter some numbers" sada iznosi 5. Iako potpitanje 5 tog pitanja i dalje ima vrijednost 14 (npr. ako poništite oznaku petog potpitanja, ponovno ćete vidjeti vrijednost 14), ta vrijednost ne sudjeluje u zbroju jer je trenutno nerelevantna. Svi nerelevantni podaci brišu se (postavljaju na NULL u bazi podataka) prilikom slanja, ali ostaju dostupni na stranici za slučaj da ispitanici žele ili trebaju promijeniti svoje odgovore.

Preuzimanje
Za preuzimanje našeg primjera kliknite ovdje: ls2_subquestion_relevance.lss.
Korištenje zareza kao decimalnog separatora (decimalne točke)
Pregled
ExpressionScript osigurava da se u numerička polja mogu unijeti samo valjani brojevi. Ako unesete nevaljani broj, bit ćete upozoreni da nešto nije u redu (npr. kod teme fruity cijelo se pitanje oboji crveno).
Imajte na umu da se numeričke vrijednosti u bazi podataka uvijek pretvaraju tako da koriste točku kao decimalni separator. Na taj način statističke analize rade ispravno.
Za promjenu decimalnog separatora otvorite opcije Elementi teksta koje se nalaze na kartici Postavke i potražite funkciju Decimalni znak.
Vrste pitanja koje koriste decimalni separator
- Numerički unos [N]
- Višestruki numerički unos [K]
- Niz (Brojevi) [:]
- Niz (Tekstovi) [;], kada se koristi atribut numbers_only
- Popis (Radio) [L], kada se koristi atribut other_numbers_only
- Slobodan tekst (kratak) [S], kada se koristi atribut numbers_only
- Više kraćih tekstova [Q], kada se koristi atribut numbers_only
- Višestruki izbor [M], kada se koristi atribut other_numbers_only
- Višestruki izbor s komentarima [P], kada se koristi atribut other_numbers_only
Snimke zaslona
Na donjim snimkama zaslona možete vidjeti da se zarez može koristiti kao decimalni separator.

Preuzimanje
Za preuzimanje gornjeg primjera kliknite na sljedeću poveznicu: ls2_comma_as_radix_separator.lss.
Grupe randomizacije
Pregled
Ovaj upitnik pokazuje kako koristiti atribut random_group.
Ako se koristi ovaj atribut, redoslijed pitanja nasumično se određuje svaki put kad pokrenete upitnik. Međutim, nakon pokretanja upitnika redoslijed randomizacije ostaje nepromijenjen, čak i ako promijenite jezik.
Snimke zaslona
Pogledajmo zajedno donji primjer. Prvo nasumično pitanje na stranici bit će Q1, Q4 ili Q7. Drugo nasumično pitanje na stranici bit će Q2, Q5 ili Q8.

Ovo je randomizacija koja je generirana kad sam prvi put testirao ovaj upitnik.

Drugi put kad sam testirao upitnik, generirana je drukčija randomizacija.

No kad sam prešao na francuski (bez ponovnog pokretanja upitnika), redoslijed randomizacije ostao je nepromijenjen.

Preuzimanje
Za preuzimanje gornjeg primjera kliknite na sljedeću poveznicu: Randomization_Group_Test.lss
Nasumično postavljanje jednog pitanja po grupi
Pregled
Ovaj upitnik pokazuje kako možete konfigurirati upitnik da nasumično prikazuje jedno pitanje po grupi. U njemu postoji 5 grupa sa po 6 pitanja. Na početku, u Grupi 0, popunjeno je pet skrivenih pitanja tipa Jednadžba, nazvanih ask1-ask5. Svako od njih u polju za tekst pitanja ima vrijednost {floor(rand(1,6.9999))}, što znači da će varijable ask1-ask5 imati vrijednost između 1 i 6. Zatim svako pitanje u grupi ima jednadžbu relevantnosti poput "ask1==N", gdje je N N-to pitanje u grupi (pa treće pitanje u grupi 1 ima jednadžbu relevantnosti "ask1==3").
Ovaj upitnik jednako dobro radi u načinima prikaza cijelog upitnika odjednom, skupina za skupinom i pitanje po pitanje. Budući da se randomizacija postavlja u prvoj grupi, a ta je grupa zapravo skrivena (jer su sva pitanja ask1-ask5 skrivena), randomizacija ostaje ista za ispitanika; ali će svaki ispitanik imati zasebnu randomizaciju.
Prikazane značajke
- Vrsta pitanja Jednadžba
- Funkcije randomizacije
- Uvjetna (if) funkcija
Snimke zaslona
Ovo je Group0, koja koristi vrstu pitanja Jednadžba za odabir nasumičnih vrijednosti od 1 do 6 za svaku grupu (osim zadnje grupe, koja ima samo 4 pitanja). Primijetite da funkcija "if()" prvo provjerava je li ask1 već postavljen i, ako jest, koristi tu vrijednost. Ako vrijednost nije postavljena, koristi nasumičnu vrijednost za postavljanje vrijednosti ask1.

Ova grupa pokazuje kako se varijabla (ask4) iz Group0 koristi za kontrolu toga koje je pitanje vidljivo unutar četvrte grupe.

Preuzimanje
Za preuzimanje gornjeg primjera upitnika kliknite ovdje: Primjer upitnika s nasumičnim pitanjima unutar grupe.
Nasumično postavljanje određenog broja pitanja u grupi (podskup pitanja)
Pregled
Ovaj upitnik prikazuje kako postaviti nasumični podskup pitanja u grupi. Na primjer, prikaz 5 nasumičnih pitanja od 10 pitanja koja se nalaze unutar jedne grupe.
Upitnik ima jednu grupu koja sadrži 10 pitanja. Svim pitanjima dodijeljeno je isto ime skupine nasumičnosti. Zbog toga će se prikazati nasumičnim redoslijedom pri učitavanju stranice. Svako pitanje ima jednadžbu relevantnosti prema kojoj zbroj vrijednosti "relevanceStatus" svih ostalih pitanja u grupi mora biti manji od broja pitanja koja želite prikazati. Budući da se relevanceStatus dodjeljuje dok se pitanja prikazuju, to zapravo daje ukupan broj prethodnih pitanja.
Dakle, u našem primjeru 5 od 10 jednadžba za Q1 bila bi:
sum(Q2.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5
Za Q2 bila bi:
sum(Q1.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5
I tako dalje...
Prikazane značajke
Preuzimanje
Za preuzimanje gornjeg primjera kliknite na sljedeću poveznicu: Primjer upitnika Nasumičnih 5 od 10.
Ocjenjivanje popisa proizvoda koji unosi korisnik
Pregled
Donji primjer prikazuje kako možete zamoliti korisnike da navedu skup proizvoda koji ih zanimaju, a zatim da ocijene te proizvode.
Prikazane značajke ExpressionScripta
- Prilagodba odgovora - pri ocjenjivanju proizvoda oznake dolaze iz polja za komentar prethodnog pitanja s višestrukim izborom
- Prilagodba skala - mnoge napredne opcije pitanja, poput naslova skale, također se mogu prilagoditi.
Snimke zaslona
Ova slika prikazuje da su, budući da su odabrani samo proizvodi 1, 3 i 5, prikazana samo ta 3 proizvoda (pomoću atributa array_filter). Osim toga, oznake redaka u drugom pitanju su ili brojevi proizvoda (ako se u polje za komentar ništa ne unese) ili sadržaj polja za komentar.

Ova slika prikazuje kako se određuju prilagođeni odgovori:

Ovo je datoteka logike (Show Logic File) za to pitanje, koja nam omogućuje da provjerimo radi li uvjetna logika kako želimo (npr. da vidimo ima li sintaktičkih pogrešaka):

Sljedeća slika prikazuje grupu u kojoj određujete skalu ocjenjivanja s 5 bodova (opcije 1-5), naslov skale i proizvode koje želite ocijeniti. Posljednje pitanje pokazuje da se svaki dio pitanja tipa niz može prilagoditi:

Sljedeća slika prikazuje prikaz logičke datoteke posljednjeg pitanja. Kao što možete primijetiti, potpitanja, odgovori i zaglavlja skale mogu se prilagoditi.

Preuzimanje
Za preuzimanje gornjeg primjera upitnika kliknite na sljedeću poveznicu: Primjer upitnika Ocjenjivanje popisa proizvoda koji unosi korisnik.