x

Mga pangunahing kabanata

  1. LimeSurvey Cloud vs LimeSurvey CE
  2. Gabay sa mabilis na pagsisimula - LimeSurvey 3.0+
  3. Pag-install - LimeSurvey CE
  4. Paano magdisenyo ng magandang survey (gabay)
  5. Pagsisimula
  6. Pangangasiwa sa LimeSurvey
  7. Mga Survey - panimula
  8. Mga setting ng survey
  9. Menu ng survey
  10. Istraktura ng survey
  11. Mga tanong - panimula
  12. Mga pangkat ng tanong - panimula
  13. Mga survey - pamamahala
  14. Mga opsyon ng toolbar ng survey
  15. Multilingual na survey
  16. ExpressionScript Engine - Gabay sa mabilis na pagsisimula
  17. Mga hindi nakategoryang tampok at advanced na tampok
  18. Pangkalahatang FAQ
  19. Pag-troubleshoot
  20. Mga Workaround
  21. Lisensya
  22. Log ng pagbabago ng bersyon
  23. Plugins
 Actions

Expression Manager

From LimeSurvey Manual

Maaaring isinalin ng makina ang pahinang ito at maaaring may mga mali. Ipakita ang orihinal sa Ingles · Pagbutihin ang salin na ito
This page is a translated version of the page Expression Manager and the translation is 100% complete.

Gabay sa Mabilis na Pagsisimula

Overview

Kapag kino-customize ang inyong mga survey, karaniwang kailangan ninyo ng paraan para tukuyin ang mga sumusunod:

  1. Navigation/Branching - hinahayaan ang mga sagot ng respondent na baguhin ang pagkakasunod-sunod ng mga tanong
  2. Tailoring/Piping - kung paano bubuuin ang tanong (gaya ng pagtukoy sa mga naunang sagot, o pag-aangkop ng mga pangungusap batay sa bilang o kasarian ng inyong mga respondent), o kung paano gumawa ng custom na ulat (tulad ng mga assessment score o iniangkop na payo).
  3. Pag-validate - tinitiyak na pumapasa ang mga sagot sa ilang pamantayan, gaya ng min at max na halaga, o pagtutugma sa isang input pattern

Nagbibigay ang Expression Manager (EM) ng madaling paraan para tukuyin ang lohika ng bawat isa sa mga feature na iyon. Halos anumang maisusulat ninyo bilang karaniwang mathematical equation ay isang wastong expression, kahit tumatawag kayo ng mga function. Sa kasalukuyan, nagbibigay ang EM ng access sa 80 function, at madali itong mapalawak para suportahan ang higit pa. Hinahayaan din kayo nitong i-access ang inyong mga variable gamit ang mga pangalan ng variable na madaling basahin ng tao (sa halip na mga SGQA name).

Ipinapakita ng mga sumusunod na seksyon ang mga pangunahing lugar kung saan ginagamit ang Expression Manager

Relevance (Pagkontrol sa Navigation/Branching)

Gumagamit ang ilang survey ng "Goto Logic", kung saan kapag sinagot ninyo ang Tanong 1 ng opsyon C, lilipat kayo sa Tanong 5. Napakalimitado ng ganitong paraan dahil mahirap itong i-validate at madaling masira kapag kailangan ninyong baguhin ang pagkakasunod-sunod ng mga tanong. Gumagamit ang EM ng Boolean na relevance equation para tukuyin ang lahat ng kondisyon kung kailan maaaring maging wasto ang isang tanong. Kung relevant ang tanong, ipapakita ito; kung hindi, ito ay Not Applicable, at ang halagang NULL ang itatago sa database. Katulad ito ng magagawa sa pamamagitan ng Conditions editor, ngunit hinahayaan kayo ng EM na madaling tukuyin ang mas masalimuot at mas makapangyarihang pamantayan (at hinahayaan kayong gamitin ang pangalan ng variable sa halip na SGQA naming).

Ipinapakita ng larawang ito ang isang paraan para suriin ang relevance logic ng isang survey. Kinakalkula nito ang Body Mass Index. Ipinapakita ang relevance equation sa loob ng square bracket kaagad pagkatapos ng pangalan ng variable (na kulay berde). Kaya, ang relevance ng weight, weight_units, height at height_units ay pawang 1, ibig sabihin ay palaging itinatanong ang mga tanong na iyon. Gayunpaman, ang relevance para sa BMI ay {!is_empty(height) and !is_empty(weight)}, na nangangahulugang kakalkulahin lamang ang BMI kung maglalagay ang respondent ng halaga para sa parehong height at weight (kaya naiiwasan ang panganib ng divide by zero error). Gayundin, ipinapakita lamang ang Report na tanong kung sasagutin ng respondent ang lahat ng apat na pangunahing tanong (height, height_units, weight, weight_units).

Ipinapakita at maaaring i-edit ang relevance sa mga sumusunod na lugar:

Pagtingin / Pag-edit ng Relevance sa Antas ng Tanong

Kinakalkula ng equation na ito ang Body Mass Index (BMI). Itinatanong lamang ito kung unang ilalagay ng tao ang kanyang height at weight.

Ito ang edit screen para sa BMI na tanong.

Tandaan na hindi kayo gumagamit ng curly braces kapag naglalagay kayo ng Relevance Equation.

Pagtingin / Pag-edit ng Relevance sa Antas ng Grupo

Ito ay isang sample na census survey. Itinatanong ng unang pahina kung ilang tao ang kasama ninyong nakatira at iniimbak ito sa variable na "cohabs". Ipinapakita lamang ang pahinang ito kung mayroon kayong higit sa isang kasamang nakatira (kaya ipinapakita ito para sa pangalawang taong kasama ninyong nakatira), at ipinapakita lamang din ito kung tinukoy ninyo kung paano kaugnay sa inyo ang Person One (p1_rel).

Tulad ng makikita ninyo, may relevance criteria rin sa antas ng tanong ang grupo, kaya lumalabas lamang ang bawat tanong kapag nasagot na ninyo ang tanong bago nito (hal. {!is_empty(p1_sex)}). Pinagsasama ng EM para sa inyo ang relevance sa antas ng Grupo at ng Tanong. Itinatanong lamang ang mga tanong sa isang grupo kung relevant ang grupo sa kabuuan. Pagkatapos, ang subset lamang ng mga tanong sa loob ng grupo na relevant ang itatanong.

Narito ang screen para sa pag-edit ng relevance sa antas ng grupo para sa tanong na iyon:

Tandaan na hindi kayo gumagamit ng curly braces kapag naglalagay kayo ng Relevance Equation.

Tailoring/Piping

Hinahayaan kayo ng EM na madaling gumawa ng simple at masalimuot na conditional tailoring ng inyong mga tanong. Minsan kailangan lang ninyo ng simpleng pagpapalit, tulad ng pagsasabing, "Sinabi ninyong bumili kayo ng [Product]. Ano ang pinakagusto ninyo rito?". Minsan kailangan ninyo ng conditional na pagpapalit tulad ng "[G./Gng.] [LastName], handa po ba kayong sagutan ang aming survey?". Sa kasong ito, nais ninyong gamitin ang G. o Gng. batay sa kasarian ng tao. Sa ibang pagkakataon, kailangan ninyo ng mas masalimuot pang pagpapalit (tulad ng batay sa isang mathematical computation). Sinusuportahan ng EM ang bawat isa sa mga uri ng tailoring/piping na ito.

Mga Conditional Equation

Ipinapakita ng halimbawa ng Body Mass Index ang kakayahang kalkulahin ang BMI ng isang tao, kahit hinahayaan silang ilagay ang kanilang height at weight sa metric o non-metric na yunit.

Dito, ang weight_kg ay {if(weight_units == 'kg', weight, weight * .453592)}. Ang if() function na ito ay nangangahulugang kung ang paksa ay naglagay ng timbang sa kilogram, gamitin ang halagang iyon; kung hindi, i-multiply ang inilagay na halaga (na nasa pounds) sa .453592 upang gawin itong kilogram. Ang height_m variable ay gumagamit ng katulad na paraan upang kalkulahin ang taas ng tao sa metro, kahit na inilagay niya ang kanyang taas sa pulgada.

Kinakalkula ng BMI ang formula ng timbang bilang {weight_kg / (height_m * height_m)}.

Panghuli, ang ulat ay kondisyonal na iniangkop ang mensahe para sa paksa, na sinasabi sa kanya kung ano ang inilagay niya. ("Sinabi mong ikaw ay 2 metro ang taas at tumitimbang ng 70 kg.")

Bagaman hindi gaanong makikita sa larawan sa itaas, ang weight_status ay gumagamit ng nested na if() statement upang uriin ang tao mula underweight hanggang severely obese. Makikita mo ang equation nito sa Show Logic View

Mula sa edit window ng tanong na ito, makikita mo ang dalawang bagay:

  1. Ang tailoring ay dapat maglagay ng mga expression sa loob ng Curly Braces
  2. Ang mga expression ay maaaring umabot ng maraming linya kung, tulad sa kasong ito, nais mong gawing mas madaling basahin ang nested na conditional logic.

Mga Naiangkop na Tanong, Sagot, at Ulat

Tandaan: Maaaring hindi gumana ang dynamic tailoring kung ang mga opsyon sa sagot ay ipinapakita sa mga select box sa parehong pahina ng tanong. Ito ay dahil ang tailoring ay nagpapasok ng <span> tag na hindi valid sa loob ng mga opsyon ng select.

Ipinapakita ng halimbawang ito ang ulat ng BMI.

Narito ang edit window para sa parehong tanong.

Tulad ng makikita mo, ang anumang nasa loob ng curly braces ay itinuturing na expression, kaya naka-syntax-highlight (may kulay) ito sa naunang larawan. Kung may mga typo ka (tulad ng maling baybay o hindi natukoy na pangalan ng variable o function), magpapakita ang EM ng error, tulad nito, na nagpapakitang ang height_unit ay hindi natukoy na pangalan ng variable (ang tama ay height_units), at ang rnd() ay hindi natukoy na function (ang tamang pangalan ng function ay round()). Sa parehong kaso, ang mga error ay napapalibutan ng pulang kahon para mas madaling makita at maayos.

Makikita mo rin na mabilis kang makakagawa ng mga kumplikadong ulat, tulad ng talahanayan ng mga inilagay na halaga o iniangkop na payo.

Tandaan na ang lahat ng tailoring ay dapat maglagay ng mga expression sa loob ng Curly Braces, upang malaman ng LimeSurvey kung aling mga bahagi ng tanong ang free text at alin ang dapat iproseso ng Expression Manager.

Pag-validate

Kinokontrol ng EM kung paano gumagana ang karamihan sa mga advanced na opsyon ng tanong. Kinokontrol ng mga ito ang mga aspeto tulad ng min/max na bilang ng sagot; min/max na indibidwal na halaga; min/max na kabuuang halaga; at pagsusuri kung tumutugma ang mga inilagay na halaga sa tinukoy na string pattern. Patuloy mong ilalagay ang mga advanced na opsyon ng tanong na iyon gaya ng dati. Gayunpaman, ngayon ang anumang halaga sa isa sa mga field na iyon ay itinuturing na expression, kaya maaari kang magkaroon ng min/max na pamantayan na may kumplikadong conditional na ugnayan sa ibang mga tanong.

Sa lahat ng kasong ito, dahil ang advanced na opsyon ng tanong ay laging itinuturing na expression, hindi ka gumagamit ng curly braces kapag tinutukoy ito.

Ang pahina ng Mga Sample Survey ay nagpapakita ng maraming gumaganang halimbawa ng paggamit ng mga expression para sa pag-validate.

Panimula

Gumagamit ang LimeSurvey ng bagong Expression Manager (EM) module na magbibigay-daan sa LimeSurvey na suportahan ang mas kumplikadong branching, assessment, pag-validate, at tailoring. Papalitan nito ang paraan ng pamamahala ng LimeSurvey sa Replacements, Conditions, at Assessments sa back-end. Lubos din nitong mapapabilis ang pagproseso dahil inaalis nito ang karamihan sa mga pagbasa sa database habang tumatakbo. Ang EM ay binuo ni Dr. Thomas White (TMSWhite).

Ang wiki page na ito ang pinakahuling sanggunian para sa syntax at functionality ng Expression Manager.

Mahahalagang Kahulugan

  1. Expression: Anumang napapalibutan ng curly braces
    • Basta walang puwang kaagad pagkatapos ng pambungad na brace o bago ang pansarang curly brace
    • Ang nilalaman ng mga Expression ay sinusuri ng EM, kaya maaari silang maglaman ng mga mathematical formula, function, at kumplikadong pagproseso ng string at petsa.
  2. Tailoring: Tinatawag minsan na "piping", ito ang proseso ng kondisyonal na pagbabago ng teksto
    • May access ka sa lahat ng 'replacement field', data ng kalahok, at data ng tugon.
    • Mas madali ka ring makaka-access sa mga tanong, sagot, at mga katangian ng mga ito.
  3. Relevance Equation: Isang bagong attribute ng tanong na kumokontrol sa visibility ng tanong
    • Kung may relevance equation, ipapakita lamang ang tanong kung ang relevance ay magiging true.
    • Sa loob, ang lahat ng array_filter at array_filter_exclude command ay nagiging relevance sa antas ng subquestion
  4. Equation Uri ng Tanong: Isang bagong uri ng tanong na nagse-save ng mga kalkulasyon o ulat sa database
    • Ito ay gaya ng Boilerplate na tanong, ngunit ang nilalaman nito ay sine-save sa database kahit itakda mo ang "Palaging itago ang tanong na ito"
  5. Code ng tanong: Ito ang piniling pangalan ng variable para sa EM
    • Maaari itong maging naglalarawang pangalan na nagsasaad ng layunin ng tanong, na nagpapadali sa pagbasa ng kumplikadong logic
    • Ang mga valid na code ng tanong ay HINDI dapat magsimula sa numero, kaya kapag ginagamit ang code ng tanong para bilangin ang iyong mga tanong, gamitin lamang ang "q1", o "q1a" o "g1q2".
    • Ito ang kasalukuyang nagiging pangalan ng variable kapag ini-export mo ang data sa SPSS o R, kaya kung gumagawa ka ng statistical analysis, malamang ginawa mo na itong natatangi.

Kailangan ko bang gumamit ng EM?

Ang maikling sagot ay Hindi (ngunit oo rin).

Ang EM ay ganap na backwards-compatible sa mga umiiral na survey. Kaya, kung nasisiyahan kang gumamit ng Conditions at Assessments sa istilong ginamit ng LimeSurvey sa mga bersyong <= 1.91+, maaari mo itong ipagpatuloy.

Gayunpaman, ganap na pinapalitan ng EM kung paano hinahawakan ng LimeSurvey sa loob ang Conditions. Bagaman magagamit mo pa rin ang Conditions Editor para gumawa at mamahala ng mga condition, ico-convert ng LimeSurvey 1.92 ang mga iyon sa katumbas na Relevance Equations. Bilang bahagi ng upgrade, awtomatikong ico-convert ng LimeSurvey 1.92 ang lahat ng umiiral na Conditions sa Relevance Equations.

Dapat nitong ibigay sa iyo ang pinakamainam sa dalawa - maaari mong ipagpatuloy ang paggamit ng LimeSurvey gaya ng nakasanayan mo, ngunit makikita mo ang katumbas na Relevance Equation upang unti-unti kang makalipat nang direkta sa Relevance Equations kailanman mo naisin.

Maaari ko bang pagsamahin ang paggamit ng Conditions at Relevance?

Oo. Maaari mong gamitin ang Conditions editor para sa ilang tanong at ang Relevance editor para sa iba. Awtomatikong kino-convert ang mga Condition sa Relevance kapag ini-save mo ang tanong.

Tandaan, ipinapalagay namin na kapag ginagamit mo ang Conditions editor, nais mong palitan ng mga Condition na iyon ang anumang manu-manong inilagay na relevance equation. Kaya, kung mayroon ka nang mga Condition at nais mong manu-manong i-edit ang Relevance, tanggalin muna ang mga Condition para sa tanong na iyon. Sa partikular, kopyahin ang nabuong relevance equation sa isang text editor, gamitin ang menu ng Conditions para tanggalin ang lahat ng condition para sa tanong na iyon (na magtatanggal din ng relevance), pagkatapos ay i-edit ang tanong at i-paste ang nabuong relevance equation mula sa text editor pabalik sa field ng relevance para sa tanong na iyon (at i-save ang tanong). Kung may sapat na pangangailangan na tanggalin ang mga condition nang hindi tinatanggal ang nabuong relevance equation, maaari kaming magdagdag ng proseso ng bulk conversion.

Paano ako pipili sa pagitan ng Conditions at Relevance?

Narito ang listahan ng mga bentahe at disbentahe ng bawat istilo:

Istilo Mga bentahe Mga disbentahe
Conditions 1. Magandang GUI para sa paggawa ng mga simpleng condition
2. Mahusay na naidokumento ang GUI at naiintindihan ng support team
1. Sumusuporta lamang sa mga simpleng paghahambing at hindi mahusay sa AND/OR na mga condition
2. Hindi pare-pareho ang paggana ng mga cascading condition
3. Mabagal - umaasa nang husto sa database, kaya maaaring bumagal ang mahahabang survey
4. May ilang naiulat na problema sa muling pag-load ng mga condition
5. Hindi maganda ang scale ng GUI kapag may dose-dosena, daan-daan, o libu-libong tanong
6. Maaaring mabagal i-convert ang mga survey na nakabatay sa papel dahil kailangang gamitin ang mga pangalang SGQA
7. Madalas kailangan ng programmer para sa custom na logic na kailangan sa masalimuot na branching
Relevance 1. Sumusuporta sa napakasalimuot na logic, kabilang ang 80+ function at math/string operator
2. Perpektong suporta para sa cascading logic
3. Mabilis - walang karagdagang tawag sa database, kaya sinusuportahan ang mga survey na may 1000+ tanong
4. Walang problema sa muling pag-load ng logic dahil hindi nangangailangan ng mga SGQA code
5. Ang syntax-highlighting ay umaabot sa mga survey na may 1000+ tanong
6. Madali at mabilis gamitin para sa mga grupong nais i-computerize ang kanilang mga survey na nakabatay sa papel.
7. Madaling sinusuportahan ang mga semi-structured na interview at epidemiological na survey nang hindi nangangailangan ng programmer
1. Walang GUI para sa mga simpleng condition - gamitin na lamang ang syntax-highlighting
2. Bago pa, kaya hindi pa lubos na bihasa ang mga support team sa EM.

Sa madaling sabi, kung kuntento ka sa paggana ng LimeSurvey 1.91+, walang dahilan para baguhin ang ginagawa mo.

Ano pa ang ibang benepisyo ng paggamit ng EM?

Narito ang ilan pang dahilan kung bakit maaaring gusto mong gamitin ang EM.

  1. Mga kalkulasyon - maaari kang gumawa ng anumang kalkulasyong maiisip mo:
    • May access ka sa lahat ng karaniwang mathematical operator at function
    • May access ka sa 70+ function para sa matematika, petsa, at pagproseso ng string
    • Medyo madali para sa mga developer na magdagdag ng mga bagong function kung kailangan ito ng mga user
  2. Pag-iimbak ng mga kalkulasyon sa database
    • Maaari ka nang gumawa ng simple at masalimuot na kalkulasyon at/o scale score AT maiimbak ang mga ito sa database nang hindi nangangailangan ng JavaScript.
    • Ginagamit mo ang uri ng tanong na Equation para dito.
  3. Mga pagtatasa
    • Maaari ka nang gumawa ng mga pagtatasa o scale score mula sa anumang uri ng tanong, hindi lamang sa ilang uri na dating sinusuportahan
    • Maaari mong gamitin ang Tailoring para ipakita ang kasalukuyan o kabuuang marka ng pagtatasa saanman kailangan - kahit sa parehong pahina
    • Mas malaki ang kontrol mo sa mga ulat na nabubuo batay sa mga marka ng pagtatasang iyon
    • Maaari mong i-store ang mga marka ng pagtatasa sa database nang hindi nangangailangan ng JavaScript
    • Maaari mong itago ang mga marka ng pagtatasa nang hindi nangangailangan ng JavaScript o CSS
  4. Mga replacement field
    • Gamitin ang Code ng tanong para magpasok ng mga value mula sa sagot sa mga nakaraang tanong - mas madali itong basahin at i-validate.
  5. Tailoring - maaari kang magpakita ng text nang may kondisyon batay sa iba pang value
    • Gamitin ang angkop na titulo para sa isang paksa, tulad ng (hal. "Hello [Mr./Mrs.] Smith")
    • Gumawa ng mga pangungusap na tama ang gramatika kapag mahalaga ang isahan/maramihan: (hal. "You have 1 child" kumpara sa "You have 2 children")
    • Angkop na i-conjugate ang mga pandiwa at i-decline ang mga pangngalan batay sa kasarian at bilang ng paksa.
  6. Mga bagong attribute ng variable - maaari mong ma-access ang mga sumusunod para sa iyong tailoring:
    • (walang suffix) - alias para sa qcode.code
    • .code - ang napiling code ng tugon para sa tanong kung relevant ito (kung hindi, blangko), o ang text value kung hindi ito tanong na may code
    • .NAOK - kapareho ng .code, ngunit maaaring maging bahagi ng mga kalkulasyon o listahan kahit hindi relevant
    • .value - ang value ng pagtatasa para sa tanong kung relevant ito (kung hindi, blangko), o ang text value kung hindi ito tanong na may code -- available kung naka-enable ang mga pagtatasa para sa survey, kung hindi ay palaging zero
    • .valueNAOK - kapareho ng .value, ngunit maaaring maging bahagi ng mga kalkulasyon o listahan kahit hindi relevant
    • .shown - ang sagot na ipinapakita sa user
    • .qid - ang ID ng tanong
    • .gid - ang ID ng pangkat
    • .sgqa - ang SGQA value para sa tanong
    • .jsName - ang tamang pangalan ng javascript variable para sa tanong, nakadeklara man sa pahinang ito o sa iba
    • .qseq - ang pagkakasunod-sunod ng tanong (nagsisimula sa 0)
    • .gseq - ang pagkakasunod-sunod ng pangkat (nagsisimula sa 0)
    • .mandatory - kung mandatoryo ang tanong (Y/N)
    • .question - ang text ng tanong
    • .relevance - ang relevance equation para sa tanong
    • .grelevance - ang relevance equation para sa pangkat
    • .relevanceStatus - kung relevant ba o hindi ang tanong sa kasalukuyan (boolean (maaaring magkaiba sa PHP at JS))
    • .type - ang uri ng tanong (ang code na iisang karakter)
  7. Mga dynamic na pagbabago sa pahina
    • Lahat ng Relevance, Calculation, at Tailoring ay dynamic na gumagana sa isang pahina - kaya agad na nag-a-update ang pahina kapag nagbago ang mga value
    • Kaya, dynamic na lumilitaw/nawawala ang mga tanong batay sa kung relevant ang mga ito
    • Dynamic ding naka-tailor ang mga tanong batay sa mga tugon sa pahina, kaya makikita mo ang mga running total, naka-tailor na pangungusap, at customized na ulat.
  8. Bagong screen sa paglalagay ng data
    • Bukod sa paggamit ng kasalukuyang sistema ng paglalagay ng data, maaari mong gamitin ang Survey-All-In-One.
    • Sinusuportahan nito ang relevance at tailoring sa loob ng pahina, kaya mabilis makakapag-tab ang mga data entry clerk at kailangan lamang nilang ilagay ang mga relevant na tugon
    • Maaaring maging kritikal ito kung kailangang makita ng taong naglalagay ng data ang tailoring, na dynamic din.
  9. Inaalis ang pangangailangan sa karamihan ng custom na JavaScript
    • Madaling sinusuportahan ng EM ang masalimuot na kalkulasyon, pagmamarka, tailoring, at conditional logic.
    • May ilang bagay na mangangailangan pa rin ng JavaScript (tulad ng mga custom layout at pagtatago nang may kondisyon ng mga sub-element ng tanong), ngunit magagamit ng iyong JavaScript ang mga EM function para ma-access mo ang mga tanong gamit ang kanilang Qcode sa halip na SGQA, at ma-access ang alinman sa mga property ng tanong na nakalista sa itaas.

Ano pa ang ibang kapaki-pakinabang na bagong feature na hatid ng EM?

Gumamit ka man ng Conditions Editor o manu-manong bumuo ng mga Relevance Equation, makukuha mo ang mga karagdagang benepisyong ito:

  1. Makakagawa ka ng mas komplikadong pamantayan sa pag-validate
    • Lahat ng advanced na attribute ng tanong (tulad ng max_answers, min_num_value_n, max_num_value) ay maaaring gumamit ng mga Expression. Kaya madali mong maisasaayos ang pamantayang min/max batay sa mga naunang tugon, kahit nasa iisang pahina ang mga ito.
    • Hinahawakan din ng EM ang lahat ng pag-validate na batay sa regular expression, kaya maaasahan mong maihahalo ang mga attribute ng tanong na batay sa preg at sa equation.
  2. Madaling pag-reorder (o pagtanggal) ng mga Tanong at Pangkat
    • Bago ang bersyon 1.92, hindi mo maaaring i-reorder ang mga tanong o pangkat kung inakala ng LimeSurvey na masisira ng gayong pag-reorder ang mga kondisyong ginagamit ang mga ito. Gayundin, hindi ka makakatanggal ng mga tanong kung may ibang tanong na nakasalalay sa mga ito.
    • Dahil sa syntax highlighting ng EM, madali mong makikita at ma-va-validate kung gumagamit ka ng mga tanong bago pa ang mga ito idineklara. Kaya maaari mo nang i-reorder o tanggalin ang mga tanong at pangkat anumang oras. Ia-update ng EM ang lahat ng syntax highlighting para ipakita ang mga posibleng error.
    • Pinahusay ang view ng pag-reorder ng mga tanong para makatulong sa ganitong pagsusuri. Ipinapakita na nito ang relevance equation at tailoring ng tanong, kaya agad mong makikita kung may mga variable na naging pink (ibig sabihin, ginamit ang mga ito bago idineklara).
  3. Palaging available at tama ang Question/Group Navigation Index
    • Bago ang bersyon 1.92, hindi available ang mga index na ito kapag may mga komplikadong kondisyon
    • Sa EM, magagarantiya naming tama ang mga ito.
    • Maaari pang bumalik ang mga respondent sa naunang tanong, baguhin ang sagot, at pagkatapos ay lumipat pasulong (o isumite)
      • Kapag lumilipat pasulong, muling va-validate ng EM ang lahat ng tanong/pangkat sa pagitan.
      • Kung may mga tanong na naging irrelevant, gagawin silang NULL sa database upang pare-pareho ang iyong data.
      • Kung may mga tanong na naging relevant o bagong hindi pumasa sa mga panuntunan ng mandatoryo o pag-validate, hihinto ang EM sa pahinang iyon at pipilitin ang user na sagutin ang mga tanong na iyon bago lumipat sa huling destinasyon.
  4. Awtomatikong pag-convert ng mga Kondisyon sa Relevance
    • Kapag ina-upgrade mo ang iyong database, lahat ng umiiral na survey na may mga kondisyon ay gagawan ng mga relevance equation
    • Tuwing mag-i-import ka ng survey, gagawa ng mga relevance equation kung kinakailangan
    • Tuwing magdaragdag, magtatanggal, o magbabago ka ng mga kondisyon, gagawa ang EM ng naaangkop na relevance equation.
  5. Maginhawang Syntax Highlighting
    • Kapag ipinakita ng EM ang relevance equation, ipapakita nito ang Qcode, kahit SGQA code ang inilagay mo, dahil ipinapalagay naming mas madali itong basahin.
    • Lahat ng variable ay may kulay para ipakita kung idineklara ang mga ito bago o pagkatapos ng kasalukuyang tanong (o bago o pagkatapos ng kasalukuyang pangkat). Dahil dito, mabilis mong matutukoy at maaayos ang mga kasong gumagamit ka ng mga variable para sa relevance (kasama ang array_filter), tailoring, o mga equation sa pag-validate bago pa ang mga ito idineklara.
    • Bukod dito, kapag itinapat mo ang mouse sa variable na may kulay, makikita mo ang pinakamahahalagang metadata tungkol sa tanong na iyon. Kasama rito ang Group Sequence #, Question Sequence #, Qcode, Teksto ng tanong, at lahat ng available na pagpipiliang sagot (kung ang uri ng tanong ay may mga nakalistang pagpipiliang sagot).
      • Ganito ang syntax ng listahan ng mga pagpipiliang sagot: 'answers':{key:val, ... }.
      • Ang key ay may syntax na 'scale~code' kung saan ang scale ay ang answer scale (hal. para sa dual scale), at ang code ay ang code ng sagot.
      • Ang val ay may syntax na 'value~shown' kung saan ang value ay ang value ng pagtatasa (kung gumagamit ng mga pagtatasa, kung hindi ay code)(hal. Qcode.value), at ang shown ay ang ipinapakitang halaga na nakikita ng respondent (hal. Qcode.shown)
      • Ibig sabihin, maraming survey ang makakagamit ng mga kalkulasyon nang hindi nangangailangan ng assessment mode. Kung may mga nakalistang opsyon sa sagot na natatangi, hindi decimal, at hindi negatibo, maaari mo lang gawin ang mga kalkulasyon sa mga halaga ng Qcode.code.
  6. Madaling pagsusuri ng buong lohika at nilalaman ng survey
    • Mayroong bagong feature na Show Survey Logic na nagpapakita ng lahat ng tungkol sa survey (o pangkat o tanong) sa iisang pahina.
    • Ipinapakita nito ang mga detalye sa antas ng Pangkat, Tanong, Sub-Question, at Sagot para sa napiling saklaw (survey vs. pangkat vs. tanong)
    • Ipinapakita rin nito ang relevance, relevance sa antas ng subquestion (para sa array_filter at array_filter_exclude), at nabuong equation sa pag-validate (para sa preg at anumang panuntunan sa pag-validate tulad ng min/max na kabuuan/bilang ng mga halaga), at lahat ng attribute ng tanong na hindi blangko.
    • Lahat ay may syntax highlighting para makita mo ang mga posibleng syntax error (tulad ng hindi balanseng panaklong o paggamit ng mga variable bago idineklara ang mga ito)
    • Sinusuportahan ng syntax highlighting ang mabilis na pag-navigate at pag-edit ng survey.
      • Kapag nag-click ka sa pangalan ng variable, magbubukas ng browser window (o tab) na nagpapakita ng tanong na iyon at nagpapahintulot na i-edit ito.
      • Kapag nag-click ka sa pangalan ng pangkat, magbubukas ng browser window (o tab) na nagpapakita ng group-reorder view para madali mong mailipat ang mga tanong.
      • Lahat ng attribute ng tanong ay may syntax highlighting din. Pinapayagan ka nitong magtakda at makita ang mga expression sa loob ng mga advanced na opsyon ng tanong (tulad ng pagbabatay ng max/min na bilang/kabuuan ng mga halaga sa isang expression)
    • Gumamit ang may-akda ng EM ng katulad na view (medyo mas malinis) para payagan ang mga katuwang niyang Epidemiologist at Institutional Review Board na i-validate at aprubahan ang mga survey na may libu-libong tanong sa mga structured interview na lubhang may branching at tailoring

Pagsisimula

Ang pinakamainam na paraan para magsimula sa EM ay ang:

  • I-install ang pinakabagong stable na bersyon mula sa http://www.limesurvey.org/en/download
  • I-import at tuklasin ang mga sample survey.
  • Tuklasin ang mga use case at HowTo at mga halimbawang sunud-sunod.
  • Tuklasin ang dokumentasyon ng EM (ang pahinang ito)
  • Suriin ang built-in na EM test suite
    • Mula sa anumang survey, sa ilalim ng tools, piliin ang opsyong EM
    • Inililista ng Mga available na function ang 70+ function at syntax
    • Unit Tests of Isolated Expressions
      • nagpapakita ng mga halimbawa ng paggamit ng lahat ng function at operator ng EM, at ng mga resulta sa PHP at JavaScript
      • tandaan na may ilang function na iba ang resulta sa bersyong PHP at JavaScript, kaya matutulungan ka ng pahinang ito na planuhin nang naaayon ang iyong lohika sa EM.

Anong Functionality ang Pinalalawak/Pinapalitan ng Expression Manager? (LimeSurvey <= 1.91+)

Mga Kondisyon => Relevance

Kinokontrol ng mga kondisyon kung aling mga tanong ang makikita. Ang pangkalahatang syntax ay SGQA operator Value, tulad ng 111X2X3 == "Y". Maaaring pagsamahin ang mga kondisyon gamit ang AND o OR, ngunit mahirap paghaluin ang AND at OR. Nakaimbak ang mga kondisyon mismo sa hiwalay na table, at malaking bahagi ng code ng LimeSurvey ay nakalaan sa pamamahala ng mga Kondisyon. Dahil sa malawakang pag-access sa database, ang pagproseso ng maraming kondisyon ay maaaring magdulot ng kapansin-pansing problema sa performance. Bukod pa rito, kapag may mga kondisyon nang nakatalaga sa mga tanong o pangkat, madalas ay hindi mo na maaaring i-reorder o tanggalin ang mga ito.

Mga Pagtatasa => Mga Equation at Micro-Tailoring

Pinapayagan ng mga pagtatasa ang mga user na gumawa ng scale score mula sa koleksyon ng mga tanong. Gayunpaman, hindi ito dynamic na nagbabago sa kasalukuyang pahina, at hindi naiimbak sa database ang mga halaga nito.

Mga Replacement => Micro-Tailoring

Maaaring i-tailor ng mga user ang ilang mensahe at tanong batay sa mga naunang tugon. Halimbawa, maaaring ganito ang isang tanong: {TOKEN:FIRSTNAME}, sinabi mong {SPORT.shown} ang paborito mong isport. Gayunpaman, hindi posibleng gumawa ng conditional tailoring (tulad ng pagsasabi ng "G." o "Gng." depende sa kasarian ng tao), o mag-conjugate ng mga pandiwa o mag-decline ng mga pangngalan nang walang masalimuot na JavaScript. Nakagagawa ang mga author ng mga survey na tila nagta-tailor ng mga tanong, ngunit nangailangan ito ng hiwalay na tanong para sa bawat permutation, at mga komplikadong kondisyon para magpasya kung aling mga tanong ang ipapakita.

Pag-validate

Maaaring i-validate ang tanong gamit ang mga Regular expression, o minimum/maximum na halaga, o hayaang magsilbing minimum o maximum na halaga ang isang tugon. Gayunpaman, hindi maaaring ibatay ang pag-validate sa mga kalkulasyon ng ibang variable nang walang masalimuot na JavaScript.

Mga Equation

Hindi sinusuportahan ang mga equation nang walang masalimuot na JavaScript.

Uri ng Tanong na Equation

Hindi maaaring i-save sa database ang mga equation (hal. ang pinal na score ng isang pagtatasa) nang walang masalimuot na JavaScript.

Paano Papalitan/Palalawakin ng Expression Manager ang Functionality na Iyon?

Ang Expression Manager ay isang bagong core module sa loob ng LimeSurvey na nagpapadali nang malaki sa pagsuporta sa mga komplikadong functionality na dating nangangailangan ng custom na JavaScript. Pinapalitan din nito ang kasalukuyang paraan ng pamamahala ng LimeSurvey sa mga Kondisyon at Pagtatasa.

Bagong Terminolohiya sa Pagtukoy sa Expression Manager (EM)

"Iniisip" ng EM ang functionality nito sa mga sumusunod na termino:

  • Relevance-based Branching - kung relevant ang isang tanong, itatanong ito, kung hindi ay hindi (hal. gagawin itong hindi nakikita, at mamarkahang NULL sa database). Mayroong bagong field na Relevance para sa lahat ng uri ng tanong, at para din sa bawat Pangkat (kaya makakapaglapat ka ng hanay ng mga kondisyon sa buong pangkat nang hindi kinokopya ang parehong kondisyon sa bawat tanong, at/o mapagsasama ang lohikang may kondisyon sa antas ng pangkat at tanong).
  • Tailoring - Kapag alam mo na kung aling mga tanong ang dapat itanong, tinutukoy ng tailoring (minsan tinatawag na piping) kung paano dapat itanong ang tanong. Sinusuportahan nito hindi lamang ang simpleng pagpapalit (tulad ng {TOKEN:FIRSTNAME}), kundi pati ang conjugation ng mga pandiwa at declination ng mga pangngalan batay sa kasarian o bilang ng iyong mga respondent. Pinapayagan ka rin nitong baguhin ang mensaheng ibinibigay mo sa respondent batay sa kung sinagot nila (o kung paano nila sinagot) ang ibang mga tanong.
  • Mga Equation - Nagdaragdag ang EM ng bagong uri ng tanong na tinatawag na Equation na nag-iimbak ng resulta ng isang Expression. Kinakalkula at isinusulat sa database ang mga resulta ng equation na ito, kahit itago mo ang mga ito sa pahina. Kaya kapaki-pakinabang ang mga ito para sa mga nakatagong kalkulasyon ng score, navigation na batay sa mga komplikadong equation, mga pagtatasa, at mga ulat na dapat mabuo at madaling makuha sa loob ng database.

Relevance at Cascading Relevance

Ang bawat uri ng tanong ay may opsyong Relevance na kumokontrol kung ipapakita ang tanong. Pinoproseso ng EM ang bawat Relevance Equation ayon sa pagkakasunod-sunod na dapat nilang lumabas sa survey. Kung true ang expression (o wala - para suportahan ang mga lumang survey), ipapakita ang tanong. Kung hindi ito relevant, itatago ang tanong, at gagawing NULL ang halaga sa database. Kung walang relevant na tanong sa isang pangkat, lalaktawan ang buong pangkat.

Bukod dito, kung alinman sa mga variable sa loob ng expression ay irrelevant, laging magiging false ang resulta ng expression. Nagbibigay-daan ito sa Cascading Relevance para hindi mo kailangang sumulat ng napakahabang Relevance equation para sa bawat tanong.

Halimbawa, mayroon kang 5 tanong na Q1-Q5, at gusto mo lang ipakita ang Q2 kung nasagot ang Q1, at ang Q3 kung nasagot ang Q2, at iba pa. Ganito maaaring ang mga relevance equation:

Code ng tanong Relevance Tanong
Q1 1 Ano ang pangalan mo?
Q2 Q1 {Q1}, ilang taon ka na?
Q3 Q2 Kaya, {Q2} taong gulang ka na. May asawa ka na ba?
Q4 Q3 == "Y" {Q1}, gaano ka na katagal na may asawa?
Q5 Q4 Ilan ang anak mo, {Q1}?

Gumagana rin sa JavaScript ang mga kalkulasyon ng relevance - kaya maaari mong ilagay ang lahat ng tanong sa itaas sa iisang pahina at gagana pa rin ito gaya ng inaasahan. Sa katunayan, ganap na pinapalitan ng EM kung paano pinoproseso ang mga format ng survey na Survey vs. Group vs. Question-at-a-time. Lahat ng ito ay gumagamit na ngayon ng eksaktong parehong navigation engine kaya pareho ang pagkilos ng mga ito anuman ang istilo ng survey.

Hangga't nasa parehong pahina ka, mananatili pa rin ang anumang data na inilagay mo, nakatago lang. Kaya kung maglalagay ka ng impormasyon, pagkatapos ay pipili ng opsyong magpapa-irrelevant dito, at saka mo ito muling gagawing relevant, magiging available pa rin ang iyong mga sagot. Gayunpaman, sa sandaling lumipat ka sa ibang pahina, mawawala ang lahat ng irrelevant na tugon para mapanatili ang integridad ng dataset.

Relevance sa Antas ng Pangkat

Sinusuportahan din ng Expression Manager ang relevance sa antas ng grupo. Mas napapadali nito ang pagpapatupad ng looping. Halimbawa, nais mong mangolekta ng impormasyon tungkol sa hanggang 10 entity (gaya ng mga produkto o mga tao sa isang sambahayan), kung saan unang tinutukoy kung ilang entity ang nangangailangan ng follow-up (halimbawa, sa pagtatanong kung ilang tao ang nakatira sa sambahayan, o sa pagpapapili sa mga tao ng mga produktong gusto nila mula sa mahabang listahan). Kapag alam mo na kung ilang entity ang nangangailangan ng follow-up, maaari mong gamitin ang relevance sa antas ng grupo tulad ng {count >= 1}, {count >=2}, ... {count >= 10} para sa bawat isa sa 10 grupo ng mga tanong na follow-up. Sa loob ng bawat grupo, maaari kang magkaroon ng kondisyonal na lohika sa antas ng tanong (hal. mga tanong na follow-up na partikular sa kasarian o edad ng bawat paksa). Pinagsasama gamit ang AND ang mga relevance equation sa antas ng tanong at ng grupo upang matukoy kung alin ang ipapakita.

Tailoring / Piping

Ang anumang nasa loob ng curly braces ay itinuturing na ngayong Expression (maliban sa isang pagkakataong inilalarawan sa ibaba). May access ang mga expression sa lahat ng LimeReplacementFields, sa lahat ng variable (sa pamamagitan ng ilang alias), sa lahat ng karaniwang operator ng equation (matematikal, lohikal, at paghahambing), at sa dose-dosenang function (na gumagana pa nga nang dynamic sa panig ng client).

Gamit ang mga equation na ito, maaari mong gawin ang mga sumusunod:

  1. Magpakita nang may kondisyon ng mga naka-tailor na mensahe sa mga respondent batay sa mga nakaraang tugon
  2. Gumawa ng mga pagtatasa at ipakita ang mga resulta ng pagtatasa (o mag-branch o magpakita ng mga mensahe nang may kondisyon) batay sa mga resultang iyon, nang hindi ginagamit ang mismong module ng Mga Pagtatasa
  3. I-conjugate ang mga pandiwa at i-decline ang mga pangngalan sa loob ng mga tanong, sagot, at ulat.
  4. Magpakita ng mga buod ng mga tugon bago ang pahinang "Ipakita ang iyong mga sagot" sa dulo ng survey

Mga Equation

Mayroong bagong uri ng tanong na tinatawag na Equation. Katulad ito ng Boilerplate na tanong, maliban na iniimbak nito sa database ang value ng ipinapakita. Kaya, kung ang text ng tanong na Equation ay may kalkulasyon ng pagtatasa, iimbak ang value na iyon sa database sa isang variable na maaaring ipakita sa loob ng pampubliko o pribadong istatistika.

Nalulutas nito ang karaniwang kahilingan na iimbak ang mga score ng pagtatasa sa loob ng database.

Syntax

Ang anumang nasa loob ng curly braces ay itinuturing na ngayong Expression (may isang eksepsiyon: hindi dapat may nauuna o sumusunod na whitespace - kailangan ito upang matiyak na hindi susubukan ng Expression Manager na iproseso ang nakapaloob na JavaScript).

Tandaan, maaaring umabot ng maraming linya ang mga expression, basta walang whitespace pagkatapos ng bukas na curly brace o bago ang pansarang curly brace. Lalo itong nakatutulong para sa mga nested na if() statement tulad nito:

{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',
               ''
             )
           )
         )
       )
     )
   )
 )
)}
Sinusuportahan ng Expression Manager ang sumusunod na syntax:
  • Lahat ng karaniwang operator na matematikal (hal. +,-,*,/,!)
  • Lahat ng karaniwang operator ng paghahambing (hal. <,<=,==,!=,>,>=, kasama ang mga katumbas na ito: lt,le,eq,ne,gt,ge)
  • Mga panaklong (upang makapag-grupo ka ng mga sub-expression)
  • Mga kondisyonal na operator (hal. &&,| | at ang mga katumbas na ito: and,or)
  • Mga string na may single at double quote (na maaaring maglaman ng mga string na may kabilang uri ng quote)
  • Comma operator (kaya maaaring magkaroon ng listahan ng mga expression at ibalik lamang ang huling resulta)
  • Assignment operator (=)
  • Mga paunang-natukoy na variable (para tukuyin ang mga tanong, attribute ng tanong, at mga tugon) - hal. lahat ng SGQA code
  • Mga paunang-natukoy na function (mayroon nang 70+, at madaling magdagdag pa)

Mga Operator

Sinusunod ng syntax ng EM ang normal na precedence ng operator:

Antas Operator(s) Paglalarawan
1 () mga panaklong para sa pag-grupo o pagtawag ng mga function
2 ! - + mga unary operator: not, negation, unary-plus
3 * / multiplikasyon, dibisyon
4 + - dagdag, bawas
5 < <= > >= lt le gt ge mga relatibong paghahambing
6 == != eq ne mga paghahambing ng pagkakapantay
7 and lohikal na AND
8 or lohikal na OR
9 = assignment operator
10 , comma operator

Babala tungkol sa plus operator (+)

Para sa pagkakapare-pareho ng JavaScript at PHP, ang plus operator (+) ay nagdaragdag kung parehong numeriko ang mga operand, ngunit nagdudugtong (concatenation) kung parehong hindi numerikong string ang dalawang bahagi. Gayunpaman, inirerekomenda naming gamitin ang function na join() para sa pagdudugtong at ang function na sum() para sa pagdaragdag, dahil mas malinaw nito ang layunin mo at naiiwasan ang mga di-inaasahang resulta kung string ang inaasahan mo ngunit numero ang nakuha (o kabaligtaran).

Babala tungkol sa hindi pagtutugma ng numero at string at sa alpabetikong paghahambing

Kapag nais mong maghambing ng mga value gamit ang relatibo o pagkakapantay na paghahambing, bigyang-pansin ang hindi pagtutugma ng uri. Ang value na ipinasok ng user o ang napiling code ng sagot ay maaaring gamitin bilang numero kung malinaw na numero ito. Kung babalutan mo ng " ang isa sa mga value, mapipilitan ang paghahambing bilang text (alpabetikong paghahambing). Kung nais mong maghambing nang numeriko, huwag kailanman balutan ng panipi, ", ang numero.

Halimbawa, ang Q0.NAOK > "50" ay true kung ang Q0.NAOK ay numerikong tanong na may value na 9. Ito ay dahil ipagpapalagay ng operator na > na alpabetikong paghahambing ito at hindi numeriko.

Para matiyak na integer ang inihahambing, maaari mong gamitin ang intval(Q0.NAOK) > 50, tandaan lamang na kung ang Q0.NAOK ay hindi numero (walang laman o string), ang intval(Q0.NAOK) == 0. Para maghambing ng string value ("A" < "B") gamitin nang direkta ang strcmp : strcmp(Q0.NAOK,"B") o strcmp(Q0.NAOK,"A5").

Pag-iingat sa paggamit ng Assignment Operator (=)

Tandaan, dapat mong iwasan ang paggamit ng mga assignment operator maliban kung talagang kinakailangan, dahil maaari itong magdulot ng mga hindi inaasahang side-effect. Halimbawa, kung babaguhin mo ang value ng isang nakaraang tugon, hindi muling kinakalkula ang cascading relevance at lohika ng pag-validate sa pagitan ng tanong na iyon at ng kasalukuyang tanong, kaya maaari kang magkaroon ng datos na hindi pare-pareho sa loob (hal. mga tanong na nananatiling may sagot ngunit dapat ay na-NULL, o mga tanong na nilaktawan ngunit dapat ay nasagot). Sa pangkalahatan, kung nais mong magtalaga ng value sa isang variable, dapat kang gumawa ng tanong na uri ng Equation, at gumamit ng expression para itakda ang value nito. Gayunpaman, may ilang bihirang pagkakataon na talagang kailangan ng mga tao ang operator na ito, kaya ginawa naming available ito.

Upang bigyan ka ng babala tungkol sa operator na ito, ipinapakita ito sa pulang font sa loob ng mga syntax equation (para hindi mo ito mapagkamalang "==")

Paggamit ng Assignment Operator

Ang mga pangunahing dahilan kung bakit maaaring gusto mong gumamit ng assignment ay:

  • Kailangan mong itakda ang default na value para sa tanong na hindi tumatanggap ng default sa pamamagitan ng equation (tulad ng list radio, kung saan hinahayaan ka ng user interface na pumili ng isa sa mga opsyon sa sagot, ngunit hindi ka pinapayagang maglagay ng equation). Gayunpaman, mag-ingat, dahil hindi mave-validate ng LimeSurvey na ang equation mo ay gumagawa ng isa sa mga pinapayagang sagot para sa tanong na iyon.
  • Kailangan mong sapilitang baguhin ang tugon sa nakaraang tanong batay sa mas huling tugon
  • Kailangan mo ng kumplikadong quota : gumamit ng isang nakatagong single choice para sa quota at itakda ito gamit ang assignment
  • atbp....

Maaari mong gamitin ang buong sistema ng expression manager para sa layuning ito.

  Ang assignment ay ginagawa lamang sa PHP. Hindi nito ina-update ang anumang value sa parehong pahina, kundi kapag nag-navigate lamang ang user gamit ang susunod, nakaraan, i-save ….


  Kung hindi ka gagamit ng equation question na uri para sa layuning ito: ang assignment ay gagawin lamang pagkatapos matapos ang lohika ng kasalukuyang pahina. Ang inirerekomendang paraan ay palaging gumamit ng equation question.


Ilang halimbawa:

  • Itakda ang sagot sa isang tanong na maikling teksto sa lowercase : {QCODE=strtolower(QCODE.NAOK)}
  • Magtakda ng default na sagot sa isang uri ng tanong na array sa simula ng survey : {Q1_SQ1=((is_empty(Q1_SQ1.NAOK),"A99",Q1_SQ1.NAOK)}
  • Magtakda ng default na sagot sa isang uri ng tanong na array texts sa simula ng survey : {Q1_SQY1_SQX1 = ((is_empty(Q1_SQY1_SQX1.NAOK),"Inserted answer", Q1_SQY1_SQX1.NAOK)}
  • Magtakda ng sagot na may kondisyon : {QCODE=if(YesNo="Y","A1","")}

Seguridad ng XSS

Kapag naka-enable ang XSS, may ilang sistema ng expression manager na hindi magagamit:

  • pagsisimula ng HTML tag sa isang expression ngunit pagtatapos nito sa ibang expression
  • paggamit ng komplikadong expression sa URL.

Halimbawa at solusyon

  • {if( 1 ,"<strong>","")}information{if( 1 ,"</strong>","")} ay hindi gagana kapag may XSS security. Dito, maaari mong gamitin ang {if(1,"<strong>information</strong>","information")}
  • <a href="/script.php?value={if(QCODE == "Y","yes","no")}">next</a>, dito maaari kang gumamit ng equation na tanong dahil ayos lang ang paggamit ng kumpletong code ng tanong: <a href="/script.php?value={EQUATION.NAOK}">next</a>

Pag-access sa mga Variable

Nagbibigay ang Expression Manager ng read-only na access sa anumang variable na maaaring kailanganin natin. Para sa backwards compatibility, nagbibigay ito ng access sa mga sumusunod:

  • TOKEN:xxx - ang value ng isang TOKEN (hal. TOKEN:FIRSTNAME, TOKEN:ATTRIBUTE_5) (para lamang sa HINDI anonymous na survey).
  • QCODE.shown - ang ipinapakitang value ng isang sagot (hal. "Oo") gamit ang Expression Manager.
  • Lahat ng {XXX} value na ginagamit ng mga template.
  • Sa text ng tanong, maaari mong gamitin ang {QID} na papalitan ng ID ng tanong at ang {SGQ} na papalitan ng SGQA ng tanong.

Bukod dito, hinahayaan ka ng Expression Manager na tukuyin ang mga variable gamit ang Code ng tanong (ang column na 'title' sa talahanayan ng mga tanong sa database). Ito rin ang label ng variable na ginagamit kapag nag-export ka ng data sa SPSS, R, o SAS. Halimbawa, kung may mga tanong ka tungkol sa pangalan, edad, at kasarian, maaari mong tawagin ang mga variable na iyon na name, age, at gender sa halip na 12345X13X22, 12345X13X23, at 12345X13X24. Dahil dito, mas madaling basahin ng lahat ang mga equation at i-validate ang logic, at maaari mo ring ilipat-lipat ang mga tanong nang hindi sinusubaybayan ang numero ng grupo o tanong.

Mahalaga: Ligtas lamang tumukoy sa mga variable na nasa mga naunang pahina o tanong.

Bukod pa rito, hinahayaan ka ng Expression Manager na i-access ang maraming property ng tanong:


Syntax Kahulugan Halimbawa Resulta ng halimbawa
Qcode alias para sa Qcode.code {implode(',',name,gender)} 'Tom','M'
Qcode.code ang napiling code ng tugon para sa tanong kung relevant ito (kung hindi, blangko), o ang text value kung hindi ito tanong na may code {implode(',',name.code,gender.code)} 'Tom','M'
Qcode.NAOK kapareho ng Qcode - tingnan ang talakayan tungkol sa NAOK {gender.NAOK} 'M'
Qcode.value ang value ng pagtatasa para sa tanong kung relevant ito (kung hindi, blangko), o ang text value kung hindi ito tanong na may code {gender.value} '1'
Qcode.valueNAOK kapareho ng Qcode.value - tingnan ang talakayan tungkol sa NAOK {gender.valueNAOK} '1'
Qcode.shown ang ipinapakitang value para sa tanong {implode(',',name.shown,gender.shown)} 'Tom','Male'
Qcode.question ang text ng tanong {gender.question} 'What is your gender?'
Qcode.mandatory kung mandatoryo ang tanong (Y/N) {gender.mandatory} 'N'
Qcode.qid ang panloob na numero ng tanong (hindi ang sunud-sunod na numero) {gender.qid} 337
Qcode.type ang uri ng tanong {gender.type} 'G'
Qcode.jsName ang tamang javascript name para sa tanong, kahit ideklara ito sa pahinang ito o sa iba {gender.jsName} 'java1827X3X337'
Qcode.gid ang panloob na numero ng grupo (hindi ang sunud-sunod na numero) {gender.gid} 3
Qcode.qseq ang sunud-sunod na numero ng tanong, simula sa 0 {gender.qseq} 5
Qcode.gseq ang sunud-sunod na numero ng grupo, simula sa 0 {gender.gseq} 1
Qcode.relevanceStatus kung relevant ba ang tanong sa ngayon (0 o 1) {gender.relevanceStatus} 1
Qcode.relevance ang relevance equation sa antas ng tanong {gender.relevance} '!is_empty(name)'
Qcode.grelevance ang relevance equation sa antas ng grupo {gender.grelevance} 'num_children >= 5'
Qcode.sgqa ang SGQA value para sa tanong na ito {gender.sgqa} '1827X3X337'

Isyu sa HTML editor

  Naayos ang isyung ito pagkatapos ng 2.05 build 140803


Kapag gumagamit ka ng HTML editor, may ilang karakter na pinapalitan ng mga HTML entity.

  • & ng &amp;
  • < ng &lt;
  • > ng &gt;

Kapag gumagamit ka ng HTML editor, kailangan mong gamitin ang:

  • and para sa &
  • lt para sa <
  • le para sa <=
  • gt para sa >
  • ge para sa >=

Pagpapangalan sa Variable ng Qcode

Narito ang mga detalye kung paano buuin ang isang Qcode (at i-access ang ilang property) ayon sa uri ng tanong. Sa pangkalahatan, ang mga Qcode ay binubuo bilang:

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

Ang Code ng subquestion at Scale ID ay kailangang gamitin o hindi, depende sa uri ng tanong - tingnan ang talahanayan sa ibaba. Para sa comment at other, ang code ng tanong ay QuestionCode_comment at QuestionCode_other

Uri Paglalarawan Code Mga subquestion Mga opsyon sa sagot Mga scale Code ng sagot Ipinapakitang sagot Relevance
5 Opsyong may 5 point na Radio-Button Q1 1-5 {Q1} {Q1.shown} {Q1==3}
B Array (opsyong may 10 point) Radio-Button Q2 L1-L6 1-10 {Q2_L2} {Q2_L2.shown} {Q2_L2==7}
A Array (opsyong may 5 point) Radio-Button Q3 1-5 1-5 {Q3_1} {Q3_1.shown} {Q3_1>=3}
1 Array (Flexible na Label) Dual Scale Q4 sq1-sq5 0:a1-a3 1:b1-b3 {Q4_sq1_0} {Q4_sq1_1.shown} {Q4_sq1_1=='b2'}
H Array (Flexible) - Format na Column Q5 1-5 s,m,t {Q5_1} {Q5_1.shown} {Q5_1=='s'}
F Array (Flexible) - Format na Row Q6 F1-F5 1-5 {Q6_F3} {Q6_F3.shown} {Q6_F3==4}
E Array (Dagdagan/Walang pinagbago/Bawasan) Radio-Button Q7 1-7 I,S,D {Q7_4} {Q7_4.shown} {Q7_4=='D'}
: Array (Multi Flexi) 1 hanggang 10 Q8 ls1,todo,ls2 min,max,avg {Q8_ls1_max} {Q8_ls2_avg.shown} {Q8_ls2_min==7}
; Array (Multi Flexi) Text Q9 hp,st,sw 1st,2nd,3rd {Q9_hp_3rd} {Q9_hp_3rd.shown} {Q9_hp_3rd=='Peter'}
C Array (Oo/Hindi tiyak/Hindi) Radio-Button Q10 1-5 Y,N,U {Q10_1} {Q10_1.shown} {Q10_3=='Y'}
X Boilerplate na tanong Q11 {Q11.shown}
D Petsa Q12 {Q12} {Q12.shown}
* Equation Q13 {Q13} {Q13.shown} {Q13>5}
~124~ Pag-upload ng file (itinatala ang bilang ng na-upload na file) Q14 {Q14} {Q14>0}
G Drop-down na listahan ng kasarian Q15 M,F {Q15} {Q15.shown} {Q15=='M'}
U Malaking free text Q16 {Q16} {Q16.shown} {strlen(Q16)>100}
I Tanong sa wika Q17 {Q17} {Q17.shown} {Q17=='en'}
! Listahan - Dropdown Q18 1-5 {Q18} {Q18.shown} {Q18==3}
L Listahan na Drop-Down/Radio-Button Q19 A-Z {Q19} {Q19.shown} {Q19=='X'}
O Listahang may komento na Drop-Down/Radio-Button + Textarea Q20 A-F {Q20},{Q20comment} {Q20.shown} {Q20=='B'}
T Mahabang free text Q21 {Q21} {Q21.shown} {strstr(Q21,'hello')>0}
M Multiple choice na Checkbox Q22 A-F, other {Q22_E}, {Q22_other} {Q22_E.shown}, {Q22_other.shown} {Q22_E=='Y'}
P Multiple choice na may komento na Checkbox + Text Q23 A-F {Q23_D}, {Q23_Dcomment} {Q23_D.shown} {!is_empty(Q23)}
K Maramihang numerical na tanong Q24 self,mom,dad {Q24_self} {Q24_self.shown} {Q24_self>30}
Q Maraming maikling text Q25 A-F {Q25_B} {Q25_B.shown} {substr(Q25_B,1,1)=='Q'}
N Numerical na uri ng tanong Q26 {Q26} {Q26.shown} {Q26 > 30}
R Estilong ranking Q27 1-4 {Q27_1} {Q27_1.shown} {Q27_1==3}
S Maikling free text Q28 {Q28} {Q28.shown} {Q28=='mine'}
Y Oo/Hindi na Radio-Button Q29 {Q29} {Q29.shown} {Q29=='Y'}

Ang mga nakareserbang variable na 'this', 'self', at 'that'

Madalas, gusto mong suriin ang lahat ng bahagi ng isang tanong, tulad ng pagbilang kung ilang subquestion ang nasagot, o pagsasama-sama ng mga score. Sa ibang pagkakataon, gusto mo lamang iproseso ang ilang partikular na row o column ng isang tanong (tulad ng pagkuha ng kabuuan ng row o column at pag-save nito sa database). Pinadadali ng mga nakareserbang variable na ito ang prosesong iyon.

Ang variable na 'this' ay eksklusibong ginagamit sa mga advanced na opsyon ng tanong na "Whole question validation equation" at "Sub-question validation equation". Lumalawak ito sa mga pangalan ng variable ng bawat cell sa loob ng mga tanong na iyon. Kaya, kung gusto mong tiyakin na ang bawat entry ay mas malaki sa tatlo, itatakda mo ang "Sub-question validation equation" sa (this > 3).

Ang mga variable na 'self' at 'that' ay mas makapangyarihan, at nagsisilbing mga macro na pinalalawak bago iproseso ang mga equation. Ang mga pagpipilian sa syntax ay:

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

Ang suffix ay alinman sa mga karaniwang suffix ng qcode (hal. NAOK, value, shown)

Ang sub-selector ay isa sa mga sumusunod:

  • comments - mga subquestion lamang na komento (hal., mula sa multiple choice na may komento at listahang may komento)
  • nocomments - mga subquestion lamang na hindi komento
  • sq_X - kung saan ang X ay identifier ng row o column. Mga subquestion lamang na tumutugma sa pattern na X ang pinipili. Tandaan na ang paghahanap ay ginagawa sa kumpletong identifier ng code, kaya ang sq_X ay tumutugma at isinasama ang mga subquestion na nX, X, Xn (hal. kung gagamitin mo ang sq_1, isasama ang mga subquestion na a1, 1a, 1, 11 o 001). Mag-ingat sa uri ng tanong na dual scale kung saan ang code ng mga subquestion ay QCODE_SQCODE_1 at QCODE_SQCODE_1, at sa uri ng tanong na ranking kung saan ang code ng mga subquestion ay QCODE_1,QCODE_2 ....
  • nosq_X - kung saan ang X ay identifier ng row o column. Mga subquestion lamang na hindi tumutugma sa pattern na X ang pinipili. Tandaan na ang paghahanap ay ginagawa sa kumpletong identifier ng code, kaya ang nosq_X ay tumutugma at hindi isinasama ang mga subquestion na nX, X, Xn

Mga halimbawa:

  • May nasagot na ba sa anumang bahagi ng isang tanong? {count(self.NAOK)>0}
  • Ano ang score ng pagtatasa para sa tanong na ito? {sum(self.value)}

Magagamit mo rin ang mga ito upang makuha ang kabuuan ng row at column. Ipagpalagay na mayroon kang array ng mga numero na may mga row na A-E at mga column na 1-5.

  • Ano ang kabuuang total? {sum(self.NAOK)}
  • Ano ang kabuuan ng row B? {sum(self.sq_B.NAOK)}
  • Ano ang kabuuan ng column 3? {sum(self.sq_3.NAOK)}

Ang variable na 'that' ay tulad ng variable na 'self', ngunit hinahayaan kang tumukoy sa ibang mga tanong. Ang syntax nito ay:

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

Ang qname ay ang pangalan ng tanong na walang anumang extension ng subquestion. Kaya, kung gumawa ka ng tanong na 'q1', iyon ang qname nito

Mga halimbawa:

  • May nasagot na ba sa anumang bahagi ng tanong na q1? {count(that.q1.NAOK)>0}
  • Ano ang score ng pagtatasa para sa q2? {sum(that.q2.NAOK)}
  • Ano ang kabuuang total ng q3? {sum(that.q3.NAOK)}
  • Ano ang kabuuan ng row C sa q4? {sum(that.q4.sq_C.NAOK)}
  • Ano ang kabuuan ng column 2 sa q4? {sum(that.q4.sq_2.NAOK)}

Ang mga variable na 'self' at 'that' ay magagamit sa anumang relevance, pag-validate, o tailoring.

Ang isang dapat tandaan ay kapag ginamit mo ang tampok na Show Logic File, ipapakita nito ang pinalawak na value ng 'self' at 'that'. Dito mo makikita ang aktwal na equation na mabubuo upang ikaw (at ang Expression Manager) ay makapag-validate na umiiral ang mga variable. Maaaring nakalilito ito dahil maaaring makakita ka ng napakahahabang equation. Gayunpaman, kapag in-edit mo ang tanong, makikita mo ang orihinal na equation gamit ang 'self' at/o 'that'

Tandaan din na hindi mo dapat gamitin ang mga variable na ito kung (a) nais mong pangalanan nang tahasan ang bawat variable na ginagamit sa isang equation, o (b) gumagamit ka ng mga variable na walang subquestion (hal. mga tanong na may iisang sagot). Sa mga kasong iyon, labis na ang paglalagay ng 'that' sa unahan ng variable, at may panganib kang makakuha ng hindi inaasahang resulta.

Paggamit ng NAOK

NAOK --> "Not Applicable" (NA) is alright (OK) - ibig sabihin, ayos lang kahit hindi naaangkop

Ang paggamit ng NAOK ay nangangahulugang ang lahat o ilan sa mga variable ay hindi relevant (hal. "Not Applicable" (NA) is alright (OK) - ayos lang kahit hindi naaangkop).

Kapag naglagay ka ng variable mula sa isang tanong sa anumang equation: kung nakatago ang tanong na ito (o subquestion) dahil sa kondisyon, madi-disable ang buong equation.

Halimbawa: ang count(Q1_SQ1,Q1_SQ2,Q1_SQ3,Q1_SQ4) ay laging magbibigay ng walang lamang string kung may isang subquestion ng Q1 na na-filter. Upang bilangin ang mga na-check na subquestion sa ganitong tanong, maaari mong gamitin ang count(Q1_SQ1.NAOK,Q1_SQ2.NAOK,Q1_SQ3.NAOK,Q1_SQ4.NAOK). Kung nakatago ang subquestion, magbabalik ang Expression Manager ng walang lamang string.

Kung walang NAOK: kapag may isang tanong o isang subquestion na nakatago, laging magbabalik ang Expression Manager ng walang lamang string, na katumbas ng false.

Laging gumagamit ng NAOK system ang .shown (walang lamang string kung nakatago), ngunit kung kailangan mo ang code ng sagot, mainam na laging idagdag ang .NAOK pagkatapos ng code ng tanong, maliban kung kailangan mo ito nang wala at alam mo ang ginagawa mo.

May isa pang halimbawa at impormasyon sa Overriding Cascading Conditions

Access sa mga Function

Nagbibigay ang Expression Manager ng access sa mga mathematical, string, at user-defined na function, tulad ng ipinapakita sa ibaba. May katumbas ang mga function na ito sa PHP at JavaScript upang gumana nang magkapareho sa server-side (PHP) at client-side (JavaScript). Madaling magdagdag ng mga bagong function.

Mga Ipinatupad na Function

Kasalukuyang available ang mga sumusunod na function:

Function Kahulugan Syntax
abs Absolute na halaga number abs(number)
acos Arkong kosain number acos(number)
addslashes I-quote ang string gamit ang mga slash string addslashes(string)
asin Arkong sain number asin(number)
atan Arkong tanghente number atan(number)
atan2 Arkong tanghente ng dalawang paiba-iba number atan2(number, number)
ceil I-round up ang mga fraction number ceil(number)
checkdate Nagiging true(1) kung ito ay wastong petsa sa gregorian calendar bool checkdate(month,day,year)
convert_value I-convert ang numerikal na value gamit ang inputTable at outputTable ng mga numerikal na value number convert_value(fValue, iStrict, sTranslateFromList, sTranslateToList)
cos Kosain number cos(number)
count Bilangin ang dami ng nasagot (hindi blangkong) tanong sa listahan number count(arg1, arg12, ..., argN)
countif Bilangin ang mga nasagot na tanong sa listahan na katumbas ng unang argument number countif(matches, arg1, arg2, ... argN)
countifop Bilangin ang mga nasagot na tanong sa listahan na pumasa sa pamantayan (arg op value) number countifop(op, value, arg1, arg2, ... argN)
date I-format ang lokal na petsa/oras string date(format [, timestamp=time()])
exp Kinakalkula ang matematikong simbolo ng e number exp(number)
fixnum Ipakita ang mga numero na may kuwit bilang radix separator, kung kinakailangan string fixnum(number)
floor I-round down ang mga fraction number floor(number)
gmdate I-format ang petsa/oras sa GMT string gmdate(format [, timestamp=time()])
html_entity_decode I-convert ang lahat ng HTML entity sa katumbas nilang mga character (laging gumagamit ng ENT_QUOTES at UTF-8) string html_entity_decode(string)
htmlentities I-convert ang lahat ng naaangkop na character sa mga HTML entity (laging gumagamit ng ENT_QUOTES at UTF-8) string htmlentities(string)
expr_mgr_htmlspecialchars I-convert ang mga special character sa mga HTML entity (laging gumagamit ng ENT_QUOTES at UTF-8) string htmlspecialchars(string)
expr_mgr_htmlspecialchars_decode Ibalik sa mga character ang mga special HTML entity (laging gumagamit ng ENT_QUOTES at UTF-8) string htmlspecialchars_decode(string)
idate I-format ang lokal na oras/petsa bilang integer string idate(string [, timestamp=time()])
if (Updated in 3.0.2 ) Excel-style na if(test,result_if_true[,result_if_false = ""]) if(test,result_if_true[,result_if_false = ""])
implode Pagsama-samahin ang mga array element gamit ang string string implode(glue,arg1,arg2,...,argN)
intval Kunin ang integer value ng variable int intval(number [, base=10])
is_empty Alamin kung itinuturing na walang laman ang variable bool is_empty(var)
is_float Inaalam kung float ang uri ng variable bool is_float(var)
is_int Inaalam kung integer ang uri ng variable bool is_int(var)
is_nan Inaalam kung hindi numero ang value bool is_nan(var)
is_null Inaalam kung NULL ang variable bool is_null(var)
is_numeric Inaalam kung numero o numeric na string ang variable bool is_numeric(var)
is_string Inaalam kung string ang uri ng variable bool is_string(var)
join (New in 2.0 build 130129) Pagsamahin ang mga element bilang bagong string join(arg1, arg2, ... argN)
list I-return ang listahan ng mga hindi blangkong value na pinaghihiwalay ng kuwit string list(arg1, arg2, ... argN)
listifop (New in 3.16.1 ) I-return ang listahang pinaghihiwalay ng 'glue' ng tinukoy na property ng tanong (retProp) mula sa mga tanong sa listahan na pumasa sa pamantayan (cmpProp op value) string listifop(cmpProp, op, value, retProp, glue, sgqa1, sgqa2, ... sgqaN)
log Ang logarithm ng number sa base, kung ibinigay, o ang natural na logarithm. number log(number,base=e)
ltrim Alisin ang whitespace (o iba pang character) sa simula ng string string ltrim(string [, charlist])
max Hanapin ang pinakamataas na halaga number max(arg1, arg2, ... argN)
min Hanapin ang pinakamababang halaga number min(arg1, arg2, ... argN)
mktime Kunin ang UNIX timestamp para sa isang petsa (opsyonal ang bawat isa sa 6 na argument) number mktime([hour [, minute [, second [, month [, day [, year ]]]]]])
modulo-function Hindi pa sinusuportahan ang modulo function. Maaari ninyong gamitin ang floor() function bilang kapalit floor(x/y)==(x/y)
nl2br Maglagay ng mga HTML line break bago ang lahat ng newline sa string string nl2br(string)
number_format I-format ang numero nang nakagrupo kada libo string number_format(number)
pi Kunin ang halaga ng pi number pi()
pow Exponential expression number pow(base, exp)
quoted_printable_decode I-convert ang quoted-printable na string sa 8 bit na string string quoted_printable_decode(string)
quoted_printable_encode I-convert ang 8 bit na string sa quoted-printable na string string quoted_printable_encode(string)
quotemeta I-quote ang mga meta character string quotemeta(string)
rand Gumawa ng random na integer, tingnan ang halimbawang ito int rand() OR int rand(min, max)
regexMatch ihambing ang string sa isang regular expression bool regexMatch(pattern,input)
round Nira-round off ang numero sa opsyonal na precision number round(val [, precision])
rtrim Alisin ang whitespace (o iba pang character) sa dulo ng string string rtrim(string [, charlist])
sin Sain number sin(arg)
sprintf Mag-return ng naka-format na string string sprintf(format, arg1, arg2, ... argN)
sqrt Square root number sqrt(arg)
stddev Kalkulahin ang Sample Standard Deviation para sa listahan ng mga numero number stddev(arg1, arg2, ... argN)
str_pad Dagdagan ang string hanggang sa isang tiyak na haba gamit ang isa pang string string str_pad(input, pad_length [, pad_string])
str_repeat Uliting ang hanay string str_repeat(input, multiplier)
str_replace Palitan ang lahat ng occurrence ng hinahanap na string ng kapalit na string string str_replace(search, replace, subject)
strcasecmp Binary-safe na paghahambing ng case-insensitive string int strcasecmp(str1, str2)
strcmp Binary-safe na paghahambing ng string int strcmp(str1, str2)
strip_tags Alisin ang mga HTML at PHP tag sa string string strip_tags(str, allowable_tags)
stripos Hanapin ang posisyon ng unang occurrence ng case-insensitive na unicode string (nagsisimula sa 0, nagre-return ng false kung hindi nahanap) int stripos(haystack, needle [, offset=0])
stripslashes Nag-a-unquote ng naka-quote na string string stripslashes(string)
stristr Case-insensitive na strstr string stristr(haystack, needle [, before_needle=false])
strlen Kunin ang haba ng string int strlen(string)
strpos Hanapin ang posisyon ng unang occurrence ng unicode string (nagsisimula sa 0, nagre-return ng false kung hindi nahanap) int strpos(haystack, needle [ offset=0])
strrev Baligtarin ang string string strrev(string)
strstr Hanapin ang unang occurrence ng string string strstr(haystack, needle[, before_needle=false])
strtolower Gawing lowercase ang string string strtolower(string)
strtotime I-parse ang halos anumang tekstuwal na paglalarawan ng petsa at oras sa English bilang Unix timestamp int strtotime(string)
strtoupper Gawing uppercase ang string string strtoupper(string)
substr I-return ang bahagi ng unicode string string substr(string, start [, length])
sum Kalkulahin ang sum ng mga value sa array number sum(arg1, arg2, ... argN)
sumifop I-sum ang mga value ng mga nasagot na tanong sa listahan na pumasa sa pamantayan (arg op value) number sumifop(op, value, arg1, arg2, ... argN)
tan Tanghente number tan(arg)
time I-return ang kasalukuyang UNIX timestamp number time()
trim Alisin ang whitespace (o iba pang character) sa simula at dulo ng string string trim(string [, charlist])
ucwords Gawing uppercase ang unang character ng bawat salita sa string string ucwords(string)
unique Nagiging true kung natatangi ang lahat ng hindi blangkong tugon boolean unique(arg1, ..., argN)

Mga Function na Pinaplano o Pinag-iisipan

Kabilang sa iba pang mga function na pinaplano (o pinag-iisipan) ngunit hindi pa naipapatupad ang mga sumusunod. Ang ilan sa mga ito ay para sa backwards compatibility sa ibang survey tool.

Syntax Kahulugan Mga komento
e() ibinabalik ang halaga ng e
formatDate(X,PAT) ibinabalik ang string value ng petsang X na naka-format ayon sa Java date format pattern na PAT
formatNumber(X,PAT) ibinabalik ang string value ng numerong X na naka-format ayon sa Java number format pattern na PAT
getAnsOption(X) Core plugin na ExpressionAnswerOptions
getAnsOption(X,Y) Core plugin na ExpressionAnswerOptions
getRelevance(X) ibinabalik ang relevance equation para sa tanong na X
getStartTime() ibinabalik ang petsang tumutugma sa oras ng system nang magsimula ang interview
getType(X) ibinabalik ang string name ng datatype - hal. *NA* kung isNA()
gotoFirst() lumalaktaw sa unang relevant na hanay ng mga tanong - sinasalungat nito ang normal na daloy ng system
gotoNext() lumalaktaw sa susunod na relevant na hanay ng mga tanong - sinasalungat nito ang normal na daloy ng system
gotoPrevious() lumalaktaw sa nakaraang relevant na hanay ng mga tanong - sinasalungat nito ang normal na daloy ng system
isAsked(X) ibinabalik ang true kung ang sagot ay hindi *NA*, *INVALID*, o *UNASKED*
isInvalid(X) ibinabalik ang true kung ang sagot ay may uring *INVALID*
isNA(X) ibinabalik ang true kung ang sagot ay may uring *NA*
isNotUnderstood(X) ibinabalik ang true kung ang sagot ay may uring *HUH*
isRefused(X) ibinabalik ang true kung ang sagot ay may uring *REFUSED*
isSpecial(X) ibinabalik ang true kung ang sagot ay may uring *UNASKED*, *NA*, *REFUSED*, *INVALID*, *UNKNOWN*, o *HUH*
isUnknown(X) ibinabalik ang true kung ang sagot ay may uring *UNKNOWN*
jumpTo(X) lumalaktaw sa grupong naglalaman ng pinangalanang tanong -- sinasalungat nito ang normal na daloy ng system
jumpToFirstUnasked() lumalaktaw sa unang hindi pa naitatanong na tanong kaya nilalampasan ang mga tanong na nasagot na dati sinasalungat nito ang normal na daloy ng system
lastIndexOf(X,Y) ibinabalik ang huling index (base 0) ng string na Y sa string na X. Ibinabalik ang -1 kung ang Y ay wala sa X
list(X,...) isang string na naglalaman ng listahang pinaghihiwalay ng kuwit ng mga positibong halaga, na may "at" sa pagitan ng huling dalawa
mean(X,...) ibinabalik ang mean ng isang listahan ng mga halaga
numAnsOptions(X) ibinabalik ang bilang ng mga opsyon sa sagot ng tanong na X
orlist(X,...) isang string na naglalaman ng listahang pinaghihiwalay ng kuwit ng mga positibong halaga, na may "o" sa pagitan ng huling dalawa
parseDate(X,PAT) ibinabalik ang date value ng string na X na na-parse gamit ang Java date format pattern na PAT
parseNumber(X,PAT) ibinabalik ang numerical value ng string na X na na-parse gamit ang Java number format pattern na PAT
showAllResponsesExcept( questionList,attributeList,attributeTitleList) questionList = listahan ng mga identifier ng tanong na pinaghihiwalay ng pipe; attributeList = listahan ng mga attribute na pinaghihiwalay ng pipe (tulad ng question#, title, text, type - para mapili mo kung ano ang ipapakita); attributeTitleList = listahan ng mga header ng talahanayan na pinaghihiwalay ng pipe, para ma-internationalize ang ulat.
showTheseResponses( questionList,attributeList,attributeTitleList) questionList = listahan ng mga identifier ng tanong na pinaghihiwalay ng pipe; attributeList = listahan ng mga attribute na pinaghihiwalay ng pipe (tulad ng question#, title, text, type - para mapili mo kung ano ang ipapakita); attributeTitleList = listahan ng mga header ng talahanayan na pinaghihiwalay ng pipe, para ma-internationalize ang ulat.

Alam ng Expression Manager Kung Aling mga Variable ang Lokal

Upang mabuo nang tama ang JavaScript para sa pahina, kailangang malaman ng Expression Manager kung aling mga variable ang nakatakda sa pahina at kung ano ang JavaScript ID ng mga ito (hal. para sa document.getElementById(x)). Kailangan din nitong malaman kung aling mga variable ang nakatakda sa ibang mga pahina (upang matiyak na naroroon at may laman ang mga kinakailangang <input type='hidden' value='x'> na field).

Cascading Conditions

Kung alinman sa mga variable ay irrelevant, ang buong equation ay magiging irrelevant (false). Halimbawa, sa sumusunod na talahanayan, ang N/A ay nangangahulugang ang isa sa mga variable ay hindi relevant

Operator Halimbawa a b Resulta
+ (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 (o blangko) true
function !is_empty(a) N/A false

Pag-override sa Cascading Conditions

Sabihin nating gusto mong magpakita ng patuloy na kabuuan ng lahat ng relevant na sagot. Maaari mong subukang gamitin ang equation na {sum(q1,q2,q3,...,qN)}. Gayunpaman, isinasalin ito sa loob bilang LEMif(LEManyNA('q1','q2','q3',...,'qN'),,sum(LEMval('q1'),LEMval('q2'),LEMval('q3'),...,LEMval('qN'))). Kaya, kung alinman sa mga halaga ng q1-qN ay irrelevant, palaging magbabalik ng false ang equation. Sa kasong ito, magpapakita ang sum() ng 0 hanggang masagot ang lahat ng tanong.

Upang malutas ito, maaaring dagdagan ang bawat variable ng suffix na ".NAOK" (na nangangahulugang katanggap-tanggap ang Not Applicable). Sa ganitong mga kaso, ganito ang mangyayari. Sabihin nating mayroon kang variable na q1.NAOK

  1. Hindi idinaragdag ang q1 sa clause na LEMManyNA()
  2. Patuloy na susuriin ng LEMval('q1') kung relevant ang tugon, at magbabalik ito ng '' kung hindi (kaya hindi papansinin ang mga indibidwal na irrelevant na tugon, ngunit hindi nito mawawalang-bisa ang buong expression).

Kaya, ang solusyon sa problema ng patuloy na kabuuan ay gamitin ang equation na sum(q1.NAOK,q2.NAOK,q3.NAOK,...,qN.NAOK).

Pinapayagan din ng paggamit ng suffix na .NAOK ang mga author na magdisenyo ng mga survey na may ilang posibleng landas ngunit nagtatagpo sa mga karaniwang landas sa dakong huli. Halimbawa, sabihin nating sumagot ang mga respondent sa paraang labas sa normal na saklaw ng mga tugon. Maaaring balaan ng author ang mga respondent na maaaring hindi valid ang makuhang resulta, at itanong kung talagang gusto nilang magpatuloy sa survey. Kung Oo ang sagot nila, ipapakita ang natitirang mga tanong. Susuriin ng kondisyon para sa "natitirang mga tanong" kung ang mga unang tugon ay nasa normal na saklaw O kung Oo ang sagot ng respondent sa tanong na relevant lamang kung sumagot sila nang labas sa normal na saklaw.

Paano Sinusuportahan ng Expression Manager ang Conditional Micro-Tailoring?

Narito ang isang halimbawa ng micro-tailoring (kung saan ang Question Type=='expr' ay nangangahulugang Equation):

Code ng tanong Relevance Uri ng tanong Tanong
name 1 text Ano ang pangalan mo?
age 1 text Ilang taon ka na?
badage !is_empty(age) expr {(age<16) or (age>80)}
agestop badage message Pasensya na, {name}, masyado kang {if( (age<16),'bata',if( (age>80),'matanda','nasa katanghaliang-gulang') ) } para sa pagsusulit na ito.
kids !badage yesno May mga anak ka ba?
parents 1 expr {!badage && kids=='Y'}
numKids parents text Ilan ang mga anak mo?
kid1 parents && numKids >= 1 text Ilang taon na ang panganay mo?
kid2 parents && numKids >= 2 text Ilang taon na ang pangalawa mong anak?
kid3 parents && numKids >= 3 text Ilang taon na ang pangatlo mong anak?
kid4 parents && numKids >= 4 text Ilang taon na ang pang-apat mong anak?
kid5 parents && numKids >= 5 text Ilang taon na ang panlima mong anak?
sumage 1 expr {sum(kid1.NAOK,kid2.NAOK,kid3.NAOK,kid4.NAOK,kid5.NAOK)}
report parents yesno {name}, sinabi mong {age} ang edad mo at mayroon kang {numKids} anak. Ang kabuuan ng edad ng iyong unang {min(numKids,5)} anak ay {sumage}

Lahat ng mga tanong na ito ay maaaring nasa iisang pahina (hal. sa iisang grupo), at tanging ang mga relevant na tanong lamang ang ipapakita. Bukod dito, habang inilalagay mo ang edad ng mga anak, dynamic na mag-a-update sa pahina ang sum() expression sa huling tanong.

Ibinibigay ito ng Expression Manager sa pamamagitan ng pagbabalot sa bawat expression ng isang pinangalanang elementong <span>. Sa tuwing nagbabago ang isang halaga, muling kinukwenta nito ang expression na dapat lumabas sa elementong <span> na iyon at nililikha muli ang display. Maaari kang magkaroon ng dose-dosena, o daan-daan pa, ng ganitong mga tailored expression sa iisang pahina, at ipapakita muli ng pahina ang lahat ng mga ito sa iisang screen refresh.

Pagtutugma ng LimeSurvey 1.91+ sa Functionality ng Expression Manager

Lumang Feature Bagong Feature Mga komento
Conditions Relevance Maaari kang gumamit ng napakakomplikadong conditional equation, at ma-access ang mas malawak na hanay ng mga variable
Assessments Equation Ang anumang assessment score ay maaaring i-restructure bilang isang Equation. Tinitiyak nito na maisusulat ang score sa database, at nagbibigay-daan din itong makita ang mga dynamic na pagbabago sa halaga ng score sa kasalukuyang pahina
Replacements Expression Manager Kinukuha ng core engine ang input string at itinuturing na Expression ang lahat ng nasa loob ng curly braces - kaya hinahawakan nito ang lahat ng makasaysayang uri ng replacement. Upang hindi masira ang naka-embed na JavaScript, pinoproseso lamang ng Expression Manager ang nilalaman sa pagitan ng curly braces kung (a) walang nauuna o nahuhuling whitespace sa loob ng curly braces - hal. ang {expr} ay isang expression, ngunit ang { expr}, {expr }, at { expr } ay hindi mga expression. Bukod dito, hindi pinoproseso ng Expression Manager ang nilalaman sa loob ng sarili nitong mga string (hal. ang {list('hi','there {braces}')} ay lumilikha ng "hi there {braces}"). Hindi rin nito pinapansin ang mga escaped na curly braces (hal. \{this is not an expression\})
Validation Expression Manager Ang plano ay kunin ang kasalukuyang min/max na Mga attribute ng tanong at ipaproseso ang mga ito sa Expression Manager. Sa ganoong paraan, ang mga min/max na halaga ay maaaring mga expression din

Syntax Highlighting

Upang matulungan ka sa paglalagay at pag-validate ng mga expression, nagbibigay ang EM ng syntax highlighting na may mga sumusunod na tampok:

Mga Uri at Kahulugan ng Syntax Highlighting

Kulay Halimbawa Kahulugan Tooltip Mga komento
tan na background Sample ang buong equation wala Anumang nasa loob ng curly braces na kinikilala bilang equation (halimbawa, walang espasyo sa unahan o dulo) ay may kulay na tan na background upang maiba ito sa nakapaligid na teksto
bold na pulang teksto Sample Isang error Ilang paliwanag tungkol sa error Maaaring isang hindi kilalang variable o error sa function, .... Maaaring tuluyang masira ang survey, ngunit hindi ito ipinapakita sa mga pampublikong user.
asul na teksto Sample pangalan ng function kahulugan at pinapayagang syntax ang mga pangalan ng function, o mga bagay na dapat ay function dahil sinusundan ang mga ito ng bukas na panaklong, ay ipinapakita sa bold na asul na teksto. Ipinapakita ng mga tooltip ang kahulugan at pinapayagang syntax ng function.
kulay-abong teksto Sample string wala ang mga string na may single at double quote ay ipinapakita sa kulay-abong teksto
cyan na teksto Sample variable na itinakda sa parehong pahina, [pangalan o SGQA code]: tanong; value; answerList na nagpapakita ng mga code para sa bawat value Anumang variable na itinakda sa parehong pahina ng kasalukuyang tanong ay ipinapakita sa cyan na teksto, na nagpapakitang maaari itong ma-update sa javascript. Ipinapakita ng tooltip ang pangalan nito, ang aktwal na tanong, at ang kasalukuyang value nito (o blangko kung hindi pa naitatakda). Kung ang uri ng tanong ay umaasa ng mga sagot mula sa isang nakalistang set ng value, ipinapakita ang mapping ng mga code sa mga ipinapakitang value.
berdeng teksto Sample variable na itinakda sa nakaraang pahina [pangalan o SGQA code]: tanong; value; answerList na nagpapakita ng mga code para sa bawat value Anumang variable na itinakda sa nakaraang pahina ay ipinapakita sa bold na berdeng teksto. Ipinapakita ng tooltip ang pangalan nito, ang aktwal na tanong, at ang kasalukuyang value nito (o blangko kung hindi pa naitatakda). Kung ang uri ng tanong ay umaasa ng mga sagot mula sa isang nakalistang set ng value, ipinapakita ang mapping ng mga code sa mga ipinapakitang value.
bold na pink na teksto Sample variable na itinakda sa susunod na pahina sa pangkalahatan: walang laman sa simula ng survey, ngunit maaaring mapunan gamit ang index o pag-move sa nakaraan [pangalan o SGQA code]: tanong; value; answerList na nagpapakita ng mga code para sa bawat value Anumang variable na itinakda sa susunod na pahina ay ipinapakita sa bold na pink na teksto. Ipinapakita ng tooltip ang pangalan nito, ang aktwal na tanong, at ang kasalukuyang value nito (o blangko kung hindi pa naitatakda). Kung ang uri ng tanong ay umaasa ng mga sagot mula sa isang nakalistang set ng value, ipinapakita ang mapping ng mga code sa mga ipinapakitang value.
bold na tan na teksto Sample isang lime replacement value ang value Ang mga Lime Replacement String (tulad ng {TOKEN:xxx}, {PRIVACY_MESSAGE}) ay ipinapakita sa bold na tan na teksto.
pulang teksto Sample assignment operator (=) mensahe ng babala Kung gagamit ka ng assignment operator (=), ipapakita ang operator na iyon sa pulang teksto. Layunin nitong maiwasan ang hindi sinasadyang muling pagtatakda ng mga value kung ang talagang nais mo ay suriin kung a == b sa halip na itakda ang value ng a = b.
karaniwang itim na teksto Sample bantas wala Ang lahat ng iba pang bantas sa loob ng expression ay ipinapakita sa karaniwang itim na teksto.
tekstong nasa pulang kahon a bold red line surrounds the error error sa syntax paglalarawan ng error Ang anumang natukoy na error sa syntax ay ipinapakita sa pamamagitan ng pagkulong sa error sa pulang kahon. Ipinapakita ng tooltip ang error. Kabilang sa mga halimbawa ang hindi magkatugmang panaklong, paggamit ng hindi natukoy na function, maling bilang ng argument na ipinasa sa mga function, mahinang istruktura ng expression (halimbawa, nawawalang operator sa pagitan ng mga variable), pagtatangkang magtakda ng bagong value sa read-only na variable, pagtatangkang magtakda ng value sa mga hindi variable, o paggamit ng Hindi sinusuportahang syntax. Tandaan na maaaring isang error lamang ang iulat ng sistema ng pagtukoy ng error sa syntax sa isang expression kahit may maraming error; gayunpaman, kung may natukoy na anumang error, hindi bababa sa isang error ang ipapakita.

Karagdagang babasahin

Mga sample na survey ng Expression Manager

Mga Use Case at HowTo

Mga halimbawang hakbang-hakbang

Mga statistic function ng Expression Manager

Sanggunian para sa mga Developer

RoadMap/Status/ToDo List