Provjera logike upitnika - napredno
From LimeSurvey Manual
Općenito
Važna opcija koja vam pomaže izraditi i jednostavno održavati složene upitnike je Provjera logike upitnika.
Tijekom izrade i testiranja upitnika, a prije njegove aktivacije, vrlo je važno provjeriti logiku upitnika. To posebno vrijedi kada koristite složene jednadžbe relevantnosti, prilagodbe (tailoring) i provjere - morate biti sigurni da se ništa neće pokvariti kada pokrenete upitnik.
Ova značajka omogućuje brzu provjeru ispravnosti vašeg upitnika, grupa i pitanja. Dostupna je putem opcija izbornika na gornjoj traci koje se nalaze u postavkama vezanim uz upitnik. Dostupna je u izborniku Alati:
Kao što možete vidjeti gore, ovu opciju možete pokrenuti četiri puta, za svaki jezik korišten u upitniku.
Opis
Opcija Provjera logike upitnika prikazuje sve što ste odredili za svako pitanje i grupu (npr. naziv, tekst, pomoć, uvjete/relevantnost, pravila provjere, zadane vrijednosti, potpitanja, odgovore) u preglednom tabličnom obliku. Ističe pogreške i omogućuje vam da kliknete na ID-ove pitanja i grupa (ili varijable korištene u jednadžbama) kako biste u novim karticama preglednika uredili ta pitanja ili grupe. Tako možete brzo urediti sve pogreške i osvježiti stranicu provjere logike kako biste potvrdili ispravnost upitnika prije njegove aktivacije.
Prikaz je osmišljen i tako da ga mogu čitati istraživači i naručitelji studije kako bi mogli provjeriti ispravnost dizajna i logike upitnika. Provjera logike upitnika ažurira predmemoriju za sve izraze korištene u aktivnom upitniku.
Uključuje sljedeće stupce:
- # - prikazuje redne brojeve grupa i pitanja, počevši od 0.
- Naziv [ID] - prikazuje kôd pitanja za grupu/pitanje/potpitanje. Ti se kodovi mogu koristiti kao varijable unutar izraza. ID je ID pitanja (QID) ili ID grupe (GID). Ovo polje prikazuje i vrstu pitanja (npr. Višestruki izbor [M])).
- Relevantnost [Provjera] (Zadano) - prikazuje sljedeće:
- Relevantnost - jednadžba relevantnosti za pitanje ili grupu s isticanjem sintakse. Ako je uvijek istinita (prikazuje se u svakom scenariju), vrijednost će biti 1.
- Provjera - ExpressionScript automatski generira jednadžbu provjere na temelju odabranih atributa pitanja (npr. min/maks broj odgovora, min/maks/jednake vrijednosti zbroja, min/maks pojedinačne vrijednosti ili provjera regularnim izrazom). Ovaj odjeljak prikazuje generiranu jednadžbu provjere kako biste mogli uočiti eventualne pogreške (poput nedefiniranih varijabli).
- Provjera na razini pitanja prikazuje jednadžbu potrebnu za provjeru gore opisanih atributa pitanja
- Provjera na razini potpitanja prikazuje jednadžbu potrebnu za implementaciju array_filter, array_filter_exclude i exclusive_option
- Zadano - ako pitanje ima zadanu vrijednost, prikazuje se ovdje s isticanjem sintakse (jer zadana vrijednost može biti izraz).
- Tekst [Pomoć] (Savjet) - prikazuje sljedeće:
- Tekst - tekst grupe, pitanja, potpitanja ili odgovora. Sintaksa je istaknuta kako bi se prikazala sva ugrađena prilagodba (tailoring), čime možete provjeriti jeste li deklarirali sve varijable koje planirate koristiti u prilagodbi.
- Pomoć - prikazuje tekst pomoći za pitanje, također s istaknutom sintaksom.
- Savjet - prikazuje interno generirani savjet za provjeru, na temelju atributa pitanja. Isti se savjet koristi u svim stilovima upitnika, kao i u upitniku prikladnom za ispis i na zaslonima za unos podataka.
- Atributi pitanja - prikazuje tablicu svih relevantnih atributa ovog pitanja. Atributi koji mogu biti jednadžbe imaju istaknutu sintaksu kako biste mogli provjeriti njihovu ispravnost.
Reci su obojeni na sljedeći način:
- Grupe - prikazuju se svijetlosivom pozadinom
- Pitanja - prikazuju se svijetlozelenom pozadinom
- Potpitanja - prikazuju se blijedožutom pozadinom
- Odgovori - prikazuju se običnom bijelom pozadinom
Odgovori imaju dodatni atribut u stupcu Relevantnost:
- Vrijednost - ovo je zadana interna vrijednost koju koriste izračuni. Ako koristite procjene, ovo će biti vrijednost procjene. Inače će biti jednaka nazivu odgovora.
Upotreba
Na vrhu stranice nalazi se sažetak. Ako je sve u redu, pisat će "Nisu uočene sintaktičke pogreške u ovom upitniku" ili "Ova grupa" odnosno "Ovo pitanje" "samo po sebi ne sadrži sintaktičke pogreške". U suprotnom će pisati "X pitanja ima sintaktičke pogreške koje je potrebno ispraviti".
Svako pitanje sa sintaktičkim pogreškama dobiva crvenu pozadinu u krajnjem lijevom stupcu (tj. #). Također će se ispod stupca Naziv [ID] prikazati upozorenje s minimalnim brojem pogrešaka pitanja. Sljedeće su pogreške uobičajene:
- Nedefinirana varijabla - ako niste definirali sve svoje varijable ili ste pogrešno upisali array_filter (ili različite skupove opcija odgovora za array_filter), neka od vaših pitanja provjere prikazat će pogreške. Nedefinirane varijable prikazuju se crvenim tekstom, uokvirene crvenom linijom.
- Neispravna sintaksa - kada počnete koristiti jednadžbe relevantnosti, možete upotrijebiti previše ili premalo zagrada. Takvi sintaktički problemi istaknuti su i uokvireni crvenom bojom. Ako pokazivačem miša prijeđete preko takvog crveno uokvirenog teksta, opis pogreške prikazat će se u oblačiću.
Boje u sintaksi ExpressionScripta
Uvjeti i jednadžbe imaju istaknutu sintaksu kako bi se lakše snašli u onome što gledate:
- Zelena / svijetloplava: varijabla koja upućuje na pitanje ranije u upitniku
- Plava: funkcija
- Siva: znakovni izraz
- Smeđa: izraz TOKEN (podaci o sudioniku)
- Crna: operator
Stvari koje treba provjeriti:
- Ljubičasta: varijabla koja upućuje na pitanje kasnije u upitniku. Obično je to pogreška i treba je provjeriti.
- Crvena ili crveni okvir: nepostojeća varijabla ili upućivanje na raniје pitanje ili sintaktička pogreška - obično treba provjeriti.
Nedefinirane varijable
Ako se koriste nedefinirane varijable, naziv varijable bit će obojen crveno i okružen crvenom linijom. Ako pokazivačem miša prijeđete preko naziva varijable, pisat će "undefined variable":


}}
Neispravna sintaksa
Većina pogrešaka povezanih s izrazima nastaje zbog neispravne sintakse. Razlog je to što administratori upitnika obično zaborave dodati vitičastu zagradu, ne koriste ispravno zagrade ili pogrešno upotrebljavaju izraze:


Ovdje možete pronaći mnogo dobrih primjera upotrebe isticanja sintakse.
Neispravan prilagođeni JavaScript
JavaScript pogreške također će biti istaknute u provjeri logike upitnika:

Brže uređivanje i provjera
Svi tekstovi s istaknutom sintaksom imaju ugrađene opise (tooltipove) na koje se može kliknuti:
- Opisi (tooltipovi)
- Funkcije - zadržavanjem miša prikazuju se svrha i definicija sintakse funkcije;
- Nazivi varijabli - zadržavanjem miša prikazuju se položaj (grupa, redoslijed pitanja), tekst pitanja i dopušteni odgovori za pitanje.
- Radnje
- Nazivi varijabli - klikom na naziv varijable otvara se novi prozor u kojem možete urediti pitanje. Tako se lako krećete kroz upitnik i provjeravate logiku - samo nastavite kliknuti na nazive varijabli u relevantnosti ili kriterijima provjere pitanja kako biste vidjeli odakle dolaze i kako se koriste.
Primjeri
Sljedeći primjeri preuzeti su iz ExpressionScript primjera upitnika. Na toj stranici možete pronaći snimke zaslona upitnika u radu, objašnjenja i preuzimanja.
Indeks tjelesne mase
Ovdje se nalaze snimke zaslona ovog primjera.
Ovo je prikaz promjene redoslijeda pitanja za izračun indeksa tjelesne mase. Relevantnost za težinu, visinu i ITM možete vidjeti u stupcu Pitanje:

Za bolji pregled upitnika provjerite stranicu s logikom upitnika:

Ovaj primjer upitnika ujedno je dobar primjer ugniježđenih if() naredbi za generiranje "weightstatus".

Kaskadna logika
Ovdje se nalaze snimke zaslona ovog primjera.
Prikazuje logiku provjere potpitanja koja se automatski generira kada koristite array_filter i array_filter_exclude. Ovaj primjer također pokazuje kako možete zamijeniti prilagođenu vrijednost "Ostalo" (odgovor za Q02_other je Q01_other).

Q05 u ovom primjeru prikazuje istodobnu upotrebu array_filter i array_filter_exclude na Q01 odnosno Q02. Ovaj primjer demonstrira mogućnosti kaskadnog array_filtera. Imajte na umu da je jedan od glavnih razloga prikaza kriterija provjere na razini pitanja i potpitanja pomoć pri osiguravanju da niste napravili tipfelere pri navođenju naziva varijabli array_filter ili array_filter_exclude (ili ako za popis filtriranih potpitanja koristite različite nazive varijabli). Ako postoje takve greške, svi neispravni nazivi varijabli prikazat će se crvenom bojom kao nedefinirani, što vam omogućuje da brzo riješite problem.

Dinamička relevantnost
Ovaj primjer demonstrira dinamičku kaskadnu logiku relevantnosti za upravljanje vidljivošću pitanja. Ovaj primjer možete preuzeti ovdje.
Također imajte na umu da se pitanja prikazuju samo ako su ispunjeni određeni kriteriji provjere. Na primjer, ako osoba navede da ima dvoje djece, ispitanik mora ispuniti određena pitanja (kid1 i kid2).

Relevantnost na razini grupe
Ovaj primjer pokazuje kako se relevantnost na razini grupe prikazuje u provjeri logike. Ovdje su snimke zaslona primjera opisanog u nastavku.
Kao što možete vidjeti, jednadžba relevantnosti na razini grupe (cohabs > 1 && p1_rel != "") prikazana je u sivom retku Person 2 za G-2.
Možda ćete primijetiti i da su sva pitanja obavezna. Međutim, ako grupa nije relevantna, nisu ni sva njezina pitanja. Zbog toga su ta pitanja zaista obavezna samo ako je grupa relevantna.
Također možete primijetiti da se određena pitanja prikazuju samo ako odgovor na prethodno pitanje nije prazan. U nastavku možete vidjeti da se p2_name neće prikazati ako p2_sex nije ispunjen, iako je to obavezno pitanje. Obavezno pitanje p2_age također se neće prikazati ako p2_name nije ispunjen. Ta se pitanja mogu smatrati „uvjetno obaveznima”.
Osim toga, imajte na umu da se poruke savjeta također automatski stvaraju za vas. Organizirane su prema rasponu vrijednosti (min/maks), rasponu zbroja vrijednosti (min/maks/jednako), broju odgovora (min/maks) itd. (ovisi o korištenoj vrsti pitanja i aktivnim atributima). Ponekad želite provjeriti raspon odgovora, ali ne želite korisniku prikazivati savjete za provjeru koji bi mogli djelovati suvišno. U takvim slučajevima možete koristiti opciju pitanja hide_tip (kao u ovom slučaju, kako korisniku ne bi bilo rečeno da dob mora biti između 0 i 115 dok ne pokuša unijeti neispravnu vrijednost - pogledajte p2_age).

Zarez kao decimalni separator
Iako LimeSurvey u potpunosti podržava korištenje zareza kao decimalnog separatora tijekom izvođenja, tijekom izrade upitnika (npr. pri navođenju min/maks vrijednosti u naprednim atributima pitanja) ipak morate koristiti točku kao decimalni separator. Radni primjer možete pronaći ovdje.
Također imajte na umu da se logika provjere automatski stvara za vas na temelju omogućenih atributa pitanja. Jednadžbe možda izgledaju zastrašujuće, ali ne morate brinuti o njima.

