Expression Managerin esimerkkikyselyt
From LimeSurvey Manual
Johdanto
Paras tapa oppia käyttämään ExpressionScriptiä on kokeilla toimivia esimerkkejä ja muokata niitä omiin tarpeisiisi.
Alla on joukko esimerkkikyselyitä, joiden avulla voit tutustua siihen, miten EM:n avulla voidaan 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 painoindeksin (BMI, Body Mass Index). Alla on lueteltu ominaisuudet, joita esimerkissä havainnollistetaan.
EM:n havainnollistetut 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 sitä mukaa, 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 - validointikriteerit, 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 nähdään, onko sinulla ylipainoa. Huomaa, että aluksi näet vain neljä pakollista kysymystä:

Kun olet syöttänyt tietosi (ja valinnut, käytätkö metrisiä vai ei-metrisiä yksiköitä), näet räätälöidyn raportin, joka tiivistää syöttämäsi tiedot ja kertoo painoluokkasi:

Tässä on toinen esimerkki, jossa käytetään ei-metrisiä yksiköitä, jotta nähdään, miten tulos muuttuu dynaamisesti:

Sisäisellä tasolla on piilotettuja yhtälötyyppisiä kysymyksiä, jotka muuntavat tiedot metrisiksi (tarvittaessa) ja tallentavat metrisen pituuden, painon, painoindeksin ja painoluokan tietokantaan ilman omaa 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 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 oleva 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ää Dynamic Relevance -sivu. Kuten ohjeteksti kehottaa, kokeile eri ikiä ja erityisesti epäloogisia vastausyhdistelmiä nähdäksesi alareunaan syntyvät hauskat viestit. Huomaa myös, että jos kerrot, että sinulla on 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, miten voit helposti 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
Voit avata esimerkkikyselyn 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 SGQA-koodin sijaan qcode-muuttujien nimiä, kuten p1_name, pystyin muokkaamaan ja tuomaan ryhmän uudelleen nopeasti tekstieditorilla useita kertoja (esim. kunkin toistuvan ryhmän muokkaamiseen ja uudelleentuontiin meni noin 10 sekuntia, ja näin varmistettiin, 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ää Valmis-viestin näkymisen, kunnes kysely on todella valmis (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 samassa taloudessa asuvien henkilöiden määrän verran;
- Räätälöinti - Loppuraportti tiivistää jokaisen samassa taloudessa asuvan henkilön demografiset tiedot;
- Asteittainen kysymysten näyttäminen - Sekä ryhmä kerrallaan että kaikki yhdellä sivulla -tilassa seuraavat kysymykset näytetään vasta, kun edelliset on vastattu.
Kuvakaappaukset
Kysely luo räätälöidyn raportin, joka näyttää määritetyn määrän samassa taloudessa asuvien henkilöiden demografiset tiedot:

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

Lataus
Voit ladata esimerkkikyselyn napsauttamalla tästä: LS3_group_relevance.zip.
Portaittaiset taulukon suodattimet
Yleiskatsaus
Tämä kysely perustuu Joy Lane Research, LLC:n luvalla käytettyyn kyselyn rakenteeseen.
Kuvakaappaukset
Huomaa seuraavat asiat:
- Q02 näyttää vain ne tuotteet, jotka on valittu kysymyksessä Q01 (array_filter-attribuutin avulla)
- Q02 näyttää myös vaihtoehdon "Another product", eli kysymyksen Q01 "Other electronic" -kenttään syötetyn tekstin
- Q04 näyttää vain ne kysymyksen Q02 tuotteet, jotka valittiin (taulukon suodatin siis porrastuu)
- Q05 näyttää vain ne kysymyksen Q02 tuotteet, joita ei valittu kysymyksessä Q02 (porrastetun array_filter_exclude-attribuutin avulla)


Lataus
Lataa yllä oleva esimerkki napsauttamalla seuraavaa linkkiä: LS2_cascading_array_filter-esimerkkikysely.
Piping/räätälöinti kaikilla kysymystyypeillä ja attribuuteilla
Yleiskatsaus
Jos muuttujien nimeäminen (SGQA vs. Qcode) hämmentää, et ole yksin. Vaikka pääohjeissa 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 sen ulkopuolella näytettävät raportit, jotka esittelevä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äet, miten voisit luoda käyttäjille omia tulostettavia raportteja vastausten tulostusnäkymän sijaan)
- Kaikkien muuttujien oikea Qcode- ja SGQA-nimeäminen
Kuvakaappaukset
Tämä on valtava kysely, joten emme sisällyttäneet kuvakaappauksia. Lataa se sen sijaan ja kokeile itse.
Lataus
Lataa kysely napsauttamalla seuraavaa linkkiä: LS3_EM_question_attributes.lss
Perinteinen vahvistus uudelleen ajateltuna
Yleiskatsaus
Tämä esimerkki havainnollistaa kaikkia lausekkeita hyödyntäviä vahvistustyyppejä ja sitä, miten ne vaikuttavat jokaiseen vahvistusta tukevaan kysymystyyppiin. Monissa tapauksissa vahvistusvihjeet ovat aluksi piilossa ja tulevat näkyviin vasta, kun kysymys ei täytä vahvistuskriteerejä (ja katoavat taas, kun kysymys täyttää kriteerit).
Esitellyt vahvistustyypit
- min_num_value_n - vastauksen minimiarvo
- max_num_value_n - vastauksen maksimiarvo
- min_answers - vaadittujen vastausten vähimmäismäärä
- max_answers sallittujen vastausten enimmäismäärä
- multiflexible_min - vastauksen sallittu minimiarvo (multiflexi-numerokysymystyypille)
- multiflexible_max - vastauksen sallittu maksimiarvo (multiflexi-numerokysymystyypille)
- min_num_value - kysymyksen kaikkien vastausten sallittu pienin summa
- max_num_value - kysymyksen kaikkien vastausten sallittu suurin summa
- equals_num_value - kysymyksen kaikkien vastausten summan on oltava yhtä suuri kuin tämä arvo
- validation - tämä on kysymyksen säännöllinen lauseke -vahvistus, joka voi koskea yksittäisiä soluja
Kuvakaappaukset
Uusien CSS-tyylien avulla jokainen vahvistustyyppi näyttää oman vihjeensä. Jos vihjeet näytetään, ne voidaan piilottaa hide_tip-asetuksella. Oletuksena vihjeet näytetään punaisella, jos kysymys ei täytä vahvistuskriteerejä, ja vihreällä, jos se täyttää ne:

Käyttäjä ei voi lähettää sivua, jossa on vahvistusvirheitä. Käyttäjälle ilmoitetaan heti, jos hän on antanut 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 tarvitaan mukautettua vahvistusta, jota ei voi toteuttaa perinteisillä minimi- ja maksimikriteereillä. Tällöin käytetään em_validation_q- ja em_validation_sq-asetuksia, joiden avulla voit muodostaa 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-kriteerejä
- 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ä ja jokin solu on virheellinen, solun taustaväri muuttuu punaiseksi virheen osoittamiseksi.
Kuvakaappaukset

Tämä kysymys varmistaa, että lasten iät syötetään laskevassa järjestyksessä, käyttämällä seuraavaa 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ä seuraavaa 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 sen myös seuraavasti, jolloin LimeSurvey muuntaa sen automaattisesti suoritusaikana yllä esitetyksi lausekkeeksi.
(sum(self.sq_A) <= 3) && (sum(self.sq_B) <= 3) && (sum(self.sq_C) <= 3)

Lataus
Voit ladata yllä olevissa esimerkeissä käytetyn kyselyesimerkin 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.
Esitellyt EM-ominaisuudet
Esimerkki näyttää myös, miten ydinkysymyksiin vastattujen kysymysten määrät raportoidaan dynaamisesti.
Kuvakaappaukset
Näkyvien rivien määrän muuttaminen muuttaa summaa dynaamisesti. Alikysymyksen merkitseminen epärelevantiksi ei tyhjennä sen arvoa. Jos alikysymys on epärelevantti, sen arvot eivät kuitenkaan vaikuta mihinkään yhtälöön.


Huomaa, mitä tapahtuu, kun valitset ensimmäisessä kysymyksessä "Which rows should appear below" vaihtoehdon "Fifth subquestion". Toisen kysymyksen "Enter some numbers" summa on nyt 5. Vaikka kyseisen kysymyksen viidennen alikysymyksen arvo on edelleen 14 (näet arvon 14 uudelleen, jos poistat viidennen alikysymyksen valinnan), tämä arvo ei vaikuta summaan, koska se on tällä hetkellä epärelevantti. Kaikki epärelevantit tiedot tyhjennetään (asetetaan tietokannassa arvoon NULL) lähetettäessä, mutta ne säilyvät sivulla siltä varalta, että vastaajat haluavat muuttaa vastauksiaan.

Lataus
Voit ladata esimerkkimme napsauttamalla tästä: ls2_subquestion_relevance.lss.
Pilkun käyttö desimaalierottimena (desimaalipilkku)
Yleiskatsaus
ExpressionScript varmistaa, että numeerisiin kenttiin voi syöttää vain kelvollisia lukuja. Jos syötät virheellisen luvun, saat varoituksen siitä, että jokin on pielessä (esimerkiksi fruity-teemassa koko kysymys värjätään punaiseksi).
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.
Satunnaistamisryhmät
Yleiskatsaus
Tämä kysely havainnollistaa, miten random_group-attribuuttia käytetään.
Jos tätä attribuuttia käytetään, kysymysten järjestys satunnaistetaan aina, kun kysely aloitetaan. Kun kysely on kuitenkin aloitettu, satunnaistettu jä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 satunnaistettu kysymys on joko Q2, Q5 tai Q8.

Tässä on satunnaistus, joka muodostui, kun testasin tätä kyselyä ensimmäisen kerran.

Kun testasin kyselyä toisen kerran, muodostui erilainen satunnaistus.

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

Lataus
Voit ladata yllä olevan esimerkin seuraavasta linkistä: Randomization_Group_Test.lss
Yhden kysymyksen satunnainen esittäminen ryhmää kohti
Yleiskatsaus
Tämä kysely näyttää, miten kysely voidaan määrittää esittämään satunnaisesti yksi kysymys ryhmää kohti. Siinä on 5 ryhmää, joissa kussakin on 6 kysymystä. Aluksi ryhmässä 0 täytetään viisi piilotettua yhtälökysymystä, joiden nimet ovat ask1-ask5. Jokaisen kysymysteksti-kentän arvo on {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 kaikki kerrallaan -, ryhmittäin- ja kysymys kerrallaan -tiloissa. Koska satunnaistus määritetään ensimmäisessä ryhmässä ja ryhmä on käytännössä piilotettu (sillä kaikki ask1-ask5-kysymykset ovat piilotettuja), satunnaistus pysyy samana kullekin vastaajalle, mutta jokaisella vastaajalla on oma satunnaistuksensa.
Havainnollistetut ominaisuudet
- Yhtälö-kysymystyyppi
- Satunnaistamisfunktiot
- Ehdollinen (if) -funktio
Kuvakaappaukset
Tämä on Group0, joka käyttää yhtälö-kysymystyyppiä valitsemaan satunnaiset arvot väliltä 1-6 jokaiselle 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 muuttujalla (ask4) ohjataan, mikä kysymys näkyy neljännessä ryhmässä.

Lataus
Voit ladata yllä olevan kyselyesimerkin napsauttamalla tätä: 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 on annettu sama satunnaisryhmän nimi. Tämän vuoksi ne näytetään satunnaisessa järjestyksessä sivun latautuessa. Jokaiselle kysymykselle annetaan relevanssiyhtälö, jonka mukaan ryhmän kaikkien muiden 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 kysymyksen valinnassa kymmenestä kysymyksestä 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...
Havainnollistetut ominaisuudet
Lataus
Voit ladata yllä olevan esimerkin seuraavasta linkistä: Satunnaiset 5 kymmenestä -kyselyesimerkki.
Käyttäjän syöttämän tuotelistan arviointi
Yleiskatsaus
Alla oleva esimerkki näyttää, miten käyttäjiä voidaan pyytää listaamaan joukko heitä kiinnostavia tuotteita ja arvioimaan sitten nämä tuotteet.
Havainnollistetut EM-ominaisuudet
- Vastausten räätälöinti - tuotteita arvioitaessa nimikkeet tulevat edellisen monivalintakysymyksen kommenttikentästä
- Asteikkojen räätälöinti - monia edistyneitä kysymysasetuksia, kuten asteikon otsikoita, voi myös räätälöidä.
Kuvakaappaukset
Tämä kuva osoittaa, että vaikka 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 varmistaa, että ehdollinen logiikka toimii halutulla tavalla (esim. tarkistaa, onko syntaksivirheitä):

Seuraava kuva näyttää ryhmän, jossa määrität 5-portaisen arviointiasteikon (vaihtoehdot 1–5), asteikon otsikon ja arvioitavat tuotteet. Viimeinen kysymys osoittaa, että taulukkokysymyksen kaikkia osia voi räätälöidä:

Seuraava kuva näyttää viimeisen kysymyksen logiikkatiedostonäkymän. 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.