Contoh ExpressionScript
From LimeSurvey Manual
Struktur
Bagian pertama artikel ini menjelaskan kegunaan ekspresi dan di mana menemukan/menambahkan ekspresi. Bagian kedua menyajikan contoh cara menggunakan ekspresi.
Kategori ekspresi
LimeSurvey menggunakan ekspresi untuk tujuan berikut:
Relevansi
Tujuan: Menyembunyikan grup pertanyaan/pertanyaan
Relevansi mengontrol apakah sebuah grup pertanyaan atau pertanyaan ditampilkan atau disembunyikan. Jika hasil ekspresi adalah "true" (yaitu 1), elemen akan ditampilkan. Jika tidak (jika hasil ekspresi adalah "false" (yaitu 0)), elemen akan disembunyikan.
Validasi
Tujuan: Memvalidasi input/tindakan pada pertanyaan/subpertanyaan/jawaban
Validasi mengontrol apakah input responden pada sebuah pertanyaan atau tindakan valid atau tidak. Jika hasil ekspresi adalah "true" (yaitu 1), kelas "good" akan diterapkan pada elemen dan pesan validasi. Jika hasil ekspresi adalah "false" (yaitu 0)), kelas "error" akan diterapkan pada elemen dan pesan validasi. Anda dapat mendeklarasikan gaya untuk kelas-kelas ini di template.css.
Keluaran teks
Tujuan: (Melakukan sesuatu) dan menuliskan teks
Ekspresi dapat digunakan untuk menuliskan teks. Misalnya, Anda dapat menguji atau menghitung sesuatu dan menentukan keluaran berdasarkan hasil pengujian atau perhitungan tersebut. Ekspresi juga dapat digunakan untuk menyisipkan teks pertanyaan, jawaban, jenis pertanyaan, ... dari pertanyaan yang digunakan sebelum ekspresi tersebut. Keluaran teks dapat digunakan di mana pun teks ditampilkan dan dapat mengembalikan berbagai jenis hasil.
| Kasus penggunaan | Deskripsi |
|---|---|
| Penyesuaian mikro | Menyesuaikan teks, misalnya menulis "Bapak" atau "Ibu" tergantung pada pertanyaan jenis kelamin yang diajukan sebelumnya |
| Perhitungan | Menghitung nilai dan menuliskannya, misalnya "Pendapatan keluarga Anda adalah xxx" |
| Referensi | Menyisipkan teks dari sebuah elemen, misalnya "Nama Anda adalah xxx. Berapa usia Anda?" |
Penyimpanan jawaban
Tujuan: (Melakukan sesuatu,) (menuliskan teks) dan menyimpan sesuatu di basis data
Jenis pertanyaan Persamaan dapat digunakan untuk menyimpan sesuatu di basis data. Anda dapat melakukan sesuatu dengan ekspresi, menampilkan pertanyaan Persamaan (yang mirip dengan tampilan teks) dan menyimpan hasil ekspresi di basis data. Jawaban disimpan ke tabel respons. Kemudian, hasilnya dapat digunakan dalam fitur statistik atau diimpor ke salah satu format yang disediakan oleh fungsi ekspor LimeSurvey.
Contoh ekspresi
Menyisipkan jawaban dari pertanyaan sebelumnya
Menggunakan pertanyaan persamaan tersembunyi untuk mengisi jawaban secara otomatis
Masalah: Bayangkan Anda memiliki dua pertanyaan, Q1 dan Q2. Q1 menanyakan usia responden. Q2 membagi responden menjadi tiga kelompok: usia di bawah 20 tahun, usia 20 tahun, usia lebih besar dari 20 tahun. Jadi, Q2 harus menggunakan nilai "1", "2", "3", yang sesuai dengan kondisi di atas. Selain itu, jangan lupa menyembunyikan Q2 (pertanyaan tidak akan ditampilkan dalam survei, tetapi nilainya tetap tersimpan melalui "proses latar belakang" di tabel respons).
Untuk mengisi basis data menggunakan jenis pertanyaan Persamaan:
- Pertama, buat pertanyaan dengan kode Q1 sebagai pertanyaan Input numerik.
- Lalu buat pertanyaan lain dengan kode Q2 sebagai pertanyaan persamaan.
- Pada bagian tab "Pengaturan tampilan" untuk Q2:
- atur field "Selalu sembunyikan pertanyaan ini" menjadi "Aktif"
- ketik ekspresi berikut pada field "Persamaan":
{if(Q1.NAOK < 20, "1", if(Q1.NAOK > 20, "3", "2"))}
Membuat halaman ringkasan menggunakan placeholder
Tutorial ini menunjukkan cara membuat ikhtisar di akhir survei, yang mencantumkan semua pertanyaan dan jawaban melalui placeholder ExpressionScript. Tutorial ini juga menunjukkan cara membatasi ikhtisar tersebut hanya pada pertanyaan yang telah dijawab.
Contoh kami dapat diunduh di sini: Contoh survei placeholder survei.
Tipe pertanyaan yang digunakan di sini:
1. Pertanyaan pilihan tunggal / pertanyaan teks/numerik tunggal
- Daftar (Tarik-turun)
- Daftar (Pilihan) [L]
- Ya/Tidak [Y]
- Teks bebas panjang [T]
- Teks bebas singkat [S]
- Input numerik [N]
- Persamaan [*]
2. Pertanyaan dengan subpertanyaan
- Beberapa teks pendek [Q]
- Pilihan ganda [M]
- Larik [F]
- Larik (Ya/Tidak/Ragu) [C]
- Larik (pilihan 10 poin) [B]
3. Pertanyaan dengan 2 skala
- Larik dua skala [1]
4. Pertanyaan dengan skala X dan Y
- Larik (Angka) [:]
5. Pertanyaan khusus
- Tampilan teks [X]
Dalam contoh sederhana ini, ringkasan kami akan berupa daftar sederhana dengan format:
- Teks pertanyaan: Jawaban pengguna
Pertanyaan pilihan tunggal / pertanyaan teks/numerik tunggal
Untuk semua tipe pertanyaan berikut, LimeSurvey akan menyimpan satu tanggapan:
- Daftar (Tarik-turun)
- Daftar (Pilihan)
- Daftar dengan komentar
- Pilihan 5 poin
- Ya/Tidak
- Teks bebas singkat
- Teks bebas panjang
- Teks bebas besar
- Input numerik
- Persamaan
- Tanggal
- Jenis kelamin
Dengan asumsi kode pertanyaan dari pertanyaan tersebut adalah q1, kita dapat merujuk teks pertanyaan dan jawabannya menggunakan:
- {q1.question}: {q1.shown}
Contoh:
- Berapa usia Anda?: 25
Jika Anda ingin memeriksa apakah pertanyaan tersebut sudah dijawab, Anda dapat menambahkan pernyataan IF pada keluaran Anda:
{if(!is_empty(q1),join("- ",q1.question,": ",q1.shown),"")}
Ini "diterjemahkan" sebagai: JIKA pertanyaan dengan kode q1 tidak kosong, keluarkan "- " DAN teks pertanyaan DAN ": " DAN teks jawaban (fungsi join() menggabungkan elemen menjadi string baru); JIKA TIDAK: tidak mengeluarkan apa pun ("" berarti string kosong).
Pertanyaan dengan subpertanyaan
Untuk semua tipe pertanyaan berikut, LimeSurvey menggunakan subpertanyaan:
- Beberapa teks pendek
- Pilihan ganda
- Pilihan ganda dengan komentar
- Larik
- Larik (pilihan 5 poin)
- Larik (pilihan 10 poin)
- Larik (Ya/Tidak/Ragu)
- Larik (Meningkat/Sama/Menurun)
- Larik menurut kolom
Dengan asumsi kode pertanyaan dari pertanyaan tersebut adalah q2 dan subpertanyaan diberi nomor SQ001, SQ002, (penomoran otomatis oleh LimeSurvey), kita dapat merujuk teks pertanyaan dan jawabannya menggunakan:
- {q2_SQ001.question}: {q2_SQ001.shown}
- {q2_SQ002.question}: {q2_SQ002.shown}
Untuk pertanyaan pilihan ganda, sebaiknya jangan menampilkan teks subpertanyaan yang dicentang, melainkan menampilkan Y untuk setiap opsi yang dipilih:
- {q2_SQ001.question}: {q2_SQ001}
- {q2_SQ002.question}: {q2_SQ002}
...
Perlu diperhatikan bahwa saat ini belum memungkinkan untuk menampilkan teks pertanyaan dari pertanyaan dengan subpertanyaan, lihat permintaan fitur ini.
Contoh 1 (dengan asumsi jenis pertanyaan adalah pilihan ganda)
- Apakah Anda mengenal merek-merek mobil ini?
-- Mercedes: Y
-- Audi: N
-- Volvo: Y
Jika Anda hanya ingin menampilkan item yang dicentang, Anda dapat menambahkan pernyataan IF pada output Anda dan memeriksa nilai kotak centang:
{ if( q2_SQ001=="Y", join( "- ", q2_SQ001.question, ": ", q2_SQ001.shown ), "" ) }
Gunakan fungsi listifop jika Anda ingin menampilkan daftar item yang dipilih saja, misalnya: Mercedes, Volvo
{ listifop( 'value', '==', 'Y', 'question', ', ', that.q2.sgqa ) }
Di sini that.q2 diperluas menjadi semua subpertanyaan dari q2. Lihat self, this, dan that untuk detail lebih lanjut.
Contoh 2 (dengan asumsi jenis pertanyaan adalah Larik (pilihan 10 poin))
- Silakan nilai kualitas merek-merek mobil di bawah ini dengan skala 1=sangat buruk hingga 10=sangat baik?
-- Mercedes: 7
-- Audi: 9
-- Volvo: 9
Jika Anda hanya ingin menampilkan item yang telah dinilai, Anda dapat menambahkan pernyataan IF pada output Anda dan memeriksa apakah subpertanyaan saat ini telah dijawab dengan menggunakan:
{ if( ! is_empty( q3_SQ001 ), join( "- ", q3_SQ001.question, ": ", q3_SQ001.shown ), "" ) }
Gunakan fungsi listifop jika, misalnya, Anda hanya ingin menampilkan daftar item terpilih yang nilainya lebih besar dari delapan, misalnya: Audi / Volvo
{ listifop( 'value', '>', 8, 'question', ' / ', that.q3.sgqa ) }
Pertanyaan dengan dua skala
Anggaplah kode-kode berikut digunakan:
- Kode pertanyaan: q4
- Kode subpertanyaan: SQ001, SQ002, ...
- Kode jawaban skala 1: A1, A2, ...
- Kode jawaban skala 2: B1, B2, ...
Contoh untuk merujuk ke jawaban subpertanyaan ketiga dan skala kedua: q4_SQ003_1 - Pertanyaan 4, subpertanyaan 3, skala kedua.
Mari kita tampilkan hasil untuk kedua skala dan dua subpertanyaan pertama:
- {q4_SQ001_0.question}: {q4_SQ001_0.shown} / {q4_SQ001_1.shown}
- {q4_SQ002_0.question}: {q4_SQ002_0.shown} / {q4_SQ002_1.shown}
Untuk menampilkan teks subpertanyaan, Anda perlu menambahkan ID skala ke placeholder (meskipun teksnya sama untuk kedua skala). Jadi, alih-alih {q4_SQ001.question}, kita harus menggunakan {q4_SQ001_0.question} atau {q4_SQ001_1.question}.
Jika Anda hanya ingin mengekspor/menampilkan hasil subpertanyaan yang memiliki setidaknya satu jawaban, gunakan sintaks ini untuk setiap subpertanyaan:
{if(count(q4_SQ001_0,q4_SQ001_1)>0,join("- ",q4_SQ001_0.question,": ",q4_SQ001_0.shown," / ",q4_SQ001_1.shown),"")}
Pertanyaan dengan skala X dan Y
Ini berlaku untuk semua pertanyaan matriks yang memungkinkan jawaban untuk setiap sel (bukan hanya setiap baris seperti yang ditunjukkan sebelumnya):
- Larik Teks
- Larik Angka
Kode yang diasumsikan digunakan:
- Kode pertanyaan: q5
- Kode subpertanyaan: SQ001, SQ002, ...
- Kode jawaban: A1, A2, ...
Untuk merujuk ke hasil subpertanyaan tertentu dari kolom tertentu, Anda perlu menggunakan QuestionCode . '_' . SubQuestionCode . '_' . AnswerCode. Contoh untuk merujuk ke jawaban subpertanyaan ketiga dan kolom kedua: q5_SQ003_A2.
Mari kita tampilkan hasil untuk kolom 1-3 dari dua subpertanyaan pertama:
- {q5_SQ001_A1.question}: {q5_SQ001_A1.shown} | {q5_SQ001_A2.shown} | {q5_SQ001_A3.shown}
- {q5_SQ002_A1.question}: {q5_SQ002_A1.shown} | {q5_SQ002_A2.shown} | {q5_SQ002_A3.shown}
Karena pada jenis pertanyaan ini setiap sel (kombinasi sumbu X dan sumbu Y) setara dengan satu opsi jawaban, pengecekan data yang ada perlu dilakukan untuk setiap sel. Contoh:
{if(!is_empty(q5_SQ001_A1),join("- ",q5_SQ001_A1.question,": ",q5_SQ001_A1.shown),"")}
Sembunyikan pertanyaan jika jawaban dari pertanyaan sebelumnya kosong
| Tujuan | Sembunyikan pertanyaan jika jawaban dari pertanyaan sebelumnya kosong |
| Jenis | Relevansi pertanyaan |
| Contoh | Pertanyaan satu: kode pertanyaan "name", teks pertanyaan "Siapa nama Anda?" Pertanyaan dua: teks pertanyaan "{name}, berapa usia Anda?" Yang harus dilakukan: Sembunyikan pertanyaan dua jika kolom teks pada pertanyaan satu kosong |
| Ekspresi | !is_empty(name) |
| Deskripsi | is_empty() menentukan apakah sebuah variabel dianggap kosong. Tanda "!" membalikkan hasilnya. Jadi, jika variabel tidak kosong, ekspresi akan bernilai benar dan pertanyaan ditampilkan |
| Langkah | Buat/edit pertanyaan dua Masukkan "!is_empty(name)" ke dalam "Persamaan yang berhubungan" |
| File contoh | Hide_question_if_empty_question_group.zip |
![]()
| |
Sembunyikan grup pertanyaan jika jawaban dari pertanyaan sebelumnya adalah Ya atau Tidak
| Tujuan | Sembunyikan grup pertanyaan jika jawaban dari pertanyaan sebelumnya adalah Ya atau Tidak |
| Jenis | Relevansi grup pertanyaan |
| Contoh | Halaman satu, Grup pertanyaan satu, Pertanyaan satu: kode pertanyaan "PET", teks pertanyaan "Apakah Anda memiliki hewan peliharaan?" -Ya -Tidak Halaman dua, Grup pertanyaan dua: Judul "Tentang hewan peliharaan Anda" Yang harus dilakukan: Tampilkan/sembunyikan grup pertanyaan dua jika jawaban dari pertanyaan satu adalah Ya/Tidak |
| Ekspresi | PET == "Y" |
| Deskripsi | PET adalah kode pertanyaan untuk pertanyaan yang jawabannya ingin Anda periksa. Jika Anda tidak menggunakan sufiks, EM akan menggunakan "Qcode.code". Jadi, Anda membandingkan kode jawaban dari pertanyaan PET dengan nilai "Y". Jika peserta menjawab "Ya", ekspresi bernilai benar dan grup pertanyaan "Tentang hewan peliharaan Anda" akan ditampilkan. |
| Langkah | Buat/edit grup pertanyaan dua Masukkan "PET == "Y"" ke dalam "Persamaan yang berhubungan" |
| File contoh | Hide_question group_if_answer_from_previous_question_is_Yes_or_No.zip |
![]()
| |
Tampilkan nilai dari kolom pertanyaan input dengan banyak jawaban
| Tujuan | Tampilkan nilai dari kolom pertanyaan input dengan banyak jawaban |
| Jenis | Referensi |
| Contoh | Pertanyaan satu: kode pertanyaan "AskChildAge", teks pertanyaan "Berapa usia anak-anak Anda?". Kode subpertanyaan -Child1 -Child2 -Child3 - ChildXXX Pertanyaan dua: kode pertanyaan "ReportChildAge" teks pertanyaan "Tentang anak pertama Anda: - CHILD1 berusia AGE1." |
| Ekspresi | {AskChildAge_Child1.question}, {AskChildAge_Child1.value} |
| Deskripsi | Anda ingin menggunakan nilai sebuah subpertanyaan pada pertanyaan berikutnya. Anda dapat mengakses nilai subpertanyaan dengan ekspresi seperti ini: QcodeQuestion_QcodeSubquestion.value |
| Langkah | Buat/edit pertanyaan kedua Masukkan teks ini pada deskripsi: "Tentang anak pertama Anda: - {AskChildAge_Child1.question} berusia {AskChildAge_Child1.value}." |
| File contoh | Display_value_of_a_multiple_answer_input_question_field.zip |
| |
Validasi jumlah kotak yang dicentang per baris untuk pertanyaan "Larik (Angka) Kotak centang"
| Tujuan | Validasi jumlah kotak yang dicentang per baris |
| Jenis | Validasi |
| Contoh | Pertanyaan dengan jenis "Larik Angka (Tata letak kotak centang)" |
| Ekspresi | sum(...) |
| Deskripsi | (sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X) menentukan apakah setidaknya X kotak centang pada baris A dicentang. Jika Anda ingin memeriksa ketiga baris (A, B, C), Anda dapat menggabungkan ekspresi menggunakan "&&": (sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X) && (sum(Test_B_1, Test_B_2, Test_B_3, Test_B_4, Test_B_5) <= X) && (sum(Test_C_1, Test_C_2, Test_C_3, Test_C_4, Test_C_5) <= X) |
| Langkah | Buat/edit pertanyaan dengan jenis "Larik Angka (Tata letak kotak centang)". Masukkan ekspresi di atas ke dalam "Persamaan validasi pertanyaan" pada pengaturan pertanyaan lanjutan (Anda mungkin perlu menyesuaikan penamaan variabel!). |
| File contoh | Validate number of boxes ticker per row for an Array (Numbers) Checkbox.lss |
![]()
| |
Hitung selisih antara dua tanggal
| Tujuan | Hitung selisih antara dua tanggal |
| Jenis | Relevansi / Jenis pertanyaan persamaan / Validasi |
| Contoh | Pertanyaan satu (tanggal/waktu, kode: DOB): Kapan tanggal lahir Anda? Pertanyaan dua (tanggal/waktu, kode: datetoday): Tanggal berapa hari ini? Pertanyaan tiga (boilerplate): Usia Anda XXXX hari. Yang harus dilakukan: Hitung dan tampilkan jumlah hari antara tanggal yang diberikan pada pertanyaan 1 dan pertanyaan 2. |
| Ekspresi | {(strtotime(datetoday)-strtotime(DOB))/60/60/24} |
| Deskripsi | strtotime menghitung jumlah detik antara 1 Januari 1970 dan tanggal yang diberikan. Ekspresi di atas menghitung jumlah detik antara dua tanggal yang diberikan. Suku "/60/60/24" hanya mengubah jumlah detik menjadi jumlah hari. Alih-alih menanyakan "datetoday", Anda juga dapat menggunakan strtotime('now') atau cukup time(), yang langsung mengembalikan jumlah detik dari Januari 1970 hingga sekarang (yaitu waktu survei diisi). Dengan demikian Anda dapat dengan cepat mengetahui usia seseorang dalam tahun dengan persamaan {(time() - strtotime(DOB)) / 60 / 60 / 24 / 365.25} Dalam semua kasus ini, sangat penting bahwa tanggal dimasukkan dalam format yang benar, jika tidak fungsi strtotime() tidak akan bekerja dengan benar. |
| Langkah | Buat dua pertanyaan tanggal (untuk tanggal lahir dan untuk tanggal hari ini) dan satu pertanyaan boilerplate. Pada teks pertanyaan dari pertanyaan boilerplate, masukkan: "Pada {datetoday} usia Anda {(strtotime(today)-strtotime(dob))/60/60/24} hari." Harap perhatikan: Fungsi strtotime dapat bekerja dengan BANYAK, tetapi tidak semua, format tanggal. Jika Anda mengalami masalah, atur format tanggal survei Anda ke mm/dd/yyyy atau yyyy-mm-dd atau dd.mm.yyyy" |
| File contoh | Date_difference.zip |
| |
Menggunakan ExpressionScript untuk Penilaian
Berikut contoh lain tentang cara menggunakan ExpressionScript dengan pertanyaan jenis larik dan penilaian:</ br>
Misalkan Anda memiliki 2 pertanyaan larik dan Anda ingin menyimpan hasil perhitungan ke basis data Anda. Caranya sebenarnya mudah: Anda perlu membuat dan menguji larik Anda, lalu mengirim tanggapan percobaan untuk melihat apakah berfungsi dan memberikan hasilnya di halaman selesai.
Detail implementasi:
- tambahkan pertanyaan dengan jenis persamaan
- tambahkan baris berikut dengan asumsi Q1 adalah kode pertanyaan larik Anda, sedangkan Q2 adalah yang kedua:
{sum(Q1_SQ001.value,Q2_SQ001.value)}
Perlu diingat bahwa SQ001 adalah kode default untuk setiap subpertanyaan. Jika Anda mengubah kode subpertanyaan, sesuaikan persamaan di atas.
Menggunakan em_validation_q pada larik
Anda dapat menggunakan persamaan validasi pertanyaan untuk mengendalikan larik dengan kondisi apa pun.
Detail implementasi:
- untuk larik pertama : larik pilihan tunggal
- Kode pertanyaan adalah ARRAY
- Kode subpertanyaan adalah SQ01,SQ02,SQ03 dan SQ04
- perbarui Persamaan validasi pertanyaan keseluruhan dan masukkan
!is_empty(ARRAY_SQ01) and !is_empty(ARRAY_SQ03)
- untuk larik kedua : larik teks
- Kode pertanyaan adalah ARRAYTEXT
- Kode subpertanyaan pada sumbu Y adalah SY01,SY02,SY03, dan SY04
- Perbarui Persamaan validasi pertanyaan keseluruhan dan masukkan
count(self.sq_SY01 >= 1) and count(self.sq_SY03 >= 3)








