Contoh survei ExpressionScript
From LimeSurvey Manual
Pendahuluan
Cara terbaik untuk mempelajari penggunaan ExpressionScript adalah dengan mencoba contoh yang berfungsi dan memodifikasinya sesuai kebutuhan Anda.
Di bawah ini Anda dapat menemukan sejumlah contoh survei untuk mendemonstrasikan (dan menguji) bagaimana EM dapat digunakan untuk meningkatkan survei Anda. Survei-survei ini dapat ditemukan di folder /docs/demosurveys pada paket distribusi.
Relevansi, Penyesuaian, dan Persamaan
Ikhtisar
Contoh berikut menghitung BMI (Indeks Massa Tubuh) setiap responden. Lihat di bawah fitur-fitur yang didemonstrasikan dalam contoh ini.
Fitur EM yang Didemonstrasikan
- Relevansi - dukungan untuk logika bersyarat yang canggih;
- Piping / Penyesuaian - menawarkan kemampuan untuk menyisipkan atau menyesuaikan jawaban dan metadata pertanyaan;
- Penyesuaian Dinamis - perhatikan bahwa laporan berubah di halaman saat Anda menjawab pertanyaan.
- Penyesuaian Mikro - penyesuaian bersyarat di dalam kalimat dan laporan menggunakan pernyataan if()
- Persamaan - jenis pertanyaan baru yang memungkinkan Anda melakukan perhitungan dan menyimpan hasilnya di basis data, bahkan jika perhitungannya disembunyikan
- Validasi Bersyarat - kriteria validasi, seperti nilai minimum yang diizinkan, dapat bersifat bersyarat - misalnya, berdasarkan persamaan.
Tangkapan layar
Contoh ini menghitung Indeks Massa Tubuh, yaitu perhitungan berat dan tinggi badan Anda untuk menentukan apakah Anda kekurangan berat badan, berat badan normal, kelebihan berat badan, atau obesitas. Perhatikan bahwa pada awalnya, yang terlihat hanyalah empat pertanyaan wajib:

Setelah Anda memasukkan informasi (dan Anda dapat memilih apakah akan menggunakan satuan metrik atau non-metrik), Anda akan melihat laporan yang disesuaikan yang merangkum apa yang Anda masukkan, yang memberi tahu status berat badan Anda:

Berikut contoh lain yang menggunakan satuan non-metrik untuk menunjukkan bagaimana hasilnya berubah secara dinamis:

Terdapat pertanyaan jenis Persamaan tersembunyi pada tingkat internal yang mengonversi data ke satuan metrik (jika diperlukan), dan menyimpan tinggi, berat, BMI, dan status berat badan dalam satuan metrik di basis data tanpa memerlukan JavaScript khusus.
Pada rangkaian contoh berikutnya, Anda dapat melihat bagaimana menggunakan fungsi matematika dan fungsi lainnya di dalam laporan yang disesuaikan. Beginilah tampilan halaman sebelum Anda memasukkan data apa pun. Ada logika bersyarat untuk menampilkan sel kosong jika tidak ada data (atau data non-numerik) yang dimasukkan, alih-alih menampilkan "NaN" atau "Divide by Zero".

Saat angka dimasukkan, laporan di halaman berubah untuk menampilkan perhitungan yang dilakukan beserta hasilnya.

Ada banyak contoh lain dalam contoh survei ini. Misalnya, tangkapan layar di bawah ini menunjukkan salah satu dari puluhan cara untuk mengisi halaman Relevansi Dinamis. Seperti yang dicatat dalam teks bantuan, cobalah berbagai usia, dan terutama kombinasi jawaban yang tidak logis untuk melihat pesan-pesan lucu yang dihasilkan di bagian bawah. Perhatikan juga bahwa jika Anda mengatakan memiliki lebih dari satu anak, pesan akan berbunyi "I hope you enjoy playing with your X children", bukan "I hope you enjoy playing with your child". Ini menunjukkan bagaimana Anda dapat dengan mudah menyesuaikan kalimat secara mikro agar sesuai dengan jenis kelamin dan/atau jumlah subjek Anda. Anda bahkan dapat dengan mudah mengonjugasikan kata kerja dan mengubah bentuk kata benda berdasarkan jenis kelamin dan jumlah.

Unduh
Untuk mengakses contoh survei, silakan klik tautan berikut: LS3_em_tailoring.zip.
Contoh Sensus
Ikhtisar
Ini adalah contoh sensus yang menanyakan berapa banyak orang yang tinggal di rumah tangga Anda.
Contoh ini mendemonstrasikan bagaimana relevansi tingkat grup dapat mempermudah penerapan "perulangan" pertanyaan. Setelah membuat grup untuk Orang 1, saya mengekspor grup tersebut. Karena saya menggunakan nama variabel qcode seperti p1_name alih-alih kode SGQA, saya dapat menggunakan editor teks untuk dengan cepat mengedit dan mengimpor ulang grup tersebut beberapa kali (misalnya, dibutuhkan sekitar 10 detik untuk mengedit dan mengimpor ulang setiap grup berulang, sambil memastikan bahwa semua variabel memiliki nama variabel yang unik dan bahwa logika tingkat grup sudah benar).
Anda juga dapat menggunakan fitur salin pertanyaan, tetapi caranya tidak secepat opsi yang disarankan di atas.
Contoh ini juga menunjukkan cara mencegah pesan Selesai muncul sampai survei benar-benar selesai (misalnya, saat semua grup yang diperlukan telah diselesaikan).
Fitur EM yang Didemonstrasikan
- Relevansi tingkat grup - Grup lanjutan (Orang 1-5) hanya ditampilkan sesuai jumlah penghuni serumah yang ditentukan;
- Tailoring - Laporan akhir merangkum data demografis setiap penghuni serumah;
- Tampilan pertanyaan progresif - Baik dalam mode grup maupun semua dalam satu halaman, pertanyaan berikutnya baru muncul setelah pertanyaan sebelumnya dijawab.
Tangkapan layar
Survei ini menghasilkan laporan yang disesuaikan yang menampilkan demografi dari jumlah penghuni serumah yang ditentukan:

Jika Anda beralih ke mode satu pertanyaan per halaman, Anda akan melihat bahwa indeks menyesuaikan pertanyaan. Karena pengguna menyatakan bahwa orang tersebut adalah perempuan, pertanyaannya adalah "Siapa namanya". Dan karena kita menjawab "Mary", pertanyaan berikutnya berbunyi "Berapa usia Mary?"

Unduh
Untuk mengunduh contoh survei, klik di sini: LS3_group_relevance.zip.
Filter Larik Bertingkat
Ikhtisar
Survei ini didasarkan pada rancangan survei milik Joy Lane Research, LLC.
Tangkapan layar
Perhatikan hal-hal berikut:
- Q02 hanya menampilkan kumpulan produk yang dicentang di Q01 (dengan menggunakan array_filter)
- Q02 juga menampilkan "Another product", yaitu teks yang dimasukkan ke kolom "Other electronic" di Q01
- Q04 hanya menampilkan produk dari Q02 yang dicentang (sehingga filter larik bertingkat)
- Q05 hanya menampilkan produk dari Q02 yang tidak dicentang di Q02 (menggunakan array_filter_exclude bertingkat)


Unduh
Klik tautan berikut untuk mengunduh contoh di atas: Contoh survei LS2_cascading_array_filter.
Piping/Tailoring Menggunakan Semua Jenis Pertanyaan dan Atribut
Ikhtisar
Jika Anda bingung tentang cara menamai variabel (SGQA vs Qcode), Anda tidak sendirian. Meskipun dokumentasi utama menjelaskan cara menyusun nama variabel Qcode, tidak ada yang lebih jelas daripada melihatnya langsung dalam demo yang berfungsi. Survei ini menunjukkan cara mengakses atribut pertanyaan dan respons menggunakan ExpressionScript.
Konten
- Contoh dari setiap jenis pertanyaan
- Semua jenis pertanyaan yang dapat menggunakan "lainnya" disertakan agar Anda dapat melihat pengaruhnya terhadap penamaan variabel
- Nilai default untuk semua jenis pertanyaan yang menerima nilai default
- Tailoring - Laporan di dalam dan di luar halaman yang menampilkan semua 16 akhiran notasi titik EM yang tersedia.
- Laporan ini menampilkan semua data yang sedang dimasukkan (sehingga Anda dapat melihat cara membuat laporan yang dapat dicetak sendiri untuk pengguna sebagai pengganti layar cetak jawaban)
- Penamaan Qcode dan SGQA yang tepat untuk semua variabel
Tangkapan layar
Ini adalah survei yang sangat besar, sehingga kami memilih untuk tidak menyertakan tangkapan layar. Sebagai gantinya, silakan unduh dan coba sendiri.
Unduh
Klik tautan berikut untuk mengunduh survei: LS3_EM_question_attributes.lss
Validasi tradisional, dibayangkan kembali
Ikhtisar
Contoh ini mendemonstrasikan semua jenis validasi yang menggunakan ekspresi dan pengaruhnya terhadap setiap jenis pertanyaan yang mendukung validasi. Dalam banyak kasus, tips validasi awalnya tersembunyi dan hanya muncul jika sebuah pertanyaan gagal memenuhi kriteria validasi (sehingga tips tersebut juga menghilang setelah pertanyaan memenuhi kriteria validasi).
Jenis Validasi yang Didemonstrasikan
- min_num_value_n - nilai minimum untuk sebuah jawaban
- max_num_value_n - nilai maksimum untuk sebuah jawaban
- min_answers - jumlah minimum jawaban yang diperlukan
- max_answers - jumlah maksimum jawaban yang diizinkan
- multiflexible_min - nilai minimum yang diizinkan untuk sebuah jawaban (untuk jenis pertanyaan angka multifleksi)
- multiflexible_max - nilai maksimum yang diizinkan untuk sebuah jawaban (untuk jenis pertanyaan angka multifleksi)
- min_num_value - jumlah total minimum yang diizinkan dari semua jawaban untuk pertanyaan tersebut
- max_num_value - jumlah total maksimum yang diizinkan dari semua jawaban untuk pertanyaan tersebut
- equals_num_value - jumlah total dari semua jawaban untuk pertanyaan tersebut harus sama dengan nilai ini
- validation - ini adalah validasi persamaan reguler untuk pertanyaan tersebut - dapat diterapkan pada masing-masing sel
Tangkapan layar
Dengan gaya CSS baru, setiap jenis validasi menampilkan tips tersendiri. Jika ditampilkan, tips tersebut dapat disembunyikan melalui opsi hide_tip. Opsi bawaannya adalah menampilkannya dengan huruf merah jika pertanyaan gagal memenuhi kriteria validasi, dan hijau jika memenuhinya:

Pengguna tidak dapat mengirim halaman yang memiliki kesalahan validasi. Pengguna akan langsung diperingatkan jika memasukkan informasi yang salah:

Validasi dapat diterapkan pada masing-masing sel dalam sebuah larik, seperti pada contoh ini, di mana validasi persamaan reguler memastikan bahwa setiap isian merupakan nomor telepon AS dengan format yang benar, termasuk kode area.

Unduh
Untuk mengunduh contoh di atas, klik tautan berikut: LS3_Validation_tests.zip.
Persamaan Validasi
Ikhtisar
Terkadang Anda memerlukan validasi khusus yang tidak dapat dicapai dengan kriteria minimum/maksimum tradisional. Untuk itu, Anda perlu menggunakan opsi em_validation_q dan em_validation_sq yang memungkinkan Anda menyusun persamaan validasi yang kompleks masing-masing pada tingkat pertanyaan dan subpertanyaan.
Fitur EM yang Didemonstrasikan
- em_validation_q - ini adalah persamaan yang menentukan apakah seluruh pertanyaan valid
- em_validation_q_tip - ini adalah pesan yang ditampilkan jika pertanyaan gagal memenuhi kriteria em_validation_q
- em_validation_sq - ini adalah persamaan yang menentukan apakah setiap subpertanyaan (sel larik) valid
- em_validation_sq_tip - ini adalah pesan yang ditampilkan jika salah satu subpertanyaan tidak valid.
Secara umum, saat em_validation_sq digunakan, jika ada sel yang tidak valid, warna latar belakang sel tersebut berubah menjadi merah untuk menandakan adanya kesalahan.
Tangkapan layar

Pertanyaan ini memastikan bahwa Anda memasukkan usia anak-anak Anda secara menurun dengan menerapkan persamaan validasi berikut:
q1_sq1 >= q1_sq2 && q1_sq2 >= q1_sq3 && q1_sq3 >= q1_sq4

Pada contoh di bawah ini, validasi memastikan bahwa tidak lebih dari 3 pertanyaan dijawab pada setiap baris dengan menerapkan persamaan validasi berikut:
(sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= 3) && (sum(Test_B_1, Test_B_2, Test_B_3, Test_B_4, Test_B_5) <= 3) && (sum(Test_C_1, Test_C_2, Test_C_3, Test_C_4, Test_C_5) <= 3)
Anda juga dapat menulisnya seperti berikut; LimeSurvey akan otomatis mengonversinya saat runtime menjadi ekspresi yang tercantum di atas.
(sum(self.sq_A) <= 3) && (sum(self.sq_B) <= 3) && (sum(self.sq_C) <= 3)

Unduh
Untuk mengunduh contoh survei yang digunakan pada contoh di atas, klik tautan berikut: ls2_test_em_sq_validation.lss.
Relevansi subpertanyaan
Ikhtisar
Contoh ini menunjukkan bagaimana array_filter dan kriteria validasi dapat saling berinteraksi. Untuk validasi yang berlaku pada jumlah (sum), hanya nilai yang relevan (terlihat) yang diperhitungkan.
Fitur EM yang Didemonstrasikan
Contoh ini juga menunjukkan pelaporan dinamis jumlah pertanyaan yang dijawab pada pertanyaan inti.
Tangkapan layar
Mengubah jumlah baris yang terlihat akan mengubah jumlah total secara dinamis. Menandai sebuah subpertanyaan sebagai tidak relevan tidak menghapus nilainya. Sebaliknya, jika tidak relevan, nilainya tidak dihitung dalam persamaan apa pun.


Perhatikan apa yang terjadi ketika kita mencentang "Subpertanyaan kelima" pada pertanyaan pertama "Which rows should appear below". Perhatikan bahwa jumlah untuk pertanyaan kedua "Enter some numbers" sekarang menjadi 5. Meskipun subpertanyaan 5 pada pertanyaan tersebut masih bernilai 14 (misalnya, jika Anda menghapus centang subpertanyaan kelima, Anda akan melihat nilai 14 lagi), nilai tersebut tidak dihitung dalam jumlah karena saat ini tidak relevan. Semua data yang tidak relevan akan dihapus (diubah menjadi NULL di database) saat pengiriman, tetapi tetap tersedia di halaman jika responden ingin atau perlu mengubah jawabannya.

Unduh
Untuk mengunduh contoh kami, klik di sini: ls2_subquestion_relevance.lss.
Menggunakan Koma sebagai Pemisah Radix (Titik Desimal)
Ikhtisar
ExpressionScript memastikan bahwa hanya angka yang valid yang dapat dimasukkan ke dalam bidang numerik. Jika Anda memasukkan angka yang tidak valid, Anda akan diperingatkan bahwa ada yang salah (misalnya, pada tema fruity, seluruh pertanyaan akan diberi warna merah).
Perhatikan bahwa nilai numerik selalu dikonversi menggunakan titik sebagai pemisah radix di dalam database. Dengan cara ini, analisis statistik akan berfungsi dengan semestinya.
Untuk mengubah pemisah radix, buka opsi Elemen teks yang terdapat di tab Pengaturan, lalu cari fungsi Simbol pemisah desimal.
Jenis Pertanyaan yang Menggunakan Pemisah Radix
- Input numerik [N]
- Beberapa input numerik [K]
- Larik (Angka) [:]
- Larik (Teks) [;], saat menggunakan atribut numbers_only
- Daftar (Pilihan) [L], saat menggunakan atribut other_numbers_only
- Teks bebas singkat [S], saat menggunakan atribut numbers_only
- Beberapa teks pendek [Q], saat menggunakan atribut numbers_only
- Pilihan ganda [M], saat menggunakan atribut other_numbers_only
- Pilihan ganda dengan komentar [P], saat menggunakan atribut other_numbers_only
Tangkapan layar
Pada tangkapan layar di bawah ini, Anda dapat melihat bahwa koma dapat digunakan sebagai pemisah radix.

Unduh
Untuk mengunduh contoh di atas, klik tautan berikut: ls2_comma_as_radix_separator.lss.
Grup Pengacakan
Ikhtisar
Survei ini menunjukkan cara menggunakan atribut random_group.
Jika atribut ini digunakan, urutan pertanyaan akan diacak setiap kali Anda memulai survei. Namun, setelah survei dimulai, urutan pengacakan tetap sama, meskipun Anda mengganti bahasa.
Tangkapan layar
Mari kita periksa contoh di bawah ini bersama-sama. Pertanyaan acak pertama pada halaman akan berupa Q1, Q4, atau Q7. Pertanyaan acak kedua pada halaman akan berupa Q2, Q5, atau Q8.

Berikut adalah pengacakan yang dihasilkan saat pertama kali saya menguji survei ini.

Pengacakan yang berbeda dihasilkan saat saya menguji survei untuk kedua kalinya.

Namun, ketika saya beralih ke bahasa Prancis (tanpa memulai ulang survei), urutan pengacakan tetap utuh.

Unduh
Untuk mengunduh contoh di atas, klik tautan berikut: Randomization_Group_Test.lss
Menanyakan Satu Pertanyaan Secara Acak Per Grup
Ikhtisar
Survei ini menunjukkan cara mengonfigurasi survei agar menampilkan satu pertanyaan per grup secara acak. Di dalamnya terdapat 5 grup dengan masing-masing 6 pertanyaan. Pada awalnya, di Grup 0, lima pertanyaan Persamaan tersembunyi yang bernama ask1-ask5 diisi. Masing-masing memiliki nilai {floor(rand(1,6.9999))} pada kolom teks pertanyaan, yang berarti variabel ask1-ask5 masing-masing akan bernilai antara 1 dan 6. Kemudian, setiap pertanyaan dalam grup memiliki persamaan relevansi seperti "ask1==N" dengan N adalah pertanyaan ke-N dalam grup (jadi pertanyaan ketiga di grup 1 memiliki persamaan relevansi "ask1==3").
Survei ini berfungsi sama baiknya dalam mode seluruh survei sekaligus, grup demi grup, dan pertanyaan demi pertanyaan. Karena pengacakan ditetapkan di grup pertama, dan grup tersebut secara efektif tersembunyi (karena semua pertanyaan ask1-ask5 disembunyikan), pengacakan tetap sama untuk responden yang sama; tetapi setiap responden yang berbeda akan memiliki pengacakan yang berbeda.
Fitur yang Ditunjukkan
- Jenis pertanyaan Persamaan
- Fungsi pengacakan
- Fungsi kondisional (if)
Tangkapan layar
Ini adalah Group0, yang menggunakan jenis pertanyaan Persamaan untuk memilih nilai acak dari 1 sampai 6 untuk setiap grup (kecuali grup terakhir, yang hanya memiliki 4 pertanyaan). Perhatikan bahwa fungsi "if()" pertama-tama memeriksa apakah ask1 sudah ditetapkan, dan jika ya, menggunakan nilai tersebut. Jika nilainya belum ditetapkan, fungsi akan menggunakan nilai acak untuk menetapkan nilai ask1.

Grup ini menunjukkan bagaimana variabel (ask4) dari Group0 digunakan untuk mengontrol pertanyaan mana yang terlihat di dalam grup keempat.

Unduh
Untuk mengunduh contoh survei di atas, klik di sini: Contoh survei pertanyaan acak dalam grup.
Menanyakan Sejumlah Pertanyaan Tertentu Secara Acak Dalam Grup (subset dari pertanyaan)
Ringkasan
Survei ini menunjukkan cara menampilkan subset pertanyaan acak dalam satu grup. Misalnya, menampilkan 5 pertanyaan acak dari 10 pertanyaan yang ada dalam satu grup.
Survei ini memiliki satu grup yang berisi 10 pertanyaan. Semua pertanyaan diberi nama grup pengacakan yang sama. Akibatnya, pertanyaan akan ditampilkan dalam urutan acak saat halaman dimuat. Setiap pertanyaan diberi persamaan yang berhubungan yang menyatakan bahwa jumlah "relevanceStatus" dari semua pertanyaan lain dalam grup lebih kecil dari jumlah pertanyaan yang ingin Anda tampilkan. Karena relevanceStatus ditetapkan saat pertanyaan dirender, hal ini secara efektif menjumlahkan banyaknya pertanyaan sebelumnya.
Jadi, pada contoh 5 dari 10 kita, persamaan untuk Q1 adalah:
sum(Q2.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5
Untuk Q2, persamaannya adalah:
sum(Q1.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5
Dan seterusnya...
Fitur yang Ditunjukkan
Unduh
Untuk mengunduh contoh di atas, klik tautan berikut: Contoh survei 5 acak dari 10.
Menilai Daftar Produk yang Dimasukkan Pengguna
Ringkasan
Contoh berikut menunjukkan cara meminta pengguna mendaftar sejumlah produk yang menarik bagi mereka, lalu meminta mereka menilai produk-produk tersebut.
Fitur ES yang Ditunjukkan
- Tailoring jawaban - saat menilai produk, label diambil dari kolom komentar pada pertanyaan pilihan ganda sebelumnya
- Tailoring skala - banyak opsi pertanyaan lanjutan, seperti judul skala, juga dapat di-tailoring.
Tangkapan layar
Gambar ini menunjukkan bahwa karena hanya produk 1, 3, dan 5 yang dipilih, hanya ketiga produk tersebut yang ditampilkan (menggunakan atribut array_filter). Selain itu, label baris pada pertanyaan kedua berupa nomor produk (jika kolom komentar tidak diisi) atau isi kolom komentar.

Gambar ini menunjukkan cara jawaban yang di-tailoring ditentukan:

Berikut adalah Show Logic File untuk pertanyaan tersebut, yang memungkinkan kita memverifikasi bahwa logika kondisional berfungsi sesuai keinginan (misalnya, untuk melihat apakah ada kesalahan sintaks):

Gambar berikutnya menunjukkan grup tempat Anda menentukan skala penilaian 5 poin (Opsi 1-5), judul skala, dan produk yang ingin Anda nilai. Pertanyaan terakhir menunjukkan bahwa setiap bagian dari pertanyaan larik dapat di-tailoring:

Gambar berikutnya menunjukkan tampilan file logika dari pertanyaan terakhir. Seperti yang dapat Anda lihat, subpertanyaan, jawaban, dan header skala dapat di-tailoring.

Unduh
Untuk mengunduh contoh survei di atas, klik tautan berikut: Contoh survei penilaian daftar produk yang dimasukkan pengguna.