Primjeri upitnika za Expression Manager
From LimeSurvey Manual
Uvod
Najbolji način da naučite koristiti ExpressionScript je igrati se s radnim primjerima i prilagoditi ih svojim potrebama.
U nastavku možete pronaći skup primjera upitnika koji pokazuju (i omogućuju testiranje) kako se EM može koristiti za poboljšanje Vašeg upitnika. Ti se upitnici nalaze u mapi /docs/demosurveys unutar distribucije.
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 (piping / tailoring) - omogućuje umetanje ili prilagodbu odgovora i metapodataka pitanja;
- Dinamička prilagodba - imajte na umu da se izvještaji na stranici mijenjaju dok odgovarate na pitanja.
- Mikroprilagodba - uvjetna prilagodba unutar rečenica i izvještaja pomoću izjava if()
- Jednadžbe - nova vrsta pitanja koja omogućuje izračune i spremanje rezultata u bazu podataka, čak i ako je izračun skriven
- Uvjetna provjera - kriteriji provjere, kao što je minimalna dopuštena vrijednost, mogu biti uvjetni - npr. na temelju jednadžbi.
Snimke zaslona
Ovaj primjer izračunava indeks tjelesne mase, odnosno izračun na temelju Vaše težine i visine kojim se utvrđuje imate li prekomjernu tjelesnu težinu. Primijetite da na početku vidite samo četiri obavezna pitanja:

Kada unesete svoje podatke (i odaberete želite li koristiti metričke ili nemetričke jedinice), vidjet ćete prilagođeni izvještaj koji sažima ono što ste unijeli i prikazuje Vaš status težine:

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

Na internoj razini postoje skrivena pitanja vrste jednadžba koja pretvaraju podatke u metričke jedinice (ako je potrebno) te u bazu podataka spremaju metričku visinu, težinu, BMI i status težine, bez potrebe za prilagođenim JavaScriptom.
U sljedećem skupu primjera možete vidjeti kako se matematičke i druge funkcije mogu koristiti unutar prilagođenih izvještaja. 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 unose brojevi, izvještaj na stranici mijenja se i prikazuje izračun koji se provodi 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 primijetite da će, ako navedete 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 lako konjugirati glagole i sklanjati imenice prema rodu i broju.

Preuzimanje
Za pristup primjeru upitnika kliknite na 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.
Prikazuje kako relevantnost na razini grupe može olakšati implementaciju "petlje" pitanja. Nakon što sam izradio grupu za Osobu 1, izvezao sam tu 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 osiguravanje da sve varijable imaju jedinstvene nazive i da je logika na razini grupe ispravna).
Možete koristiti i značajku Kopiranje pitanja, no 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 broja navedenih ukućana;
- Prilagodba (tailoring) - Završno izvješće sažima demografske podatke za svakog ukućanina;
- Postupni prikaz pitanja - Bilo u načinu grupa po grupa ili sve u jednom, 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 ukućana:

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 obratite pozornost na 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 bili označeni (dakle filter niza djeluje kaskadno)
- 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/prilagodba (tailoring) uz korištenje svih vrsta pitanja i atributa
Pregled
Ako ste zbunjeni načinom imenovanja varijabli (SGQA ili Qcode), niste jedini. Iako glavna dokumentacija opisuje kako sastaviti imena Qcode varijabli, ništa ne nadmašuje funkcionalni demo. 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
- Prilagodba (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 izraditi vlastita izvješća za ispis za korisnike umjesto zaslona za ispis odgovora)
- Ispravno imenovanje svih varijabli pomoću Qcode i SGQA
Snimke zaslona
Ovo je golem 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, iznova osmišljena
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 zadovolji kriterije provjere (a nestaju čim pitanje zadovolji kriterije provjere).
Prikazane vrste provjere
- min_num_value_n - minimalna vrijednost odgovora
- max_num_value_n - maksimalna vrijednost odgovora
- min_answers - minimalni potreban broj odgovora
- max_answers - maksimalni dopušteni broj odgovora
- multiflexible_min - minimalna dopuštena vrijednost odgovora (za vrstu pitanja višestruki fleksibilni brojevi)
- multiflexible_max - maksimalna dopuštena vrijednost odgovora (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
- provjera - ovo je provjera pitanja pomoću regularnog izraza - može se primijeniti na pojedinačne ćelije
Snimke zaslona
Pomoću novih CSS stilova svaka se vrsta provjere prikazuje kao zaseban savjet. Ako su prikazani, mogu se sakriti pomoću opcije hide_tip. Zadana opcija prikazuje ih crvenom bojom ako pitanje ne zadovolji kriterije provjere, a zelenom ako ih zadovolji:

Korisnik ne može poslati stranicu s pogreškama provjere. 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 u kojem regularni izrazi osiguravaju da je svaki unos ispravno oblikovan američki telefonski broj s pozivnim brojem.

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 morati 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 zadovolji 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 kao znak pogreške.
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 se u bilo kojem retku odgovori na najviše 3 pitanja 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 to 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 primjera 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 nerelevantno, njegove vrijednosti ne doprinose nijednoj jednadžbi.


Obratite pozornost na to što se događa kada označimo "Peto potpitanje" za prvo pitanje "Koji se retci trebaju pojaviti u nastavku". Zbroj za drugo pitanje "Unesite neke brojeve" sada iznosi 5. Iako peto potpitanje tog pitanja i dalje ima vrijednost 14 (npr. ako poništite oznaku petog potpitanja, ponovno ćete vidjeti vrijednost 14), ta vrijednost ne doprinosi zbroju jer je trenutno nerelevantna. Svi nerelevantni podaci brišu se (postavljaju na NULL u bazi podataka) prilikom slanja, ali ostaju dostupni na stranici u slučaju da korisnici žele ili trebaju promijeniti 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 ispravni brojevi. Ako unesete neispravan broj, bit ćete upozoreni da nešto nije u redu (npr. kod teme fruity cijelo pitanje postaje obojeno 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 te potražite funkcionalnost 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 za randomizaciju
Pregled
Ovaj upitnik pokazuje kako koristiti atribut random_group.
Ako se ovaj atribut koristi, redoslijed pitanja nasumično se određuje svaki put kada pokrenete upitnik. Međutim, nakon što se upitnik pokrene, redoslijed randomizacije ostaje fiksan, čak i ako promijenite jezik.
Snimke zaslona
Zajedno pogledajmo 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 generirana prvi put kada sam testirao/testirala ovaj upitnik.

Druga randomizacija generirana je drugi put kada sam testirao/testirala upitnik.

No, kada sam prešao/prešla 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 tako da nasumično prikazuje jedno pitanje po grupi. U njemu postoji 5 grupa sa po 6 pitanja. Na početku, u grupi 0, popunjava se pet skrivenih pitanja vrste 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 redni broj pitanja u grupi (tako treće pitanje u grupi 1 ima jednadžbu relevantnosti "ask1==3").
Ovaj upitnik jednako dobro radi u načinima prikaza cijeli upitnik odjednom, grupa po grupa 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; no svaki ispitanik imat će drukčiju randomizaciju.
Prikazane značajke
- Vrsta pitanja Jednadžba
- Funkcije randomizacije
- Uvjetna funkcija (if)
Snimke zaslona
Ovo je Group0, koja koristi vrstu pitanja Jednadžba za odabir nasumičnih vrijednosti od 1 do 6 za svaku grupu (osim za posljednju grupu, koja ima samo 4 pitanja). Primijetite da funkcija "if()" najprije provjerava je li ask1 već postavljen i, ako jest, koristi tu vrijednost. Ako vrijednost nije postavljena, koristi nasumičnu vrijednost za postavljanje vrijednosti varijable 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 pokazuje kako prikazati nasumični podskup pitanja unutar grupe. Na primjer, prikažite 5 nasumičnih pitanja od 10 pitanja koja se nalaze unutar grupe.
Upitnik ima jednu grupu s 10 pitanja. Svim pitanjima dodijeljeno je isto ime skupine nasumičnosti. Zbog toga će se prikazati nasumičnim redoslijedom prilikom učitavanja 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čno 5 od 10.
Ocjenjivanje popisa proizvoda koji unosi korisnik
Pregled
Donji primjer pokazuje kako možete zatražiti od korisnika da navedu skup proizvoda koji ih zanimaju, a zatim da ocijene te proizvode.
Prikazane EM značajke
- Prilagodba odgovora - prilikom ocjenjivanja 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 pokazuje da se, iako su odabrani samo proizvodi 1, 3 i 5, prikazuju samo ta 3 (pomoću atributa array_filter). Štoviše, oznake redaka u drugom pitanju su ili brojevi proizvoda (ako u polje za komentar nije ništa uneseno) ili sadržaj polja za komentar.

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

Ovo je datoteka prikaza logike za to pitanje, koja nam omogućuje provjeru radi li uvjetna logika kako želimo (npr. da vidimo ima li sintaksnih 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 datoteke logike 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.