x

Pääluvut

  1. LimeSurvey Cloud vs LimeSurvey CE
  2. Pikaopas - LimeSurvey 3.0+
  3. Asennus - LimeSurvey CE
  4. Miten suunnitella hyvä kysely (opas)
  5. Aloitus
  6. LimeSurveyn hallinnointi
  7. Kyselyt - johdanto
  8. Kyselyn asetukset
  9. Kyselyn valikko
  10. Kyselyn rakenne
  11. Kysymykset - johdanto
  12. Kysymysryhmät - johdanto
  13. Kyselyt - hallinta
  14. Kyselyn työkalupalkin asetukset
  15. Monikielinen kysely
  16. ExpressionScript-moottori - Pikaopas
  17. Luokittelemattomat ja edistyneet ominaisuudet
  18. Yleiset usein kysytyt kysymykset
  19. Vianmääritys
  20. Kiertotavat
  21. Lisenssi
  22. Version muutoslogi
  23. Lisäosat
 Actions

Expression Manager

From LimeSurvey Manual

Tämä sivu on saatettu kääntää konekäännöksenä, ja se voi sisältää virheitä. Näytä englanninkielinen alkuperäinen · Paranna tätä käännöstä
This page is a translated version of the page Expression Manager and the translation is 100% complete.

Pikaopas

Yleiskatsaus

Kyselyjä mukauttaessasi tarvitset yleensä keinon määrittää seuraavat asiat:

  1. Navigointi/haarautuminen - annetaan vastaajan vastausten muuttaa kysymysten esittämisjärjestystä
  2. Räätälöinti/putkitus - kysymyksen muotoilu (esimerkiksi viittaaminen aiempiin vastauksiin tai lauseiden taivuttaminen vastaajien lukumäärän tai sukupuolen mukaan) tai mukautettujen raporttien luominen (kuten arviopisteet tai räätälöidyt neuvot).
  3. Vahvistus - varmistetaan, että vastaukset täyttävät tietyt ehdot, kuten pienimmän ja suurimman arvon tai syötemallin mukaisuuden

Expression Manager (EM) tarjoaa intuitiivisen tavan määrittää logiikka kullekin näistä ominaisuuksista. Lähes mikä tahansa tavallisena matemaattisena yhtälönä kirjoitettava lauseke on kelvollinen lauseke, vaikka kutsuisit funktioita. EM tarjoaa tällä hetkellä käyttöön 80 funktiota, ja sitä voidaan helposti laajentaa useammilla. 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 Expression Manageria käytetään

Relevanssi (navigoinnin/haarautumisen ohjaus)

Joissakin kyselyissä käytetään "Goto-logiikkaa", jossa esimerkiksi jos vastaat kysymykseen 1 vaihtoehdolla C, siirrytään kysymykseen 5. Tämä lähestymistapa on hyvin rajoittava, koska sitä on vaikea vahvistaa ja se rikkoutuu helposti, kun kysymysten järjestystä pitää muuttaa. EM käyttää totuusarvoista relevanssiyhtälöä määrittämään kaikki ehdot, joilla kysymys voi olla voimassa. Jos kysymys on relevantti, kysymys näytetään, muuten se on ei-sovellettava (Not Applicable) ja tietokantaan tallennetaan arvo NULL. Tämä on samankaltaista kuin mitä voi tehdä Ehdot-editorilla, mutta EM:n avulla voit helposti määrittää paljon monimutkaisempia ja tehokkaampia ehtoja (ja käyttää muuttujan nimeä SGQA-nimeämisen sijaan).

Tämä kuva näyttää yhden tavan tarkastella kyselyn relevanssilogiikkaa. Se laskee painoindeksin. Relevanssiyhtälö näytetään hakasulkeissa heti muuttujan nimen (joka on vihreällä) jälkeen. Muuttujien weight, weight_units, height ja height_units relevanssi on kaikissa 1, eli nämä kysymykset esitetään aina. BMI:n relevanssi on kuitenkin {!is_empty(height) and !is_empty(weight)}, mikä tarkoittaa, että BMI lasketaan vain, jos vastaaja syöttää arvon sekä pituudelle että painolle (näin vältetään nollalla jaon virheen riski). Lisäksi Report-kysymys näytetään vain, jos vastaaja vastaa kaikkiin neljään pääkysymykseen (height, height_units, weight, weight_units).

Relevanssi näkyy ja on muokattavissa seuraavissa paikoissa:

Kysymystason relevanssin tarkastelu / muokkaus

Tämä yhtälö laskee painoindeksin (BMI). Se kysytään vain, jos henkilö on ensin syöttänyt pituutensa ja painonsa.

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

Huomaa, että aaltosulkeita ei käytetä, kun syötät relevanssiyhtälön.

Ryhmätason relevanssin tarkastelu / muokkaus

Tämä on esimerkki väestölaskentakyselystä. Ensimmäisellä sivulla kysytään, kuinka monta ihmistä asuu kanssasi, ja tulos tallennetaan muuttujaan "cohabs". Tämä sivu näytetään vain, jos asuinkumppaneita on useampi kuin yksi (eli se näytetään toiselle kanssasi asuvalle henkilölle), ja lisäksi vain, jos olet määrittänyt, miten ensimmäinen henkilö on sukua sinulle (p1_rel).

Kuten näet, ryhmällä on myös kysymystason relevanssiehtoja, joiden mukaan kukin kysymys tulee näkyviin vasta, kun olet vastannut sitä edeltävään kysymykseen (esim. {!is_empty(p1_sex)}). EM yhdistää ryhmä- ja kysymystason relevanssin puolestasi. Ryhmän kysymykset esitetään vain, jos ryhmä kokonaisuutena on relevantti. Sen jälkeen esitetään vain ne ryhmän kysymykset, jotka ovat relevantteja.

Tässä on näkymä, jossa muokataan kyseisen kysymyksen ryhmätason relevanssia:

Huomaa, että aaltosulkeita ei käytetä, kun syötät relevanssiyhtälön.

Räätälöinti/putkitus

EM:n avulla voit helposti räätälöidä kysymyksiäsi ehdollisesti sekä yksinkertaisilla että monimutkaisilla tavoilla. Joskus tarvitset vain yksinkertaisen korvauksen, kuten "Sanoit ostaneesi [tuote]. Mistä pidit siinä eniten?". Joskus tarvitset ehdollisen korvauksen, kuten "[Herra/Rouva] [Sukunimi], olisitteko valmis täyttämään kyselymme?". Tässä tapauksessa haluat käyttää sanaa Herra tai Rouva henkilön sukupuolen mukaan. Toisinaan tarvitset vielä monimutkaisemman korvauksen (esimerkiksi matemaattiseen laskentaan perustuvan). EM tukee kaikkia näitä räätälöinnin/putkituksen tyyppejä.

Ehdolliset yhtälöt

Painoindeksiesimerkki osoittaa, että henkilön BMI voidaan laskea, vaikka hän syöttäisi pituutensa ja painonsa metrisinä tai ei-metrisinä yksiköinä.

Tässä weight_kg on {if(weight_units == 'kg', weight, weight * .453592)}. Tämä if()-funktio tarkoittaa, että jos vastaaja ilmoitti painon kiloina, käytetään kyseistä arvoa. Muussa tapauksessa syötetty arvo (joka oli paunoina) kerrotaan luvulla .453592, jolloin se muunnetaan kiloiksi. Muuttuja height_m käyttää samanlaista tapaa laskeakseen henkilön pituuden metreinä, vaikka hän olisi syöttänyt pituutensa tuumina.

BMI laskee painoindeksin kaavalla {weight_kg / (height_m * height_m)}.

Lopuksi raportti mukauttaa vastaajalle näytettävän viestin ehdollisesti ja kertoo hänelle, mitä hän syötti. ("Kerroit olevasi 2 metriä pitkä ja painavasi 70 kg.")

Vaikka se ei näy hyvin yllä olevassa kuvassa, weight_status käyttää sisäkkäisiä if()-lausekkeita luokitellakseen henkilön alipainoisesta vaikeasti lihavaan. Voit nähdä sen yhtälön Näytä logiikka -näkymässä.

Tämän kysymyksen muokkausikkunasta näet kaksi asiaa:

  1. Mukauttamisessa ilmaukset on ympäröitävä aaltosulkeilla
  2. Ilmaukset voivat jatkua usealle riville, jos haluat, kuten tässä tapauksessa, helpottaa sisäkkäisen ehtologiikan lukemista.

Mukautetut kysymykset, vastaukset ja raportit

Huomautus: Dynaaminen mukauttaminen ei välttämättä toimi, jos vastausvaihtoehdot tarjotaan valintaruuduissa samalla kysymyssivulla. Tämä johtuu siitä, että mukauttaminen lisää <span>-tagin, joka ei ole kelvollinen valintavaihtoehtojen sisällä.

Tämä esimerkki näyttää BMI-raportin.

Tässä on saman kysymyksen muokkausikkuna.

Kuten näet, kaikki aaltosulkeissa oleva käsitellään ilmauksena, joten se on syntaksikorostettu (värikoodattu) edellisessä kuvassa. Jos sinulla on kirjoitusvirheitä (kuten väärin kirjoitettuja tai määrittelemättömiä muuttujien tai funktioiden nimiä), EM näyttää virheen, kuten tässä, jossa height_unit on määrittelemätön muuttuja (oikea nimi on height_units) ja rnd() on määrittelemätön funktio (oikea funktion nimi on round()). Kummassakin tapauksessa virheet on ympäröity punaisella laatikolla, jotta ne on helpompi havaita ja korjata.

Näet myös, että voit luoda nopeasti monimutkaisia raportteja, kuten taulukon syötetyistä arvoista tai räätälöityjä neuvoja.

Muista, että kaikessa mukauttamisessa ilmaukset on ympäröitävä aaltosulkeilla, jotta LimeSurvey tietää, mitkä kysymyksen osat ovat vapaata tekstiä ja mitkä käsitellään Expression Managerin kautta.

Validointi

EM ohjaa useimpien kysymysten lisäasetusten toimintaa. 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ä, vastaavatko syötetyt arvot määritettyjä merkkijonomalleja. Syötät nämä kysymysten lisäasetukset edelleen tavalliseen tapaan. Nyt kuitenkin mikä tahansa kyseisissä kentissä oleva arvo käsitellään ilmauksena, joten voit määrittää vähimmäis- ja enimmäisehtoja, jotka riippuvat monimutkaisesti muista kysymyksistä.

Kaikissa näissä tapauksissa kysymyksen lisäasetus käsitellään aina ilmauksena, joten et käytä aaltosulkeita sitä määrittäessäsi.

Esimerkkikyselyt-sivuilla on useita toimivia esimerkkejä ilmausten käytöstä validoinnissa.

Johdanto

LimeSurvey käyttää uutta Expression Manager (EM) -moduulia, jonka ansiosta LimeSurvey tukee monimutkaisempaa haarautumista, arviointeja, validointia ja mukauttamista. Se korvaa tavan, jolla LimeSurvey hallitsee korvauksia, ehtoja ja arviointeja taustajärjestelmässä. Se myös nopeuttaa käsittelyä huomattavasti, koska se poistaa useimmat ajonaikaiset tietokantalukemiset. EM:n kehitti tohtori Thomas White (TMSWhite).

Tämä wiki-sivu on ensisijainen viite Expression Managerin syntaksille ja toiminnoille.

Keskeiset määritelmät

  1. Ilmaus: Mikä tahansa aaltosulkeiden ympäröimä sisältö
    • Kunhan heti avaavan aaltosulun jälkeen tai sulkevan aaltosulun edellä ei ole tyhjää merkkiä
    • EM arvioi ilmausten sisällön, joten ne voivat sisältää matemaattisia kaavoja, funktioita sekä monimutkaista merkkijono- ja päivämääräkäsittelyä.
  2. Mukauttaminen: Joskus kutsutaan nimellä "piping". Tämä on tekstin ehdollisen muokkaamisen prosessi
    • Sinulla on käytössäsi kaikki korvauskentät, osallistujatiedot ja vastaustiedot.
    • Pääset myös helpommin käsiksi kysymyksiin, vastauksiin ja niiden ominaisuuksiin.
  3. Relevanssiyhtälö: Uusi kysymyksen attribuutti, joka ohjaa kysymyksen näkyvyyttä
    • Jos relevanssiyhtälö on määritetty, kysymys näytetään vain, jos relevanssi on tosi.
    • Sisäisesti kaikki array_filter- ja array_filter_exclude-komennot muuttuvat alikysymystason relevanssiksi
  4. Yhtälö-kysymystyyppi: Uusi kysymystyyppi, joka tallentaa laskelmia tai raportteja tietokantaan
    • Se on kuin Boilerplate-kysymys, mutta sen sisältö tallennetaan tietokantaan, vaikka asettaisit asetuksen "Piilota kysymys aina"
  5. Kysymyskoodi: Tämä on EM:n ensisijainen muuttujan nimi
    • Se voi olla kuvaava nimi, joka ilmaisee kysymyksen tarkoituksen, mikä helpottaa monimutkaisen logiikan lukemista
    • Kelvolliset kysymyskoodit eivät saa alkaa numerolla, joten numeroidessasi kysymyksiä kysymyskoodilla käytä esimerkiksi muotoa "q1", "q1a" tai "g1q2".
    • Tästä tulee tällä hetkellä muuttujan nimi, kun viet tietoja SPSS:ään tai R:ään, joten jos teet tilastollista analyysia, olet todennäköisesti jo tehnyt siitä yksilöllisen.

Onko minun käytettävä EM:ää?

Lyhyt vastaus on ei (mutta myös kyllä).

EM on täysin taaksepäin yhteensopiva olemassa olevien kyselyjen kanssa. Jos siis haluat käyttää ehtoja ja arviointeja samaan tapaan kuin LimeSurveyn versioissa <= 1.91+, voit jatkaa niiden käyttöä.

EM kuitenkin korvaa kokonaan tavan, jolla LimeSurvey käsittelee ehtoja sisäisesti. Vaikka voit edelleen käyttää ehtoeditoria ehtojen luomiseen ja hallintaan, LimeSurvey 1.92 muuntaa ne vastaaviksi relevanssiyhtälöiksi. Päivityksen yhteydessä LimeSurvey 1.92 muuntaa automaattisesti kaikki olemassa olevat ehdot relevanssiyhtälöiksi.

Näin saat molempien maailmojen parhaat puolet: voit jatkaa LimeSurveyn käyttöä totuttuun tapaan, mutta näet vastaavan relevanssiyhtälön, jolloin voit siirtyä vähitellen käyttämään relevanssiyhtälöitä suoraan, kun katsot sen sopivaksi.

Voinko käyttää ehtoja ja relevanssia yhdessä?

Kyllä. Voit käyttää ehtojen muokkausta joissakin kysymyksissä ja relevanssin muokkausta toisissa. Ehdot muunnetaan automaattisesti relevanssiksi, kun tallennat kysymyksen.

Huomaa, että jos käytät ehtojen muokkausta, oletamme sinun haluavan ehtojen korvaavan kaikki käsin syötetyt relevanssiyhtälöt. Jos siis sinulla on olemassa olevia ehtoja ja haluat muokata relevanssia käsin, poista ensin kyseisen kysymyksen ehdot. Kopioi tarkemmin sanottuna luotu relevanssiyhtälö tekstieditoriin, poista Ehdot-valikon avulla kaikki kyseisen kysymyksen ehdot (tämä poistaa myös relevanssin), muokkaa sitten kysymystä ja liitä luotu relevanssiyhtälö tekstieditorista takaisin kyseisen kysymyksen relevanssikenttään (ja tallenna kysymys). Jos ehtojen poistamiselle ilman luodun relevanssiyhtälön poistumista on riittävästi kysyntää, voimme lisätä massamuunnostoiminnon.

Kuinka valitsen ehtojen ja relevanssin välillä?

Tässä on luettelo kummankin tavan eduista ja haitoista:

Tapa Edut Haitat
Ehdot 1. Kätevä graafinen käyttöliittymä yksinkertaisten ehtojen luomiseen
2. Käyttöliittymä on hyvin dokumentoitu ja tukitiimi tuntee sen hyvin
1. Tukee vain yksinkertaisia vertailuja eikä käsittele AND/OR-ehtoja hyvin
2. Ketjutetut ehdot toimivat epäluotettavasti
3. Hidas - kuormittaa tietokantaa voimakkaasti, joten pitkät kyselyt voivat hidastua
4. Joitakin ilmoitettuja ongelmia ehtojen uudelleenlataamisessa
5. Käyttöliittymä ei skaalaudu hyvin, kun kysymyksiä on kymmeniä, satoja tai tuhansia
6. Paperikyselyjen muuntaminen voi olla hidasta, koska on käytettävä SGQA-nimiä
7. Monimutkaiseen haarautumiseen tarvitaan usein ohjelmoija räätälöimään logiikka
Relevanssi 1. Tukee erittäin monimutkaista logiikkaa, mukaan lukien yli 80 funktiota sekä matemaattiset ja merkkijono-operaattorit
2. Täydellinen tuki ketjutetulle logiikalle
3. Nopea - ei ylimääräisiä tietokantakutsuja, joten tukee yli 1000 kysymyksen kyselyjä
4. Ei ongelmia logiikan uudelleenlataamisessa, koska SGQA-koodeja ei tarvita
5. Syntaksikorostus skaalautuu yli 1000 kysymyksen kyselyihin
6. Helppo ja nopea käyttää ryhmille, jotka haluavat digitalisoida olemassa olevia paperikyselyjä.
7. Tukee helposti puolistrukturoituja haastatteluja ja epidemiologisia kyselyjä ilman ohjelmoijaa
1. Ei graafista käyttöliittymää yksinkertaisille ehdoille - käytä sen sijaan syntaksikorostusta
2. Uusi, joten tukitiimit eivät ole vielä sisäistäneet EM:ää.

Lopputulos on, että jos olet tyytyväinen LimeSurvey 1.91+:n toimintaan, ei ole syytä muuttaa tapaasi toimia.

Mitä muita etuja EM:n käytöstä on?

Tässä muita syitä, joiden vuoksi saatat haluta käyttää EM:ää.

  1. Laskutoimitukset - voit luoda minkä tahansa mieleesi tulevan laskutoimituksen:
    • Käytössäsi on kaikki yleiset matemaattiset operaattorit ja funktiot
    • Käytössäsi on yli 70 matemaattista, päivämäärä- ja merkkijonofunktiota
    • Kehittäjien on melko helppo lisätä uusia funktioita, jos käyttäjät tarvitsevat niitä
  2. Laskutoimitusten tallentaminen tietokantaan
    • Voit nyt laskea yksinkertaisia ja monimutkaisia laskutoimituksia ja/tai asteikkopisteitä JA tallentaa ne tietokantaan ilman JavaScriptiä.
    • Tähän käytetään Yhtälö-kysymystyyppiä.
  3. Arviot
    • Voit nyt luoda arvioita tai asteikkopisteitä mistä tahansa kysymystyypistä, ei vain aiemmin tuetusta osajoukosta
    • Voit käyttää räätälöintiä näyttämään kertyviä tai kokonaisarviopisteitä missä tahansa tarvittaessa - jopa samalla sivulla
    • Sinulla on enemmän hallintaa näihin arviopisteisiin perustuviin raportteihin
    • Voit tallentaa arviopisteet tietokantaan ilman JavaScriptiä
    • Voit piilottaa arviopisteet ilman JavaScriptiä tai CSS:ää
  4. Korvauskentät
    • Käytä kysymyskoodia lisätäksesi aiempien kysymysten vastauksien arvoja - tämä helpottaa lukemista ja tarkistamista.
  5. Räätälöinti - voit näyttää tekstiä ehdollisesti muiden arvojen perusteella
    • Käytä vastaajalle sopivaa puhuttelua, esimerkiksi (esim. "Hei [Herra/Rouva] Virtanen")
    • Tuota kieliopillisesti oikeita lauseita, kun yksikkö/monikko on merkityksellinen: (esim. "Sinulla on 1 lapsi" vs. "Sinulla on 2 lasta")
    • Taivuta verbejä ja substantiiveja asianmukaisesti aiheen sukupuolen ja luvun mukaan.
  6. Uudet muuttujien ominaisuudet - voit käyttää seuraavia räätälöintiin:
    • (ei jälkiliitettä) - alias kohteelle qcode.code
    • .code - kysymyksen valittu vastauskoodi, jos se on relevantti (muuten tyhjä), tai tekstiarvo, jos kysymys ei ole koodattu
    • .NAOK - sama kuin .code, mutta voi olla osa laskutoimituksia tai listoja, vaikka se ei olisi relevantti
    • .value - kysymyksen arviointiarvo, jos se on relevantti (muuten tyhjä), tai tekstiarvo, jos kysymys ei ole koodattu -- saatavilla, jos arvioinnit on otettu käyttöön kyselyssä, muuten aina nolla
    • .valueNAOK - sama kuin .value, mutta voi olla osa laskutoimituksia tai listoja, vaikka se ei olisi relevantti
    • .shown - käyttäjälle näytettävä vastaus
    • .qid - kysymyksen tunniste
    • .gid - ryhmän tunniste
    • .sgqa - kysymyksen SGQA-arvo
    • .jsName - kysymyksen oikea javascript-muuttujan nimi riippumatta siitä, onko se määritelty tällä sivulla vai toisella
    • .qseq - kysymyksen järjestysnumero (alkaen nollasta)
    • .gseq - ryhmän järjestysnumero (alkaen nollasta)
    • .mandatory - onko kysymys pakollinen (Y/N)
    • .question - kysymyksen teksti
    • .relevance - kysymyksen relevanssiyhtälö
    • .grelevance - ryhmän relevanssiyhtälö
    • .relevanceStatus - onko kysymys tällä hetkellä relevantti (totuusarvo (voi olla erilainen PHP:ssä ja JS:ssä))
    • .type - kysymyksen tyyppi (yhden merkin koodi)
  7. Dynaamiset muutokset sivulla
    • Kaikki relevanssi, laskenta ja räätälöinti toimii dynaamisesti sivulla - arvojen muutokset päivittävät sivun välittömästi
    • Kysymykset siis ilmestyvät tai katoavat dynaamisesti sen mukaan, ovatko ne relevantteja
    • Kysymykset räätälöidään myös dynaamisesti sivun vastausten perusteella, joten voit nähdä kertyvät summat, räätälöidyt lauseet ja mukautetut raportit.
  8. Uusi tietojen syöttönäyttö
    • Nykyisen tietojen syöttöjärjestelmän lisäksi voit käyttää Survey-All-In-One-tilaa.
    • Tämä tukee sivun relevanssia ja räätälöintiä, joten tietojen syöttäjät voivat siirtyä nopeasti kentästä toiseen ja heidän tarvitsee syöttää vain relevantit vastaukset
    • Tämä voi olla ratkaisevan tärkeää, jos tietojen syöttäjän täytyy nähdä räätälöinti, joka on myös dynaaminen.
  9. Poistaa tarpeen useimmille mukautetuille JavaScript-ratkaisuille
    • EM tukee helposti monimutkaisia laskentoja, pisteytystä, räätälöintiä ja ehdollista logiikkaa.
    • Jotkin asiat vaativat edelleen JavaScriptiä (kuten mukautetut asettelut ja kysymyksen osien ehdollinen piilottaminen), mutta JavaScriptisi voi käyttää EM-funktioita, jolloin voit käyttää kysymyksiä Qcoden eikä SGQA:n avulla sekä käyttää kaikkia edellä lueteltuja kysymyksen ominaisuuksia.

Mitä muita hyödyllisiä uusia ominaisuuksia EM mahdollistaa?

Riippumatta siitä, jatkatko Ehtojen muokkaimen käyttöä vai kirjoitatko relevanssiyhtälöt käsin, saat seuraavat lisäedut:

  1. Voit luoda monimutkaisempia validointikriteereitä
    • Kaikki kysymyksen lisäattribuutit (kuten max_answers, min_num_value_n, max_num_value) voivat käyttää lausekkeita. Näin min/max-kriteerejä voi helposti mukauttaa aiempien vastausten perusteella, vaikka ne olisivat samalla sivulla.
    • EM hoitaa myös kaiken säännöllisiin lausekkeisiin perustuvan validoinnin, joten voit yhdistää luotettavasti preg- ja yhtälöpohjaisia kysymyksen attribuutteja.
  2. Kysymysten ja ryhmien helppo uudelleenjärjestäminen (tai poistaminen)
    • Ennen versiota 1.92 kysymyksiä tai ryhmiä ei voinut järjestää uudelleen, jos LimeSurvey katsoi uudelleenjärjestämisen voivan rikkoa ehdot, joissa niitä käytettiin. Vastaavasti kysymyksiä ei voinut poistaa, jos jokin toinen kysymys oli riippuvainen niistä.
    • EM:n syntaksikorostuksen avulla on helppo nähdä ja tarkistaa, yritätkö käyttää kysymyksiä ennen kuin ne on määritelty. Siksi kysymykset ja ryhmät voi nyt järjestää uudelleen tai poistaa milloin tahansa. EM päivittää kaikki syntaksikorostukset ja näyttää mahdolliset virheet.
    • Kysymysten uudelleenjärjestämisnäkymää on parannettu tällaista tarkistusta varten. Se näyttää nyt kysymyksen relevanssiyhtälön ja räätälöinnin, joten näet heti, muuttuvatko jotkin muuttujat vaaleanpunaisiksi (eli niitä käytetään ennen kuin ne on määritelty).
  3. Kysymys- ja ryhmäindeksi on aina saatavilla ja tarkka
    • Ennen versiota 1.92 nämä indeksit eivät olleet saatavilla, jos ehdot olivat monimutkaisia.
    • EM:n avulla voimme taata, että ne ovat tarkkoja.
    • Vastaajat voivat jopa hypätä taaksepäin aiempaan kysymykseen, muuttaa vastausta ja hypätä sitten eteenpäin (tai lähettää kyselyn)
      • Eteenpäin hypättäessä EM validoi uudelleen kaikki välissä olevat kysymykset/ryhmät.
      • Jos jokin kysymys muuttuu epärelevantiksi, sen arvoksi asetetaan tietokannassa NULL, jotta tietosi pysyvät sisäisesti johdonmukaisina.
      • Jos jokin kysymys muuttuu relevantiksi tai ei enää täytä pakollisuus- tai validointisääntöjä, EM pysäyttää vastaajan kyseiselle sivulle ja pakottaa hänet vastaamaan näihin kysymyksiin ennen siirtymistä lopulliseen määränpäähän.
  4. Ehtojen automaattinen muuntaminen relevanssiksi
    • Kun päivität tietokannan, kaikille olemassa oleville kyselyille, joissa on ehtoja, luodaan relevanssiyhtälöt
    • Aina kun tuot kyselyn, relevanssiyhtälöt luodaan tarvittaessa
    • Aina kun lisäät, poistat tai muokkaat ehtoja, EM luo asianmukaisen relevanssiyhtälön.
  5. Kätevä syntaksikorostus
    • Kun EM näyttää relevanssiyhtälön, se näyttää Qcoden, vaikka olisit syöttänyt SGQA-koodin, koska oletamme sen olevan helpompi lukea.
    • Kaikki muuttujat on väritetty sen mukaan, onko ne määritelty ennen vai jälkeen nykyisen kysymyksen (tai ennen vai jälkeen nykyisen ryhmän). Näin huomaat ja korjaat nopeasti tapaukset, joissa yrität käyttää muuttujia relevanssi- (mukaan lukien array_filter), räätälöinti- tai validointiyhtälöissä ennen niiden määrittelyä.
    • Lisäksi, kun viet hiiren värikoodatun muuttujan päälle, näet kysymyksen tärkeimmät metatiedot. Näitä ovat ryhmän järjestysnumero, kysymyksen järjestysnumero, Qcode, kysymyksen teksti ja kaikki käytettävissä olevat vastausvaihtoehdot (jos kysymystyypissä on lueteltuja vastausvaihtoehtoja).
      • Vastausvaihtoehtojen luettelo käyttää tätä syntaksia: 'answers':{key:val, ... }.
      • key:n syntaksi on 'scale~code', jossa scale on vastausskaala (esim. kaksoisskaalassa) ja code on vastauskoodi.
      • val:n syntaksi on 'value~shown', jossa value on arviointiarvo (jos arviointeja käytetään, muuten code) (esim. Qcode.value) ja shown on vastaajalle näytettävä arvo (esim. Qcode.shown)
      • Tämä tarkoittaa, että monet kyselyt voivat käyttää laskutoimituksia ilman arviointitilaa. Jos sinulla on lueteltuja vastausvaihtoehtoja, jotka ovat yksilöllisiä, ei-desimaalisia ja ei-negatiivisia, voit tehdä laskutoimitukset suoraan Qcode.code-arvoilla.
  6. Koko kyselyn logiikan ja sisällön helppo tarkastelu
    • Uusi Näytä kyselyn logiikka -toiminto näyttää kaiken kyselystä (tai ryhmästä tai kysymyksestä) yhdellä sivulla.
    • Se näyttää ryhmän, kysymyksen, alikysymyksen ja vastauksen tason tiedot valitulle laajuudelle (kysely, ryhmä tai kysymys)
    • Se näyttää myös relevanssin, alikysymystason relevanssin (array_filter ja array_filter_exclude), luodun validointiyhtälön (preg sekä validointisäännöt kuten arvojen summan tai lukumäärän min/max) ja kaikki ei-tyhjät kysymyksen attribuutit.
    • Kaikki on syntaksikorostettu, jotta näet mahdolliset syntaksivirheet (kuten tasapainottomat sulkeet tai muuttujien käytön ennen niiden määrittelyä)
    • Syntaksikorostus mahdollistaa kyselyn nopean selaamisen ja muokkaamisen.
      • Jos napsautat muuttujan nimeä, avautuu selainikkuna (tai välilehti), joka näyttää kyseisen kysymyksen ja antaa sinun muokata sitä.
      • Jos napsautat ryhmän nimeä, avautuu selainikkuna (tai välilehti), joka näyttää ryhmän uudelleenjärjestämisnäkymän, jossa voit helposti siirtää kysymyksiä.
      • Myös kaikki kysymyksen attribuutit on syntaksikorostettu. Näin voit asettaa ja nähdä lausekkeita kysymyksen lisäasetuksissa (esimerkiksi perustaa arvojen enimmäis-/vähimmäismäärän tai -summan lausekkeeseen)
    • EM:n kehittäjä käytti vastaavaa (hieman siistimpää) näkymää, jotta hänen yhteistyökumppaninsa epidemiologit ja eettinen toimikunta voivat validoida ja hyväksyä tuhansien kysymysten kyselyjä, jotka ovat vahvasti haarautuvia ja räätälöityjä strukturoituja haastatteluja

Aloitus

Paras tapa aloittaa EM:n käyttö on:

  • Asenna uusin vakaa versio osoitteesta http://www.limesurvey.org/en/download
  • Tuo ja tutustu esimerkkikyselyihin.
  • Tutustu käyttötapauksiin ja ohjeisiin sekä vaiheittaisiin esimerkkeihin.
  • Tutustu EM-dokumentaatioon (tämä sivu)
  • Tutustu sisäänrakennettuun EM-testisarjaan
    • Valitse mistä tahansa kyselystä työkalujen alta EM-vaihtoehto
    • Käytettävissä olevat toiminnot -kohta listaa yli 70 funktiota ja niiden syntaksin
    • Eristettyjen lausekkeiden yksikkötestit
      • näyttää esimerkkejä kaikkien EM-funktioiden ja operaattoreiden käytöstä sekä PHP- ja JavaScript-tulokset
      • huomaa, että muutama funktio tuottaa eri tuloksen PHP- ja JavaScript-versioissa, joten tämän sivun avulla voit suunnitella EM-logiikkasi sen mukaisesti.

Mitä toiminnallisuutta Expression Manager laajentaa/korvaa? (LimeSurvey <= 1.91+)

Ehdot => Relevanssi

Ehdot määrittivät, mitkä kysymykset olivat näkyvissä. Yleinen syntaksi oli SGQA operaattori arvo, kuten 111X2X3 == "Y". Ehdot voitiin yhdistää AND- tai OR-operaattoreilla, mutta AND:n ja OR:n sekoittaminen oli vaikeaa. Ehdot itse tallennettiin erilliseen tauluun, ja suuri osa LimeSurveyn koodista oli omistettu ehtojen hallintaan. Runsaan tietokantakäytön vuoksi suuren ehtomäärän käsittely saattoi aiheuttaa havaittavia suorituskykyongelmia. Lisäksi kun kysymyksille tai ryhmille oli määritetty ehtoja, niitä ei useinkaan saanut järjestää uudelleen tai poistaa.

Arvioinnit => Yhtälöt ja mikroräätälöinti

Arviointien avulla käyttäjät voivat luoda skaalapisteitä kysymyskokoelmasta. Ne eivät kuitenkaan voineet muuttua dynaamisesti nykyisellä sivulla, eikä niiden arvoja tallennettu tietokantaan.

Korvaukset => Mikroräätälöinti

Käyttäjät pystyivät räätälöimään joitakin viestejä ja kysymyksiä aiempien vastausten perusteella. Kysymys saattoi olla esimerkiksi {TOKEN:FIRSTNAME}, sanoit, että {SPORT.shown} oli lempilajisi. Ehdollinen räätälöinti (esimerkiksi "Herra" tai "Rouva" henkilön sukupuolen mukaan) tai verbien taivuttaminen ja substantiivien muotojen valinta ei kuitenkaan ollut mahdollista ilman monimutkaista JavaScriptiä. Tekijät pystyivät toteuttamaan kyselyjä, jotka näyttivät räätälöivän kysymyksiä, mutta se vaati erillisen kysymyksen jokaiselle vaihtoehdolle ja monimutkaiset ehdot sen päättämiseksi, mitkä kysymykset näytetään.

Validointi

Kysymykset voitiin validoida säännöllisillä lausekkeilla tai minimi-/maksimiarvoilla, tai antaa vastauksen toimia minimi- tai maksimiarvona. Validointeja ei kuitenkaan voitu perustaa muiden muuttujien laskutoimituksiin ilman monimutkaista JavaScriptiä.

Yhtälöt

Yhtälöitä ei tuettu ilman monimutkaista JavaScriptiä.

Yhtälö-kysymystyyppi

Yhtälöitä (esim. arvioinnin loppupisteitä) ei voitu tallentaa tietokantaan ilman monimutkaista JavaScriptiä.

Miten Expression Manager korvaa/laajentaa tämän toiminnallisuuden?

Expression Manager on LimeSurveyn uusi ydinmoduuli, joka helpottaa huomattavasti sellaisen monimutkaisen toiminnallisuuden tukemista, joka ennen vaati räätälöityä JavaScriptiä. Se myös korvaa tavan, jolla LimeSurvey nykyisin hallitsee ehtoja ja arviointeja.

Uusi terminologia Expression Manageria (EM) käsiteltäessä

EM "ajattelee" toiminnallisuuttaan seuraavin termein:

  • Relevanssiin perustuva haarautuminen - jos kysymys on relevantti, se esitetään, muuten ei (eli se piilotetaan ja merkitään tietokantaan arvolla NULL). Kaikilla kysymystyypeillä sekä jokaisella ryhmällä on uusi Relevanssi-kenttä (jolloin voit soveltaa ehtoja koko ryhmään kopioimatta samaa ehtoa jokaiseen kysymykseen ja/tai yhdistää ryhmä- ja kysymystason ehdollista logiikkaa).
  • Räätälöinti - Kun tiedät, mitkä kysymykset esitetään, räätälöinti (jota kutsutaan joskus nimellä piping) määrittää, miten kysymys esitetään. Sen avulla voit tukea paitsi yksinkertaista korvausta (kuten {TOKEN:FIRSTNAME}), myös verbien taivutusta ja substantiivien muotojen valintaa vastaajien sukupuolen tai lukumäärän perusteella. Voit myös muuttaa vastaajalle esitettävää viestiä sen perusteella, vastasiko hän muihin kysymyksiin (tai miten hän vastasi).
  • Yhtälöt - EM lisää uuden kysymystyypin nimeltä Yhtälö, joka tallentaa lausekkeen tuloksen. Nämä yhtälöiden tulokset lasketaan ja kirjoitetaan tietokantaan, vaikka piilottaisit ne sivulta. Siksi ne sopivat piilotettuihin pisteytyslaskelmiin, monimutkaisiin yhtälöihin perustuvaan navigointiin, arviointeihin ja raportteihin, jotka halutaan luoda ja saada helposti tietokannasta.

Relevanssi ja kaskadoituva relevanssi

Jokaisella kysymystyypillä on nyt Relevanssi-asetus, joka määrittää, näytetäänkö kysymys. EM käsittelee jokaisen relevanssiyhtälön siinä järjestyksessä, jossa ne esiintyvät kyselyssä. Jos lauseke on tosi (tai puuttuu - vanhojen kyselyjen tukemiseksi), kysymys näytetään. Jos se ei ole relevantti, kysymys piilotetaan ja sen arvoksi asetetaan tietokannassa NULL. Jos ryhmässä ei ole yhtään relevanttia kysymystä, koko ryhmä ohitetaan.

Lisäksi jos jokin lausekkeen muuttujista on epärelevantti, lauseke arvioidaan aina epätodeksi. Tämä mahdollistaa kaskadoituvan relevanssin, jolloin sinun ei tarvitse kirjoittaa erittäin pitkiä relevanssiyhtälöitä jokaiselle kysymykselle.

Oletetaan, että sinulla on 5 kysymystä Q1–Q5 ja haluat näyttää Q2:n vain, jos Q1:een on vastattu, Q3:n vain, jos Q2:een on vastattu, jne. Relevanssiyhtälöt voisivat olla:

Kysymyskoodi Relevanssi Kysymys
Q1 1 Mikä on nimesi?
Q2 Q1 {Q1}, minkä ikäinen olet?
Q3 Q2 Olet siis {Q2} vuotta vanha. Oletko naimisissa?
Q4 Q3 == "Y" {Q1}, kuinka kauan olet ollut naimisissa?
Q5 Q4 Kuinka monta lasta sinulla on, {Q1}?

Relevanssilaskelmat toimivat myös JavaScriptissä - joten kaikki yllä olevat kysymykset voisi laittaa yhdelle sivulle ja ne toimisivat silti odotetusti. Itse asiassa EM korvaa kokonaan tavan, jolla kysely-, ryhmä- ja kysymys kerrallaan -kyselymuodot käsitellään. Ne kaikki käyttävät nyt täsmälleen samaa navigointimoottoria, joten ne toimivat identtisesti kyselyn tyylistä riippumatta.

Niin kauan kuin olet samalla sivulla, kaikki antamasi tiedot ovat edelleen olemassa, vain piilotettuina. Jos siis syötät tietoja, valitset sitten vaihtoehdon, joka tekee ne epärelevanteiksi, ja teet ne sitten uudelleen relevanteiksi, vastauksesi ovat edelleen saatavilla. Heti kun siirryt toiselle sivulle, kaikki epärelevantit vastaukset kuitenkin menetetään aineiston eheyden vuoksi.

Ryhmätason relevanssi

Expression Manager tukee myös ryhmätason relevanssia. Tämä helpottaa silmukoiden toteuttamista. Oletetaan, että haluat kerätä tietoja enintään 10 kohteesta (kuten tuotteista tai kotitalouden henkilöistä) ja selvität ensin, kuinka monesta kohteesta tarvitaan lisäkysymyksiä (esimerkiksi kysymällä, kuinka monta henkilöä kotitaloudessa asuu, tai pyytämällä vastaajia valitsemaan pitkästä listasta tuotteet, joista he pitävät). Kun tiedät, kuinka monesta kohteesta tarvitaan lisäkysymyksiä, voit käyttää ryhmätason relevanssia, kuten {count >= 1}, {count >=2}, ... {count >= 10}, kullekin kymmenestä lisäkysymysryhmästä. Kunkin ryhmän sisällä voit käyttää kysymystason ehdollista logiikkaa (esim. sukupuoleen tai ikään perustuvia lisäkysymyksiä kullekin henkilölle). Kysymys- ja ryhmätason relevanssiyhtälöt yhdistetään AND-operaattorilla sen selvittämiseksi, mitä näytetään.

Räätälöinti / Piping

Kaikki aaltosulkeiden sisällä oleva käsitellään nyt lausekkeena (yhtä jäljempänä kuvattua poikkeusta lukuun ottamatta). Lausekkeilla on pääsy kaikkiin LimeReplacementFields-kenttiin, kaikkiin muuttujiin (usean aliaksen kautta), kaikkiin tavallisiin yhtälöoperaattoreihin (matemaattisiin, loogisiin ja vertailuoperaattoreihin) sekä kymmeniin funktioihin (jotka toimivat dynaamisesti jopa asiakaspuolella).

Näiden yhtälöiden avulla voit tehdä esimerkiksi seuraavaa:

  1. Näyttää vastaajille ehdollisesti räätälöityjä viestejä aiempien vastausten perusteella
  2. Luoda arvioita ja näyttää arviotulokset (tai haarauttaa tai näyttää viestejä ehdollisesti niiden perusteella) ilman itse Arviot-moduulin käyttöä
  3. Taivuttaa verbejä ja substantiiveja kysymyksissä, vastauksissa ja raporteissa.
  4. Näyttää yhteenvedon vastauksista ennen kyselyn lopussa olevaa "Näytä vastauksesi" -sivua

Yhtälöt

Uusi kysymystyyppi on nimeltään Yhtälö. Se on kuin Boilerplate-kysymys, mutta se tallentaa näytettävän arvon tietokantaan. Jos siis yhtälökysymyksen kysymysteksti sisältää arvion laskennan, kyseinen arvo tallennetaan tietokantaan muuttujaan, joka voidaan näyttää julkisissa tai yksityisissä tilastoissa.

Tämä ratkaisee yleisen toiveen arviopisteiden tallentamisesta tietokantaan.

Syntaksi

Kaikki aaltosulkeiden sisällä oleva katsotaan nyt lausekkeeksi (yhtä poikkeusta lukuun ottamatta: alussa tai lopussa ei saa olla tyhjiä merkkejä - tämä varmistaa, ettei Expression Manager yritä käsitellä upotettua JavaScriptiä).

Huomaa, että lausekkeet voivat ulottua usealle riville, kunhan avaavan aaltosulkeen jälkeen tai sulkevan aaltosulkeen edellä ei ole tyhjiä merkkejä. Tämä on erityisen hyödyllistä sisäkkäisissä if()-lauseissa, kuten tässä:

{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 tukee seuraavaa syntaksia:
  • Kaikki tavalliset matemaattiset operaattorit (esim. +,-,*,/,!)
  • Kaikki tavalliset vertailuoperaattorit (esim. <,<=,==,!=,>,>=, sekä nämä vastineet: lt,le,eq,ne,gt,ge)
  • Sulkeet (joilla voit ryhmitellä osalausekkeita)
  • Ehdolliset operaattorit (esim. &&,| | ja nämä vastineet: and,or)
  • Yksin- ja kaksinkertaisilla lainausmerkeillä merkityt merkkijonot (joihin voi kumpaankin upottaa toisen lainausmerkkityypin merkkijonoja)
  • Pilkkuoperaattori (jolla voit luoda lausekeluettelon ja palauttaa vain viimeisen tuloksen)
  • Sijoitusoperaattori (=)
  • Ennalta määritetyt muuttujat (viittaamaan kysymyksiin, kysymysattribuutteihin ja vastauksiin) - esim. kaikki SGQA-koodit
  • Ennalta määritetyt funktiot (niitä on jo yli 70, ja lisääminen on helppoa)

Operaattorit

EM-syntaksi noudattaa tavallista operaattorien suoritusjärjestystä:

Taso Operaattorit Kuvaus
1 () sulkeet ryhmittelyyn tai funktioiden kutsumiseen
2 ! - + unaariset operaattorit: not, negaatio, unaarinen plus
3 * / kerto- ja jakolasku
4 + - yhteen- ja vähennyslasku
5 < <= > >= lt le gt ge suuruusvertailut
6 == != eq ne yhtäsuuruusvertailut
7 and looginen AND
8 or looginen OR
9 = sijoitusoperaattori
10 , pilkkuoperaattori

Varoitus plus-operaattorista (+)

JavaScriptin ja PHP:n yhdenmukaisuuden vuoksi plus-operaattori (+) suorittaa yhteenlaskun, jos molemmat operandit ovat numeerisia, mutta yhdistää merkkijonot, jos molemmat osat ovat ei-numeerisia merkkijonoja. Suosittelemme kuitenkin käyttämään join()-funktiota merkkijonojen yhdistämiseen ja sum()-funktiota yhteenlaskuun, sillä se tekee tarkoituksestasi selvemmän ja välttää odottamattomat tulokset, jos odotit merkkijonoja mutta sait numeroita (tai päinvastoin).

Varoitus numeron ja merkkijonon välisestä ristiriidasta sekä aakkosellisesta vertailusta

Kun haluat verrata arvoja suuruus- tai yhtäsuuruusvertailuilla, kiinnitä huomiota tyyppien eroon. Käyttäjän syöttämää arvoa tai valittua vastauskoodia voidaan käyttää numerona, jos se on selvästi numero. Jos ympäröit jonkin arvoista merkillä ", vertailu pakotetaan tekstivertailuksi (aakkosellinen vertailu). Jos haluat verrata numeerisesti, älä koskaan ympäröi numeroa lainausmerkeillä ".

Esimerkiksi Q0.NAOK > "50" on tosi, jos Q0.NAOK on numeerinen kysymys, jonka arvo on 9. Tämä johtuu siitä, että operaattori > olettaa vertailun aakkoselliseksi eikä numeeriseksi.

Voit varmistaa kokonaislukujen vertailun käyttämällä esimerkiksi intval(Q0.NAOK) > 50. Muista kuitenkin, että jos Q0.NAOK ei ole numero (tyhjä tai merkkijono), intval(Q0.NAOK) == 0. Merkkijonoarvojen vertailuun ("A" < "B") käytä suoraan funktiota strcmp: strcmp(Q0.NAOK,"B") tai strcmp(Q0.NAOK,"A5").

Varoitus sijoitusoperaattorin (=) käytöstä

Huomaa, että sijoitusoperaattoreita tulisi välttää, ellei se ole ehdottoman välttämätöntä, koska ne voivat aiheuttaa odottamattomia sivuvaikutuksia. Jos esimerkiksi muutat aiemman vastauksen arvoa, kyseisen kysymyksen ja nykyisen kysymyksen välistä ketjutettua relevanssi- ja validointilogiikkaa ei lasketa uudelleen, jolloin tiedot voivat muuttua sisäisesti ristiriitaisiksi (esim. kysymykset, joihin on vastattu mutta jotka olisi pitänyt asettaa arvoon NULL, tai kysymykset, jotka ohitetaan mutta joihin olisi pitänyt vastata). Yleensä, jos haluat sijoittaa muuttujalle arvon, kannattaa luoda yhtälö-kysymystyyppinen kysymys ja asettaa sen arvo lausekkeella. Joskus tätä operaattoria kuitenkin todella tarvitaan, joten teimme sen saataville.

Varoittaaksemme tästä operaattorista se näytetään punaisella fontilla syntaksiyhtälöissä (jotta et sekoita sitä operaattoriin "==").

Sijoitusoperaattorin käyttö

Syitä sijoituksen käyttämiseen voivat olla:

  • Sinun on asetettava oletusarvo kysymykselle, joka ei hyväksy oletusarvoja yhtälön kautta (kuten radiopainikkeilla varustettu lista, jossa käyttöliittymä antaa valita yhden vastausvaihtoehdoista mutta ei salli yhtälön syöttämistä). Ole kuitenkin varovainen, sillä LimeSurvey ei pysty varmistamaan, että yhtälösi tuottaa jonkin kyseisen kysymyksen sallituista vastauksista.
  • Sinun on pakotettava aiemman kysymyksen vastaus muuttumaan myöhemmän vastauksen perusteella
  • Tarvitset monimutkaisen kiintiön: käytät yhtä piilotettua Yksi valinta -kysymystä kiintiönä ja asetat sen arvon sijoituksella
  • jne...

Voit käyttää tähän tarkoitukseen koko Expression Manager -järjestelmää.

  Sijoitus tehdään vain PHP:ssä. Se ei päivitä arvoja samalla sivulla, vaan vasta kun käyttäjä siirtyy seuraava-, edellinen- tai tallenna-painikkeilla ….


  Jos et käytä tähän tarkoitukseen yhtälökysymystä: sijoitus tehdään vasta, kun nykyisen sivun logiikka on käsitelty. Suositeltu tapa on käyttää aina yhtälökysymystä.


Joitakin esimerkkejä:

  • Aseta Lyhyt teksti -kysymyksen vastaus pieniksi kirjaimiksi : {QCODE=strtolower(QCODE.NAOK)}
  • Aseta oletusvastaus taulukko-kysymystyyppiin kyselyn alussa : {Q1_SQ1=((is_empty(Q1_SQ1.NAOK),"A99",Q1_SQ1.NAOK)}
  • Aseta oletusvastaus tekstitaulukko-kysymystyyppiin kyselyn alussa : {Q1_SQY1_SQX1 = ((is_empty(Q1_SQY1_SQX1.NAOK),"Inserted answer", Q1_SQY1_SQX1.NAOK)}
  • Aseta vastaus ehdolla : {QCODE=if(YesNo="Y","A1","")}

XSS-suojaus

Kun XSS-suojaus on käytössä, kaikkia Expression Managerin toimintoja ei voi käyttää:

  • HTML-tagin aloittaminen lausekkeessa ja sen päättäminen toisessa lausekkeessa
  • monimutkaisen lausekkeen käyttö URL-osoitteessa.

Esimerkki ja kiertotie

  • {if( 1 ,"<strong>","")}information{if( 1 ,"</strong>","")} ei toimi XSS-suojauksen kanssa. Tässä voit käyttää lauseketta {if(1,"<strong>information</strong>","information")}
  • <a href="/script.php?value={if(QCODE == "Y","yes","no")}">next</a>, tässä voit käyttää yhtälökysymystä, koska täyden kysymyskoodin käyttö on sallittua: <a href="/script.php?value={EQUATION.NAOK}">next</a>

Muuttujien käyttö

Expression Manager tarjoaa vain lukuoikeuden kaikkiin tarvitsemiimme muuttujiin. Taaksepäin yhteensopivuuden vuoksi se tarjoaa pääsyn seuraaviin:

  • TOKEN:xxx - TOKENin arvo (esim. TOKEN:FIRSTNAME, TOKEN:ATTRIBUTE_5) (vain kyselyissä, jotka EIVÄT ole anonyymejä).
  • QCODE.shown - vastauksen näytettävä arvo (esim. "Kyllä") Expression Managerin avulla.
  • Kaikki mallipohjien käyttämät {XXX}-arvot.
  • Kysymystekstissä voit käyttää {QID}-koodia, joka korvataan kysymyksen tunnisteella, ja {SGQ}-koodia, joka korvataan kysymyksen SGQA-koodilla

Lisäksi Expression Managerin avulla voit viitata muuttujiin kysymyskoodilla (tietokannan kysymystaulun 'title'-sarake). Tämä on myös muuttujan nimi, jota käytetään, kun viet tiedot SPSS-, R- tai SAS-ohjelmaan. Jos sinulla on esimerkiksi kysymykset nimestä, iästä ja sukupuolesta, voit nimetä muuttujat name, age ja gender nimien 12345X13X22, 12345X13X23 ja 12345X13X24 sijaan. Näin yhtälöt on helpompi lukea ja niiden logiikka on helpompi tarkistaa, ja kysymyksiä voi järjestellä uudelleen ilman, että ryhmien tai kysymysten numeroita tarvitsee seurata.

Tärkeää: Vain edellisillä sivuilla tai edellisissä kysymyksissä esiintyviin muuttujiin on turvallista viitata.

Lisäksi Expression Managerin avulla voit käyttää monia kysymyksen ominaisuuksia:


Syntaksi Merkitys Esimerkki Esimerkin tulos
Qcode Qcode.code-muodon alias {implode(',',name,gender)} 'Tom','M'
Qcode.code kysymyksen valittu vastauskoodi, jos kysymys on relevantti (muuten tyhjä), tai tekstiarvo, jos kysymys ei ole koodattu {implode(',',name.code,gender.code)} 'Tom','M'
Qcode.NAOK sama kuin Qcode - katso NAOK:n kuvaus {gender.NAOK} 'M'
Qcode.value kysymyksen arviointiarvo, jos kysymys on relevantti (muuten tyhjä), tai tekstiarvo, jos kysymys ei ole koodattu {gender.value} '1'
Qcode.valueNAOK sama kuin Qcode.value - katso NAOK:n kuvaus {gender.valueNAOK} '1'
Qcode.shown kysymyksen näytettävä arvo {implode(',',name.shown,gender.shown)} 'Tom','Male'
Qcode.question kysymyksen teksti {gender.question} 'What is your gender?'
Qcode.mandatory onko kysymys pakollinen (Y/N) {gender.mandatory} 'N'
Qcode.qid kysymyksen sisäinen numero (ei järjestysnumero) {gender.qid} 337
Qcode.type kysymyksen tyyppi {gender.type} 'G'
Qcode.jsName kysymyksen oikea JavaScript-nimi riippumatta siitä, onko se määritelty tällä sivulla vai muualla {gender.jsName} 'java1827X3X337'
Qcode.gid ryhmän sisäinen numero (ei järjestysnumero) {gender.gid} 3
Qcode.qseq kysymyksen järjestysnumero alkaen nollasta {gender.qseq} 5
Qcode.gseq ryhmän järjestysnumero alkaen nollasta {gender.gseq} 1
Qcode.relevanceStatus onko kysymys tällä hetkellä relevantti (0 tai 1) {gender.relevanceStatus} 1
Qcode.relevance kysymystason relevanssiyhtälö {gender.relevance} '!is_empty(name)'
Qcode.grelevance ryhmätason relevanssiyhtälö {gender.grelevance} 'num_children >= 5'
Qcode.sgqa kysymyksen SGQA-arvo {gender.sgqa} '1827X3X337'

HTML editori -ongelma

  Tämä ongelma on korjattu version 2.05 build 140803 jälkeen


Jos käytät HTML editoria, jotkin merkit korvataan HTML-entiteeteillä.

  • & merkitään &amp;
  • < merkitään &lt;
  • > merkitään &gt;

Jos käytät HTML editoria, sinun on käytettävä seuraavia:

  • and merkin & sijasta
  • lt merkin < sijasta
  • le merkin <= sijasta
  • gt merkin > sijasta
  • ge merkin >= sijasta

Qcode-muuttujien nimeäminen

Tässä kerrotaan, miten Qcode muodostetaan (ja miten joitakin ominaisuuksia käytetään) kysymystyypeittäin. Yleisesti Qcode muodostetaan näin:

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

Alikysymyskoodia ja asteikon tunnistetta (Scale ID) käytetään tai ei käytetä kysymystyypin mukaan - katso alla oleva taulukko. Kohdissa comment ja other kysymyskoodit ovat QuestionCode_comment ja QuestionCode_other

Tyyppi Kuvaus Koodi Alikysymykset Vastausvaihtoehdot Asteikot Vastauskoodi Näytetty vastaus Relevanssi
5 5 pisteen valinta, valintanapit Q1 1-5 {Q1} {Q1.shown} {Q1==3}
B Taulukko (10 pisteen valinta), valintanapit Q2 L1-L6 1-10 {Q2_L2} {Q2_L2.shown} {Q2_L2==7}
A Taulukko (5 pisteen valinta), valintanapit Q3 1-5 1-5 {Q3_1} {Q3_1.shown} {Q3_1>=3}
1 Taulukko (joustavat nimikkeet), kaksoisasteikko Q4 sq1-sq5 0:a1-a3 1:b1-b3 {Q4_sq1_0} {Q4_sq1_1.shown} {Q4_sq1_1=='b2'}
H Taulukko (joustava) - sarakemuoto Q5 1-5 s,m,t {Q5_1} {Q5_1.shown} {Q5_1=='s'}
F Taulukko (joustava) - rivimuoto Q6 F1-F5 1-5 {Q6_F3} {Q6_F3.shown} {Q6_F3==4}
E Taulukko (Kasvata/Sama/Pienennä), valintanapit Q7 1-7 I,S,D {Q7_4} {Q7_4.shown} {Q7_4=='D'}
: Taulukko (monijoustava) 1-10 Q8 ls1,todo,ls2 min,max,avg {Q8_ls1_max} {Q8_ls2_avg.shown} {Q8_ls2_min==7}
; Taulukko (monijoustava) teksti Q9 hp,st,sw 1st,2nd,3rd {Q9_hp_3rd} {Q9_hp_3rd.shown} {Q9_hp_3rd=='Peter'}
C Taulukko (Kyllä/epävarma/ei), valintanapit Q10 1-5 Y,N,U {Q10_1} {Q10_1.shown} {Q10_3=='Y'}
X Vakiotekstikysymys Q11 {Q11.shown}
D Päivämäärä Q12 {Q12} {Q12.shown}
* Yhtälö Q13 {Q13} {Q13.shown} {Q13>5}
~124~ Tiedoston lähetys (tallentaa lähetettyjen tiedostojen määrän) Q14 {Q14} {Q14>0}
G Sukupuoli, pudotusvalikko Q15 M,F {Q15} {Q15.shown} {Q15=='M'}
U Hyvin pitkä vapaateksti Q16 {Q16} {Q16.shown} {strlen(Q16)>100}
I Kielikysymys Q17 {Q17} {Q17.shown} {Q17=='en'}
! Lista - pudotusvalikko Q18 1-5 {Q18} {Q18.shown} {Q18==3}
L Lista, pudotusvalikko/valintanappilista Q19 A-Z {Q19} {Q19.shown} {Q19=='X'}
O Lista kommentilla, pudotusvalikko/valintanappilista + tekstialue Q20 A-F {Q20},{Q20comment} {Q20.shown} {Q20=='B'}
T Pitkä vapaateksti Q21 {Q21} {Q21.shown} {strstr(Q21,'hello')>0}
M Monivalinta, valintalaatikko Q22 A-F, other {Q22_E}, {Q22_other} {Q22_E.shown}, {Q22_other.shown} {Q22_E=='Y'}
P Monivalinta kommenteilla, valintalaatikko + teksti Q23 A-F {Q23_D}, {Q23_Dcomment} {Q23_D.shown} {!is_empty(Q23)}
K Useita numeerisia kysymyksiä Q24 self,mom,dad {Q24_self} {Q24_self.shown} {Q24_self>30}
Q Useita lyhyitä tekstikenttiä Q25 A-F {Q25_B} {Q25_B.shown} {substr(Q25_B,1,1)=='Q'}
N Numeerinen kysymys Q26 {Q26} {Q26.shown} {Q26 > 30}
R Sijoitus Q27 1-4 {Q27_1} {Q27_1.shown} {Q27_1==3}
S Lyhyt vapaateksti Q28 {Q28} {Q28.shown} {Q28=='mine'}
Y Kyllä/Ei, valintanapit Q29 {Q29} {Q29.shown} {Q29=='Y'}

Varatut muuttujat 'this', 'self' ja 'that'

Usein kysymyksen kaikki osat halutaan arvioida, esimerkiksi laskemalla, kuinka monta alikysymystä on vastattu, tai summaamalla pisteet. Toisinaan halutaan käsitellä vain tiettyjä kysymyksen rivejä tai sarakkeita (esimerkiksi laskea rivi- tai sarakesummat ja tallentaa ne tietokantaan). Nämä varatut muuttujat tekevät tästä melko vaivatonta.

Muuttujaa 'this' käytetään vain kysymyksen lisäasetuksissa "Koko kysymyksen vahvistusyhtälö" ja "Alikysymyksen vahvistusyhtälö". Se laajenee kyseisten kysymysten jokaisen solun muuttujien nimiksi. Jos siis haluat varmistaa, että jokainen syöte on suurempi kuin kolme, aseta "Alikysymyksen vahvistusyhtälöksi" (this > 3).

Muuttujat 'self' ja 'that' ovat tehokkaampia, ja ne toimivat makroina, jotka laajennetaan ennen yhtälöiden käsittelyä. Syntaksivaihtoehdot ovat:

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

suffix (jälkiliite) on mikä tahansa tavallisista qcode-jälkiliitteistä (esim. NAOK, value, shown)

sub-selector on jokin seuraavista:

  • comments - vain kommentteja olevat alikysymykset (esim. monivalinta kommenteilla ja lista kommentilla -kysymyksistä)
  • nocomments - vain alikysymykset, jotka eivät ole kommentteja
  • sq_X - missä X on rivin tai sarakkeen tunniste. Valitaan vain alikysymykset, jotka vastaavat kuviota X. Huomaa, että haku tehdään koko koodin tunnisteesta, jonka jälkeen sq_X-vastaavuus sisältää alikysymykset nX, X ja Xn (esim. jos käytät sq_1, mukaan otetaan alikysymykset a1, 1a, 1, 11 tai 001). Kiinnitä huomiota kaksoisasteikkokysymystyyppiin, jossa alikysymysten koodit ovat QCODE_SQCODE_1 ja QCODE_SQCODE_1, sekä sijoituskysymystyyppiin, jossa alikysymysten koodit ovat QCODE_1, QCODE_2 ....
  • nosq_X - missä X on rivin tai sarakkeen tunniste. Valitaan vain alikysymykset, jotka eivät vastaa kuviota X. Huomaa, että haku tehdään koko koodin tunnisteesta, jonka jälkeen nosq_X-vastaavuus ei sisällä alikysymyksiä nX, X ja Xn

Esimerkkejä:

  • Onko johonkin kysymyksen osaan vastattu? {count(self.NAOK)>0}
  • Mikä on tämän kysymyksen arviointipistemäärä? {sum(self.value)}

Näillä voi myös laskea rivi- ja sarakesummia. Oletetaan, että sinulla on numerotaulukko, jonka rivit ovat A-E ja sarakkeet 1-5.

  • Mikä on kokonaissumma? {sum(self.NAOK)}
  • Mikä on rivin B summa? {sum(self.sq_B.NAOK)}
  • Mikä on sarakkeen 3 summa? {sum(self.sq_3.NAOK)}

Muuttuja 'that' on kuin 'self', mutta sen avulla voi viitata muihin kysymyksiin. Sen syntaksi on:

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

qname on kysymyksen nimi ilman alikysymyspäätteitä. Jos esimerkiksi luot kysymyksen 'q1', se on sen qname

Esimerkkejä:

  • Onko johonkin kysymyksen q1 osaan vastattu? {count(that.q1.NAOK)>0}
  • Mikä on kysymyksen q2 arviointipistemäärä? {sum(that.q2.NAOK)}
  • Mikä on kysymyksen q3 kokonaissumma? {sum(that.q3.NAOK)}
  • Mikä on kysymyksen q4 rivin C summa? {sum(that.q4.sq_C.NAOK)}
  • Mikä on kysymyksen q4 sarakkeen 2 summa? {sum(that.q4.sq_2.NAOK)}

Muuttujia 'self' ja 'that' voi käyttää missä tahansa relevanssi-, vahvistus- tai räätälöintilausekkeessa.

Yksi huomioitava seikka: kun käytät Näytä logiikkatiedosto -toimintoa, se näyttää muuttujien 'self' ja 'that' laajennetut arvot. Näin näet varsinaisen muodostettavan yhtälön, ja sinä (ja Expression Manager) voitte tarkistaa, että muuttujat ovat olemassa. Tämä voi vaikuttaa sekavalta, koska yhtälöt voivat olla melko pitkiä. Jos kuitenkin muokkaat kysymystä, näet alkuperäisen yhtälön, jossa käytetään muuttujia 'self' ja/tai 'that'

Huomaa myös, että näitä muuttujia ei kannata käyttää, jos (a) haluat nimetä jokaisen yhtälössä käytetyn muuttujan erikseen tai (b) käytät muuttujia, joilla ei ole alikysymyksiä (esim. yhden vastauksen kysymykset). Näissä tapauksissa muuttujan etuliitteeksi lisättävä 'that' on tarpeeton, ja riskinä on saada odottamattomia tuloksia.

NAOK:n käyttö

NAOK --> "Not Applicable" (NA) is alright (OK) eli "Ei sovellettavissa" on sallittu

NAOK:n käyttö tarkoittaa, että kaikki muuttujat tai osa niistä on epärelevantteja (eli "Ei sovellettavissa" (NA) on sallittu (OK)).

Kun lisäät yhtälöön muuttujan kysymyksestä: jos kysymys (tai alikysymys) on piilotettu ehdon perusteella, koko yhtälö poistuu käytöstä.

Esimerkiksi: count(Q1_SQ1,Q1_SQ2,Q1_SQ3,Q1_SQ4) palauttaa aina tyhjän merkkijonon, jos jokin Q1:n alikysymys on suodatettu pois. Valittujen alikysymysten lukumäärän laskemiseen tällaisessa kysymyksessä voi käyttää lauseketta count(Q1_SQ1.NAOK,Q1_SQ2.NAOK,Q1_SQ3.NAOK,Q1_SQ4.NAOK). Jos alikysymys on piilotettu, Expression Manager palauttaa tyhjän merkkijonon.

Ilman NAOK:ia: jos yksi kysymys tai alikysymys on piilotettu, Expression Manager palauttaa aina tyhjän merkkijonon, mikä vastaa arvoa epätosi.

Pääte .shown käyttää aina NAOK-järjestelmää (tyhjä merkkijono, jos kysymys on piilotettu), mutta jos tarvitset vastauksen koodin, on aina hyvä idea lisätä .NAOK kysymyskoodin perään. Poikkeuksena tilanne, jossa tarvitset sitä ja tiedät, mitä teet.

Lisäesimerkki ja -tietoja löytyvät kohdasta Overriding Cascading Conditions

Funktioiden käyttö

Expression Manager tarjoaa käyttöön matemaattisia, merkkijono- ja käyttäjän määrittelemiä funktioita alla kuvatulla tavalla. Näille funktioille on olemassa PHP- ja JavaScript-vastineet, joten ne toimivat samalla tavalla palvelinpuolella (PHP) ja selainpuolella (JavaScript). Uusien funktioiden lisääminen on helppoa.

Toteutetut funktiot

Seuraavat funktiot ovat tällä hetkellä käytettävissä:

Funktio Merkitys Syntaksi
abs Absoluuttinen arvo number abs(number)
acos Arkuskosini number acos(number)
addslashes Lisää merkkijonoon kenoviivat lainausmerkkien eteen string addslashes(string)
asin Arkussini number asin(number)
atan Arkustangentti number atan(number)
atan2 Arc tangent kahdesta muuttujasta number atan2(number, number)
ceil Pyöristä ylöspäin number ceil(number)
checkdate Palauttaa true(1), jos kyseessä on kelvollinen päivämäärä gregoriaanisessa kalenterissa bool checkdate(month,day,year)
convert_value Muuntaa numeerisen arvon numeeristen arvojen syöttötaulukon ja tulostaulukon avulla number convert_value(fValue, iStrict, sTranslateFromList, sTranslateToList)
cos Kosini number cos(number)
count Laskee listan vastattujen (ei-tyhjien) kysymysten määrän number count(arg1, arg12, ..., argN)
countif Laskee listan vastattujen kysymysten määrän, jotka vastaavat ensimmäistä argumenttia number countif(matches, arg1, arg2, ... argN)
countifop Laskee listan vastattujen kysymysten määrän, jotka täyttävät ehdon (arg op value) number countifop(op, value, arg1, arg2, ... argN)
date Paikallisen päivämäärän/ajan muotoilu string date(format [, timestamp=time()])
exp Laskee e:n eksponentin number exp(number)
fixnum Näyttää numerot desimaalierottimena pilkku tarvittaessa string fixnum(number)
floor Pyöristä alaspäin number floor(number)
gmdate Muoto GMT päivämäärä/aika string gmdate(format [, timestamp=time()])
html_entity_decode Muuntaa kaikki HTML-entiteetit vastaaviksi merkeiksi (käyttää aina ENT_QUOTES ja UTF-8) string html_entity_decode(string)
htmlentities Muuntaa kaikki sopivat merkit HTML-entiteeteiksi (käyttää aina ENT_QUOTES ja UTF-8) string htmlentities(string)
expr_mgr_htmlspecialchars Muuntaa erikoismerkit HTML-entiteeteiksi (käyttää aina ENT_QUOTES ja UTF-8) string htmlspecialchars(string)
expr_mgr_htmlspecialchars_decode Muuntaa HTML-erikoisentiteetit takaisin merkeiksi (käyttää aina ENT_QUOTES ja UTF-8) string htmlspecialchars_decode(string)
idate Muotoile paikallinen aika/päivä kokonaislukuna string idate(string [, timestamp=time()])
if (Updated in 3.0.2 ) Excel-tyylinen if(test,result_if_true[,result_if_false = ""]) if(test,result_if_true[,result_if_false = ""])
implode Liitä taulukkoelementit merkkijonolla string implode(glue,arg1,arg2,...,argN)
intval Hanki muuttujan kokonaislukuarvo int intval(number [, base=10])
is_empty Selvittää, onko muuttuja tyhjä bool is_empty(var)
is_float Selvittää, onko muuttujan tyyppi liukuluku bool is_float(var)
is_int Selvittää, onko muuttujan tyyppi kokonaisluku bool is_int(var)
is_nan Selivät onko arvo ei-numero bool is_nan(var)
is_null Selvitä onko muuttuja NULL bool is_null(var)
is_numeric Selvittää, onko muuttuja luku tai numeerinen merkkijono bool is_numeric(var)
is_string Selvittää, onko muuttujan tyyppi merkkijono bool is_string(var)
join (New in 2.0 build 130129) Liittää elementit uudeksi merkkijonoksi join(arg1, arg2, ... argN)
list Palauttaa pilkuilla erotetun listan ei-tyhjistä arvoista string list(arg1, arg2, ... argN)
listifop (New in 3.16.1 ) Palauttaa 'glue'-merkkijonolla erotetun listan määritetystä kysymyksen ominaisuudesta (retProp) niistä listan kysymyksistä, jotka täyttävät ehdon (cmpProp op value) string listifop(cmpProp, op, value, retProp, glue, sgqa1, sgqa2, ... sgqaN)
log Luvun logaritmi annettuun kantalukuun tai luonnollinen logaritmi. number log(number,base=e)
ltrim Poistaa tyhjätilan (tai muita merkkejä) merkkijonon alusta string ltrim(string [, charlist])
max Etsi suurin arvo number max(arg1, arg2, ... argN)
min Etsi pienin arvo number min(arg1, arg2, ... argN)
mktime Hakee päivämäärän UNIX-aikaleiman (kaikki 6 argumenttia ovat valinnaisia) number mktime([hour [, minute [, second [, month [, day [, year ]]]]]])
modulo-function Modulo-funktiota ei tueta vielä. Voit käyttää sen sijaan floor()-funktiota floor(x/y)==(x/y)
nl2br Lisää HTML-rivinvaihdot kaikkien merkkijonon rivinvaihtojen eteen string nl2br(string)
number_format Esitä numero tuhatluvut ryhmiteltynä string number_format(number)
pi Piin likiarvo number pi()
pow Eksponentiaalilauseke number pow(base, exp)
quoted_printable_decode Muuntaa quoted-printable-merkkijonon 8-bittiseksi merkkijonoksi string quoted_printable_decode(string)
quoted_printable_encode Muuntaa 8-bittisen merkkijonon quoted-printable-merkkijonoksi string quoted_printable_encode(string)
quotemeta Lainausmerkin metamerkit string quotemeta(string)
rand Luo satunnainen kokonaisluku, katso tämä esimerkki int rand() OR int rand(min, max)
regexMatch vertaa merkkijonoa säännölliseen lausekkeeseen bool regexMatch(pattern,input)
round Pyöristä valinaisella tarkkuudella number round(val [, precision])
rtrim Poistaa tyhjätilan (tai muita merkkejä) merkkijonon lopusta string rtrim(string [, charlist])
sin Sini number sin(arg)
sprintf Palauta muotoiltu merkkijono string sprintf(format, arg1, arg2, ... argN)
sqrt Neliöjuuri number sqrt(arg)
stddev Laskee lukulistan otoskeskihajonnan number stddev(arg1, arg2, ... argN)
str_pad Täyttää merkkijonon tiettyyn pituuteen toisella merkkijonolla string str_pad(input, pad_length [, pad_string])
str_repeat Toista merkkijono string str_repeat(input, multiplier)
str_replace Korvaa kaikki hakumerkkijonon esiintymät korvaavalla merkkijonolla string str_replace(search, replace, subject)
strcasecmp Binääriturvallinen merkkikoosta riippumaton merkkijonojen vertailu int strcasecmp(str1, str2)
strcmp Binaariturvallinen merkkijonovertailu int strcmp(str1, str2)
strip_tags Poista HTML- ja PHP-tagit merkkijonosta string strip_tags(str, allowable_tags)
stripos Etsii merkkikoosta riippumattoman unicode-merkkijonon ensimmäisen esiintymän sijainnin (alkaen 0:sta, palauttaa false, jos ei löydy) int stripos(haystack, needle [, offset=0])
stripslashes Poista lainausmerkit lainausmerkein merkitystä merkkijonosta string stripslashes(string)
stristr Merkkikokoriippumaton strstr string stristr(haystack, needle [, before_needle=false])
strlen Hanki merkkijonon pituus int strlen(string)
strpos Etsii unicode-merkkijonon ensimmäisen esiintymän sijainnin (alkaen 0:sta, palauttaa false, jos ei löydy) int strpos(haystack, needle [ offset=0])
strrev Käännä merkkijono string strrev(string)
strstr Löydä ensimmäinen merkkijonon esiintymä string strstr(haystack, needle[, before_needle=false])
strtolower Muuntaa merkkijonon pieniksi kirjaimiksi string strtolower(string)
strtotime Jäsentää lähes minkä tahansa englanninkielisen päivämäärän ja ajan tekstikuvauksen Unix-aikaleimaksi int strtotime(string)
strtoupper Muuntaa merkkijonon isoiksi kirjaimiksi string strtoupper(string)
substr Palauttaa osan unicode-merkkijonosta string substr(string, start [, length])
sum Laske taulukon arvojen summa number sum(arg1, arg2, ... argN)
sumifop Laskee yhteen listan vastattujen kysymysten arvot, jotka täyttävät ehdon (arg op value) number sumifop(op, value, arg1, arg2, ... argN)
tan Tangentti number tan(arg)
time Palauta tämänhetkinen UNIX aikaleima number time()
trim Poistaa tyhjätilan (tai muita merkkejä) merkkijonon alusta ja lopusta string trim(string [, charlist])
ucwords Muuntaa merkkijonon jokaisen sanan ensimmäisen kirjaimen isoksi string ucwords(string)
unique Palauttaa 'true', jos kaikki ei-tyhjät vastaukset ovat uniikkeja boolean unique(arg1, ..., argN)

Suunnitellut tai harkinnassa olevat funktiot

Muita suunniteltuja (tai harkinnassa olevia) funktioita, joita ei ole vielä toteutettu, ovat seuraavat. Osa näistä on mukana taaksepäin yhteensopivuuden vuoksi toisen kyselytyökalun kanssa.

Syntaksi Merkitys Kommentit
e() palauttaa e:n arvon
formatDate(X,PAT) palauttaa päiväyksen X merkkijonoarvon muotoiltuna Javan päiväysmuotomallin PAT mukaisesti
formatNumber(X,PAT) palauttaa luvun X merkkijonoarvon muotoiltuna Javan lukumuotomallin PAT mukaisesti
getAnsOption(X) Ydinlisäosa ExpressionAnswerOptions
getAnsOption(X,Y) Ydinlisäosa ExpressionAnswerOptions
getRelevance(X) palauttaa kysymyksen X relevanssiyhtälön
getStartTime() palauttaa päiväyksen, joka vastaa järjestelmän aikaa haastattelun alkaessa
getType(X) palauttaa tietotyypin merkkijononimen - esim. *NA* jos isNA()
gotoFirst() siirtyy ensimmäiseen relevanttiin kysymysjoukkoon - tämä rikkoo järjestelmän normaalin kulun
gotoNext() siirtyy seuraavaan relevanttiin kysymysjoukkoon - tämä rikkoo järjestelmän normaalin kulun
gotoPrevious() siirtyy edelliseen relevanttiin kysymysjoukkoon - tämä rikkoo järjestelmän normaalin kulun
isAsked(X) palauttaa tosi, jos vastaus ei ole tyyppiä *NA*, *INVALID* eikä *UNASKED*
isInvalid(X) palauttaa tosi, jos vastaus on tyyppiä *INVALID*
isNA(X) palauttaa tosi, jos vastaus on tyyppiä *NA*
isNotUnderstood(X) palauttaa tosi, jos vastaus on tyyppiä *HUH*
isRefused(X) palauttaa tosi, jos vastaus on tyyppiä *REFUSED*
isSpecial(X) palauttaa tosi, jos vastaus on tyyppiä *UNASKED*, *NA*, *REFUSED*, *INVALID*, *UNKNOWN* tai *HUH*
isUnknown(X) palauttaa tosi, jos vastaus on tyyppiä *UNKNOWN*
jumpTo(X) siirtyy nimettyä kysymystä sisältävään ryhmään -- tämä rikkoo järjestelmän normaalin kulun
jumpToFirstUnasked() siirtyy ensimmäiseen kysymättä jääneeseen kysymykseen ohittaen siten aiemmin vastatut kysymykset tämä rikkoo järjestelmän normaalin kulun
lastIndexOf(X,Y) palauttaa merkkijonon Y viimeisen indeksin (alkaen nollasta) merkkijonossa X. Palauttaa -1, jos X ei sisällä merkkijonoa Y
list(X,...) merkkijono, joka sisältää pilkuilla erotetun listan positiivisista arvoista siten, että kaksi viimeistä erottaa sana "and"
mean(X,...) palauttaa arvolistan keskiarvon
numAnsOptions(X) palauttaa kysymyksen X vastausvaihtoehtojen määrän
orlist(X,...) merkkijono, joka sisältää pilkuilla erotetun listan positiivisista arvoista siten, että kaksi viimeistä erottaa sana "or"
parseDate(X,PAT) palauttaa merkkijonon X päiväysarvon jäsennettynä Javan päiväysmuotomallilla PAT
parseNumber(X,PAT) palauttaa merkkijonon X numeerisen arvon jäsennettynä Javan lukumuotomallilla PAT
showAllResponsesExcept( questionList,attributeList,attributeTitleList) questionList = pystyviivalla erotettu lista kysymystunnisteista; attributeList = pystyviivalla erotettu lista attribuuteista (kuten question#, title, text, type - näin voit valita, mitä näytetään); attributeTitleList = pystyviivalla erotettu lista taulukon otsikoista, jotta raportti voidaan kansainvälistää.
showTheseResponses( questionList,attributeList,attributeTitleList) questionList = pystyviivalla erotettu lista kysymystunnisteista; attributeList = pystyviivalla erotettu lista attribuuteista (kuten question#, title, text, type - näin voit valita, mitä näytetään); attributeTitleList = pystyviivalla erotettu lista taulukon otsikoista, jotta raportti voidaan kansainvälistää.

Expression Manager tietää, mitkä muuttujat ovat paikallisia

Jotta Expression Manager voi rakentaa sivun JavaScriptin oikein, sen on tiedettävä, mitkä muuttujat asetetaan sivulla ja mikä on niiden JavaScript-tunniste (esim. document.getElementById(x)). Sen on myös tiedettävä, mitkä muuttujat asetetaan muilla sivuilla, jotta se voi varmistaa, että tarvittavat <input type='hidden' value='x'> -kentät ovat olemassa ja täytetty.

Porrastetut ehdot

Jos jokin muuttujista ei ole relevantti, koko yhtälö ei ole relevantti (epätosi). Esimerkiksi seuraavassa taulukossa N/A tarkoittaa, että jokin muuttujista ei ollut relevantti

Operaattori Esimerkki a b Tulos
+ (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

Porrastettujen ehtojen ohittaminen

Oletetaan, että haluat näyttää juoksevan summan kaikista relevanteista vastauksista. Voisit yrittää käyttää yhtälöä {sum(q1,q2,q3,...,qN)}. Tämä käännetään kuitenkin sisäisesti muotoon LEMif(LEManyNA('q1','q2','q3',...,'qN'),,sum(LEMval('q1'),LEMval('q2'),LEMval('q3'),...,LEMval('qN'))). Jos siis jokin arvoista q1-qN ei ole relevantti, yhtälö palauttaa aina epätoden. Tässä tapauksessa sum() näyttää arvon 0, kunnes kaikkiin kysymyksiin on vastattu.

Tämän kiertämiseksi jokaiseen muuttujaan voidaan lisätä jälkiliite ".NAOK" (tarkoittaa, että Not Applicable on OK). Tällöin tapahtuu seuraavaa. Oletetaan, että sinulla on muuttuja q1.NAOK

  1. q1:tä ei lisätä LEManyNA()-lausekkeeseen
  2. LEMval('q1') tarkistaa edelleen, onko vastaus relevantti, ja palauttaa '', jos se ei ole (yksittäiset epärelevantit vastaukset siis ohitetaan, mutta ne eivät mitätöi koko lauseketta).

Juoksevan summan ongelman ratkaisu on siis käyttää yhtälöä sum(q1.NAOK,q2.NAOK,q3.NAOK,...,qN.NAOK).

Jälkiliitteen .NAOK avulla laatijat voivat myös suunnitella kyselyitä, joissa on useita mahdollisia polkuja, jotka kuitenkin yhtyvät myöhemmin yhteisiin polkuihin. Oletetaan esimerkiksi, että vastaaja vastaa kyselyyn tavalla, joka on tavanomaisen vastausalueen ulkopuolella. Laatija voi varoittaa vastaajaa, ettei tulokset välttämättä ole päteviä, ja kysyä, haluaako hän todella jatkaa kyselyä. Jos hän vastaa Kyllä, loput kysymykset näytetään. "Loppujen kysymysten" ehto tarkistaisi, onko alkuvastaukset annettu tavanomaisella alueella TAI onko vastaaja vastannut Kyllä kysymykseen, joka on relevantti vain, jos hän vastasi tavanomaisen alueen ulkopuolella.

Miten Expression Manager tukee ehdollista mikrosovitusta?

Tässä on esimerkki mikrosovituksesta (jossa Question Type=='expr' tarkoittaa yhtälöä):

Kysymyskoodi Relevanssi Kysymyksen tyyppi Kysymys
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}

Kaikki nämä kysymykset voivat olla yhdellä sivulla (esim. samassa ryhmässä), ja vain relevantit kysymykset näytetään. Lisäksi lasten ikiä syötettäessä viimeisen kysymyksen sum()-lauseke päivittyy dynaamisesti sivulla.

Expression Manager toteuttaa tämän ympäröimällä jokaisen lausekkeen nimetyllä <span>-elementillä. Aina kun arvo muuttuu, se laskee uudelleen lausekkeen, jonka pitäisi näkyä kyseisessä <span>-elementissä, ja päivittää näkymän. Samalla sivulla voi olla kymmeniä tai jopa satoja tällaisia sovitettuja lausekkeita, ja sivu päivittää ne kaikki yhdellä näytön päivityksellä.

LimeSurvey 1.91+ -toiminnallisuuden vastaavuus Expression Managerissa

Vanha ominaisuus Uusi ominaisuus Kommentit
Ehdot Relevanssi Voit käyttää hyvin monimutkaisia ehtoyhtälöitä ja käyttää laajempaa joukkoa muuttujia
Arviot Yhtälö Mikä tahansa arviopistemäärä voidaan muokata yhtälöksi. Tämä varmistaa sekä sen, että pistemäärä tallennetaan tietokantaan, että sen, että näet pistemäärän dynaamiset muutokset nykyisellä sivulla
Korvaukset Expression Manager Ydinmoottori käsittelee syötemerkkijonon kaiken aaltosulkeiden sisällä olevan lausekkeena - joten se hoitaa kaikki aiemmat korvaustyypit. Upotetun JavaScriptin sotkemisen välttämiseksi Expression Manager käsittelee aaltosulkeiden välisen sisällön vain, jos (a) aaltosulkeiden sisällä ei ole alku- tai loppuvälilyöntiä - esim. {expr} on lauseke, mutta { expr}, {expr } ja { expr } eivät ole lausekkeita. Lisäksi Expression Manager ei käsittele sisältöä omien merkkijonojensa sisällä (esim. {list('hi','there {braces}')} tuottaa "hi there {braces}"). Se ohittaa myös escapatut aaltosulkeet (esim. \{this is not an expression\})
Validointi Expression Manager Suunnitelmana on ottaa nykyiset min/max-kysymysattribuutit ja antaa Expression Managerin käsitellä ne. Näin min/max-arvot voivat itse olla lausekkeita

Syntaksin korostus

Lausekkeiden syöttämisen ja validoinnin helpottamiseksi EM tarjoaa syntaksin korostuksen seuraavilla ominaisuuksilla:

Syntaksin korostuksen tyypit ja merkitykset

Väri Esimerkki Merkitys Työkaluvihje Kommentit
tan background Sample koko yhtälö ei mitään Kaikki aaltosulkeiden sisällä oleva, joka tunnistetaan yhtälöksi (eli alussa tai lopussa ei ole välilyöntejä), merkitään vaalean ruskealla taustalla, jotta se erottuu ympäröivästä tekstistä
bold red text Sample Virhe Selitys virheestä Voi olla tuntematon muuttuja tai virhe funktiossa jne. Kysely voi olla täysin rikki, mutta tämä ei näy julkisille käyttäjille.
blue text Sample funktion nimi merkitys ja sallittu syntaksi funktioiden nimet tai asiat, joiden pitäisi olla funktioita, koska niiden perässä on avaava sulku, esitetään lihavoidulla sinisellä tekstillä. Työkaluvihjeet näyttävät funktion merkityksen ja sallitun syntaksin.
grey text Sample merkkijono ei mitään yksinkertaisilla ja kaksinkertaisilla lainausmerkeillä merkityt merkkijonot näytetään harmaalla tekstillä
cyan text Sample samalla sivulla asetettu muuttuja, [nimi tai SGQA-koodi]: kysymys; arvo; vastauslista, joka näyttää kunkin arvon koodit Kaikki muuttujat, jotka on asetettu samalla sivulla kuin nykyinen kysymys, näytetään syaanilla tekstillä, mikä osoittaa, että niitä voidaan päivittää JavaScriptillä. Työkaluvihje näyttää muuttujan nimen, varsinaisen kysymyksen ja sen nykyisen arvon (tai tyhjän, jos arvoa ei ole asetettu). Jos kysymystyyppi odottaa vastauksia lueteltujen arvojen joukosta, näytetään koodien vastaavuus näytettäviin arvoihin.
green text Sample aiemmalla sivulla asetettu muuttuja [nimi tai SGQA-koodi]: kysymys; arvo; vastauslista, joka näyttää kunkin arvon koodit Kaikki aiemmalla sivulla asetetut muuttujat näytetään lihavoidulla vihreällä tekstillä. Työkaluvihje näyttää muuttujan nimen, varsinaisen kysymyksen ja sen nykyisen arvon (tai tyhjän, jos arvoa ei ole asetettu). Jos kysymystyyppi odottaa vastauksia lueteltujen arvojen joukosta, näytetään koodien vastaavuus näytettäviin arvoihin.
bold pink text Sample myöhemmällä sivulla asetettu muuttuja yleensä tyhjä kyselyn alussa, mutta voi täyttyä indeksin tai edelliselle sivulle siirtymisen kautta [nimi tai SGQA-koodi]: kysymys; arvo; vastauslista, joka näyttää kunkin arvon koodit Kaikki myöhemmällä sivulla asetetut muuttujat näytetään lihavoidulla vaaleanpunaisella tekstillä. Työkaluvihje näyttää muuttujan nimen, varsinaisen kysymyksen ja sen nykyisen arvon (tai tyhjän, jos arvoa ei ole asetettu). Jos kysymystyyppi odottaa vastauksia lueteltujen arvojen joukosta, näytetään koodien vastaavuus näytettäviin arvoihin.
bold tan text Sample Limen korvausarvo arvo Limen korvausmerkkijonot (kuten {TOKEN:xxx}, {PRIVACY_MESSAGE}) näytetään lihavoidulla ruskealla tekstillä.
red text Sample sijoitusoperaattori (=) varoitusviesti Jos käytät sijoitusoperaattoria (=), operaattori näytetään punaisella tekstillä. Tämä auttaa estämään arvojen vahingossa tapahtuvan uudelleenasettamisen, kun tarkoitit tarkistaa, onko a == b, etkä asettaa arvoa a = b.
normal black text Sample välimerkit ei mitään Kaikki muut lausekkeen sisällä olevat välimerkit näytetään tavallisella mustalla tekstillä.
red-boxed text punainen lihavoitu viiva ympäröi virheen syntaksivirhe virheen kuvaus Kaikki havaitut syntaksivirheet näytetään ympäröimällä virhe punaisella laatikolla. Työkaluvihje näyttää virheen. Esimerkkejä ovat pariton sulku, määrittelemättömien funktioiden käyttö, väärä määrä argumentteja funktioille, huonosti jäsennellyt lausekkeet (esim. muuttujien välistä puuttuvat operaattorit), uuden arvon asettaminen vain luettavalle muuttujalle, arvojen asettaminen muille kuin muuttujille tai ei tuetun syntaksin käyttö. Huomaa, että syntaksivirheiden tunnistus voi raportoida vain yhden virheen lausekkeessa, vaikka virheitä olisi useita; jos virheitä kuitenkin havaitaan, vähintään yksi virhe näytetään.

Lisälukemista

Expression Managerin esimerkkikyselyt

Käyttötapaukset ja ohjeet

Vaiheittaiset esimerkit

Expression Managerin tilastofunktiot

Kehittäjän opas

Tiekartta/tila/tehtävälista