ExpressionScript-moottori - Pikaopas
From LimeSurvey Manual
Pikaopas
LimeSurveyssä voit mukauttaa kyselyitäsi edelleen ExpressionScriptin (lyhyesti ES) avulla. Huomautus: "ExpressionScriptin nimi oli aiemmissa versioissa Expression Manager (EM). Jos näet jossain nimen Expression Manager, se on vain ES:n vanha nimi."
ES:n avulla voidaan määrittää seuraavat asiat:
- Navigointi/haarautuminen - antaa vastaajan vastausten muuttaa kysymysten näyttöjärjestystä;
- Räätälöinti/Piping - auttaa muotoilemaan kysymyksen (esimerkiksi viittaamalla aiempiin vastauksiin tai taivuttamalla lauseita kohteiden iän tai sukupuolen mukaan) tai luomaan mukautettuja raportteja (kuten arviopisteitä tai räätälöityjä neuvoja);
- Vahvistus - varmistaa, että vastaukset täyttävät tietyt ehdot, kuten vähimmäis- ja enimmäisarvot tai tietyn syötemallin.
ES tarjoaa intuitiivisen tavan määrittää logiikka jokaiselle näistä toiminnoista. Lähes mikä tahansa tavallisena matemaattisena yhtälönä kirjoitettava lauseke on kelvollinen lauseke.
ES tarjoaa tällä hetkellä käyttöösi 70 funktiota, ja sitä voidaan helposti laajentaa tukemaan useampia. Sen avulla voit myös käyttää muuttujiasi ihmisen luettavissa olevilla muuttujien nimillä (SGQA-nimien sijaan).
Seuraavissa osioissa esitellään tärkeimmät paikat, joissa ES:ää käytetään.
Joissakin kyselyissä käytetään "Goto-logiikkaa", jossa esimerkiksi jos vastaat kysymykseen Question1 vaihtoehdolla C, sinut ohjataan kysymykseen Question5. Tämä tapa on hyvin rajoittunut, koska sen validointi on vaikeaa. Lisäksi se rikkoutuu helposti, kun kysymykset täytyy järjestää uudelleen. ES puolestaan käyttää Boolen relevanssiyhtälöitä määrittämään kaikki ehdot, joissa kysymys voi olla voimassa. Jos kysymys on relevantti, kysymys näytetään. Muussa tapauksessa se ei ole sovellettavissa, ja tietokantaan tallennetaan arvo "NULL".
Ymmärtääksesi relevanssin käsitteen paremmin tarkastellaan seuraavaa kyselyä, joka laskee vastaajien painoindeksin (BMI). Voit ladata sen napsauttamalla seuraavaa linkkiä: Painoindeksikyselyn esimerkki.
Relevanssiyhtälö näkyy alla sarakkeessa Relevanssi muuttujan nimen jälkeen. Muuttujien weight, weight_units, height ja height_units relevanssiarvot ovat kaikki 1 (oletusarvo), mikä tarkoittaa, että nämä kysymykset näytetään aina. BMI:n relevanssi on kuitenkin {!is_empty(height) and !is_empty(weight)}, mikä tarkoittaa, että BMI lasketaan vain, jos aihe antaa arvon sekä pituudelle että painolle (näin vältetään nollalla jaon virheen riski). Lisäksi kysymys "Report" näytetään vain, jos vastaaja vastaa kaikkiin neljään pääkysymykseen (height, heightunits, weight, weightunits).

Relevanssi näytetään ja on muokattavissa, kun:
- haluat tarkastella/muokata kysymystasoista relevanssia
- haluat tarkastella/muokata ryhmätasoista relevanssia
Kysymystasoisen relevanssin tarkastelu / muokkaus
Tämä yhtälö laskee painoindeksin (BMI). Siitä kysytään vain, jos henkilö antaa pituutensa ja painonsa.

Tämä on "BMI"-kysymyksen muokkausnäkymä.

Huomaa, että aaltosulkeita ei käytetä relevanssiyhtälöä syötettäessä.
Ryhmätasoisen relevanssin tarkastelu / muokkaus
Tarkastellaan nyt toista esimerkkiä - yksinkertaista väestölaskentakyselyä. Voit ladata sen napsauttamalla seuraavaa linkkiä: Väestölaskentakyselyn esimerkki.
Ensimmäisellä sivulla kysytään, kuinka monta ihmistä asuu kanssasi, ja tallennetaan tieto muuttujaan "cohabs". Tämä sivu näytetään vain, jos kanssasi asuu useampi kuin yksi henkilö (se näytetään toiselle kanssasi asuvalle henkilölle). Lisäksi p2name, p2age ja p2sum näytetään vain, jos niitä edeltävään kysymykseen on annettu vastaus.

Ryhmällä on siis myös kysymystasoisia relevanssiehtoja, joiden vuoksi jotkin kysymykset näkyvät vain, jos olet vastannut tiettyihin aiempiin kysymyksiin (esim. p2age näytetään, jos p2name on vastattu). ES yhdistää ryhmä- ja kysymystasoisen relevanssin puolestasi. Ryhmän kysymyksiä kysytään vain, jos ryhmä kokonaisuutena on relevantti. Tämän jälkeen kysytään vain ne ryhmän kysymykset, jotka ovat relevantteja.
Tässä on kuvakaappaus ryhmän Cohabitant 2 ryhmätasoisen relevanssin muokkauksesta:

Huomaa, että aaltosulkeita ei käytetä relevanssiyhtälöä syötettäessä.
Räätälöinti/Piping
ES:n avulla voit helposti tehdä sekä yksinkertaista että monimutkaista ehdollista räätälöintiä. Joskus tarvitset vain yksinkertaisen korvauksen, kuten "Kerroit ostaneesi [Tuote]. Mistä pidit siinä eniten?". Joskus tarvitset ehdollisen korvauksen, kuten "[Herra/Rouva] [Sukunimi], olisitko valmis vastaamaan kyselyymme?". Tässä tapauksessa haluat käyttää sanaa "Herra" tai "Rouva" henkilön sukupuolen perusteella. Toisinaan tarvitset vielä monimutkaisemman korvauksen (esimerkiksi matemaattiseen laskentaan perustuvan). ES tukee kaikkia näitä räätälöinnin/pipingin tyyppejä.
Ehdolliset yhtälöt
Painoindeksiesimerkki osoittaa, miten henkilön painoindeksi (BMI) voidaan laskea, vaikka hän syöttäisi pituutensa ja painonsa kahdella eri yksiköllä (cm vs. tuumat ja kg vs. paunat):

Tässä tapauksessa weightkg on {if(weightunits == "kg", weight, weight * 0.453592)}. Tämä "if()"-funktio tarkoittaa, että jos vastaaja syöttää painon kilogrammoina, käytetään kyseistä arvoa. Muussa tapauksessa syötetty arvo (vaihtoehtona on pauna) kerrotaan luvulla 0.453592, jolloin se muunnetaan kilogrammoiksi. Muuttuja heightm käyttää samanlaista tapaa henkilön pituuden laskemiseen metreinä (pituus senttimetreinä/100), vaikka hän olisi syöttänyt pituutensa tuumina (1 metri = 3.28084 tuumaa).
BMI lasketaan seuraavasti: {weightkg / (heightm * heightm)}.
Lopuksi raportti räätälöi viestin ehdollisesti vastaajalle ja kertoo, mitä hän syötti. (esim. "Kerroit olevasi 2 metriä pitkä ja painavasi 70 kg.")
Alla olevassa kuvassa weightstatus käyttää sisäkkäisiä "if()"-lauseita luokitellakseen henkilön alipainoisesta vaikeasti lihavaan. Näet sen yhtälön tarkistamalla sen logiikan:

Tämän kysymyksen muokkausikkunasta näet kaksi asiaa:
- Räätälöinnissä lausekkeet on ympäröitävä aaltosulkeilla
- Lausekkeet voivat jatkua usealle riville, jos, kuten tässä tapauksessa, haluat helpottaa sisäkkäisen ehdollisen logiikan lukemista.

Räätälöidyt kysymykset, vastaukset ja raportit
BMI-raportti näyttää tältä:

Tässä on saman kysymyksen muokkausikkuna.

Kaikki aaltosulkeiden sisällä oleva käsitellään lausekkeena, ja se on korostettu syntaksivärein (värikoodattu) edellisessä kuvassa. Jos tekstissä on kirjoitusvirheitä (kuten väärin kirjoitettuja tai määrittelemättömiä muuttujien tai funktioiden nimiä), ES näyttää virheen. Alla olevassa esimerkissä:
- heightunit.shown on määrittelemätön muuttuja (oikea nimi on heightunits.shown) ja
- "rnd()" on määrittelemätön funktio (oikea funktion nimi on "round()").
Molemmissa tapauksissa virheet on merkitty punaiseen laatikkoon, jotta ne on helpompi havaita ja korjata.

Näet myös, että voit nopeasti luoda monimutkaisia raportteja, kuten taulukon syötetyistä arvoista tai räätälöityjä neuvoja.
Muista, että kaikessa räätälöinnissä lausekkeet on ympäröitävä aaltosulkeilla, jotta LimeSurvey tietää, mitkä kysymyksen osat ovat vapaata tekstiä ja mitkä ExpressionScript-moottorin tulee käsitellä.
Validointi
ES ohjaa sitä, miten useimmat kysymysten lisäasetukset toimivat. Niillä hallitaan esimerkiksi vastausten vähimmäis- ja enimmäismääriä, yksittäisten arvojen vähimmäis- ja enimmäisarvoja, summien vähimmäis- ja enimmäisarvoja sekä sitä, että syötetyt arvot vastaavat määritettyjä merkkijonomalleja. Mikä tahansa näissä kentissä oleva arvo käsitellään lausekkeena, joten voit määrittää vähimmäis- ja enimmäisehtoja, jotka riippuvat monimutkaisesti muista kysymyksistä.
Kaikissa näissä tapauksissa, koska kysymyksen lisäattribuutti käsitellään aina lausekkeena, aaltosulkeita ei käytetä sitä määritettäessä.
Esimerkkikyselyt-sivulla on monia toimivia esimerkkejä, jotka sisältävät erilaisia validointilausekkeita.
ExpressionScript - esittely
Jos haluat tietää lisää ExpressionScriptistä ja siitä, miten voit parantaa kyselyäsi erilaisilla lausekkeilla, napsauta seuraavaa linkkiä.