Actions

Exemple de sondaje ExpressionScript

From LimeSurvey Manual

This page is a translated version of the page ExpressionScript sample surveys and the translation is 100% complete.


Introducere

Cel mai bun mod de a învăța cum să utilizați ExpressionScript este să vă jucați cu exemple de lucru și să le modificați în funcție de nevoile dvs.

Puteți găsi mai jos un set de sondaje eșantion pentru a demonstra (și a testa) cum poate fi utilizat EM pentru a vă îmbunătăți sondajul. Aceste sondaje pot fi găsite în folderul /docs/demosurveys al distribuției.


Relevanță, Croitorie și Ecuații

Prezentare generală

Următorul exemplu calculează IMC (indicele de masă corporală) al fiecărui respondent. Vedeți mai jos caracteristicile care sunt demonstrate în acest exemplu.

Caracteristicile EM demonstrate

  1. Relevanță - suport pentru logica condiționată puternică;
  2. Piping / Tailoring - oferă posibilitatea de a adapta sau adapta răspunsurile și metadatele întrebărilor;
  3. Dynamic Tailoring - rețineți că rapoartele sunt modificate pe pagină pe măsură ce răspundeți la întrebări.
  4. Micro-Tailoring - adaptare condiționată în propoziții și rapoarte folosind instrucțiuni if()
  5. Ecuații - un nou tip de întrebare care vă permite să faceți calcule și să stocați rezultatele în baza de date, chiar dacă calculul este ascuns
  6. Validare condiționată - validare criteriile, cum ar fi valoarea minimă admisă, pot fi condiționate - de exemplu, bazate pe ecuații.


Capturi de ecran

Acest exemplu calculează indicele de masă corporală, un calcul al greutății și înălțimii dvs. pentru a determina dacă sunteți subponderal, greutate normală, supraponderală sau obez. Rețineți că inițial, tot ce vedeți sunt cele patru întrebări obligatorii:



După ce ați introdus informațiile (și puteți alege dacă să utilizați unități metrice sau nemetrice), vedeți un raport personalizat care rezumă ceea ce ați introdus, indicându-vă starea greutății:



Iată un exemplu diferit, folosind unități nemetrice pentru a arăta cum se modifică dinamic rezultatul:



Există Întrebări de tip ecuație ascunse la nivel intern care convertesc datele în valori (dacă este necesar), stochând înălțimea, greutatea, IMC și starea greutății în baza de date fără a fi nevoie de JavaScript personalizat. .

Puteți vedea în următorul set de exemple cum puteți utiliza funcții matematice și alte funcții în cadrul rapoartelor personalizate. Așa arată pagina înainte de a introduce date. Există o logică condiționată pentru a afișa celulele goale dacă nu sunt introduse date (sau non-numerice), în loc să afișeze „NaN” sau „Împărțire la zero”.



Pe măsură ce sunt introduse numere, raportul de pe pagină se modifică pentru a arăta calculul efectuat și rezultatul acestuia.



Există multe alte exemple în acest sondaj eșantion. De exemplu, captura de ecran de mai jos arată unul dintre zecile de moduri în care puteți completa pagina Relevanță dinamică. După cum notează textul de ajutor, încercați vârste diferite și mai ales combinații ilogice de răspunsuri pentru a vedea mesajele amuzante generate în partea de jos. De asemenea, rețineți că, dacă spuneți că aveți mai mult de un copil, mesajul va spune „Sper că vă place să vă jucați cu copiii tăi X”, în loc să spuneți „Sper că vă place să vă jucați cu copilul dumneavoastră”. Aceasta arată cum puteți micro-personaliza cu ușurință propozițiile pentru a le face să se potrivească cu sexul și/sau numărul subiecților dvs. Puteți chiar să conjugați cu ușurință verbele și să refuzați substantivele în funcție de gen și număr.



Descărcare

Pentru a accesa eșantionul sondajului, vă rugăm să faceți clic pe următorul link: LS3_em_tailoring.zip.

Eșantion de recensământ

Prezentare generală

Acesta este un exemplu de recensământ care întreabă câți oameni sunt în gospodăria dvs.

Acesta demonstrează modul în care relevanța la nivel de grup poate facilita implementarea unei „bucle” de întrebări. După ce am creat grupul pentru persoana 1, am exportat grupul. Deoarece am folosit nume de variabile qcode precum p1_name în loc de codul SGQA, aș putea folosi un editor de text pentru a edita și reimporta rapid grupul de mai multe ori (de exemplu, a durat aproximativ 10 secunde pentru a edita și reimporta fiecare grup care se repetă, asigurând că toate variabilele aveau nume unice de variabile și că logica la nivel de grup era corectă).

Puteți, de asemenea, să utilizați funcția Copiați întrebarea, dar nu va fi la fel de rapidă ca opțiunea sugerată mai sus.

Aceasta arată, de asemenea, cum puteți împiedica apariția mesajului Terminat până când sondajul este cu adevărat terminat (de exemplu, când toate grupurile necesare sunt finalizate).


Caracteristicile EM demonstrate

  1. Relevanță la nivel de grup - Grupurile de urmărire (Persoana 1-5) apar numai pentru numărul de concubinatori specificat;
  2. Croitorie - Raportul final rezumă datele demografice pentru fiecare conviețuitor;
  3. Afișare progresivă a întrebării - Fie în modul de grup sau în modul all-in-one, întrebările ulterioare apar numai de îndată ce se răspunde la cele precedente.


Capturi de ecran

Sondajul generează un raport personalizat care arată datele demografice ale numărului specificat de locuitori:



Dacă treceți la modul întrebare la un moment dat, vedeți că indexul adaptează întrebările. Deoarece utilizatorul a spus că persoana este o femeie, acesta întreabă „Cum o cheamă”. Și din moment ce am răspuns „Maria”, următoarea întrebare spune „Câți ani are Maria”?



Descărcare

Pentru a descărca eșantionul de sondaj, faceți clic aici: LS3_group_relevance.zip.


Filtre de matrice în cascadă

Prezentare generală

Acest sondaj se bazează pe proiectarea unui sondaj oferit de Joy Lane Research, LLC.


Capturi de ecran

În cele ce urmează, rețineți că:

  • Q02 arată doar setul de produse verificate în Q01 (prin folosirea array_filter)
  • Q02 arată și „Un alt produs”, textul introdus în câmpul „Alte electronice” în Q01
  • Q04 afișează numai produsele din Q02 care au fost verificate (deci filtrul de matrice cascadă)
  • Q05 arată numai produsele din Q02 care nu au fost verificate în Q02 (folosind un array_filter_exclude în cascadă)


Fișier:cascading_array_filter.jpg


Fișier:cascading_array_filter2.jpg


Descărcare

Faceți clic pe următorul link pentru a descărca exemplul de mai sus: Exemplu de sondaj LS2_cascading_array_filter.


Conducte/Adaptare folosind toate tipurile și atributele de întrebări

Prezentare generală

Dacă sunteți confuz cu privire la cum să vă denumiți variabilele (SGQA vs Qcodes), nu sunteți singur. Deși documentația principală descrie cum să compuneți nume de variabile Qcode, nimic nu mai depășește să văd într-o demonstrație de lucru. Acest sondaj arată cum puteți accesa atributele întrebărilor și răspunsurile folosind ExpressionScript.


Template:Notă


Conținut

  • Exemple de fiecare tip de întrebare
  • Toate tipurile de întrebări care pot folosi „altele” sunt incluse, astfel încât să puteți vedea cum afectează aceasta denumirea variabilelor
  • Valori implicite pentru toate tipurile de întrebări care acceptă valorile implicite
  • Credire - Rapoarte pe și în afara paginii care arată toate cele 16 sufixe de notație cu puncte EM disponibile.
  • Aceste rapoarte arată toate datele introduse curent (deci vă arată cum ați putea genera propriile rapoarte imprimabile pentru utilizatori în locul tipăririi ecran de răspunsuri)
  • Denumirea corectă Qcode și SGQA a tuturor variabilelor


Capturi de ecran

Acesta este un sondaj uriaș, așa că am ales să nu includem capturi de ecran. În schimb, vă rugăm să descărcați și să jucați cu el.


Descărcare

Faceți clic pe următorul link pentru a descărca sondajul: LS3_EM_question_attributes.lss

Validare tradițională, re-vizuită

Prezentare generală

Aceasta demonstrează toate tipurile de validare care utilizează expresii și modul în care acestea afectează fiecare dintre tipurile de întrebări care acceptă validarea. În multe cazuri, sfaturile de validare încep ascunse și apar doar dacă o întrebare nu îndeplinește criteriile de validare (disparând astfel și odată ce întrebarea trece de criteriile de validare).


Tipuri de validare demonstrate

  1. min_num_value_n - valoarea minimă pentru un răspuns
  2. max_num_value_n - valoarea maximă pentru un răspuns
  3. min_answers - minim numărul de răspunsuri necesar
  4. max_answers numărul maxim de răspunsuri permis
  5. multiflexible_min - valoarea minimă permisă pentru un răspuns (pentru tipul de întrebare numere multiflexi)! N!#multiflexible_max - valoarea maximă permisă pentru un răspuns (pentru tipul de întrebare cu numere multiflexi)
  6. min_num_value - suma minimă permisă pentru toate răspunsurile la întrebare
  7. max_num_value - suma maximă permisă pentru toate răspunsurile la întrebare
  8. equals_num_value - suma pentru toate răspunsurile la întrebare trebuie să fie egală cu această valoare!N !#validation - aceasta este validarea expresiei regulate pentru întrebare - se poate aplica celulelor individuale


Capturi de ecran

Folosind stiluri CSS noi, fiecare tip de validare afișează un sfat separat. Dacă sunt afișate, pot fi ascunse prin opțiunea hide_tip. Opțiunea implicită este să le afișați cu font roșu dacă întrebarea nu respectă criteriile de validare și verde dacă le trece:



Un utilizator nu poate trimite o pagină cu erori de validare. El va fi avertizat imediat dacă a introdus informații greșite:



Validarea poate fi aplicată celulelor individuale dintr-o matrice, cum ar fi în acest exemplu în care validările expresiilor regulate asigură că fiecare intrare este un număr de telefon din SUA format corespunzător, inclusiv prefixul zonal.



Descărcare

Pentru a descărca exemplul de mai sus, faceți clic pe următorul link: LS3_Validation_tests.zip.


Ecuații de validare

Prezentare generală

Uneori aveți nevoie de validare personalizată care nu poate fi realizată folosind criteriile tradiționale min/max. Pentru aceasta, va trebui să utilizați opțiunile em_validation_q și em_validation_sq care vă permit să construiți ecuații de validare complexe la nivel de întrebare și, respectiv, subîntrebare.


Template:Notă


Caracteristicile EM demonstrate

  1. em_validation_q - aceasta este o ecuație care determină dacă întreaga întrebare este validă
  2. em_validation_q_tip - acesta este mesajul care arată dacă întrebarea nu respectă criteriile em_validation_q
  3. em_validation_sq - aceasta este ecuația care determină dacă fiecare subîntrebare (celulă matrice) este validă
  4. em_validation_sq_tip - acesta este mesajul care trebuie afișat dacă există a subîntrebărilor este nevalidă.

În general, când se folosește em_validation_sq, dacă vreo celulă este invalidă, culoarea de fundal pentru acea celulă devine roșie pentru a indica că există o eroare.


Capturi de ecran


Această întrebare vă asigură că introduceți vârstele copiilor dvs. în ordine descrescătoare prin aplicarea acestei ecuații de validare:

q1_sq1 >= q1_sq2 && q1_sq2 >= q1_sq3 && q1_sq3 >= q1_sq4





În exemplul de mai jos, validarea asigură că nu se răspunde la mai mult de 3 întrebări pe un rând dat prin aplicarea acestei ecuații de validare:

(sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= 3) && (sum(Test_B_1, Test_B_2, Test_B_3, Test_B_4, Test_B_5) <= 3) && (sum(Test_C_1, Test_C_3,_ Test_C_3,_ Test_C_3,_ Test_C_3) <= 3)

De asemenea, puteți scrie acest lucru după cum urmează, LimeSurvey transformându-l automat în timpul execuției în expresia de mai sus.

(sum(self.sq_A) <= 3) && (sum(self.sq_B) <= 3) && (sum(self.sq_C) <= 3)



Descărcare

Pentru a descărca eșantionul de sondaj utilizat în exemplele de mai sus, faceți clic pe următorul link: ls2_test_em_sq_validation.lss.


Relevanța subîntrebării

Prezentare generală

Aceasta arată cum pot interacționa array_filter și criteriile de validare. Pentru validările care se aplică sumelor, sunt luate în considerare numai valorile relevante (vizibile).


Caracteristicile EM demonstrate

  1. array_filter
  2. array_filter_exclude
  3. min_num_value
  4. max_num_value
  5. equals_num_value

De asemenea, arată raportarea dinamică a numărului de întrebări la care s-a răspuns la întrebările de bază.


Capturi de ecran

Modificarea numărului de rânduri vizibile modifică dinamic suma. Marcarea unei subîntrebări ca fiind irelevantă nu îi clarifică valoarea. Mai degrabă, dacă este irelevant, valorile sale nu contribuie la nicio ecuație.



Observați ce se întâmplă atunci când verificăm „A cincea subîntrebare” pentru prima întrebare „’’„Ce rânduri ar trebui să apară mai jos”’’’. Rețineți că suma pentru a doua întrebare „Introduceți câteva numere” este acum 5. Chiar dacă subîntrebarea 5 pentru acea întrebare are încă valoarea 14 (de exemplu, dacă debifați a cincea subîntrebare, veți vedea din nou valoarea 14) , acea valoare nu contribuie la sumă, deoarece în prezent este irelevantă. Toate datele irelevante sunt șterse (nule în baza de date) la trimitere, dar rămân disponibile pe pagină în cazul în care utilizatorii doresc sau trebuie să se răzgândească cu privire la răspunsuri.



Descărcare

Pentru a descărca exemplul nostru, faceți clic aici: ls2_subquestion_relevance.lss.


Folosirea virgulei ca separator de radice (punct zecimal)

Prezentare generală

ExpressionScript asigură că numai numere valide pot fi introduse în câmpurile numerice. Dacă introduceți un număr nevalid, veți fi avertizat că ceva nu este în regulă (de exemplu, în cazul temei fructate, întreaga întrebare este „roșu-roșu”).

Rețineți că valorile numerice sunt întotdeauna convertite utilizând un punct ca separator de bază în baza de date. În acest fel, analizele statistice vor funcționa corespunzător.

Pentru a schimba separatorul radix, accesați opțiunile Text elements situate sub fila Settings și căutați funcționalitatea mark zecimal.


Template:Notă


Tipuri de întrebări folosind Radix Separator

  1. Introducere numerică [ N]
  2. Introducere numerică multiplă [ K]
  3. Matrice (Numere) [ :]
  4. Matrice (Texte) [ ;], când utilizați atributul numbers_only
  5. List (radio) [ L], când utilizați atributul other_numbers_only
  6. Short free text [ S], când utilizați atributul numbers_only
  7. Multiple short text [ Q], când utilizați atributul numbers_only
  8. Multiple choice [ M], când utilizați atributul other_numbers_only
  9. Multiple choice with comments [ P], când utilizați atributul other_numbers_only


Capturi de ecran

Puteți observa în capturile de ecran de mai jos că virgula poate fi folosită ca separator de bază.



Descărcare

Pentru a descărca exemplul de mai sus, faceți clic pe următorul link: ls2_comma_as_radix_separator.lss.


Grupuri de randomizare

Prezentare generală

Acest sondaj demonstrează cum să utilizați atributul „grup_aleatoriu”.

Dacă se folosește acest atribut, de fiecare dată când începeți sondajul, ordinea întrebărilor este randomizată. Cu toate acestea, odată ce sondajul este început, ordinea de randomizare rămâne fixă, chiar dacă schimbați limbile.


Capturi de ecran

Să verificăm împreună exemplul de mai jos. Prima întrebare aleatorie de pe pagină va fi Q1 , Q4 sau Q7. A doua întrebare randomizată de pe pagină va fi fie Q2, Q5, fie Q8.



Iată randomizarea generată prima dată când am testat acest sondaj.



O randomizare diferită a fost generată a doua oară când am testat sondajul.



Însă, când am trecut la franceză (fără a reîncepe sondajul), ordinea de randomizare a rămas intactă.



Descărcare

Pentru a descărca exemplul de mai sus, faceți clic pe următorul link: Randomization_Group_Test.lss


Puneți aleatoriu o întrebare per grup

Prezentare generală

Acest sondaj arată cum puteți configura un sondaj pentru a afișa aleatoriu o întrebare per grup. În el, există 5 grupuri a câte 6 întrebări fiecare. La început, în Grupul 0, sunt populate cinci întrebări de ecuație ascunse, numite ask1-ask5. Fiecare are valoarea {floor(rand(1,6.9999))} în câmpul text al întrebării, ceea ce înseamnă că variabilele ask1-ask5 vor avea fiecare o valoare între 1 și 6. Apoi, fiecare întrebare din grup are o ecuație de relevanță ca „ask1==N” unde N este a N-a întrebare din grup (deci a treia întrebare din grupul 1 are ecuația de relevanță „ask1==3”).

Acest sondaj funcționează la fel de bine în modurile de anchetă la un moment dat, grup cu grup și întrebare cu întrebare. Deoarece randomizarea este setată în primul grup și acel grup este efectiv ascuns (din moment ce toate întrebările ask1-ask5 sunt ascunse), randomizarea rămâne aceeași pentru subiect; dar fiecare subiect diferit va avea o randomizare distinctă.


Caracteristici demonstrate

  1. Tipul întrebării ecuației
  2. Funcții de randomizare
  3. Funcție condiționată (dacă)


Capturi de ecran

Acesta este Grupul 0, care folosește Tipul de întrebare de ecuație pentru a selecta valori aleatorii de la 1 la 6 pentru fiecare grup (cu excepția ultimului grup, care are doar 4 întrebări). Rețineți că funcția „if()” verifică mai întâi dacă ask1 a fost deja setat și, dacă da, folosește acea valoare. Dacă valoarea nu a fost setată, atunci folosește o valoare aleatorie pentru a seta valoarea ask1.



Acest grup arată modul în care variabila (ask4) din Group0 este utilizată pentru a controla ce întrebare este vizibilă în al patrulea grup.



Descărcare

Pentru a descărca exemplul de sondaj de mai sus, faceți clic aici: Întrebări aleatorii într-un exemplu de sondaj de grup.


Pune la întâmplare un număr specific de întrebări într-un grup (un subset de întrebări)

Template:Alertă


Prezentare generală

Acest sondaj arată cum să pui un subset aleatoriu de întrebări într-un grup. De exemplu, afișați 5 întrebări aleatorii din 10 întrebări situate într-un grup.

Sondajul are un grup care conține 10 întrebări. Tuturor întrebărilor li se atribuie același nume de grup de randomizare. Ca rezultat, acestea vor fi afișate într-o ordine aleatorie la încărcarea paginii. Fiecărei întrebări i se dă o ecuație de relevanță pe care suma „relevanceStatus” a tuturor celorlalte întrebări din grup este mai mică decât numărul de întrebări pe care doriți să le afișați. Deoarece relevanceStatus este atribuit pe măsură ce întrebările sunt randate, aceasta totalizează efectiv numărul de întrebări precedente.

Deci, în exemplul nostru 5 din 10, ecuația pentru Q1 ar fi:

sum(Q2.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5

Pentru Q2, ar fi:

sum(Q1.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5

Și așa mai departe...


Caracteristici demonstrate

  1. variabilă de stare relevanță
  2. Randomizare

Descărcare

Pentru a descărca exemplul de mai sus, faceți clic pe următorul link: Exemplu de sondaj aleatoriu 5 din 10.

Evaluarea listei de produse introduse de utilizator

Prezentare generală

Exemplul de mai jos arată cum le puteți cere utilizatorilor să enumere un set de produse care îi interesează și apoi să le cereți să evalueze acele produse.


Caracteristicile ES demonstrate

  1. Adaptarea răspunsurilor - atunci când evaluează produse, etichetele provin din câmpul de comentarii al întrebării anterioare cu răspunsuri multiple
  2. Scale de personalizare - multe opțiuni avansate de întrebări, cum ar fi titlurile scalei, pot să fie de asemenea croită.


Capturi de ecran

Această imagine arată că, deoarece numai produsele 1, 3 și 5 au fost selectate, sunt afișate doar acele 3 (folosind atributul array_filter). Mai mult, etichetele rândului din a doua întrebare sunt fie numerele de produs (dacă nu este introdus nimic în câmpul de comentarii), fie conținutul câmpurilor de comentarii.



Această imagine arată cum sunt specificate răspunsurile personalizate:



Iată Afișați fișierul logic pentru acea întrebare, care ne permite să verificăm dacă logica condiționată funcționează așa cum se dorește (de exemplu, pentru a vedea dacă există erori de sintaxă):



Următoarea imagine arată un grup în care specificați o scară de evaluare de 5 puncte (Opțiuni 1-5), titlul scalei și produsele pe care doriți să le evaluați. Întrebarea finală arată că fiecare dintre părțile întrebării matrice poate fi adaptată:



Următoarea imagine arată vizualizarea fișierului logic al ultimei întrebări. După cum puteți observa, subîntrebările, răspunsurile și anteturile scalei pot fi adaptate.


Descărcare

Pentru a descărca exemplul de sondaj de mai sus, faceți clic pe următorul link: Exemplu de sondaj de evaluare a listei de produse introduse de utilizator.