x

Glavna poglavlja

  1. LimeSurvey Cloud u usporedbi s LimeSurvey CE
  2. Vodič za brzi početak - LimeSurvey 3.0+
  3. Instalacija - LimeSurvey CE
  4. Kako izraditi dobar upitnik (vodič)
  5. Početak rada
  6. Administriranje LimeSurveya
  7. Upitnici - uvod
  8. Postavke upitnika
  9. Izbornik upitnika
  10. Struktura upitnika
  11. Pitanja - uvod
  12. Skupine pitanja - uvod
  13. Upitnici - upravljanje
  14. Opcije alatne trake upitnika
  15. Višejezični upitnik
  16. ExpressionScript Engine - Vodič za brzi početak
  17. Nekategorizirane i napredne značajke
  18. Opći FAQ
  19. Rješavanje problema
  20. Zaobilazna rješenja
  21. Licenca
  22. Popis izmjena po verzijama
  23. Dodaci
 Actions

Expression Manager

From LimeSurvey Manual

Ova je stranica možda strojno prevedena i može sadržavati pogreške. Prikaži engleski izvornik · Poboljšaj ovaj prijevod
This page is a translated version of the page Expression Manager and the translation is 100% complete.

Vodič za brzi početak

Pregled

Prilikom prilagodbe svojih upitnika obično trebate način za određivanje sljedećeg:

  1. Navigacija/grananje - omogućuje da odgovori ispitanika promijene redoslijed kojim se postavljaju pitanja
  2. Prilagodba/umetanje (Tailoring/Piping) - kako formulirati pitanje (primjerice upućivanjem na prethodne odgovore ili sprezanjem rečenica prema broju ili spolu ispitanika) ili kako generirati prilagođena izvješća (poput rezultata procjene ili prilagođenih savjeta).
  3. Provjera - osigurava da odgovori zadovoljavaju određene kriterije, poput minimalnih i maksimalnih vrijednosti ili podudaranja s uzorkom unosa

Expression Manager (EM) nudi intuitivan način za određivanje logike za svaku od tih značajki. Gotovo sve što možete zapisati kao standardnu matematičku jednadžbu valjan je izraz, čak i ako pozivate funkcije. EM trenutačno omogućuje pristup 80 funkcija i može se lako proširiti kako bi podržao više njih. Također omogućuje pristup vašim varijablama pomoću imena varijabli čitljivih ljudima (umjesto SGQA imena).

Sljedeći odjeljci prikazuju glavna mjesta na kojima se koristi Expression Manager

Relevantnost (kontrola navigacije/grananja)

Neki upitnici koriste "Goto logiku", primjerice ako na pitanje 1 odgovorite opcijom C, preskačete na pitanje 5. Takav je pristup vrlo ograničavajući jer ga je teško provjeriti i lako se pokvari kada morate promijeniti redoslijed pitanja. EM koristi Booleovu jednadžbu relevantnosti za određivanje svih uvjeta pod kojima pitanje može biti valjano. Ako je pitanje relevantno, prikazuje se, a u suprotnom je Nije primjenjivo i u bazu podataka se pohranjuje vrijednost NULL. To je slično onome što se može učiniti pomoću uređivača uvjeta, no EM omogućuje da lako odredite mnogo složenije i snažnije kriterije (i omogućuje korištenje imena varijable umjesto SGQA imenovanja).

Ova slika prikazuje jedan način pregleda logike relevantnosti za upitnik. Izračunava indeks tjelesne mase. Jednadžba relevantnosti prikazana je u uglatim zagradama odmah nakon imena varijable (koje je zeleno). Dakle, relevantnost za weight, weight_units, height i height_units iznosi 1, što znači da se ta pitanja uvijek postavljaju. Međutim, relevantnost za BMI je {!is_empty(height) and !is_empty(weight)}, što znači da će se BMI izračunati samo ako ispitanik unese vrijednost i za visinu i za težinu (čime se izbjegava rizik od pogreške dijeljenja nulom). Također, pitanje Report prikazuje se samo ako ispitanik odgovori na sva četiri glavna pitanja (height, height_units, weight, weight_units).

Relevantnost se prikazuje i može se uređivati na sljedećim mjestima:

Pregled / uređivanje relevantnosti na razini pitanja

Ova jednadžba izračunava indeks tjelesne mase (BMI). Postavlja se samo ako osoba prvo unese svoju visinu i težinu.

Ovo je zaslon za uređivanje pitanja BMI.

Imajte na umu da ne koristite vitičaste zagrade kada unosite jednadžbu relevantnosti.

Pregled / uređivanje relevantnosti na razini grupe

Ovo je primjer upitnika za popis stanovništva. Prva stranica pita koliko osoba živi s vama i to sprema u varijablu "cohabs". Ova se stranica prikazuje samo ako imate više od jednog supstanara (dakle prikazuje se za drugu osobu koja živi s vama), a prikazuje se i samo ako ste naveli u kakvom ste odnosu s osobom jedan (p1_rel).

Kao što vidite, grupa ima i kriterije relevantnosti na razini pitanja, tako da se svako pitanje pojavljuje tek nakon što odgovorite na prethodno (npr. {!is_empty(p1_sex)}). EM umjesto vas kombinira relevantnost na razini grupe i pitanja. Pitanja u grupi postavljaju se samo ako je grupa u cjelini relevantna. Zatim se postavlja samo podskup pitanja unutar grupe koja su relevantna.

Ovo je zaslon za uređivanje relevantnosti na razini grupe za to pitanje:

Imajte na umu da ne koristite vitičaste zagrade kada unosite jednadžbu relevantnosti.

Prilagodba/umetanje (Tailoring/Piping)

EM vam omogućuje jednostavnu i složenu uvjetnu prilagodbu vaših pitanja. Ponekad trebate samo jednostavnu zamjenu, primjerice: "Rekli ste da ste kupili [Proizvod]. Što vam se u vezi s njim najviše svidjelo?". Ponekad trebate uvjetnu zamjenu poput "[Gospodin/Gospođa] [Prezime], biste li bili voljni ispuniti naš upitnik?". U ovom slučaju želite koristiti Gospodin ili Gospođa ovisno o spolu osobe. Ponekad vam treba još složenija zamjena (primjerice na temelju matematičkog izračuna). EM podržava svaku od ovih vrsta prilagodbe/umetanja.

Uvjetne jednadžbe

Primjer indeksa tjelesne mase pokazuje mogućnost izračuna BMI-ja osobe, čak i dok joj se omogućuje unos visine i težine u metričkim ili nemetričkim jedinicama.

Ovdje je weight_kg {if(weight_units == 'kg', weight, weight * .453592)}. Ova funkcija if() znači da, ako je ispitanik unio težinu u kilogramima, treba koristiti tu vrijednost, a u suprotnom unesenu vrijednost (koja je bila u funtama) treba pomnožiti s .453592 kako bi se pretvorila u kilograme. Varijabla height_m koristi sličan pristup za izračun visine osobe u metrima, čak i ako je visinu unijela u inčima.

BMI izračunava formulu težine kao {weight_kg / (height_m * height_m)}.

Naposljetku, izvješće uvjetno prilagođava poruku ispitaniku i prikazuje mu što je unio. ("Rekli ste da ste visoki 2 metra i da vagate 70 kg.")

Iako se to ne vidi dobro na gornjoj slici, weight_status koristi ugniježđene naredbe if() kako bi osobu kategorizirao od pothranjene do izrazito pretile. Njegovu jednadžbu možete vidjeti u prikazu Show Logic View.

U prozoru za uređivanje ovog pitanja možete vidjeti dvije stvari:

  1. Prilagodba mora okruživati izraze vitičastim zagradama
  2. Izrazi se mogu protezati kroz više redaka ako, kao u ovom slučaju, želite olakšati čitanje ugniježđene uvjetne logike.

Prilagođena pitanja, odgovori i izvješća

Napomena: Dinamička prilagodba možda neće raditi ako su opcije odgovora dostupne u padajućim izbornicima na istoj stranici pitanja. To je posljedica činjenice da prilagodba umeće oznaku <span> koja nije valjana unutar opcija izbornika.

Ovaj primjer prikazuje BMI izvješće.

Ovo je prozor za uređivanje istog pitanja.

Kao što vidite, sve u vitičastim zagradama tretira se kao izraz, pa je na prethodnoj slici istaknuto bojom (sintaksno označeno). Ako ste napravili tipfeler (primjerice pogrešno napisani ili nedefinirani nazivi varijabli ili funkcija), EM bi prikazao pogrešku, kao ovu, koja pokazuje da je height_unit nedefinirana varijabla (zapravo je height_units), a rnd() nedefinirana funkcija (ispravan naziv funkcije je round()). U oba slučaja pogreške su okružene crvenim okvirom kako bi ih bilo lakše uočiti i ispraviti.

Možete vidjeti i da brzo možete izraditi složena izvješća, poput tablice unesenih vrijednosti ili prilagođenih savjeta.

Imajte na umu da u svakoj prilagodbi izrazi moraju biti okruženi vitičastim zagradama kako bi LimeSurvey znao koji su dijelovi pitanja slobodan tekst, a koje treba obraditi putem Expression Managera.

Provjera

EM kontrolira rad većine naprednih opcija pitanja. One upravljaju aspektima kao što su minimalni/maksimalni broj odgovora, minimalne/maksimalne pojedinačne vrijednosti, minimalne/maksimalne zbrojene vrijednosti te provjera podudaraju li se unesene vrijednosti s navedenim obrascima niza znakova. Te napredne opcije pitanja i dalje unosite kao i prije. Međutim, svaka vrijednost u tim poljima sada se smatra izrazom, pa možete imati minimalne/maksimalne kriterije sa složenim uvjetnim odnosima prema drugim pitanjima.

U svim tim slučajevima, budući da se napredna opcija pitanja uvijek smatra izrazom, pri njezinu unosu ne koristite vitičaste zagrade.

Stranice Primjeri upitnika prikazuju mnogo radnih primjera upotrebe izraza za provjeru.

Uvod

LimeSurvey koristi novi modul Expression Manager (EM) koji će LimeSurveyu omogućiti podršku za složenije grananje, procjene, provjeru i prilagodbu. Zamijenit će način na koji LimeSurvey u pozadini upravlja zamjenama, uvjetima i procjenama. Također će znatno ubrzati obradu jer uklanja većinu čitanja iz baze podataka tijekom izvođenja. EM je razvio dr. Thomas White (TMSWhite).

Ova wiki stranica konačna je referenca za sintaksu i funkcionalnost Expression Managera.

Ključne definicije

  1. Izraz: Sve što je okruženo vitičastim zagradama
    • Pod uvjetom da nema razmaka odmah nakon otvorene zagrade ili prije zatvorene vitičaste zagrade
    • Sadržaj izraza EM izračunava, pa mogu sadržavati matematičke formule, funkcije te složenu obradu nizova znakova i datuma.
  2. Prilagodba: Ponekad se naziva i "piping", to je postupak uvjetne izmjene teksta
    • Imate pristup svim 'poljima zamjene', podacima o sudioniku i podacima odgovora.
    • Također imate lakši pristup pitanjima, odgovorima i njihovim svojstvima.
  3. Jednadžba relevantnosti: Novi atribut pitanja koji kontrolira vidljivost pitanja
    • Ako postoji jednadžba relevantnosti, pitanje se prikazuje samo ako se relevantnost izračuna kao istina.
    • Interno sve naredbe array_filter i array_filter_exclude postaju relevantnost na razini potpitanja
  4. Jednadžba kao vrsta pitanja: Nova vrsta pitanja koja sprema izračune ili izvješća u bazu podataka
    • Slična je pitanju Boilerplate, ali se njezin sadržaj sprema u bazu podataka čak i ako postavite "Uvijek sakrij ovo pitanje"
  5. Kôd pitanja: Ovo je poželjan naziv varijable za EM
    • Može biti opisni naziv koji označava svrhu pitanja, što olakšava čitanje složene logike
    • Valjani kodovi pitanja NE bi smjeli počinjati brojem, pa kada kôd pitanja koristite za numeriranje pitanja, jednostavno upotrijebite "q1", "q1a" ili "g1q2".
    • To je ono što trenutačno postaje naziv varijable ako izvezete podatke u SPSS ili R, pa ako radite statističku analizu, vjerojatno ste ga već učinili jedinstvenim.

Moram li koristiti EM?

Kratak odgovor je ne (ali i da).

EM je potpuno kompatibilan unatrag s postojećim upitnicima. Dakle, ako vam odgovara koristiti uvjete i procjene na način na koji ih je LimeSurvey koristio u verzijama <= 1.91+, to možete nastaviti činiti.

Međutim, EM u potpunosti zamjenjuje način na koji LimeSurvey interno rukuje uvjetima. Iako i dalje možete koristiti uređivač uvjeta za izradu i upravljanje uvjetima, LimeSurvey 1.92 pretvorit će ih u istovrijedne jednadžbe relevantnosti. U sklopu nadogradnje LimeSurvey 1.92 automatski će pretvoriti sve postojeće uvjete u jednadžbe relevantnosti.

Ovo bi vam trebalo omogućiti najbolje iz oba svijeta - LimeSurvey možete nastaviti koristiti kao i dosad, ali ćete vidjeti istovrijednu jednadžbu relevantnosti pa možete postupno prelaziti izravno na jednadžbe relevantnosti kad god procijenite da je to prikladno.

Mogu li miješati uvjete i relevantnost?

Da. Za neka pitanja možete koristiti uređivač uvjeta, a za druga uređivač relevantnosti. Uvjeti se automatski pretvaraju u relevantnost kada spremite pitanje.

Napomena: pretpostavljamo da, ako koristite uređivač uvjeta, želite da ti uvjeti prepišu svaku ručno unesenu jednadžbu relevantnosti. Stoga, ako imate postojeće uvjete i želite ručno urediti relevantnost, prvo izbrišite uvjete za to pitanje. Konkretno, kopirajte generiranu jednadžbu relevantnosti u uređivač teksta, pomoću izbornika Uvjeti izbrišite sve uvjete za to pitanje (čime će se izbrisati i relevantnost), zatim uredite pitanje i zalijepite generiranu jednadžbu relevantnosti iz uređivača teksta natrag u polje relevantnosti za to pitanje (i spremite pitanje). Ako bude dovoljno zahtjeva za brisanjem uvjeta bez brisanja generirane jednadžbe relevantnosti, mogli bismo dodati postupak skupne pretvorbe.

Kako odabrati između uvjeta i relevantnosti?

Evo popisa prednosti i nedostataka svakog pristupa:

Pristup Prednosti Nedostaci
Uvjeti 1. Ugodno grafičko sučelje za izradu jednostavnih uvjeta
2. Grafičko sučelje je dobro dokumentirano i poznato timu za podršku
1. Podržava samo jednostavne usporedbe i slabo podržava I/ILI uvjete
2. Kaskadni uvjeti rade nepouzdano
3. Sporo - opterećuje bazu podataka pa može usporiti duge upitnike
4. Zabilježeni su problemi s ponovnim učitavanjem uvjeta
5. Grafičko sučelje se loše skalira kada postoje desetci, stotine ili tisuće pitanja
6. Pretvorba papirnatih upitnika može biti spora jer se moraju koristiti SGQA nazivi
7. Za složeno grananje često je potreban programer koji će napisati prilagođenu logiku
Relevantnost 1. Podržava vrlo složenu logiku, uključujući 80+ funkcija i matematičke/tekstualne operatore
2. Savršena podrška za kaskadnu logiku
3. Brzo - nema dodatnih poziva bazi podataka, pa podržava upitnike s 1000+ pitanja
4. Nema problema s ponovnim učitavanjem logike jer ne zahtijeva SGQA kôdove
5. Isticanje sintakse skalira se na upitnike s 1000+ pitanja
6. Jednostavno i brzo za skupine koje žele digitalizirati postojeće papirnate upitnike.
7. Jednostavno podržava polustrukturirane intervjue i epidemiološke upitnike bez potrebe za programerima
1. Nema grafičkog sučelja za jednostavne uvjete - umjesto toga koristite isticanje sintakse
2. Novo je, pa timovi za podršku još nisu savladali EM.

Zaključak je da, ako ste zadovoljni načinom rada LimeSurvey 1.91+, nema razloga mijenjati ono što radite.

Koje su još prednosti korištenja EM-a?

Evo nekoliko drugih razloga zbog kojih biste mogli koristiti EM.

  1. Izračuni - možete izraditi bilo koji izračun koji možete zamisliti:
    • Imate pristup svim uobičajenim matematičkim operatorima i funkcijama
    • Imate pristup 70+ matematičkih funkcija te funkcija za obradu datuma i teksta
    • Programerima je prilično jednostavno dodati nove funkcije ako ih korisnici trebaju
  2. Spremanje izračuna u bazu podataka
    • Sada možete izračunati jednostavne i složene izračune i/ili rezultate skala I spremiti ih u bazu podataka bez potrebe za JavaScriptom.
    • Za to koristite vrstu pitanja Jednadžba.
  3. Procjene
    • Sada možete izraditi procjene ili rezultate skala iz bilo koje vrste pitanja, a ne samo iz podskupa koji je ranije bio podržan
    • Možete koristiti prilagodbu teksta (tailoring) za prikaz tekućih ili ukupnih rezultata procjene gdje god je potrebno - čak i na istoj stranici
    • Imate veću kontrolu nad izvještajima generiranim na temelju tih rezultata procjene
    • Rezultate procjene možete spremiti u bazu podataka bez potrebe za JavaScriptom
    • Rezultate procjene možete sakriti bez potrebe za JavaScriptom ili CSS-om
  4. Polja za zamjenu
    • Koristite kôd pitanja za umetanje vrijednosti iz odgovora na prethodna pitanja - tako je lakše čitati i provjeravati.
  5. Prilagodba teksta (tailoring) - možete uvjetno prikazati tekst na temelju drugih vrijednosti
    • Koristite odgovarajući oslov za ispitanika, npr. ("Poštovani [g./gđo] Horvat")
    • Ispisujte gramatički ispravne rečenice kada su važni jednina/množina: (npr. "Imate 1 dijete" naspram "Imate 2 djece")
    • Prikladno konjugirajte glagole i deklinirajte imenice prema spolu i broju ispitanika.
  6. Novi atributi varijabli - za prilagodbu teksta možete pristupiti sljedećem:
    • (bez sufiksa) - alias za qcode.code
    • .code - odabrani kôd odgovora za pitanje ako je relevantno (inače prazno) ili tekstualna vrijednost ako pitanje nije kodirano
    • .NAOK - isto kao .code, ali može biti dio izračuna ili popisa čak i ako je nerelevantno
    • .value - vrijednost procjene za pitanje ako je relevantno (inače prazno) ili tekstualna vrijednost ako pitanje nije kodirano -- dostupno ako su procjene omogućene za upitnik, inače je uvijek nula
    • .valueNAOK - isto kao .value, ali može biti dio izračuna ili popisa čak i ako je nerelevantno
    • .shown - odgovor onako kako je prikazan korisniku
    • .qid - ID pitanja
    • .gid - ID skupine
    • .sgqa - SGQA vrijednost pitanja
    • .jsName - ispravan naziv JavaScript varijable za pitanje, bez obzira je li definirano na ovoj ili na drugoj stranici
    • .qseq - redni broj pitanja (počevši od 0)
    • .gseq - redni broj grupe (počevši od 0)
    • .mandatory - je li pitanje obavezno (Y/N)
    • .question - tekst pitanja
    • .relevance - jednadžba relevantnosti za pitanje
    • .grelevance - jednadžba relevantnosti za grupu
    • .relevanceStatus - je li pitanje trenutno relevantno ili ne (boolean (može se razlikovati u PHP-u i JS-u))
    • .type - vrsta pitanja (jednoznakovni kôd)
  7. Dinamičke promjene na stranici
    • Sva relevantnost, izračuni i prilagodba teksta rade dinamički na stranici - promjene vrijednosti odmah ažuriraju stranicu
    • Tako pitanja dinamički nestaju/pojavljuju se ovisno o tome jesu li relevantna
    • Pitanja se također dinamički prilagođavaju na temelju odgovora na stranici, pa možete vidjeti tekuće zbrojeve, prilagođene rečenice i prilagođene izvještaje.
  8. Novi ekran za unos podataka
    • Uz postojeći sustav unosa podataka možete jednostavno koristiti Upitnik-Sve-U-Jednom.
    • To podržava relevantnost i prilagodbu teksta na stranici, pa osoblje za unos podataka može brzo prelaziti tipkom Tab i morat će unositi samo relevantne odgovore
    • To može biti ključno ako osoba koja unosi podatke treba vidjeti prilagodbu teksta, koja je također dinamička.
  9. Uklanja potrebu za većinom prilagođenog JavaScripta
    • EM jednostavno podržava složene izračune, bodovanje, prilagodbu teksta i uvjetnu logiku.
    • Neke stvari i dalje će zahtijevati JavaScript (poput prilagođenih rasporeda i uvjetnog skrivanja podelemenata pitanja), ali vaš JavaScript može koristiti EM funkcije kako biste pitanjima pristupali putem Qcode-a umjesto SGQA-a i pristupali svim gore navedenim svojstvima pitanja.

Koje su još korisne nove značajke omogućene EM-om?

Bez obzira nastavljate li koristiti uređivač uvjeta ili ručno pišete jednadžbe relevantnosti, dobivate ove dodatne prednosti:

  1. Možete stvoriti složenije kriterije provjere
    • Svi napredni atributi pitanja (poput max_answers, min_num_value_n, max_num_value) mogu koristiti izraze. Tako se vaši kriteriji minimuma/maksimuma mogu jednostavno prilagoditi prema prethodnim odgovorima, čak i ako se nalaze na istoj stranici.
    • EM obrađuje i svu provjeru temeljenu na regularnim izrazima, pa možete pouzdano kombinirati preg atribute pitanja i atribute pitanja temeljene na jednadžbama.
  2. Jednostavno premještanje (ili brisanje) pitanja i grupa
    • Prije verzije 1.92 nije bilo moguće promijeniti redoslijed pitanja ili grupa ako je LimeSurvey smatrao da bi takva promjena mogla pokvariti uvjete u kojima se koriste. Isto tako, pitanja se nisu mogla izbrisati ako su o njima ovisila druga pitanja.
    • Zahvaljujući EM-ovom isticanju sintakse lako je vidjeti i provjeriti pokušavate li koristiti pitanja prije nego što su deklarirana. Zato sada možete promijeniti redoslijed ili izbrisati pitanja i grupe kad god želite. EM će ažurirati isticanje sintakse kako bi vam pokazao moguće pogreške.
    • Prikaz promjene redoslijeda pitanja poboljšan je radi lakšeg pregleda. Sada prikazuje jednadžbu relevantnosti pitanja i prilagodbu teksta, pa odmah možete vidjeti postaje li neka varijabla ružičasta (što znači da se koristi prije deklaracije).
  3. Indeks navigacije po pitanjima/grupama uvijek je dostupan i točan
    • Prije verzije 1.92 ti indeksi nisu bili dostupni ako su postojali složeni uvjeti
    • S EM-om možemo jamčiti da su točni.
    • Ispitanici se čak mogu vratiti na prethodno pitanje, promijeniti odgovor, a zatim ići naprijed (ili poslati upitnik)
      • Pri skoku naprijed EM će ponovno provjeriti sva pitanja/grupe između.
      • Ako neka pitanja postanu nerelevantna, u bazi podataka bit će postavljena na NULL kako bi vaši podaci bili interno dosljedni
      • Ako neka pitanja postanu relevantna ili novo ne zadovolje pravila obaveznosti ili provjere, EM će se zaustaviti na toj stranici i natjerati korisnika da odgovori na ta pitanja prije skoka na krajnje odredište.
  4. Automatska pretvorba uvjeta u relevantnost
    • Kada nadogradite bazu podataka, za sve postojeće upitnike koji imaju uvjete bit će generirane jednadžbe relevantnosti
    • Kad god uvezete upitnik, po potrebi će se stvoriti jednadžbe relevantnosti
    • Kad god dodate, izbrišete ili izmijenite uvjete, EM će generirati odgovarajuću jednadžbu relevantnosti.
  5. Praktično isticanje sintakse
    • Kad EM prikazuje jednadžbu relevantnosti, prikazat će Qcode, čak i ako ste unijeli SGQA kôd, jer pretpostavljamo da je tako lakše čitati.
    • Sve varijable obojene su tako da pokazuju jesu li deklarirane prije ili poslije trenutnog pitanja (ili prije ili poslije trenutne grupe). Tako brzo možete uočiti i ispraviti slučajeve u kojima varijable koristite u relevantnosti (uključujući array_filter), prilagodbi teksta ili jednadžbama provjere prije njihove deklaracije.
    • Osim toga, ako mišem prijeđete preko obojene varijable, vidjet ćete najvažnije metapodatke o tom pitanju. To uključuje redni broj grupe, redni broj pitanja, Qcode, tekst pitanja i sve dostupne ponuđene odgovore (ako je riječ o vrsti pitanja s popisom odgovora).
      • Popis ponuđenih odgovora koristi ovu sintaksu: 'answers':{key:val, ... }.
      • key ima sintaksu 'scale~code', gdje je scale skala odgovora (npr. za dvostruku skalu), a code kôd odgovora.
      • val ima sintaksu 'value~shown', gdje je value vrijednost procjene (ako se koriste procjene, inače code) (npr. Qcode.value), a shown je prikazana vrijednost koju vidi ispitanik (npr. Qcode.shown)
      • To znači da mnogi upitnici mogu koristiti izračune bez načina rada procjene. Ako imate popis odgovora koji su jedinstveni, nedecimalni i nenegativni, jednostavno možete provoditi izračune nad vrijednostima Qcode.code.
  6. Jednostavan pregled cjelokupne logike i sadržaja upitnika
    • Postoji nova značajka Prikaži logiku upitnika koja omogućuje da sve o upitniku (ili grupi ili pitanju) vidite na jednoj stranici.
    • Prikazuje detalje na razini grupe, pitanja, potpitanja i odgovora za odabrani opseg (upitnik, grupa ili pitanje)
    • Prikazuje i relevantnost, relevantnost na razini potpitanja (za array_filter i array_filter_exclude), generiranu jednadžbu provjere (za preg i sva pravila provjere poput min/maks zbroja/broja vrijednosti) te sve neprazne atribute pitanja.
    • Sve je istaknuto sintaksom kako biste mogli vidjeti moguće sintaktičke pogreške (poput nebalansiranih zagrada ili korištenja varijabli prije njihove deklaracije)
    • Isticanje sintakse omogućuje brzu navigaciju i uređivanje upitnika.
      • Ako kliknete na naziv varijable, otvara se prozor preglednika (ili kartica) koji prikazuje to pitanje i omogućuje njegovo uređivanje.
      • Ako kliknete na naziv grupe, otvara se prozor preglednika (ili kartica) s prikazom promjene redoslijeda grupa kako biste lako mogli premještati pitanja.
      • Svi atributi pitanja također su istaknuti sintaksom. Tako možete postavljati i vidjeti izraze unutar naprednih opcija pitanja (primjerice, temeljiti maks/min broj/zbroj vrijednosti na izrazu)
    • Autor EM-a koristio je sličan prikaz (malo urednije izvedbe) kako bi njegovi suradnici epidemiolozi i etičko povjerenstvo mogli provjeriti i odobriti upitnike s tisućama pitanja u visoko razgranatim i prilagođenim strukturiranim intervjuima

Početak rada

Najbolji način za početak rada s EM-om je:

  • Instalirajte najnoviju stabilnu verziju s http://www.limesurvey.org/en/download
  • Uvezite i istražite primjere upitnika.
  • Istražite slučajeve upotrebe i upute i primjere korak po korak.
  • Pročitajte EM dokumentaciju (ovu stranicu)
  • Isprobajte ugrađeni EM testni skup
    • Iz bilo kojeg upitnika, pod alatima, odaberite EM opciju
    • Dostupne funkcije navodi 70+ funkcija i sintaksu
    • Jedinični testovi izoliranih izraza
      • prikazuje primjere korištenja svih EM funkcija i operatora te rezultate u PHP-u i JavaScriptu
      • imajte na umu da nekoliko funkcija daje različite rezultate u PHP i JavaScript verzijama, pa vam ova stranica omogućuje da svoju EM logiku planirate u skladu s tim.

Koju funkcionalnost Expression Manager proširuje/zamjenjuje? (LimeSurvey <= 1.91+)

Uvjeti => Relevantnost

Uvjeti su kontrolirali koja su pitanja vidljiva. Opća sintaksa bila je SGQA operator Vrijednost, primjerice 111X2X3 == "Y". Uvjeti su se mogli povezivati s AND ili OR, ali miješanje AND i OR bilo je teško. Sami uvjeti pohranjivali su se u zasebnu tablicu, a velik dio LimeSurveyjeva koda bio je posvećen upravljanju uvjetima. Zbog opsežnog pristupa bazi podataka obrada velikog broja uvjeta mogla je uzrokovati primjetne probleme s performansama. Nadalje, nakon što ste pitanjima ili grupama dodijelili uvjete, često im nije bilo dopušteno mijenjati redoslijed niti ih brisati.

Procjene => Jednadžbe i mikroprilagodba teksta

Procjene omogućuju korisnicima stvaranje skala bodova iz skupa pitanja. Međutim, nisu se mogle dinamički mijenjati na trenutnoj stranici, a njihove vrijednosti nisu se pohranjivale u bazu podataka.

Zamjene => Mikroprilagodba teksta

Korisnici su mogli prilagoditi neke poruke i pitanja na temelju prethodnih odgovora. Na primjer, pitanje je moglo glasiti {TOKEN:FIRSTNAME}, rekli ste da je {SPORT.shown} vaš omiljeni sport. Međutim, nije bilo moguće provesti uvjetnu prilagodbu (primjerice reći "g." ili "gđa" ovisno o spolu osobe), niti sprezati glagole ili mijenjati imenice po padežima bez složenog JavaScripta. Autori su mogli izraditi upitnike koji su izgledali kao da prilagođavaju pitanja, ali to je zahtijevalo zasebna pitanja za svaku permutaciju i složene uvjete za odlučivanje koja će se pitanja prikazati.

Provjera

Pitanja su se mogla provjeravati regularnim izrazima ili minimalnim/maksimalnim vrijednostima, ili tako da odgovor služi kao minimalna ili maksimalna vrijednost. Međutim, provjere se nisu mogle temeljiti na izračunima drugih varijabli bez složenog JavaScripta.

Jednadžbe

Jednadžbe nisu bile podržane bez složenog JavaScripta.

Vrsta pitanja Jednadžba

Jednadžbe se nisu mogle spremiti u bazu podataka (npr. konačni rezultat procjene) bez složenog JavaScripta.

Kako će Expression Manager zamijeniti/proširiti tu funkcionalnost?

Expression Manager je novi osnovni modul unutar LimeSurveyja koji znatno olakšava podršku složenoj funkcionalnosti za koju je prije bio potreban prilagođeni JavaScript. Također zamjenjuje način na koji LimeSurvey trenutno upravlja uvjetima i procjenama.

Nova terminologija pri spominjanju Expression Managera (EM)

EM svoju funkcionalnost "promatra" kroz sljedeće pojmove:

  • Grananje temeljeno na relevantnosti - ako je pitanje relevantno, postavi se, inače ne (npr. postane nevidljivo i u bazi podataka označi se kao NULL). Postoji novo polje Relevantnost za sve vrste pitanja, kao i za svaku grupu (tako da možete primijeniti skup uvjeta na cijelu grupu bez kopiranja istog uvjeta na svako pitanje i/ili kombinirati uvjetnu logiku na razini grupe i pitanja).
  • Prilagodba teksta - Kad znate koja pitanja treba postaviti, prilagodba teksta (ponekad zvana piping) određuje kako pitanje treba biti postavljeno. Tako možete podržati ne samo jednostavnu zamjenu (poput {TOKEN:FIRSTNAME}), nego i sprezanje glagola i mijenjanje imenica po padežima ovisno o spolu ili broju vaših ispitanika. Također možete promijeniti poruku koju upućujete ispitaniku ovisno o tome jesu li odgovorili (ili kako su odgovorili) na druga pitanja.
  • Jednadžbe - EM dodaje novu vrstu pitanja zvanu Jednadžba koja pohranjuje rezultat izraza. Rezultati tih jednadžbi izračunavaju se i zapisuju u bazu podataka, čak i ako ih sakrijete na stranici. Stoga su korisne za skrivene izračune bodova, navigaciju temeljenu na složenim jednadžbama, procjene i izvještaje koji se trebaju generirati i biti lako dostupni u bazi podataka.

Relevantnost i kaskadna relevantnost

Svaka vrsta pitanja sada ima opciju Relevantnost koja kontrolira hoće li se pitanje prikazati. EM obrađuje svaku jednadžbu relevantnosti redoslijedom kojim se pitanja pojavljuju u upitniku. Ako je izraz istinit (ili nedostaje - radi podrške starijim upitnicima), pitanje će se prikazati. Ako nije relevantno, pitanje će biti skriveno, a vrijednost će u bazi podataka biti postavljena na NULL. Ako u grupi nema relevantnih pitanja, cijela grupa bit će preskočena.

Štoviše, ako je bilo koja varijabla unutar izraza nerelevantna, izraz se uvijek ocjenjuje kao netočan. To omogućuje kaskadnu relevantnost, pa ne morate pisati vrlo duge jednadžbe relevantnosti za svako pitanje.

Recimo da imate 5 pitanja Q1-Q5 i želite prikazati Q2 samo ako je odgovoreno na Q1, Q3 ako je odgovoreno na Q2 itd. Jednadžbe relevantnosti mogle bi biti:

Kôd pitanja Relevantnost Pitanje
Q1 1 Kako se zovete?
Q2 Q1 {Q1}, koliko imate godina?
Q3 Q2 Dakle, imate {Q2} godina. Jeste li u braku?
Q4 Q3 == "Y" {Q1}, koliko dugo ste u braku?
Q5 Q4 Koliko djece imate, {Q1}?

Izračuni relevantnosti rade i u JavaScriptu - pa biste sva gornja pitanja mogli staviti na jednu stranicu i sve bi radilo prema očekivanju. Zapravo, EM u potpunosti zamjenjuje način na koji se obrađuju formati upitnika po upitniku, po grupi i po pitanju. Svi sada koriste potpuno isti mehanizam navigacije pa rade identično bez obzira na stil upitnika.

Dok god ste na istoj stranici, svi podaci koje ste unijeli i dalje će biti tu, samo skriveni. Dakle, ako unesete neke informacije, zatim odaberete opciju zbog koje postanu nerelevantne, pa ih ponovno učinite relevantnima, vaši odgovori i dalje će biti dostupni. Međutim, čim prijeđete na drugu stranicu, svi nerelevantni odgovori bit će izgubljeni radi očuvanja integriteta skupa podataka.

Relevantnost na razini grupe

Expression Manager podržava i relevantnost na razini grupe. Time je jednostavnije implementirati petlje. Recimo da želite prikupiti informacije o najviše 10 entiteta (poput proizvoda ili osoba u kućanstvu), pri čemu prvo utvrdite za koliko je entiteta potrebno dodatno pitanje (na primjer pitanjem koliko osoba živi u kućanstvu ili tako da ispitanici s dugog popisa označe koji im se proizvodi sviđaju). Nakon što znate za koliko je entiteta potrebno dodatno ispitivanje, možete koristiti relevantnost na razini grupe poput {count >= 1}, {count >=2}, ... {count >= 10} za svaku od 10 grupa dodatnih pitanja. Unutar svake grupe možete imati uvjetnu logiku na razini pitanja (npr. dodatna pitanja specifična za spol ili dob svakog predmeta). Jednadžbe relevantnosti na razini pitanja i grupe povezuju se operatorom I (AND) kako bi se utvrdilo što treba prikazati.

Prilagodba / Piping

Sve unutar vitičastih zagrada sada se tretira kao izraz (uz jednu iznimku opisanu u nastavku). Izrazi imaju pristup svim LimeReplacementFields poljima, svim varijablama (putem nekoliko aliasa), svim uobičajenim operatorima u jednadžbama (matematičkim, logičkim i usporednim) te desecima funkcija (koje dinamički rade čak i na strani klijenta).

Pomoću tih jednadžbi možete, primjerice:

  1. Uvjetno prikazivati prilagođene poruke ispitanicima na temelju prethodnih odgovora
  2. Izraditi procjene i prikazati rezultate procjene (ili uvjetno granati upitnik ili prikazivati poruke) na temelju tih rezultata, sve bez korištenja samog modula za procjene
  3. Konjugirati glagole i deklinirati imenice unutar pitanja, odgovora i izvještaja.
  4. Prikazati sažetke odgovora prije stranice "Prikaži svoje odgovore" na kraju upitnika

Jednadžbe

Postoji nova vrsta pitanja pod nazivom Jednadžba. Ona je slična pitanju Boilerplate, osim što vrijednost onoga što se prikazuje sprema u bazu podataka. Dakle, ako tekst pitanja vrste Jednadžba sadrži izračun procjene, ta će se vrijednost spremiti u bazu podataka u varijablu koja se može prikazati u javnoj ili privatnoj statistici.

Time se rješava čest zahtjev za spremanjem rezultata procjene u bazu podataka

Sintaksa

Sve što se nalazi unutar vitičastih zagrada sada se smatra izrazom (uz jednu iznimku: ne smije biti razmaka na početku ni na kraju - to je potrebno kako Expression Manager ne bi pokušavao obrađivati ugrađeni JavaScript).

Napomena: izrazi se smiju protezati kroz više redaka, sve dok nema razmaka nakon otvorene vitičaste zagrade ili prije zatvorene vitičaste zagrade. To je osobito korisno za ugniježđene naredbe if() poput ove:

{if(is_empty(PFTotals),
 '',
 if(PFTotals >= -5 && PFTotals <= -4,
   'Very Soft',
   if(PFTotals >= -3 && PFTotals <= -2,
     'Soft',
     if(PFTotals == -1,
       'Somewhat Soft',
       if(PFTotals == 0,
         'Moderate',
         if(PFTotals == 1,
           'Somewhat Hard',
           if(PFTotals >= 2 && PFTotals <= 3,
             'Hard',
             if(PFTotals >= 4 && PFTotals <= 5,
               'Very Hard',
               ''
             )
           )
         )
       )
     )
   )
 )
)}
Expression Manager podržava sljedeću sintaksu:
  • Sve standardne matematičke operatore (npr. +,-,*,/,!)
  • Sve standardne operatore usporedbe (npr. <,<=,==,!=,>,>=, plus ekvivalente: lt,le,eq,ne,gt,ge)
  • Zagrade (kako biste mogli grupirati podizraze)
  • Uvjetne operatore (npr. &&,| | i ekvivalente: and,or)
  • Nizove znakova u jednostrukim i dvostrukim navodnicima (u svaki se mogu ugraditi nizovi s drugom vrstom navodnika)
  • Operator zarez (omogućuje popis izraza pri čemu se vraća samo konačni rezultat)
  • Operator dodjele (=)
  • Unaprijed definirane varijable (za pozivanje na pitanja, atribute pitanja i odgovore) - npr. svi SGQA kodovi
  • Unaprijed definirane funkcije (već ih ima 70+, a lako je dodati nove)

Operatori

Sintaksa EM-a slijedi uobičajeni prioritet operatora:

Razina Operator(i) Opis
1 () zagrade za grupiranje ili pozivanje funkcija
2 ! - + unarni operatori: negacija (not), promjena predznaka, unarni plus
3 * / množenje, dijeljenje
4 + - zbrajanje, oduzimanje
5 < <= > >= lt le gt ge relativne usporedbe
6 == != eq ne usporedbe jednakosti
7 and logičko I (AND)
8 or logičko ILI (OR)
9 = operator dodjele
10 , operator zarez

Upozorenje o operatoru plus (+)

Radi dosljednosti između JavaScripta i PHP-a, operator plus (+) zbraja ako su oba operanda brojevi, a spaja (konkatenira) ako su oba dijela nizovi znakova koji nisu brojevi. No preporučujemo korištenje funkcije join() za spajanje i funkcije sum() za zbrajanje, jer tako jasnije izražavate svoju namjeru i izbjegavate neočekivane rezultate ako ste očekivali nizove znakova, a dobili brojeve (ili obrnuto).

Upozorenje o nepodudaranju broja i niza znakova te abecednoj usporedbi

Kada vrijednosti uspoređujete relativnim usporedbama ili usporedbama jednakosti, obratite pozornost na nepodudaranje tipova. Vrijednost koju je unio korisnik ili odabrani kôd odgovora može se koristiti kao broj ako je jasno da je broj. Ako jednu od vrijednosti okružite znakom ", usporedba će se obaviti kao tekstualna (abecedna usporedba). Ako želite usporedbu obaviti numerički, nikada ne stavljajte broj u navodnike, ".

Na primjer, Q0.NAOK > "50" je istina ako je Q0.NAOK numeričko pitanje s vrijednošću 9. To je zato što će operator > pretpostaviti abecednu, a ne numeričku usporedbu.

Da biste bili sigurni da uspoređujete cjelobrojnu vrijednost, možete koristiti intval(Q0.NAOK) > 50, samo imajte na umu da ako Q0.NAOK nije broj (prazan je ili je niz znakova), onda je intval(Q0.NAOK) == 0. Za usporedbu nizova znakova ("A" < "B") koristite izravno strcmp: strcmp(Q0.NAOK,"B") ili strcmp(Q0.NAOK,"A5").

Oprez pri korištenju operatora dodjele (=)

Napomena: operatore dodjele treba izbjegavati osim ako je to apsolutno nužno jer mogu uzrokovati neočekivane nuspojave. Na primjer, ako promijenite vrijednost prethodnog odgovora, kaskadna relevantnost i logika provjere između tog pitanja i trenutnog pitanja neće se ponovno izračunati, pa možete dobiti međusobno nedosljedne podatke (npr. pitanja koja ostaju odgovorena, a trebala su biti postavljena na NULL, ili pitanja koja su preskočena, a trebala su biti odgovorena). Općenito, ako varijabli želite dodijeliti vrijednost, trebali biste izraditi pitanje vrste Jednadžba i izrazom postaviti njegovu vrijednost. Međutim, ponekad ljudi doista trebaju ovaj operator, pa smo ga učinili dostupnim.

Kako bismo vas upozorili na ovaj operator, u sintaksi jednadžbi prikazuje se crvenim fontom (da ga ne biste zamijenili s "==")

Korištenje operatora dodjele

Glavni razlozi zbog kojih biste mogli htjeti koristiti dodjelu su:

  • Trebate postaviti zadanu vrijednost za pitanje koje ne prihvaća zadane vrijednosti putem jednadžbe (poput popisa s radio-gumbima, gdje korisničko sučelje omogućuje odabir jedne od opcija odgovora, ali ne i unos jednadžbe). Budite oprezni, jer LimeSurvey neće moći provjeriti generira li vaša jednadžba jedan od dopuštenih odgovora za to pitanje.
  • Trebate prisilno promijeniti odgovor na prethodno pitanje na temelju kasnijeg odgovora
  • Trebate složenu kvotu: korištenjem jednog skrivenog pitanja s jednim odabirom za kvotu i postavljanjem njegove vrijednosti dodjelom
  • itd...

Za tu svrhu možete koristiti cijeli sustav Expression Managera.

  Dodjela se obavlja samo u PHP-u. Ona ne ažurira nikakve vrijednosti na istoj stranici, nego samo kada korisnik prijeđe na drugu stranicu pomoću gumba Sljedeće, Prethodno, Spremi ….


  Ako u tu svrhu ne koristite vrstu pitanja jednadžba: dodjela se obavlja tek nakon što se obradi logika trenutne stranice. Preporučena metoda je da uvijek koristite pitanje vrste jednadžba.


Nekoliko primjera:

  • Postavljanje odgovora na pitanje vrste Kratki tekst malim slovima: {QCODE=strtolower(QCODE.NAOK)}
  • Postavljanje zadanog odgovora na pitanje vrste niz na početku upitnika: {Q1_SQ1=((is_empty(Q1_SQ1.NAOK),"A99",Q1_SQ1.NAOK)}
  • Postavljanje zadanog odgovora na pitanje vrste niz tekstova na početku upitnika: {Q1_SQY1_SQX1 = ((is_empty(Q1_SQY1_SQX1.NAOK),"Inserted answer", Q1_SQY1_SQX1.NAOK)}
  • Postavljanje odgovora s uvjetom: {QCODE=if(YesNo="Y","A1","")}

XSS sigurnost

Kada je XSS zaštita omogućena, neke značajke upravitelja izraza (Expression Manager) ne mogu se koristiti:

  • otvaranje HTML oznake u jednom izrazu, a zatvaranje u drugom izrazu
  • korištenje složenog izraza u URL-u.

Primjer i zaobilazno rješenje

  • {if( 1 ,"<strong>","")}information{if( 1 ,"</strong>","")} ne radi uz XSS zaštitu, umjesto toga možete koristiti {if(1,"<strong>information</strong>","information")}
  • <a href="/script.php?value={if(QCODE == "Y","yes","no")}">next</a>, ovdje možete koristiti pitanje tipa jednadžba jer je korištenje cjelovitog kôda pitanja u redu: <a href="/script.php?value={EQUATION.NAOK}">next</a>

Pristup varijablama

Expression Manager omogućuje pristup samo za čitanje svim varijablama koje bi nam mogle zatrebati. Zbog povratne kompatibilnosti omogućuje pristup sljedećem:

  • TOKEN:xxx - vrijednost TOKEN-a (npr. TOKEN:FIRSTNAME, TOKEN:ATTRIBUTE_5) (samo za upitnike koji NISU anonimni).
  • QCODE.shown - prikazana vrijednost odgovora (npr. "Da") pomoću Expression Managera.
  • Sve {XXX} vrijednosti koje koriste predlošci.
  • U tekstu pitanja možete koristiti {QID}, koji se zamjenjuje ID-om pitanja, i {SGQ}, koji se zamjenjuje SGQA-om pitanja

Osim toga, Expression Manager omogućuje da se na varijable pozivate pomoću kôda pitanja (stupac 'title' u tablici pitanja u bazi podataka). To je ujedno i oznaka varijable koja se koristi pri izvozu podataka u SPSS, R ili SAS. Na primjer, ako imate pitanja o imenu, dobi i spolu, te varijable možete nazvati name, age i gender umjesto 12345X13X22, 12345X13X23 i 12345X13X24. Tako su jednadžbe svima čitljivije, a njihova logika lakše provjerljiva, a pitanja možete premještati bez potrebe za praćenjem brojeva grupa ili pitanja.

Važno: Sigurno je pozivati se samo na varijable koje se nalaze na prethodnim stranicama ili u prethodnim pitanjima.

Nadalje, Expression Manager omogućuje pristup mnogim svojstvima pitanja:


Sintaksa Značenje Primjer Rezultat primjera
Qcode alias za Qcode.code {implode(',',name,gender)} 'Tom','M'
Qcode.code odabrani kôd odgovora za pitanje ako je relevantno (inače prazno), ili tekstualna vrijednost ako pitanje nije kodirano {implode(',',name.code,gender.code)} 'Tom','M'
Qcode.NAOK isto kao Qcode - pogledajte raspravu o NAOK-u {gender.NAOK} 'M'
Qcode.value vrijednost procjene za pitanje ako je relevantno (inače prazno), ili tekstualna vrijednost ako pitanje nije kodirano {gender.value} '1'
Qcode.valueNAOK isto kao Qcode.value - pogledajte raspravu o NAOK-u {gender.valueNAOK} '1'
Qcode.shown prikazana vrijednost za pitanje {implode(',',name.shown,gender.shown)} 'Tom','Male'
Qcode.question tekst pitanja {gender.question} 'What is your gender?'
Qcode.mandatory je li pitanje obavezno (Y/N) {gender.mandatory} 'N'
Qcode.qid interni broj pitanja (ne redni broj) {gender.qid} 337
Qcode.type vrsta pitanja {gender.type} 'G'
Qcode.jsName ispravan javascript naziv pitanja, bez obzira je li deklarirano na ovoj stranici ili izvan nje {gender.jsName} 'java1827X3X337'
Qcode.gid interni broj grupe (ne redni broj) {gender.gid} 3
Qcode.qseq redni broj pitanja, počevši od 0 {gender.qseq} 5
Qcode.gseq redni broj grupe, počevši od 0 {gender.gseq} 1
Qcode.relevanceStatus je li pitanje trenutno relevantno (0 ili 1) {gender.relevanceStatus} 1
Qcode.relevance jednadžba relevantnosti na razini pitanja {gender.relevance} '!is_empty(name)'
Qcode.grelevance jednadžba relevantnosti na razini grupe {gender.grelevance} 'num_children >= 5'
Qcode.sgqa SGQA vrijednost za ovo pitanje {gender.sgqa} '1827X3X337'

Problem s HTML uređivačem

  Ovaj je problem riješen nakon verzije 2.05 build 140803


Ako koristite HTML uređivač, neki se znakovi zamjenjuju HTML entitetima.

  • & u &amp;
  • < u &lt;
  • > u &gt;

Ako koristite HTML uređivač, morate koristiti:

  • and za &
  • lt za <
  • le za <=
  • gt za >
  • ge za >=

Imenovanje Qcode varijabli

Ovdje su detalji o tome kako konstruirati Qcode (i pristupiti nekim svojstvima) prema vrsti pitanja. Općenito se Qcode konstruira ovako:

 QuestionCode . '_' . SubQuestionCode . '_' . ScaleId

Kôd potpitanja i ID skale koriste se ili ne ovisno o vrsti pitanja - pogledajte tablicu u nastavku. Za comment i other, kôdovi pitanja su QuestionCode_comment i QuestionCode_other

Vrsta Opis Kôd Potpitanja Opcije odgovora Skale Kôd odgovora Prikazani odgovor Relevantnost
5 Izbor 5 opcija (radio-gumbi) Q1 1-5 {Q1} {Q1.shown} {Q1==3}
B Niz (izbor u 10 opcija) radio-gumbi Q2 L1-L6 1-10 {Q2_L2} {Q2_L2.shown} {Q2_L2==7}
A Niz (izbor u 5 opcija) radio-gumbi Q3 1-5 1-5 {Q3_1} {Q3_1.shown} {Q3_1>=3}
1 Niz (fleksibilne oznake) dvostruka skala Q4 sq1-sq5 0:a1-a3 1:b1-b3 {Q4_sq1_0} {Q4_sq1_1.shown} {Q4_sq1_1=='b2'}
H Niz (fleksibilno) - format stupaca Q5 1-5 s,m,t {Q5_1} {Q5_1.shown} {Q5_1=='s'}
F Niz (fleksibilno) - format redaka Q6 F1-F5 1-5 {Q6_F3} {Q6_F3.shown} {Q6_F3==4}
E Niz (Povećaj/Isto/Smanji) radio-gumbi Q7 1-7 I,S,D {Q7_4} {Q7_4.shown} {Q7_4=='D'}
: Niz (višestruko fleksibilno) 1 do 10 Q8 ls1,todo,ls2 min,max,avg {Q8_ls1_max} {Q8_ls2_avg.shown} {Q8_ls2_min==7}
; Niz (višestruko fleksibilno) tekst Q9 hp,st,sw 1st,2nd,3rd {Q9_hp_3rd} {Q9_hp_3rd.shown} {Q9_hp_3rd=='Peter'}
C Niz (Da/Nesigurno/Ne) radio-gumbi Q10 1-5 Y,N,U {Q10_1} {Q10_1.shown} {Q10_3=='Y'}
X Pitanje s predloškom teksta (boilerplate) Q11 {Q11.shown}
D Datum Q12 {Q12} {Q12.shown}
* Jednadžba Q13 {Q13} {Q13.shown} {Q13>5}
~124~ Učitavanje datoteka (bilježi broj učitanih datoteka) Q14 {Q14} {Q14>0}
G Padajući izbornik za spol Q15 M,F {Q15} {Q15.shown} {Q15=='M'}
U Slobodan tekst (dugačak) Q16 {Q16} {Q16.shown} {strlen(Q16)>100}
I Pitanje o jeziku Q17 {Q17} {Q17.shown} {Q17=='en'}
! Popis - padajući izbornik Q18 1-5 {Q18} {Q18.shown} {Q18==3}
L Popis (padajući izbornik/radio-gumbi) Q19 A-Z {Q19} {Q19.shown} {Q19=='X'}
O Popis s komentarom (padajući izbornik/radio-gumbi + tekstualno polje) Q20 A-F {Q20},{Q20comment} {Q20.shown} {Q20=='B'}
T Slobodan dugačak tekst Q21 {Q21} {Q21.shown} {strstr(Q21,'hello')>0}
M Višestruki izbor (potvrdni okviri) Q22 A-F, other {Q22_E}, {Q22_other} {Q22_E.shown}, {Q22_other.shown} {Q22_E=='Y'}
P Višestruki izbor s komentarima (potvrdni okvir + tekst) Q23 A-F {Q23_D}, {Q23_Dcomment} {Q23_D.shown} {!is_empty(Q23)}
K Višestruko numeričko pitanje Q24 self,mom,dad {Q24_self} {Q24_self.shown} {Q24_self>30}
Q Više kraćih tekstova Q25 A-F {Q25_B} {Q25_B.shown} {substr(Q25_B,1,1)=='Q'}
N Numeričko pitanje Q26 {Q26} {Q26.shown} {Q26 > 30}
R Rangiranje Q27 1-4 {Q27_1} {Q27_1.shown} {Q27_1==3}
S Slobodan tekst (kratak) Q28 {Q28} {Q28.shown} {Q28=='mine'}
Y Da/Ne radio-gumbi Q29 {Q29} {Q29.shown} {Q29=='Y'}

Rezervirane varijable 'this', 'self' i 'that'

Vrlo često želite obraditi sve dijelove pitanja, na primjer prebrojiti koliko je potpitanja odgovoreno ili zbrojiti rezultate. Ponekad želite obraditi samo određene retke ili stupce pitanja (na primjer dobiti zbrojeve redaka ili stupaca i pohraniti ih u bazu podataka). Ove rezervirane varijable taj postupak čine relativno jednostavnim.

Varijabla 'this' koristi se isključivo unutar naprednih opcija pitanja "Jednadžba validacije cijelog pitanja" i "Jednadžba validacije potpitanja". Ona se proširuje na nazive varijabli svake od ćelija unutar tih pitanja. Dakle, ako želite osigurati da je svaki unos veći od tri, postavili biste "Jednadžbu validacije potpitanja" na (this > 3).

Varijable 'self' i 'that' moćnije su i služe kao makroi koji se proširuju prije obrade jednadžbi. Moguće sintakse su:

  • self
  • self.suffix
  • self.sub-selector
  • self.sub-selector.suffix

suffix je bilo koji od uobičajenih sufiksa kôda pitanja (npr. NAOK, value, shown)

sub-selector je jedno od sljedećeg:

  • comments - samo potpitanja koja su komentari (npr. iz višestrukog izbora s komentarom i popisa s komentarom)
  • nocomments - samo potpitanja koja nisu komentari
  • sq_X - gdje je X identifikator retka ili stupca. Odabiru se samo potpitanja koja odgovaraju uzorku X. Imajte na umu da se pretraživanje obavlja na cjelovitom identifikatoru kôda, a zatim sq_X odgovara i uključuje potpitanja nX, X, Xn (npr. ako koristite sq_1, uključena su potpitanja a1, 1a, 1, 11 ili 001). Obratite pažnju na vrstu pitanja s dvostrukom skalom, gdje su kôdovi potpitanja QCODE_SQCODE_1 i QCODE_SQCODE_1, te na vrstu pitanja rangiranje, gdje su kôdovi potpitanja QCODE_1, QCODE_2 ....
  • nosq_X - gdje je X identifikator retka ili stupca. Odabiru se samo potpitanja koja ne odgovaraju uzorku X. Imajte na umu da se pretraživanje obavlja na cjelovitom identifikatoru kôda, a zatim nosq_X odgovara i ne uključuje potpitanja nX, X, Xn

Primjeri:

  • Je li odgovoren bilo koji dio pitanja? {count(self.NAOK)>0}
  • Kolika je vrijednost procjene za ovo pitanje? {sum(self.value)}

Ovo možete koristiti i za dobivanje zbrojeva redaka i stupaca. Recimo da imate niz brojeva s recima A-E i stupcima 1-5.

  • Koliko je sveukupno? {sum(self.NAOK)}
  • Koliki je zbroj retka B? {sum(self.sq_B.NAOK)}
  • Koliki je zbroj stupca 3? {sum(self.sq_3.NAOK)}

Varijabla 'that' slična je varijabli 'self', ali omogućuje pozivanje na druga pitanja. Njezina je sintaksa:

  • that.qname
  • that.qname.suffix
  • that.qname.sub-selector
  • that.qname.sub-selector.suffix

qname je naziv pitanja bez ikakvih nastavaka potpitanja. Dakle, ako izradite pitanje 'q1', to je njegov qname

Primjeri:

  • Je li odgovoren bilo koji dio pitanja q1? {count(that.q1.NAOK)>0}
  • Kolika je vrijednost procjene za q2? {sum(that.q2.NAOK)}
  • Koliko je sveukupno za q3? {sum(that.q3.NAOK)}
  • Koliki je zbroj retka C u q4? {sum(that.q4.sq_C.NAOK)}
  • Koliki je zbroj stupca 2 u q4? {sum(that.q4.sq_2.NAOK)}

Varijable 'self' i 'that' mogu se koristiti u bilo kojoj relevantnosti, provjeri ili prilagodbi teksta.

Jedno upozorenje: kada koristite značajku Prikaži datoteku logike, ona će prikazati proširenu vrijednost varijabli 'self' i 'that'. Tako možete vidjeti stvarnu jednadžbu koja će biti generirana te možete (vi i Expression Manager) provjeriti postoje li varijable. To može djelovati zbunjujuće jer možete vidjeti prilično dugačke jednadžbe. Međutim, ako uredite pitanje, vidjet ćete izvornu jednadžbu koja koristi 'self' i/ili 'that'

Također imajte na umu da ne biste trebali koristiti ove varijable ako (a) želite izričito imenovati svaku varijablu korištenu u jednadžbi ili (b) koristite varijable koje nemaju potpitanja (npr. pitanja s jednim odgovorom). U tim je slučajevima dodavanje prefiksa 'that' varijabli suvišno i riskirate dobiti neočekivane rezultate.

Korištenje NAOK-a

NAOK --> "Not Applicable" (NA) is alright (OK), tj. „Nije primjenjivo” (NA) je u redu (OK)

Korištenje NAOK-a znači da su sve ili neke varijable nerelevantne (npr. "Not Applicable" (NA) je u redu (OK)).

Kada u bilo koju jednadžbu stavite varijablu iz nekog pitanja: ako je to pitanje (ili potpitanje) skriveno zbog uvjeta, cijela jednadžba postaje onemogućena.

Na primjer: count(Q1_SQ1,Q1_SQ2,Q1_SQ3,Q1_SQ4) uvijek vraća prazan niz znakova ako je jedno potpitanje pitanja Q1 filtrirano. Za brojanje označenih potpitanja u takvom pitanju možete koristiti count(Q1_SQ1.NAOK,Q1_SQ2.NAOK,Q1_SQ3.NAOK,Q1_SQ4.NAOK). Ako je potpitanje skriveno: Expression Manager vraća prazan niz znakova.

Bez NAOK-a: ako je jedno pitanje ili jedno potpitanje skriveno, Expression Manager uvijek vraća prazan niz znakova, što je isto kao da vraća false.

Nastavak .shown uvijek koristi NAOK sustav (prazan niz znakova ako je skriveno), ali ako vam je potreban kôd odgovora, uvijek je dobra ideja dodati .NAOK nakon kôda pitanja. Osim ako vam to nije potrebno i znate što radite.

Dodatni primjer i informacije dostupni su u odjeljku Zaobilaženje kaskadnih uvjeta

Pristup funkcijama

Expression Manager omogućuje pristup matematičkim funkcijama, funkcijama za obradu niza znakova i korisnički definiranim funkcijama, kako je prikazano u nastavku. Za te funkcije postoje PHP i JavaScript ekvivalenti pa rade identično na strani poslužitelja (PHP) i na strani klijenta (JavaScript). Nove je funkcije lako dodati.

Implementirane funkcije

Trenutačno su dostupne sljedeće funkcije:

Funkcija Značenje Sintaksa
abs Apsolutna vrijednost number abs(number)
acos Arkus kosinus number acos(number)
addslashes Citiraj niz kosim crtama string addslashes(string)
asin Arkus sinus number asin(number)
atan Arc tangenta number atan(number)
atan2 Tangenta luka dvije varijable number atan2(number, number)
ceil Zaokruži decimalne brojeve number ceil(number)
checkdate Vraća istinito (1) ako je datum valjan u gregorijanskom kalendaru bool checkdate(month,day,year)
convert_value Pretvara brojčanu vrijednost pomoću ulazne i izlazne tablice brojčanih vrijednosti number convert_value(fValue, iStrict, sTranslateFromList, sTranslateToList)
cos Kosinus number cos(number)
count Prebrojava odgovorena (neprazna) pitanja na popisu number count(arg1, arg12, ..., argN)
countif Prebrojava odgovorena pitanja na popisu koja su jednaka prvom argumentu number countif(matches, arg1, arg2, ... argN)
countifop Prebrojava odgovorena pitanja na popisu koja zadovoljavaju kriterij (arg op value) number countifop(op, value, arg1, arg2, ... argN)
date Format za lokalni datum/vrijeme string date(format [, timestamp=time()])
exp Izračunava eksponent od e number exp(number)
fixnum Prikazuje brojeve sa zarezom kao decimalnim separatorom, ako je potrebno string fixnum(number)
floor Zaokruži razlomke prema dolje number floor(number)
gmdate Format za GMT datum/vrijeme string gmdate(format [, timestamp=time()])
html_entity_decode Pretvara sve HTML entitete u odgovarajuće znakove (uvijek koristi ENT_QUOTES i UTF-8) string html_entity_decode(string)
htmlentities Pretvara sve odgovarajuće znakove u HTML entitete (uvijek koristi ENT_QUOTES i UTF-8) string htmlentities(string)
expr_mgr_htmlspecialchars Pretvara posebne znakove u HTML entitete (uvijek koristi ENT_QUOTES i UTF-8) string htmlspecialchars(string)
expr_mgr_htmlspecialchars_decode Pretvara posebne HTML entitete natrag u znakove (uvijek koristi ENT_QUOTES i UTF-8) string htmlspecialchars_decode(string)
idate Oblikovati lokalno vrijeme / datum kao cijeli broj string idate(string [, timestamp=time()])
if (Updated in 3.0.2 ) If u stilu programa Excel: if(test,result_if_true[,result_if_false = ""]) if(test,result_if_true[,result_if_false = ""])
implode Spojite elemente u znakovni niz string implode(glue,arg1,arg2,...,argN)
intval Dobijte cjelobrojnu vrijednost varijable int intval(number [, base=10])
is_empty Određuje smatra li se varijabla praznom bool is_empty(var)
is_float Pronalazi je li tip varijable decimalni broj (float) bool is_float(var)
is_int Pronalazi je li tip varijable cijeli broj bool is_int(var)
is_nan Pronalazi je li vrijednost „nije broj” (NaN) bool is_nan(var)
is_null Otkriva je li varijabla NULL bool is_null(var)
is_numeric Pronalazi je li varijabla broj ili numerički znakovni niz bool is_numeric(var)
is_string Pronalazi je li tip varijable znakovni niz bool is_string(var)
join (New in 2.0 build 130129) Spaja elemente u novi znakovni niz join(arg1, arg2, ... argN)
list Vraća popis neispražnjenih vrijednosti odvojenih zarezom string list(arg1, arg2, ... argN)
listifop (New in 3.16.1 ) Vraća popis, odvojen znakom „glue”, navedenog svojstva pitanja (retProp) za pitanja s popisa koja zadovoljavaju kriterij (cmpProp op value) string listifop(cmpProp, op, value, retProp, glue, sgqa1, sgqa2, ... sgqaN)
log Logaritam broja za zadanu bazu, ako je navedena, ili prirodni logaritam. number log(number,base=e)
ltrim Uklanja razmake (ili druge znakove) s početka znakovnog niza string ltrim(string [, charlist])
max Nađi najvišu vrijednost number max(arg1, arg2, ... argN)
min Nađi najnižu vrijednost number min(arg1, arg2, ... argN)
mktime Dobiva UNIX vremensku oznaku za datum (svih 6 argumenata nije obavezno) number mktime([hour [, minute [, second [, month [, day [, year ]]]]]])
modulo-function Funkcija modulo još nije podržana. Umjesto nje možete koristiti funkciju floor() floor(x/y)==(x/y)
nl2br Umeće HTML prijelome retka ispred svih novih redaka u znakovnom nizu string nl2br(string)
number_format Oblikujte broj s grupiranim tisućama string number_format(number)
pi Dobij vrijednost broja pi number pi()
pow Eksponencijalni izraz number pow(base, exp)
quoted_printable_decode Pretvara quoted-printable niz u 8-bitni niz string quoted_printable_decode(string)
quoted_printable_encode Pretvara 8-bitni niz u quoted-printable niz string quoted_printable_encode(string)
quotemeta Citiraj meta znakove string quotemeta(string)
rand Generirajte slučajni cijeli broj, pogledajte ovaj primjer int rand() OR int rand(min, max)
regexMatch uspoređuje znakovni niz s regularnim izrazom bool regexMatch(pattern,input)
round Zaokružuje broj na opcionalnu preciznost number round(val [, precision])
rtrim Uklanja razmake (ili druge znakove) s kraja znakovnog niza string rtrim(string [, charlist])
sin Sinus number sin(arg)
sprintf Vratite oblikovani niz string sprintf(format, arg1, arg2, ... argN)
sqrt Kvadratni korijen number sqrt(arg)
stddev Izračunava standardnu devijaciju uzorka za popis brojeva number stddev(arg1, arg2, ... argN)
str_pad Dopunjuje niz do određene duljine drugim nizom string str_pad(input, pad_length [, pad_string])
str_repeat Ponovite niz string str_repeat(input, multiplier)
str_replace Zamjenjuje sve pojave traženog niza zamjenskim nizom string str_replace(search, replace, subject)
strcasecmp Usporedba binarno sigurnog znakovnog niza neovisnog na veličinu znakova int strcasecmp(str1, str2)
strcmp Usporedba binarno sigurnih znakovnih nizova int strcmp(str1, str2)
strip_tags Uklonite HTML i PHP oznake iz znakovnog niza string strip_tags(str, allowable_tags)
stripos Pronalazi položaj prve pojave unicode niza neovisno o veličini slova (počevši od 0, vraća false ako nije pronađeno) int stripos(haystack, needle [, offset=0])
stripslashes Uklanja navodnike iz citiranog znakovnog niza string stripslashes(string)
stristr Strstr neosjetljivo na veličinu znakova string stristr(haystack, needle [, before_needle=false])
strlen Dobij duljinu znakovnog niza int strlen(string)
strpos Pronalazi položaj prve pojave unicode niza (počevši od 0, vraća false ako nije pronađeno) int strpos(haystack, needle [ offset=0])
strrev Obrni string string strrev(string)
strstr Pronađi prvu pojavu znakovnog niza string strstr(haystack, needle[, before_needle=false])
strtolower Pretvara niz u mala slova string strtolower(string)
strtotime Pretvara gotovo bilo koji engleski tekstualni opis datuma i vremena u Unix vremensku oznaku int strtotime(string)
strtoupper Pretvara niz u velika slova string strtoupper(string)
substr Vraća dio unicode niza string substr(string, start [, length])
sum Izračunajte zbroj vrijednosti u nizu number sum(arg1, arg2, ... argN)
sumifop Zbraja vrijednosti odgovorenih pitanja s popisa koja zadovoljavaju kriterij (arg op value) number sumifop(op, value, arg1, arg2, ... argN)
tan Tangens number tan(arg)
time Vrati trenutne UNIX vremenske oznake number time()
trim Uklanja razmake (ili druge znakove) s početka i kraja znakovnog niza string trim(string [, charlist])
ucwords Pretvara prvo slovo svake riječi u nizu u veliko string ucwords(string)
unique Vraća istinito ako su svi ne prazni odgovori jedinstveni boolean unique(arg1, ..., argN)

Funkcije koje su planirane ili se razmatraju

Ostale funkcije koje su planirane (ili se razmatraju), ali još nisu implementirane, navedene su u nastavku. Neke od njih služe za kompatibilnost s drugim alatom za upitnike.

Sintaksa Značenje Komentari
e() vraća vrijednost e
formatDate(X,PAT) vraća tekstualnu vrijednost datuma X formatiranu prema Java obrascu formata datuma PAT
formatNumber(X,PAT) vraća tekstualnu vrijednost broja X formatiranu prema Java obrascu formata broja PAT
getAnsOption(X) Osnovni dodatak ExpressionAnswerOptions
getAnsOption(X,Y) Osnovni dodatak ExpressionAnswerOptions
getRelevance(X) vraća jednadžbu relevantnosti za pitanje X
getStartTime() vraća datum koji odgovara sistemskom vremenu početka ispunjavanja upitnika
getType(X) vraća tekstualni naziv tipa podataka - npr. *NA* ako je isNA()
gotoFirst() skače na prvi relevantni skup pitanja - ovo narušava uobičajeni tijek sustava
gotoNext() skače na sljedeći relevantni skup pitanja - ovo narušava uobičajeni tijek sustava
gotoPrevious() skače na prethodni relevantni skup pitanja - ovo narušava uobičajeni tijek sustava
isAsked(X) vraća true ako odgovor nije *NA*, *INVALID* niti *UNASKED*
isInvalid(X) vraća true ako je odgovor tipa *INVALID*
isNA(X) vraća true ako je odgovor tipa *NA*
isNotUnderstood(X) vraća true ako je odgovor tipa *HUH*
isRefused(X) vraća true ako je odgovor tipa *REFUSED*
isSpecial(X) vraća true ako je odgovor tipa *UNASKED*, *NA*, *REFUSED*, *INVALID*, *UNKNOWN* ili *HUH*
isUnknown(X) vraća true ako je odgovor tipa *UNKNOWN*
jumpTo(X) skače na grupu koja sadrži navedeno pitanje -- ovo narušava uobičajeni tijek sustava
jumpToFirstUnasked() skače na prvo nepostavljeno pitanje čime se zaobilaze prethodno odgovorena pitanja ovo narušava uobičajeni tijek sustava
lastIndexOf(X,Y) vraća posljednji indeks (od 0) niza Y u nizu X. Vraća -1 ako X ne sadrži Y
list(X,...) tekst koji sadrži popis pozitivnih vrijednosti odvojenih zarezima, s "and" između posljednje dvije
mean(X,...) vraća srednju vrijednost popisa vrijednosti
numAnsOptions(X) vraća broj opcija odgovora koje pitanje X ima
orlist(X,...) tekst koji sadrži popis pozitivnih vrijednosti odvojenih zarezima, s "or" između posljednje dvije
parseDate(X,PAT) vraća vrijednost datuma iz niza X protumačenog prema Java obrascu formata datuma PAT
parseNumber(X,PAT) vraća numeričku vrijednost niza X protumačenog prema Java obrascu formata broja PAT
showAllResponsesExcept( questionList,attributeList,attributeTitleList) ; attributeList = popis atributa odvojenih znakom | (poput question#, title, text, type - da možete odlučiti što prikazati); attributeTitleList = popis zaglavlja tablice odvojenih znakom |, kako bi se izvješće moglo prevesti.
showTheseResponses( questionList,attributeList,attributeTitleList) ; attributeList = popis atributa odvojenih znakom | (poput question#, title, text, type - da možete odlučiti što prikazati); attributeTitleList = popis zaglavlja tablice odvojenih znakom |, kako bi se izvješće moglo prevesti.

Expression Manager zna koje su varijable lokalne

Kako bi ispravno izgradio JavaScript za stranicu, Expression Manager mora znati koje su varijable postavljene na stranici i koji je njihov JavaScript ID (npr. za document.getElementById(x)). Također mora znati koje su varijable postavljene na drugim stranicama (kako bi osigurao da su potrebna polja <input type='hidden' value='x'> prisutna i popunjena).

Kaskadni uvjeti

Ako je bilo koja od varijabli nerelevantna, cijela će jednadžba biti nerelevantna (false). Na primjer, u sljedećoj tablici N/A znači da jedna od varijabli nije bila relevantna

Operator Primjer a b Rezultat
+ (unary) +a N/A false
! !a N/A false
== (or eq) a == b N/A 5 false
== (or eq) a == b N/A 0 false
== (or eq) a == b N/A N/A false
!= (or ne) a != b N/A 5 false
!= (or ne) a != b N/A N/A false
!= (or ne) a != b N/A 0 false
> (or gt) a > b N/A 5 false
>= (or ge) a >= b N/A 5 false
< (or lt) a < b N/A 5 false
<= (or le) a <= b N/A 5 false
and a and b N/A 5 false
and a and b N/A N/A false
or a or b N/A N/A false
or a or b N/A 5 false
+ a + b N/A 5 false
* a * b N/A 5 false
/ a / b 5 N/A false
() (a) N/A false
(exp) (a && b) N/A 5 false
(exp) op (exp) (b + b) > (a && b) N/A 5 false
function sum(a,b,b) N/A 5 false
function max(a,b) N/A 5 false
function min(a,b) N/A 5 false
function implode(', ',a,b,a,b) N/A 5 false
function if(a,a,b) N/A 5 false
function is_empty(a) N/A false
function is_empty(a) 0 (or blank) true
function !is_empty(a) N/A false

Nadjačavanje kaskadnih uvjeta

Recimo da želite prikazati tekući zbroj svih relevantnih odgovora. Mogli biste pokušati upotrijebiti jednadžbu {sum(q1,q2,q3,...,qN)}. Međutim, ona se interno prevodi u LEMif(LEManyNA('q1','q2','q3',...,'qN'),,sum(LEMval('q1'),LEMval('q2'),LEMval('q3'),...,LEMval('qN'))). Dakle, ako je bilo koja od vrijednosti q1-qN nerelevantna, jednadžba će uvijek vratiti false. U tom će slučaju sum() prikazivati 0 sve dok se ne odgovori na sva pitanja.

Kako biste to zaobišli, svakoj varijabli možete dodati sufiks ".NAOK" (što znači da je Not Applicable u redu). U tom slučaju događa se sljedeće. Recimo da imate varijablu q1.NAOK

  1. q1 se ne dodaje u klauzulu LEManyNA()
  2. LEMval('q1') i dalje će provjeravati je li odgovor relevantan te će vratiti '' ako nije (tako da se pojedinačni nerelevantni odgovori zanemaruju, ali ne poništavaju cijeli izraz).

Dakle, rješenje problema tekućeg zbroja je upotreba jednadžbe sum(q1.NAOK,q2.NAOK,q3.NAOK,...,qN.NAOK).

Upotreba sufiksa .NAOK također autorima omogućuje izradu upitnika s nekoliko mogućih putanja koje se kasnije ponovno spajaju na zajedničke putanje. Na primjer, recimo da ispitanici odgovore na upitnik na način koji je izvan uobičajenog raspona odgovora. Autor može upozoriti ispitanike da možda neće dobiti valjane rezultate i pitati ih žele li doista nastaviti s upitnikom. Ako odgovore Da, prikazat će se ostala pitanja. Uvjet za "ostala pitanja" provjeravao bi jesu li početni odgovori bili unutar uobičajenog raspona ILI je li ispitanik odgovorio Da na pitanje koje je relevantno samo ako su odgovori bili izvan uobičajenog raspona.

Kako Expression Manager podržava uvjetno mikro-prilagođavanje?

Evo primjera mikro-prilagođavanja (gdje Question Type=='expr' označava jednadžbu):

Kôd pitanja Relevantnost Vrsta pitanja Pitanje
name 1 text What is your name?
age 1 text How old are you?
badage !is_empty(age) expr {(age<16) or (age>80)}
agestop badage message Sorry, {name}, you are too {if( (age<16),'young',if( (age>80),'old','middle-aged') ) } for this test.
kids !badage yesno Do you have children?
parents 1 expr {!badage && kids=='Y'}
numKids parents text How many children do you have?
kid1 parents && numKids >= 1 text How old is your first child?
kid2 parents && numKids >= 2 text How old is your second child?
kid3 parents && numKids >= 3 text How old is your third child?
kid4 parents && numKids >= 4 text How old is your fourth child?
kid5 parents && numKids >= 5 text How old is your fifth child?
sumage 1 expr {sum(kid1.NAOK,kid2.NAOK,kid3.NAOK,kid4.NAOK,kid5.NAOK)}
report parents yesno {name}, you said you are {age} and that you have {numKids}. The sum of ages of your first {min(numKids,5)} kids is {sumage}

Sva ova pitanja mogu biti na jednoj stranici (npr. u istoj grupi) i prikazat će se samo relevantna pitanja. Štoviše, dok unosite dob djece, izraz sum() u posljednjem pitanju dinamički će se ažurirati na stranici.

Expression Manager pruža ovu funkcionalnost tako da svaki izraz okruži imenovanim elementom <span>. Svaki put kada se vrijednost promijeni, ponovno izračunava izraz koji se treba pojaviti u tom elementu <span> i ponovno generira prikaz. Na istoj stranici možete imati desetke, pa čak i stotine takvih prilagođenih izraza, a stranica će ih sve ponovno prikazati u jednom osvježavanju zaslona.

Preslikavanje funkcionalnosti LimeSurvey 1.91+ u Expression Manager

Stara značajka Nova značajka Komentari
Uvjeti Relevantnost Možete koristiti vrlo složene uvjetne jednadžbe i pristupiti širem rasponu varijabli
Procjene Jednadžba Svaki rezultat procjene može se preoblikovati u jednadžbu. Time se osigurava da se rezultat zapiše u bazu podataka, a također možete vidjeti dinamičke promjene vrijednosti rezultata na trenutnoj stranici
Zamjene Expression Manager Osnovni mehanizam uzima ulazni tekst i sve unutar vitičastih zagrada tretira kao izraz - tako obrađuje sve povijesne vrste zamjena. Kako ne bi poremetio ugrađeni JavaScript, Expression Manager obrađuje sadržaj između vitičastih zagrada samo ako (a) nema razmaka na početku ili na kraju unutar vitičastih zagrada - npr. {expr} je izraz, ali { expr}, {expr } i { expr } nisu izrazi. Nadalje, Expression Manager ne obrađuje sadržaj unutar vlastitih nizova (npr. {list('hi','there {braces}')} generira "hi there {braces}"). Također zanemaruje izbjegnute vitičaste zagrade (npr. \{this is not an expression\})
Provjera Expression Manager Plan je preuzeti postojeće atribute pitanja min/max i prepustiti ih Expression Manageru na obradu. Na taj način i same min/max vrijednosti mogu biti izrazi

Isticanje sintakse

Kako bi pomogao pri unosu i provjeri izraza, EM nudi isticanje sintakse sa sljedećim značajkama:

Vrste i značenja isticanja sintakse

Boja Uzorak Značenje Opis alata (tooltip) Komentari
žuto-smeđa pozadina Uzorak cijela jednadžba nema Sve unutar vitičastih zagrada što je prepoznato kao jednadžba (npr. nema razmaka na početku ili na kraju) bit će označeno žuto-smeđom pozadinom kako bi se razlikovalo od okolnog teksta
podebljani crveni tekst Uzorak Pogreška Objašnjenje pogreške Može biti nepoznata varijabla ili pogreška u funkciji, .... Upitnik može biti potpuno neispravan, no to se ne prikazuje javnim korisnicima.
plavi tekst Uzorak naziv funkcije značenje i dopuštena sintaksa nazivi funkcija, ili stvari koje bi trebale biti funkcije jer iza njih slijedi otvorena zagrada, prikazuju se podebljanim plavim tekstom. Opis alata prikazuje značenje i dopuštenu sintaksu funkcije.
sivi tekst Uzorak niz znakova nema nizovi znakova u jednostrukim i dvostrukim navodnicima prikazuju se sivim tekstom
cijan tekst Uzorak varijabla postavljena na istoj stranici, [naziv ili SGQA kod]: pitanje; vrijednost; popis odgovora s kodovima za svaku vrijednost Svaka varijabla koja je postavljena na istoj stranici kao i trenutno pitanje prikazuje se cijan tekstom, što znači da se može ažurirati u JavaScriptu. Opis alata prikazuje njezin naziv, stvarno pitanje i trenutnu vrijednost (ili prazno ako nije postavljena). Ako vrsta pitanja očekuje odgovore iz nabrojenog skupa vrijednosti, prikazuje se povezanost kodova s prikazanim vrijednostima.
zeleni tekst Uzorak varijabla postavljena na prethodnoj stranici [naziv ili SGQA kod]: pitanje; vrijednost; popis odgovora s kodovima za svaku vrijednost Svaka varijabla koja je postavljena na prethodnoj stranici prikazuje se podebljanim zelenim tekstom. Opis alata prikazuje njezin naziv, stvarno pitanje i trenutnu vrijednost (ili prazno ako nije postavljena). Ako vrsta pitanja očekuje odgovore iz nabrojenog skupa vrijednosti, prikazuje se povezanost kodova s prikazanim vrijednostima.
podebljani ružičasti tekst Uzorak varijabla postavljena na kasnijoj stranici općenito: prazna na početku upitnika, ali se može popuniti putem indeksa ili povratkom na prethodnu stranicu [naziv ili SGQA kod]: pitanje; vrijednost; popis odgovora s kodovima za svaku vrijednost Svaka varijabla koja je postavljena na sljedećoj stranici prikazuje se podebljanim ružičastim tekstom. Opis alata prikazuje njezin naziv, stvarno pitanje i trenutnu vrijednost (ili prazno ako nije postavljena). Ako vrsta pitanja očekuje odgovore iz nabrojenog skupa vrijednosti, prikazuje se povezanost kodova s prikazanim vrijednostima.
podebljani smeđi tekst Uzorak Lime zamjenska vrijednost vrijednost Lime zamjenski nizovi (poput {TOKEN:xxx}, {PRIVACY_MESSAGE}) prikazuju se podebljanim smeđim tekstom.
crveni tekst Uzorak operator dodjeljivanja (=) poruka upozorenja Ako koristite operator dodjeljivanja (=), taj će se operator prikazati crvenim tekstom. Cilj je spriječiti slučajno ponovno dodjeljivanje vrijednosti kada ste zapravo htjeli provjeriti je li a == b umjesto postaviti vrijednost a = b.
uobičajeni crni tekst Uzorak interpunkcija nema Sva ostala interpunkcija unutar izraza prikazuje se uobičajenim crnim tekstom.
tekst u crvenom okviru podebljana crvena linija okružuje pogrešku sintaksna pogreška opis pogreške Sve otkrivene sintaksne pogreške prikazuju se tako da je pogreška okružena crvenim okvirom. Opis alata prikazuje pogrešku. Primjeri uključuju neusklađene zagrade, upotrebu nedefiniranih funkcija, prosljeđivanje pogrešnog broja argumenata funkcijama, loše strukturirane izraze (npr. nedostaju operatori između varijabli), pokušaj dodjeljivanja nove vrijednosti varijabli samo za čitanje, pokušaj dodjeljivanja vrijednosti onome što nisu varijable ili upotrebu nepodržane sintakse. Imajte na umu da sustav za otkrivanje sintaksnih pogrešaka može prijaviti samo jednu pogrešku u izrazu čak i ako ih ima više; međutim, ako se otkrije ijedna pogreška, bit će prikazana barem jedna.

Dodatna literatura

Primjeri upitnika za Expression Manager

Slučajevi uporabe i upute

Primjeri korak po korak

Statističke funkcije Expression Managera

Referenca za programere

Plan razvoja/Status/Popis zadataka