ExpressionScript-esimerkkejä
From LimeSurvey Manual
Rakenne
Artikkelin ensimmäisessä osassa kuvataan, mihin lausekkeita voi käyttää ja mistä lausekkeen löytää tai mihin sen voi lisätä. Toisessa osassa on esimerkkejä lausekkeiden käytöstä.
Lausekkeiden luokat
LimeSurvey käyttää lausekkeita seuraaviin tarkoituksiin:
Relevanssi
Tarkoitus: kysymysryhmien tai kysymysten piilottaminen
Relevanssi määrittää, näytetäänkö kysymysryhmä vai kysymys vai piilotetaanko se. Jos lausekkeen tulos on "tosi" (eli 1), elementti näytetään. Muussa tapauksessa (jos lausekkeen tulos on "epätosi" eli 0) elementti piilotetaan.
Vahvistus
Tarkoitus: kysymysten, alikysymysten ja vastausten syötteiden tai toimintojen vahvistaminen
Vahvistus määrittää, onko vastaajan kysymykseen antama syöte tai toiminto kelvollinen. Jos lausekkeen tulos on "tosi" (eli 1), elementtiin ja vahvistusviestiin lisätään "good"-luokka. Muussa tapauksessa, jos lausekkeen tulos on "epätosi" (eli 0), elementtiin ja vahvistusviestiin lisätään "error"-luokka. Voit määritellä näille luokille tyylin tiedostossa template.css.
Tekstin tulostus
Tarkoitukset: (tee jotain ja) kirjoita tekstiä
Lausekkeella voi tulostaa tekstiä. Voit esimerkiksi testata tai laskea jotain ja määrittää tulosteen testin tai laskennan tuloksen mukaan. Sillä voi myös lisätä aiemmin käytetyn kysymyksen kysymystekstin, vastauksia, kysymystyyppejä jne. ennen lausekkeen käyttöä. Tekstin tulostusta voi käyttää kaikkialla, missä teksti näytetään, ja se voi palauttaa kaikenlaisia tuloksia.
| Käyttötapaus | Kuvaus |
|---|---|
| Mikrokohdennus | Muokkaa tekstiä, esim. kirjoita "Herra" tai "Rouva" aiemmin kysytyn sukupuolikysymyksen mukaan |
| Laskenta | Laske arvo ja kirjoita se näkyviin, esim. "Perheesi tulot ovat xxx" |
| Viittaus | Lisää teksti elementistä, esim. "Nimesi on xxx. Minkä ikäinen olet?" |
Vastausten tallennus
Tarkoitukset: (tee jotain,) (kirjoita tekstiä) ja tallenna jotain tietokantaan
Yhtälö-kysymystyyppiä voi käyttää jonkin tallentamiseen tietokantaan. Voit tehdä jotain lausekkeella, näyttää yhtälökysymyksen (joka on samankaltainen kuin tekstin näyttö) ja tallentaa lausekkeen tuloksen tietokantaan. Vastaus tallennetaan vastaustaulukkoon. Tulosta voi sitten käyttää tilastotoiminnossa tai sen voi viedä johonkin LimeSurveyn vientitoiminnon tarjoamista muodoista.
Esimerkkejä lausekkeista
Edellisen kysymyksen vastauksen lisääminen
Piilotetun yhtälökysymyksen käyttö vastauksen automaattiseen täyttöön
Ongelma: Oletetaan, että sinulla on kaksi kysymystä, Q1 ja Q2. Q1 kysyy vastaajan ikää. Q2 jakaa vastaajat kolmeen ryhmään: ikä on alle 20 vuotta, ikä on 20, ikä on yli 20. Q2:n pitäisi siis käyttää arvoja "1", "2" ja "3", jotka vastaavat yllä olevia ehtoja. Lisäksi Q2 pitää tehdä näkymättömäksi (kysymystä ei näytetä kyselyssä, mutta arvot tallentuvat "taustaprosessin" kautta vastaustaulukkoon).
Tietokannan täyttäminen Yhtälö-kysymystyypillä:
- Luo ensin kysymys koodilla Q1 numeerisena syötekysymyksenä.
- Luo sitten toinen kysymys koodilla Q2 yhtälökysymyksenä.
- Q2:n "Näyttöasetukset"-välilehdellä:
- aseta "Piilota kysymys aina" -kentän arvoksi "Päällä"
- kirjoita "Yhtälö"-kenttään lauseke:
{if(Q1.NAOK < 20, "1", if(Q1.NAOK > 20, "3", "2"))}
Yhteenvetosivun luominen paikkamerkeillä
Tämä opas näyttää, miten voit luoda kyselyn loppuun yleiskatsauksen, joka listaa kaikki kysymykset ja vastaukset ExpressionScript-paikkamerkkien avulla. Se näyttää myös, miten tällaisen yleiskatsauksen voi rajata vain vastattuihin kysymyksiin.
Esimerkkimme voi ladata täältä: Kyselyn paikkamerkkiesimerkki.
Tässä käytetyt kysymystyypit:
1. Yksi valinta -kysymykset / yksittäiset teksti- tai numeerisemmat kysymykset
- Lista (pudotusvalikko)
- Lista (radiopainikkeet) [L]
- Kyllä/Ei [Y]
- Pitkä vapaateksti [T]
- Lyhyt vapaateksti [S]
- Numeerinen syöte [N]
- Yhtälö [*]
2. Alikysymyksiä sisältävät kysymykset
- Useita lyhyitä tekstikenttiä [Q]
- Monivalinta [M]
- Taulukko [F]
- Taulukko (Kyllä/ei/ei osaa sanoa) [C]
- Taulukko (10 pisteen valinta) [B]
3. Kysymykset, joissa on 2 asteikkoa
- Kaksiasteikkoinen ryhmä [1]
4. Kysymykset, joissa on X- ja Y-asteikot
- Taulukko (Numerot) [:]
5. Näennäiskysymykset
- Tekstin näyttö [X]
Tässä yksinkertaisessa esimerkissä yleiskatsauksemme on yksinkertainen lista, jossa on:
- Kysymysteksti: käyttäjän vastaus
Yksi valinta -kysymykset / yksittäiset teksti- tai numeerisemmat kysymykset
Kaikissa näissä kysymystyypeissä LimeSurvey tallentaa yhden vastauksen:
- Lista (pudotusvalikko)
- Lista (radiopainikkeet)
- Lista kommentilla
- 5 pisteen valinta
- Kyllä/Ei
- Lyhyt vapaateksti
- Pitkä vapaateksti
- Hyvin pitkä vapaateksti
- Numeerinen syöte
- Yhtälö
- Päivämäärä
- Sukupuoli
Jos kysymyksen kysymyskoodi on q1, voimme viitata kysymystekstiin ja vastaukseen seuraavasti:
- {q1.question}: {q1.shown}
Esimerkki:
- Kuinka vanha olet?: 25
Jos haluat tarkistaa, onko kysymykseen vastattu, voit lisätä tulosteen ympärille IF-lauseen:
{if(!is_empty(q1),join("- ",q1.question,": ",q1.shown),"")}
Tämä "käännettynä" tarkoittaa: JOS kysymys, jonka koodi on q1, ei ole tyhjä, tulosta "- " JA kysymysteksti JA ": " JA vastausteksti (join()-funktio yhdistää elementit uudeksi merkkijonoksi); MUUTEN: älä tulosta mitään ("" tarkoittaa tyhjää merkkijonoa).
Alikysymyksiä sisältävät kysymykset
Kaikissa näissä kysymystyypeissä LimeSurvey käyttää alikysymyksiä:
- Useita lyhyitä tekstikenttiä
- Monivalinta
- Monivalinta kommenteilla
- Taulukko
- Taulukko (5 pisteen valinta)
- Taulukko (10 pisteen valinta)
- Taulukko (Kyllä/ei/ei osaa sanoa)
- Taulukko (Kasvata/Sama/Pienennä)
- Taulukko sarakkeen mukaan
Jos kysymyksen kysymyskoodi on q2 ja alikysymykset on numeroitu SQ001, SQ002 (LimeSurvey numeroi ne automaattisesti), voimme viitata kysymystekstiin ja vastaukseen seuraavasti:
- {q2_SQ001.question}: {q2_SQ001.shown}
- {q2_SQ002.question}: {q2_SQ002.shown}
Monivalintakysymyksissä on järkevää näyttää valitun alikysymyksen tekstin sijaan Y jokaisesta valitusta vaihtoehdosta:
- {q2_SQ001.question}: {q2_SQ001}
- {q2_SQ002.question}: {q2_SQ002}
...
Huomaa, että tällä hetkellä alikysymyksiä sisältävien kysymysten kysymystekstiä ei voi tulostaa, katso tämä ominaisuuspyyntö.
Esimerkki 1 (oletetaan, että kysymyksen tyyppi on monivalinta)
- Tunnetko nämä automerkit?
-- Mercedes: Y
-- Audi: N
-- Volvo: Y
Jos haluat tulostaa vain valitut kohteet, voit lisätä tulosteen ympärille IF-lausekkeen ja tarkistaa valintalaatikon arvon:
{ if( q2_SQ001=="Y", join( "- ", q2_SQ001.question, ": ", q2_SQ001.shown ), "" ) }
Käytä listifop-funktiota, jos haluat tulostaa listan vain valituista kohteista, esim.: Mercedes, Volvo
{ listifop( 'value', '==', 'Y', 'question', ', ', that.q2.sgqa ) }
Tässä that.q2 laajenee kaikiksi q2:n alikysymyksiksi. Katso lisätietoja kohdasta self, this ja that.
Esimerkki 2 (oletetaan, että kysymyksen tyyppi on Taulukko (10 pisteen valinta))
- Arvioi alla olevien automerkkien laatua asteikolla 1=erittäin huono – 10=erittäin hyvä.
-- Mercedes: 7
-- Audi: 9
-- Volvo: 9
Jos haluat tulostaa vain arvioidut kohteet, voit lisätä tulosteen ympärille IF-lausekkeen ja tarkistaa, onko kyseiseen alikysymykseen vastattu, seuraavasti:
{ if( ! is_empty( q3_SQ001 ), join( "- ", q3_SQ001.question, ": ", q3_SQ001.shown ), "" ) }
Käytä listifop-funktiota, jos haluat esimerkiksi tulostaa listan vain niistä valituista kohteista, jotka ovat suurempia kuin kahdeksan, esim.: Audi / Volvo
{ listifop( 'value', '>', 8, 'question', ' / ', that.q3.sgqa ) }
Kysymys, jossa on kaksi skaalaa
Oletetaan, että käytössä ovat seuraavat koodit:
- Kysymyskoodi: q4
- Alikysymyskoodit: SQ001, SQ002, ...
- Vastauskoodit, skaala 1: A1, A2, ...
- Vastauskoodit, skaala 2: B1, B2, ...
Esimerkki kolmannen alikysymyksen ja toisen skaalan vastaukseen viittaamisesta: q4_SQ003_1 - kysymys 4, alikysymys 3, toinen skaala.
Tulostetaan molempien skaalojen tulokset kahdelle ensimmäiselle alikysymykselle:
- {q4_SQ001_0.question}: {q4_SQ001_0.shown} / {q4_SQ001_1.shown}
- {q4_SQ002_0.question}: {q4_SQ002_0.shown} / {q4_SQ002_1.shown}
Jos haluat tulostaa alikysymyksen tekstin, sinun on lisättävä paikkamerkkiin skaalan tunnus (vaikka tekstit ovat samat molemmilla skaaloilla). Käytä siis paikkamerkin {q4_SQ001.question} sijaan paikkamerkkiä {q4_SQ001_0.question} tai {q4_SQ001_1.question}.
Jos haluat viedä tai näyttää vain niiden alikysymysten tulokset, joihin on vastattu vähintään yhdellä vastauksella, käytä jokaiselle alikysymykselle tätä syntaksia:
{if(count(q4_SQ001_0,q4_SQ001_1)>0,join("- ",q4_SQ001_0.question,": ",q4_SQ001_0.shown," / ",q4_SQ001_1.shown),"")}
Kysymys X- ja Y-asteikoilla
Tämä koskee kaikkia matriisikysymyksiä, joissa jokaiseen soluun voi antaa vastauksen (ei vain jokaiselle riville, kuten aiemmin esitettiin):
- Taulukko (Tekstit)
- Taulukko (Numerot)
Oletetut käytetyt koodit:
- Kysymyskoodi: q5
- Alikysymyskoodit: SQ001, SQ002, ...
- Vastauskoodit: A1, A2, ...
Jos haluat viitata tietyn alikysymyksen tulokseen tietystä sarakkeesta, käytä muotoa QuestionCode . '_' . SubQuestionCode . '_' . AnswerCode. Esimerkki kolmannen alikysymyksen ja toisen sarakkeen vastaukseen viittaamisesta: q5_SQ003_A2.
Tulostetaan kahden ensimmäisen alikysymyksen sarakkeiden 1–3 tulokset:
- {q5_SQ001_A1.question}: {q5_SQ001_A1.shown} | {q5_SQ001_A2.shown} | {q5_SQ001_A3.shown}
- {q5_SQ002_A1.question}: {q5_SQ002_A1.shown} | {q5_SQ002_A2.shown} | {q5_SQ002_A3.shown}
Koska näissä kysymystyypeissä jokainen solu (X-akselin ja Y-akselin yhdistelmä) vastaa yhtä vastausvaihtoehtoa, tietojen olemassaolo on tarkistettava jokaiselle solulle erikseen. Esimerkki:
{if(!is_empty(q5_SQ001_A1),join("- ",q5_SQ001_A1.question,": ",q5_SQ001_A1.shown),"")}
Piilota kysymys, jos edellisen kysymyksen vastaus on tyhjä
| Tarkoitus | Piilota kysymys, jos edellisen kysymyksen vastaus on tyhjä |
| Tyyppi | Kysymyksen relevanssi |
| Esimerkki | Kysymys yksi: kysymyskoodi "name", kysymysteksti "Mikä on nimesi?" Kysymys kaksi: kysymysteksti "{name}, minkä ikäinen olet?" Tehtävä: Piilota kysymys kaksi, jos kysymyksen yksi tekstikenttä on tyhjä |
| Lauseke | !is_empty(name) |
| Kuvaus | is_empty() määrittää, onko muuttuja tyhjä. Merkki "!" kääntää tuloksen päinvastaiseksi. Jos siis muuttuja ei ole tyhjä, lauseke on tosi ja kysymys näytetään |
| Vaiheet | Luo/muokkaa kysymystä kaksi Kirjoita "!is_empty(name)" kenttään "Relevanssiyhtälö" |
| Esimerkkitiedosto | Hide_question_if_empty_question_group.zip |
![]()
| |
Piilota kysymysryhmä, jos edellisen kysymyksen vastaus on Kyllä tai Ei
| Tarkoitus | Piilota kysymysryhmä, jos edellisen kysymyksen vastaus on Kyllä tai Ei |
| Tyyppi | Kysymysryhmän relevanssi |
| Esimerkki | Sivu yksi, kysymysryhmä yksi, kysymys yksi: kysymyskoodi "PET", kysymysteksti "Onko sinulla lemmikki?" -Kyllä -Ei Sivu kaksi, kysymysryhmä kaksi: otsikko "Lemmikeistäsi" Tehtävä: Näytä/piilota kysymysryhmä kaksi sen mukaan, onko kysymyksen yksi vastaus Kyllä/Ei |
| Lauseke | PET == "Y" |
| Kuvaus | PET on sen kysymyksen kysymyskoodi, jonka vastausta haluat tarkistaa. Jos et käytä jälkiliitettä, EM käyttää muotoa "Qcode.code". Vertaat siis PET-kysymyksen vastauskoodia arvoon "Y". Jos osallistuja vastaa "Kyllä", lauseke on tosi ja kysymysryhmä "Lemmikeistäsi" näytetään. |
| Vaiheet | Luo/muokkaa kysymysryhmää kaksi Kirjoita "PET == "Y"" kenttään "Relevanssiyhtälö" |
| Esimerkkitiedosto | Hide_question group_if_answer_from_previous_question_is_Yes_or_No.zip |
![]()
| |
Näytä usean vastauksen syöttökysymyksen kentän arvo
| Tarkoitus | Näytä usean vastauksen syöttökysymyksen kentän arvo |
| Tyyppi | Viittaus |
| Esimerkki | Kysymys yksi: kysymyskoodi "AskChildAge", kysymysteksti "Minkä ikäisiä lapsesi ovat?". Alikysymyskoodit -Child1 -Child2 -Child3 - ChildXXX Kysymys kaksi: kysymyskoodi "ReportChildAge", kysymysteksti "Ensimmäisestä lapsestasi: - CHILD1 on AGE1." |
| Lauseke | {AskChildAge_Child1.question}, {AskChildAge_Child1.value} |
| Kuvaus | Haluat käyttää alikysymyksen arvoa seuraavassa kysymyksessä. Alikysymyksen arvoon pääset käsiksi tällaisella lausekkeella: QcodeQuestion_QcodeSubquestion.value |
| Vaiheet | Luo/muokkaa toista kysymystä Kirjoita kuvaukseen tämä teksti: "Ensimmäisestä lapsestasi: - {AskChildAge_Child1.question} on {AskChildAge_Child1.value}." |
| Esimerkkitiedosto | Display_value_of_a_multiple_answer_input_question_field.zip |
| |
Vahvista riville valittujen ruutujen määrä "Taulukko (Numerot) Valintalaatikko" -kysymyksessä
| Tarkoitus | Vahvista riville valittujen ruutujen määrä |
| Tyyppi | Vahvistus |
| Esimerkki | Kysymys, jonka tyyppi on "Taulukko (Numerot) (Valintalaatikon asettelu)" |
| Lauseke | sum(...) |
| Kuvaus | (sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X) määrittää, onko rivillä A valittu vähintään X valintalaatikkoa. Jos haluat tarkistaa kaikki kolme riviä (A, B, C), voit yhdistää lausekkeet merkinnällä "&&": (sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X) && (sum(Test_B_1, Test_B_2, Test_B_3, Test_B_4, Test_B_5) <= X) && (sum(Test_C_1, Test_C_2, Test_C_3, Test_C_4, Test_C_5) <= X) |
| Vaiheet | Luo/muokkaa kysymystä, jonka tyyppi on "Taulukko (Numerot) (Valintalaatikon asettelu)". Kirjoita yllä oleva lauseke kenttään "Kysymyksen vahvistusyhtälö" kysymyksen lisäasetuksissa (muuttujien nimiä on ehkä muokattava!). |
| Esimerkkitiedosto | Validate number of boxes ticker per row for an Array (Numbers) Checkbox.lss |
![]()
| |
Laske kahden päivämäärän välinen ero
| Tarkoitus | Laske kahden päivämäärän välinen ero |
| Tyyppi | Relevanssi / Yhtälö-kysymystyyppi / Vahvistus |
| Esimerkki | Kysymys yksi (päivämäärä/aika, koodi: DOB): Mikä on syntymäaikasi? Kysymys kaksi (päivämäärä/aika, koodi: datetoday): Mikä päivämäärä on tänään? Kysymys kolme (tekstinäyttö): Olet XXXX päivää vanha. Tehtävä: Laske ja näytä kysymyksessä 1 annetun päivämäärän ja kysymyksessä 2 annetun päivämäärän välinen päivien määrä. |
| Lauseke | {(strtotime(datetoday)-strtotime(DOB))/60/60/24} |
| Kuvaus | strtotime laskee sekuntien määrän 1. tammikuuta 1970 ja annetun päivämäärän välillä. Yllä oleva lauseke laskee sekuntien määrän kahden annetun päivämäärän välillä. Termi "/60/60/24" muuntaa sekunnit päiviksi. Sen sijaan, että kysyisit "datetoday"-päivämäärää, voit käyttää myös strtotime('now') tai pelkkää time(), joka palauttaa suoraan sekuntien määrän tammikuusta 1970 nykyhetkeen (eli kyselyyn vastaamisen ajankohtaan). Näin voit nopeasti selvittää henkilön iän vuosina yhtälöllä {(time() - strtotime(DOB)) / 60 / 60 / 24 / 365.25} Kaikissa näissä tapauksissa on tärkeää, että päivämäärä syötetään oikeassa muodossa, muuten strtotime()-funktio ei toimi oikein. |
| Vaiheet | Luo kaksi päivämääräkysymystä (syntymäaikaa ja tämänpäiväistä päivämäärää varten) sekä tekstinäyttökysymys. Kirjoita tekstinäyttökysymyksen kysymystekstiin: "{datetoday} olit {(strtotime(today)-strtotime(dob))/60/60/24} päivää vanha." Huomaa: strtotime-funktio osaa käsitellä MONIA mutta ei kaikkia päivämäärämuotoja. Jos kohtaat ongelmia, aseta kyselysi päiväyksen muodoksi mm/dd/yyyy, yyyy-mm-dd tai dd.mm.yyyy" |
| Esimerkkitiedosto | Date_difference.zip |
| |
ExpressionScriptin käyttö arvioinneissa
Tässä on toinen esimerkki ExpressionScriptin käytöstä taulukkotyyppisten kysymysten ja arviointien kanssa:</ br>
Oletetaan, että sinulla on kaksi taulukkokysymystä ja haluat tallentaa laskennan tulokset tietokantaasi. Se on itse asiassa helppoa: luo ja testaa taulukkosi ja lähetä testivastaus nähdäksesi, toimiiko kaikki ja näkyvätkö tulokset valmis-sivulla.
Toteutuksen tiedot:
- lisää yhtälö-tyyppinen kysymys
- lisää seuraava rivi olettaen, että Q1 on taulukkokysymyksesi kysymyskoodi ja Q2 on toisen kysymyksen koodi:
{sum(Q1_SQ001.value,Q2_SQ001.value)}
Huomaa, että SQ001 on alikysymyksen oletuskoodi. Jos muutat alikysymyksen koodia, muokkaa yllä olevaa yhtälöä vastaavasti.
em_validation_q:n käyttö taulukossa
Voit käyttää kysymyksen vahvistusyhtälöä taulukon hallintaan millä tahansa ehdolla.
Toteutuksen tiedot:
- ensimmäinen taulukko: yhden valinnan taulukko
- Kysymyskoodi on ARRAY
- Alikysymyskoodit ovat SQ01, SQ02, SQ03 ja SQ04
- päivitä koko kysymyksen vahvistusyhtälö ja kirjoita siihen
!is_empty(ARRAY_SQ01) and !is_empty(ARRAY_SQ03)
- toinen taulukko: tekstitaulukko
- Kysymyskoodi on ARRAYTEXT
- Y-akselin alikysymyskoodit ovat SY01, SY02, SY03 ja SY04
- Päivitä koko kysymyksen vahvistusyhtälö ja kirjoita siihen
count(self.sq_SY01 >= 1) and count(self.sq_SY03 >= 3)








