ExpressionScript-esimerkkikyselyt
From LimeSurvey Manual
Johdanto
Paras tapa oppia käyttämään ExpressionScriptiä on kokeilla toimivia esimerkkejä ja muokata niitä omiin tarpeisiisi sopiviksi.
Alla on joukko esimerkkikyselyitä, joiden avulla voit tutustua siihen, miten EM:n avulla voi parantaa kyselyäsi, ja testata sitä. Nämä kyselyt löytyvät jakelupaketin /docs/demosurveys-kansiosta.
Relevanssi, räätälöinti ja yhtälöt
Yleiskatsaus
Seuraava esimerkki laskee jokaisen vastaajan BMI:n (painoindeksin). Alla on lueteltu ominaisuudet, joita tässä esimerkissä havainnollistetaan.
Havainnollistetut EM-ominaisuudet
- Relevanssi - tuki tehokkaalle ehdolliselle logiikalle;
- Piping / räätälöinti - mahdollistaa vastausten ja kysymysten metatietojen siirtämisen tai räätälöinnin;
- Dynaaminen räätälöinti - huomaa, että raportit muuttuvat sivulla, kun vastaat kysymyksiin.
- Mikroräätälöinti - ehdollinen räätälöinti lauseiden ja raporttien sisällä if()-lausekkeilla
- Yhtälöt - uusi kysymystyyppi, jonka avulla voit tehdä laskutoimituksia ja tallentaa tulokset tietokantaan, vaikka laskutoimitus olisi piilotettu
- Ehdollinen validointi - validointiehdot, kuten pienin sallittu arvo, voivat olla ehdollisia, esimerkiksi yhtälöihin perustuvia.
Kuvakaappaukset
Tämä esimerkki laskee painoindeksin eli painosi ja pituutesi perusteella lasketun luvun, josta selviää, oletko alipainoinen, normaalipainoinen, ylipainoinen vai lihava. Huomaa, että aluksi näet vain neljä pakollista kysymystä:

Kun olet antanut tietosi (ja voit valita, käytätkö metrisiä vai muita yksiköitä), näet räätälöidyn raportin, joka tiivistää antamasi tiedot ja kertoo painoluokkasi:

Tässä on toinen esimerkki, jossa käytetään muita kuin metrisiä yksiköitä ja jossa nähdään, miten tulos muuttuu dynaamisesti:

Taustalla on piilotettuja yhtälötyyppisiä kysymyksiä, jotka muuntavat tiedot tarvittaessa metrisiksi ja tallentavat metrisen pituuden, painon, BMI:n ja painoluokan tietokantaan ilman mukautettua JavaScriptiä.
Seuraavissa esimerkeissä näet, miten voit käyttää matemaattisia ja muita funktioita räätälöidyissä raporteissa. Näin sivu näyttää, ennen kuin olet syöttänyt mitään tietoja. Ehdollinen logiikka näyttää tyhjiä soluja, jos tietoja ei ole syötetty tai ne eivät ole numeerisia, sen sijaan että näytettäisiin "NaN" tai "Divide by Zero".

Kun numeroita syötetään, sivulla näkyvä raportti muuttuu ja näyttää suoritettavan laskutoimituksen ja sen tuloksen.

Tässä esimerkkikyselyssä on monia muita esimerkkejä. Esimerkiksi alla oleva kuvakaappaus näyttää yhden kymmenistä tavoista täyttää Dynaaminen relevanssi -sivu. Kuten ohjeteksti kertoo, kokeile erilaisia ikiä ja erityisesti epäloogisia vastausyhdistelmiä, jolloin sivun alalaidassa näkyy hauskoja viestejä. Huomaa myös, että jos kerrot sinulla olevan useampi kuin yksi lapsi, viesti kuuluu "I hope you enjoy playing with your X children" eikä "I hope you enjoy playing with your child". Tämä osoittaa, kuinka helposti voit mikroräätälöidä lauseita vastaamaan kohderyhmäsi sukupuolta ja/tai lukumäärää. Voit jopa helposti taivuttaa verbejä ja substantiiveja sukupuolen ja luvun mukaan.

Lataus
Pääset käyttämään esimerkkikyselyä napsauttamalla seuraavaa linkkiä: LS3_em_tailoring.zip.
Esimerkkiväestölaskenta
Yleiskatsaus
Tämä on väestölaskentaesimerkki, jossa kysytään, kuinka monta henkilöä taloudessasi asuu.
Se havainnollistaa, miten ryhmätason relevanssi helpottaa kysymysten "silmukan" toteuttamista. Kun olin luonut ryhmän Henkilölle 1, vein ryhmän. Koska käytin muuttujien nimissä qcode-tunnuksia, kuten p1_name, SGQA-koodin sijaan, pystyin muokkaamaan ja tuomaan ryhmän uudelleen tekstieditorilla nopeasti useita kertoja (esim. jokaisen toistuvan ryhmän muokkaaminen ja uudelleentuonti kesti noin 10 sekuntia, ja samalla varmistui, että kaikilla muuttujilla oli yksilölliset nimet ja että ryhmätason logiikka oli oikein).
Voit käyttää myös Kopioi kysymys -toimintoa, mutta se ei ole yhtä nopea kuin yllä ehdotettu tapa.
Tämä näyttää myös, miten voit estää päättymisviestin näkymisen, kunnes kysely on todella päättynyt (esim. kun kaikki tarvittavat ryhmät on täytetty).
Havainnollistetut EM-ominaisuudet
- Ryhmätason relevanssi - Seurantaryhmät (Henkilö 1–5) näytetään vain enintään määritetyn asukasmäärän verran;
- Räätälöinti - Loppuraportti tiivistää jokaisen asukkaan demografiset tiedot;
- Asteittainen kysymysten näyttäminen - Sekä ryhmittäin että kaikki kerralla -tilassa seuraavat kysymykset näytetään vasta, kun edelliset on vastattu.
Kuvakaappaukset
Kysely luo räätälöidyn raportin, joka näyttää määritetyn asukasmäärän demografiset tiedot:

Jos vaihdat tilaan, jossa näytetään yksi kysymys kerrallaan, huomaat, että hakemisto räätälöi kysymykset. Koska käyttäjä kertoi henkilön olevan nainen, kysymys on "Mikä on hänen nimensä". Ja koska vastasimme "Mary", seuraava kysymys on "Kuinka vanha Mary on"?

Lataus
Voit ladata esimerkkikyselyn napsauttamalla tästä: LS3_group_relevance.zip.
Peräkkäiset taulukon suodattimet
Yleiskatsaus
Tämä kysely perustuu Joy Lane Research, LLC:n luvalla käyttämään kyselyn suunnitteluun.
Kuvakaappaukset
Huomaa seuraavassa:
- Q02 näyttää vain ne tuotteet, jotka valittiin kysymyksessä Q01 (array_filter-toiminnolla)
- Q02 näyttää myös kohdan "Another product", eli kysymyksen Q01 kenttään "Other electronic" syötetyn tekstin
- Q04 näyttää vain ne kysymyksen Q02 tuotteet, jotka valittiin (eli taulukon suodatin toimii peräkkäin)
- Q05 näyttää vain ne kysymyksen Q02 tuotteet, joita ei valittu kysymyksessä Q02 (peräkkäisellä array_filter_exclude-toiminnolla)


Lataus
Voit ladata yllä olevan esimerkin napsauttamalla seuraavaa linkkiä: LS2_cascading_array_filter-esimerkkikysely.
Putkitus ja räätälöinti kaikilla kysymystyypeillä ja attribuuteilla
Yleiskatsaus
Jos muuttujien nimeäminen (SGQA vs. Qcode) hämmentää, et ole yksin. Vaikka pääohjeessa kuvataan miten Qcode-muuttujien nimet muodostetaan, mikään ei voita toimivaa esimerkkiä. Tämä kysely näyttää, miten voit käyttää kysymysten attribuutteja ja vastauksia ExpressionScriptin avulla.
Sisältö
- Esimerkkejä jokaisesta kysymystyypistä
- Mukana ovat kaikki kysymystyypit, joissa voi käyttää vaihtoehtoa "muu", jotta näet, miten se vaikuttaa muuttujien nimeämiseen
- Oletusarvot kaikille kysymystyypeille, jotka hyväksyvät oletusarvoja
- Räätälöinti - Sivulla ja sivun ulkopuolella näytettävät raportit, jotka näyttävät kaikki 16 käytettävissä olevaa EM:n pistemerkinnän päätettä.
- Nämä raportit näyttävät kaikki tällä hetkellä syötetyt tiedot (eli näyttävät, miten voisit luoda käyttäjille omia tulostettavia raportteja vastausten tulostusnäkymän sijaan)
- Kaikkien muuttujien oikeat Qcode- ja SGQA-nimet
Kuvakaappaukset
Tämä on valtava kysely, joten emme sisällyttäneet siitä kuvakaappauksia. Lataa se sen sijaan ja kokeile itse.
Lataus
Voit ladata kyselyn napsauttamalla seuraavaa linkkiä: LS3_EM_question_attributes.lss
Perinteinen validointi uudelleen ajateltuna
Yleiskatsaus
Tämä esittelee kaikki lausekkeita hyödyntävät validointityypit ja sen, miten ne vaikuttavat kuhunkin validointia tukevaan kysymystyyppiin. Monissa tapauksissa validointivihjeet ovat aluksi piilossa ja ne tulevat näkyviin vain, jos kysymys ei täytä validointiehtoja (ja ne myös katoavat, kun kysymys täyttää validointiehdot).
Esitellyt vahvistustyypit
- min_num_value_n - vastauksen minimiarvo
- max_num_value_n - vastauksen maksimiarvo
- min_answers - vaadittu vastausten vähimmäismäärä
- max_answers - sallittu vastausten enimmäismäärä
- multiflexible_min - vastauksen pienin sallittu arvo (monijoustavan numerokysymyksen kysymystyypille)
- multiflexible_max - vastauksen suurin sallittu arvo (monijoustavan numerokysymyksen kysymystyypille)
- min_num_value - kysymyksen kaikkien vastausten pienin sallittu summa
- max_num_value - kysymyksen kaikkien vastausten suurin sallittu summa
- equals_num_value - kysymyksen kaikkien vastausten summan on oltava yhtä suuri kuin tämä arvo
- validation - tämä on kysymyksen säännöllisen lausekkeen vahvistus - se voi koskea yksittäisiä soluja
Kuvakaappaukset
Uusien CSS-tyylien ansiosta jokainen vahvistustyyppi näyttää oman vihjeensä. Jos vihjeet näytetään, ne voidaan piilottaa hide_tip-asetuksella. Oletuksena vihjeet näytetään punaisella fontilla, jos kysymys ei täytä vahvistuksen ehtoja, ja vihreällä, jos se täyttää ne:

Käyttäjä ei voi lähettää sivua, jolla on vahvistusvirheitä. Käyttäjälle ilmoitetaan heti, jos hän on syöttänyt virheellisiä tietoja:

Vahvistus voidaan kohdistaa taulukon yksittäisiin soluihin, kuten tässä esimerkissä, jossa säännölliset lausekkeet varmistavat, että jokainen syöte on oikein muotoiltu yhdysvaltalainen puhelinnumero suuntanumeroineen.

Lataus
Voit ladata yllä olevan esimerkin napsauttamalla seuraavaa linkkiä: LS3_Validation_tests.zip.
Vahvistusyhtälöt
Yleiskatsaus
Joskus tarvitset mukautettua vahvistusta, jota ei voi toteuttaa perinteisillä minimi- ja maksimiehdoilla. Tähän tarvitset asetukset em_validation_q ja em_validation_sq, joiden avulla voit rakentaa monimutkaisia vahvistusyhtälöitä kysymys- ja alikysymystasolla.
Esitellyt EM-ominaisuudet
- em_validation_q - tämä on yhtälö, joka määrittää, onko koko kysymys kelvollinen
- em_validation_q_tip - tämä on viesti, joka näytetään, jos kysymys ei täytä em_validation_q-ehtoja
- em_validation_sq - tämä on yhtälö, joka määrittää, onko jokainen alikysymys (taulukon solu) kelvollinen
- em_validation_sq_tip - tämä on viesti, joka näytetään, jos jokin alikysymyksistä on virheellinen.
Yleensä, kun em_validation_sq on käytössä, solun taustaväri muuttuu punaiseksi virheen merkiksi, jos jokin solu on virheellinen.
Kuvakaappaukset

Tämä kysymys varmistaa, että lasten iät syötetään laskevassa järjestyksessä, käyttämällä tätä vahvistusyhtälöä:
q1_sq1 >= q1_sq2 && q1_sq2 >= q1_sq3 && q1_sq3 >= q1_sq4

Alla olevassa esimerkissä vahvistus varmistaa, että millä tahansa rivillä vastataan enintään kolmeen kysymykseen, käyttämällä tätä vahvistusyhtälöä:
(sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= 3) && (sum(Test_B_1, Test_B_2, Test_B_3, Test_B_4, Test_B_5) <= 3) && (sum(Test_C_1, Test_C_2, Test_C_3, Test_C_4, Test_C_5) <= 3)
Voit kirjoittaa saman myös seuraavasti, jolloin LimeSurvey muuntaa sen automaattisesti ajon aikana yllä olevaksi lausekkeeksi.
(sum(self.sq_A) <= 3) && (sum(self.sq_B) <= 3) && (sum(self.sq_C) <= 3)

Lataus
Voit ladata yllä olevissa esimerkeissä käytetyn esimerkkikyselyn seuraavasta linkistä: ls2_test_em_sq_validation.lss.
Alikysymyksen relevanssi
Yleiskatsaus
Tämä esimerkki näyttää, miten array_filter ja validointikriteerit voivat vaikuttaa toisiinsa. Summiin kohdistuvissa validoinneissa huomioidaan vain relevantit (näkyvät) arvot.
Havainnollistetut EM-ominaisuudet
Esimerkissä näytetään myös, miten ydinkysymyksiin vastattujen kysymysten määrät raportoidaan dynaamisesti.
Kuvakaappaukset
Näkyvien rivien määrän muuttaminen muuttaa summaa dynaamisesti. Alikysymyksen merkitseminen ei-relevantiksi ei tyhjennä sen arvoa. Jos alikysymys on ei-relevantti, sen arvot eivät kuitenkaan vaikuta mihinkään yhtälöön.


Katso, mitä tapahtuu, kun valitset ensimmäisessä kysymyksessä "Which rows should appear below" vaihtoehdon "Fifth subquestion". Huomaa, että toisen "Enter some numbers" -kysymyksen summa on nyt 5. Vaikka kyseisen kysymyksen viidennen alikysymyksen arvo on edelleen 14 (jos poistat viidennen alikysymyksen valinnan, näet arvon 14 jälleen), arvo ei vaikuta summaan, koska se on tällä hetkellä ei-relevantti. Kaikki ei-relevantit tiedot tyhjennetään (asetetaan tietokannassa arvoon NULL) lähetettäessä, mutta ne pysyvät sivulla käytettävissä siltä varalta, että vastaaja haluaa tai joutuu muuttamaan vastauksiaan.

Lataus
Voit ladata esimerkkimme napsauttamalla tästä: ls2_subquestion_relevance.lss.
Pilkun käyttäminen desimaalierottimena
Yleiskatsaus
ExpressionScript varmistaa, että numeerisiin kenttiin voi syöttää vain kelvollisia lukuja. Jos syötät virheellisen luvun, saat varoituksen virheestä (esimerkiksi fruity-teemassa koko kysymys korostuu punaisella).
Huomaa, että numeeriset arvot muunnetaan tietokannassa aina käyttämään desimaalierottimena pistettä. Näin tilastolliset analyysit toimivat oikein.
Voit vaihtaa desimaalierottimen avaamalla Tekstielementit-asetukset, jotka sijaitsevat Asetukset-välilehdellä, ja etsimällä Desimaalierotin-toiminnon.
Desimaalierotinta käyttävät kysymystyypit
- Numeerinen syöte [N]
- Useita numeerisia syötteitä [K]
- Taulukko (Numerot) [:]
- Taulukko (tekstit) [;], kun käytetään numbers_only-attribuuttia
- Lista (radiopainikkeet) [L], kun käytetään other_numbers_only-attribuuttia
- Lyhyt vapaateksti [S], kun käytetään numbers_only-attribuuttia
- Useita lyhyitä tekstikenttiä [Q], kun käytetään numbers_only-attribuuttia
- Monivalinta [M], kun käytetään other_numbers_only-attribuuttia
- Monivalinta kommenteilla [P], kun käytetään other_numbers_only-attribuuttia
Kuvakaappaukset
Alla olevista kuvakaappauksista näet, että desimaalierottimena voi käyttää pilkkua.

Lataus
Voit ladata yllä olevan esimerkin seuraavasta linkistä: ls2_comma_as_radix_separator.lss.
Satunnaistusryhmät
Yleiskatsaus
Tämä kysely havainnollistaa, miten random_group-attribuuttia käytetään.
Jos tätä attribuuttia käytetään, kysymysten järjestys arvotaan uudelleen aina, kun aloitat kyselyn. Kun kysely on kuitenkin aloitettu, satunnaisjärjestys pysyy samana, vaikka vaihtaisit kieltä.
Kuvakaappaukset
Tarkastellaan yhdessä alla olevaa esimerkkiä. Sivun ensimmäinen satunnainen kysymys on joko Q1, Q4 tai Q7. Sivun toinen satunnainen kysymys on joko Q2, Q5 tai Q8.

Tässä on satunnaisjärjestys, joka syntyi, kun testasin tätä kyselyä ensimmäisen kerran.

Kun testasin kyselyä toisen kerran, syntyi eri satunnaisjärjestys.

Kun kuitenkin vaihdoin kielen ranskaksi (aloittamatta kyselyä uudelleen), satunnaisjärjestys pysyi ennallaan.

Lataus
Voit ladata yllä olevan esimerkin seuraavasta linkistä: Randomization_Group_Test.lss
Yhden kysymyksen satunnainen esittäminen ryhmää kohden
Yleiskatsaus
Tämä kysely näyttää, miten kysely voidaan määrittää näyttämään satunnaisesti yksi kysymys ryhmää kohden. Siinä on 5 ryhmää, joissa kussakin on 6 kysymystä. Alussa, ryhmässä 0, täytetään viisi piilotettua yhtälökysymystä nimeltä ask1-ask5. Jokaisen kysymysteksti-kentässä on arvo {floor(rand(1,6.9999))}, mikä tarkoittaa, että muuttujilla ask1-ask5 on kullakin arvo väliltä 1-6. Tämän jälkeen jokaisella ryhmän kysymyksellä on relevanssiyhtälö, kuten "ask1==N", jossa N on kysymyksen järjestysnumero ryhmässä (eli ryhmän 1 kolmannen kysymyksen relevanssiyhtälö on "ask1==3").
Tämä kysely toimii yhtä hyvin tilassa Kaikki kerrallaan, tilassa Ryhmittäin ja kysymys kerrallaan -tilassa. Koska satunnaisuus määritetään ensimmäisessä ryhmässä ja tämä ryhmä on käytännössä piilossa (koska kaikki ask1-ask5-kysymykset ovat piilotettuja), satunnaisuus pysyy samana kullekin vastaajalle, mutta jokaisella vastaajalla on oma satunnaisjärjestyksensä.
Esitellyt ominaisuudet
- Yhtälökysymystyyppi
- Satunnaistoiminnot
- Ehtofunktio (if)
Kuvakaappaukset
Tämä on Group0, joka käyttää yhtälökysymystyyppiä satunnaisten arvojen 1-6 valitsemiseen kullekin ryhmälle (paitsi viimeiselle ryhmälle, jossa on vain 4 kysymystä). Huomaa, että "if()"-funktio tarkistaa ensin, onko ask1 jo asetettu, ja jos on, käyttää kyseistä arvoa. Jos arvoa ei ole asetettu, se käyttää satunnaista arvoa ask1:n arvon asettamiseen.

Tämä ryhmä näyttää, miten Group0:n muuttujaa (ask4) käytetään ohjaamaan, mikä kysymys näkyy neljännessä ryhmässä.

Lataus
Voit ladata yllä olevan kyselyesimerkin tästä: Satunnaiset kysymykset ryhmässä -kyselyesimerkki.
Tietyn määrän kysymyksiä satunnainen esittäminen ryhmässä (kysymysten osajoukko)
Yleiskatsaus
Tämä kysely näyttää, miten ryhmässä esitetään satunnainen osajoukko kysymyksistä. Voit esimerkiksi näyttää 5 satunnaista kysymystä ryhmän 10 kysymyksestä.
Kyselyssä on yksi ryhmä, jossa on 10 kysymystä. Kaikille kysymyksille annetaan sama satunnaisryhmän nimi. Tämän vuoksi ne näytetään satunnaisessa järjestyksessä sivun latautuessa. Jokaiselle kysymykselle annetaan relevanssiyhtälö, jonka mukaan kaikkien muiden ryhmän kysymysten "relevanceStatus"-arvojen summan on oltava pienempi kuin näytettävien kysymysten määrä. Koska relevanceStatus määritetään kysymysten renderöinnin yhteydessä, tämä laskee käytännössä edeltävien kysymysten määrän.
Viiden kymmenestä -esimerkissämme Q1:n yhtälö olisi siis:
sum(Q2.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5
Q2:lle se olisi:
sum(Q1.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5
Ja niin edelleen...
Esitellyt ominaisuudet
Lataus
Voit ladata yllä olevan esimerkin seuraavasta linkistä: Satunnainen 5 kymmenestä -kyselyesimerkki.
Käyttäjän syöttämän tuotelistan arviointi
Yleiskatsaus
Alla oleva esimerkki näyttää, miten voit pyytää käyttäjiä luettelemaan joukon heitä kiinnostavia tuotteita ja antamaan sitten niille arvion.
Esitellyt ES-ominaisuudet
- Vastausten räätälöinti - tuotteita arvioitaessa nimikkeet tulevat edellisen monivalintakysymyksen kommenttikentästä
- Asteikkojen räätälöinti - monia kysymysten lisäasetuksia, kuten asteikkojen otsikoita, voi myös räätälöidä.
Kuvakaappaukset
Tämä kuva osoittaa, että koska vain tuotteet 1, 3 ja 5 valittiin, vain nämä kolme näytetään (käyttäen array_filter-attribuuttia). Lisäksi toisen kysymyksen rivien nimikkeet ovat joko tuotenumeroita (jos kommenttikenttään ei ole syötetty mitään) tai kommenttikenttien sisältöä.

Tämä kuva näyttää, miten räätälöidyt vastaukset määritetään:

Tässä on kyseisen kysymyksen logiikkatiedoston näkymä, jonka avulla voimme tarkistaa, että ehdollinen logiikka toimii halutulla tavalla (esim. onko syntaksivirheitä):

Seuraavassa kuvassa on ryhmä, jossa määrität 5-portaisen arviointiasteikon (vaihtoehdot 1–5), asteikon otsikon ja arvioitavat tuotteet. Viimeinen kysymys osoittaa, että taulukkokysymyksen jokaista osaa voi räätälöidä:

Seuraavassa kuvassa näkyy viimeisen kysymyksen logiikkatiedoston näkymä. Kuten huomaat, alikysymyksiä, vastauksia ja asteikon otsikoita voi räätälöidä.

Lataus
Voit ladata yllä olevan kyselyesimerkin seuraavasta linkistä: Käyttäjän syöttämän tuotelistan arviointi -kyselyesimerkki.