โครงสร้างแบบสำรวจแบบ Tab Separated Value
From LimeSurvey Manual
การนำเข้าและส่งออกโครงสร้างแบบสำรวจแบบ Tab Separated Value
ฟีเจอร์นี้ออกแบบมาเพื่อให้ใช้ซอฟต์แวร์สเปรดชีต เช่น LibreOffice, Excel หรือ Google Docs ในการสร้างและแก้ไขแบบสำรวจได้ง่ายขึ้น และช่วยกำจัดการพึ่งพา SGQA code ได้อย่างสมบูรณ์
ฟีเจอร์นี้รองรับการนำเข้าจากไฟล์ Tab Separated Value (TSV) ที่เข้ารหัสแบบ ASCII หรือ UTF-8 และมีนามสกุลไฟล์เป็น .txt
เริ่มต้นใช้งาน
วิธีที่ง่ายที่สุดคือนำแบบสำรวจที่มีอยู่แล้วมาส่งออกในรูปแบบ Tab Separated Value ให้ใช้ปุ่มส่งออกแบบสำรวจตามปกติ และแทนที่จะเลือกรูปแบบ .lss ให้เลือก "Tab Separated Values format (*.txt)" ระบบจะบันทึกเป็นไฟล์ Tab Separated Value ในรูปแบบที่ถูกต้อง (ไฟล์ยูนิโค้ดที่คั่นด้วยแท็บ) พร้อมหัวคอลัมน์ที่ถูกต้องครบถ้วน
ซอฟต์แวร์สเปรดชีตใดก็ได้ที่รองรับ tab separated values ใช้งานได้ทั้งสิ้น (เช่น OpenOffice หรือ LibreOffice) LimeSurvey จะไม่สนใจการจัดรูปแบบใดๆ ภายในสเปรดชีต แต่คุณสามารถเพิ่มการจัดรูปแบบได้ตามต้องการหากช่วยให้ทำงานได้สะดวกขึ้น
จะมีหนึ่งแถวสำหรับแต่ละกลุ่ม คำถาม คำถามย่อย และคำตอบ นอกจากนี้ยังมีแถวสำหรับตัวแปรส่วนกลางของแบบสำรวจ และตัวแปรของแบบสำรวจเฉพาะภาษา ภาษาหลักจะถูกแสดงก่อน ตามด้วยภาษารองอื่นๆ ดังนั้น หากมีหลายภาษา เนื้อหาทั้งหมดของภาษาหลักจะปรากฏก่อน (เช่น กลุ่ม คำถาม คำถามย่อย และคำตอบทั้งหมด) จากนั้นจะตามด้วยสำเนาที่แปลแล้วของแต่ละภาษารอง (โดยมีจำนวนและลำดับแถวเหมือนกันทุกประการสำหรับชุดที่แปลแล้ว)
ความสัมพันธ์จะถูกอนุมานจากตำแหน่งที่อยู่ใกล้กัน ดังนั้น คำถามที่อยู่ถัดจากกลุ่มจะเป็นส่วนหนึ่งของกลุ่มนั้น คำถามย่อยที่อยู่ถัดจากคำถามจะเป็นส่วนหนึ่งของคำถามนั้น และคำตอบที่อยู่ถัดจากคำถามก็เป็นส่วนหนึ่งของคำถามนั้นเช่นกัน ด้วยเหตุนี้ คุณจึงไม่จำเป็นต้องทราบ ID (gid, qid, sqid) ของคำถามใดๆ เพราะระบบจะคำนวณให้โดยอัตโนมัติเมื่อนำเข้า อันที่จริง รูปแบบนี้ไม่ได้ใช้ gid, qid หรือ sqid (หรือ SGQA code) เลย
เคล็ดลับ
เป้าหมายของการนำเข้า/ส่งออกแบบ Tab Separated Value คือช่วยให้คุณออกแบบแบบสำรวจได้อย่างรวดเร็วโดยใช้สเปรดชีต เราคาดว่าคุณจะนำเข้าชีตบ่อยครั้ง ตรวจสอบความถูกต้องด้วยฟีเจอร์ "Show Survey Logic" และทดสอบแบบสำรวจ ทุกครั้งที่นำเข้า คุณจะได้แบบสำรวจใหม่ ดังนั้นคุณอาจมีแบบสำรวจที่พัฒนาไม่เสร็จสมบูรณ์หลายชุด ซึ่งไม่เป็นปัญหา เพียงแต่ควรติดตามว่าชุดไหนเป็นชุดล่าสุด หรือลบชุดเก่าหลังจากนำเข้าชุดใหม่ เนื่องจากคุณไม่ต้องใช้ SGQA code ใน Tab Separated Value คุณจึงไม่ต้องกังวลว่า LimeSurvey จะกำหนดรหัสใดให้กับคีย์หลักของแบบสำรวจ กลุ่ม คำถาม และคำตอบ ดังนั้นจึงนำเข้าและส่งออกได้ตามต้องการ
ต่อไปนี้คือสิ่งที่สะดวกหลายอย่างที่คุณทำได้ด้วยวิธีการสร้างแบบสอบถามนี้:
- ใช้คำตอบชุดเดียวกันกับหลายคำถาม เพียงคัดลอกแถว 'A' แล้ววางต่อจากทุกคำถามที่ต้องการใช้ชุดคำตอบเดียวกัน
- ใช้คำถามย่อยชุดเดียวกันกับหลายคำถาม เพียงคัดลอกแถว 'SQ' แล้ววางต่อจากทุกคำถามที่ต้องการ
- "การวนซ้ำ" - ใช้กลุ่มเดิมหลายครั้ง เมื่อปรับกลุ่มได้ตามต้องการแล้ว ให้คัดลอกตามจำนวนที่ต้องการ ใช้ตัวกรองของ Excel เพื่อดูเฉพาะแถว 'G' (สำหรับกลุ่ม) และใช้ฟีเจอร์ลากคอลัมน์ของ Excel เพื่ออัปเดตสมการความสัมพันธ์กันของแต่ละกลุ่ม (เช่น สำหรับการสำมะโนประชากร ความสัมพันธ์กันแรกอาจเป็น "numPeople > 1" ส่วนถัดไปควรเป็น "numPeople > 2" ฟีเจอร์ลากจะอัปเดตตัวเลขให้อัตโนมัติ) กรองด้วยแถว 'Q' และตรวจสอบให้แน่ใจว่าแต่ละคำถามมีค่าที่ไม่ซ้ำกัน (เช่น หากคุณตั้งชื่อตัวแปรเป็น g1_q1, g1_q2, g1_qN ให้ใช้การค้นหา/แทนที่เพื่อเปลี่ยน g1 เป็น g2 สำหรับกลุ่มที่สอง g3 สำหรับกลุ่มที่สาม และอื่นๆ)
- การจัดลำดับคำถาม/กลุ่มใหม่ เพียงจัดลำดับแถวของไฟล์สเปรดชีตใหม่
- การทดสอบโมดูลของแบบสำรวจ สำหรับแบบสำรวจที่ยาว คุณอาจต้องการแบ่งการทดสอบเป็นโมดูล เพียงสร้างไฟล์สเปรดชีตใหม่สำหรับแต่ละโมดูล โดยลบแถวที่ไม่ต้องการออก วิธีนี้ช่วยให้ไม่ต้องกรอกข้อมูลจำนวนมากเพื่อทดสอบส่วนหลังๆ ของแบบสำรวจ
- การทดสอบคำถามที่จำเป็นต้องตอบ ปัญหาที่พบบ่อยไม่ใช่การที่ต้องกำหนดให้หลายคำถามเป็นคำถามที่จำเป็น แต่เป็นการที่ต้องปิดคุณสมบัติจำเป็นเพื่อทดสอบ เพียงสร้างสเปรดชีตหลักโดยตั้งค่าจำเป็นเป็นค่าสุดท้ายที่ต้องการ จากนั้นเพื่อทดสอบ ให้ลบคอลัมน์ "mandatory" แล้วบันทึกสเปรดชีตเวอร์ชันทดสอบ เมื่อนำเข้าเวอร์ชันนั้น จะไม่มีคำถามใดเป็นคำถามที่จำเป็นเลย เมื่อทดสอบเสร็จแล้ว ให้นำเข้าสำเนาหลัก
- การตั้งค่าเริ่มต้น แทนที่จะใช้ GUI คุณสามารถป้อนค่าเริ่มต้นที่ต้องการในคอลัมน์ default ได้ ซึ่งมีประโยชน์อย่างยิ่งในกรณีที่ GUI ไม่ให้คุณป้อนค่าที่ต้องการ เช่น นิพจน์เพื่อตั้งค่าเริ่มต้นสำหรับรายการตัวเลือก (เช่น การเติมรายการจากแอตทริบิวต์ของผู้เข้าร่วมแบบสำรวจ)
- การแปล คุณสามารถสร้างสำเนาสเปรดชีตของคุณ - หนึ่งชุดต่อหนึ่งภาษา ให้รวมทุกแถวของภาษาหลัก จากนั้นคัดลอกและวางด้านล่าง แล้วใช้การลากเพื่อเปลี่ยนช่องภาษาเป็นภาษาเป้าหมาย สามารถแจกจ่ายให้ผู้แปล และรวมกลับเป็นไฟล์สเปรดชีตเดียวเมื่อแปลเสร็จ
- การตั้งค่าแอตทริบิวต์ขั้นสูงของคำถามจำนวนมาก คุณอาจต้องการให้สมการทั้งหมดแสดงให้เห็นในตอนแรก (เพื่อดูค่าของสมการขณะเก็บข้อมูล) แต่ซ่อนทั้งหมดก่อนใช้งานจริง เพียงกรองสเปรดชีตด้วย class = 'Q' และประเภทคำถาม = '*' (สมการ) แล้วตั้งค่า always_hide เป็น 1 สำหรับทุกคำถามเหล่านั้น เช่นเดียวกัน หลังจากสร้างแบบสำรวจแล้ว หากคุณตัดสินใจว่าคำถามใดควรปรากฏในสถิติสาธารณะ แทนที่จะแก้ไขแต่ละคำถามผ่าน GUI ให้กรองด้วย class = 'Q' และตั้งค่า public_statistics = 1 สำหรับทุกคำถามที่ควรปรากฏในสถิติ
- การค้นหาและแทนที่ หากคุณตัดสินใจว่าต้องเปลี่ยนถ้อยคำในทุกคำถาม คุณสามารถใช้การค้นหาและแทนที่ของ Excel เพื่อทำการเปลี่ยนแปลงเหล่านั้นได้ เช่นเดียวกัน หากต้องการเปลี่ยนชื่อตัวแปรจำนวนมาก การค้นหาและแทนที่ก็ช่วยได้ หากต้องการค้นหาและแทนที่ด้วยนิพจน์ปรกติ คุณสามารถเลือกคอลัมน์ที่ต้องการ คัดลอกไปยังโปรแกรมแก้ไขข้อความ ทำการค้นหาและแทนที่ แล้ววางคอลัมน์กลับไปยังสเปรดชีต
- การขออนุมัติ หากคุณทำงานวิจัย คุณอาจมีคณะกรรมการจริยธรรมที่ยืนกรานขอดูข้อความของคำถาม วิธีนี้อาจเป็นวิธีที่สะดวกในการแชร์ เช่นเดียวกันสำหรับการหารือกับลูกค้า
- ฉันทามติของทีม หากคุณต้องการให้กลุ่มตกลงกันเกี่ยวกับถ้อยคำหรือลักษณะการแสดงผลของคำถามหรือกลุ่ม คุณสามารถสร้างต้นแบบ/แก้ไขสเปรดชีตอย่างรวดเร็ว นำเข้า และแสดงให้ทีมเห็น (ผ่านการดูตัวอย่างคำถามหรือกลุ่ม) ว่าผู้ใช้จะเห็นอะไรกันแน่ วิธีนี้ทำให้คุณได้รับการอนุมัติจากทีมก่อนที่จะออกจากห้อง แทนที่จะต้องจัดทำเอกสารความต้องการ สร้าง และขออนุมัติในการประชุมครั้งต่อไป
- การอัปเกรดจากรูปแบบแบบสำรวจอื่น หากแบบสำรวจของคุณอยู่ในรูปแบบ XML, Word หรือรูปแบบอื่น คุณสามารถสร้างกระบวนการแปลงเพื่อแมปไปยังรูปแบบนี้ได้ แม้ว่าคุณจะลองแมปไปยังรูปแบบ .lss ได้เช่นกัน แต่ข้อดีของรูปแบบนี้คือไม่ต้องติดตามความสัมพันธ์แบบ foreign key ระหว่างกลุ่ม คำถาม คำถามย่อย คำตอบ และค่าเริ่มต้น
ข้อจำกัด
- ตามการออกแบบ ฟีเจอร์นี้ทำงานได้อย่างถูกต้องเฉพาะกับแบบสำรวจที่ใช้การตั้งชื่อแบบ qcode (ไม่ใช่ SGQA) ฟีเจอร์นี้ถือว่าชื่อตัวแปร (ตัวระบุคำถาม) ไม่ซ้ำกันตลอดทั้งแบบสำรวจ ชื่อคำถามย่อยสามารถซ้ำกันได้ ตราบใดที่ไม่ซ้ำกันภายในขอบเขตของคำถามหนึ่งๆ
รูปแบบไฟล์
ทั่วไป
เราใช้ชุดหัวคอลัมน์เดียวกันเพื่อวัตถุประสงค์หลายอย่าง 14 คอลัมน์แรกมีวัตถุประสงค์ต่างกันไปขึ้นอยู่กับประเภทของเอนทิตี (เช่น กลุ่ม คำถาม คำตอบ) คอลัมน์ที่เหลือคือรายการชื่อฟิลด์ฐานข้อมูลสำหรับรหัสคำถามขั้นสูงเรียงตามตัวอักษร ด้านล่างนี้คือไวยากรณ์สำหรับแต่ละประเภทเอนทิตี
14 คอลัมน์แรกคือ:
- id (New in 3.14.0 )
- related_id (New in 3.14.0 )
- class
- type/scale
- name
- relevance
- text
- help
- language
- validation
- mandatory
- other
- default
- same_default
พารามิเตอร์ส่วนกลางของแบบสำรวจ
มีหนึ่งแถวต่อหนึ่งพารามิเตอร์ในตาราง surveys
- class => 'S'
- name => ชื่อฟิลด์ฐานข้อมูล
- text => ค่า
พารามิเตอร์เฉพาะภาษาของแบบสำรวจ
มีหนึ่งแถวต่อหนึ่งฟิลด์ต่อหนึ่งภาษาในตาราง surveys_languagesettings รายการทั้งหมดของภาษาหนึ่งๆ จะถูกรวบรวมก่อนทำการเพิ่มลงในตารางนั้น
- class => 'SL'
- name => ชื่อฟิลด์ฐานข้อมูล
- text => ค่า
- language => ภาษา
กลุ่ม
หนึ่งแถวกลุ่มต่อหนึ่งภาษาของแบบสำรวจ (เช่น จะมี 3 แถวกลุ่มหากแบบสำรวจมี 3 ภาษา)
- id => ตัวระบุตัวเลขที่ไม่ซ้ำกันสำหรับกลุ่ม เริ่มจากเลข 1 ใช้ ID เดียวกันสำหรับภาษาอื่นๆ ที่อยู่ในกลุ่มปัจจุบัน
- class => 'G'
- name => group_name -- ตัวระบุที่ไม่ซ้ำกันของกลุ่ม
- relevance => grelevance -- สมการความสัมพันธ์กันระดับกลุ่ม โดยไม่มีวงเล็บปีกกา
- text => description -- คำอธิบายของกลุ่มเฉพาะภาษา
- language => language -- ภาษาของกลุ่ม (เช่น 'en')
คำถาม
หนึ่งแถวคำถามต่อหนึ่งภาษาของแบบสำรวจ (เช่น จะมี 3 แถวคำถามหากแบบสำรวจมี 3 ภาษา) คำถามจะถือว่าอยู่ในกลุ่มที่อยู่ก่อนหน้า
- id => ตัวระบุตัวเลขที่ไม่ซ้ำกันสำหรับคำถาม เริ่มจากเลข 1 ใช้ ID เดียวกันสำหรับภาษาอื่นๆ ที่อยู่ในคำถามปัจจุบัน
- class => 'Q'
- type/scale => type -- ประเภทคำถาม (โดยปกติเป็นตัวอักษรเดียว) (เช่น 'M' คือเลือกตอบได้หลายตัว)
- name => title -- ชื่อคำถามที่ไม่ซ้ำกัน (รากของระบบการตั้งชื่อ qcode)
- relevance => relevance -- สมการความสัมพันธ์กันสำหรับคำถาม
- text => question -- ข้อความของคำถามเฉพาะภาษา
- help => help -- ข้อความช่วยเหลือเฉพาะภาษา
- language => language -- ภาษาของกลุ่ม (เช่น 'en')
- validation => preg -- เกณฑ์การตรวจสอบด้วยนิพจน์ปรกติสำหรับคำถาม (ไม่บังคับ)
- mandatory => mandatory -- 'Y' หากจำเป็น
- other => other -- 'Y' หากควรมีตัวเลือก "อื่นๆ" (เฉพาะคำถามบางประเภท)
- default => default -- หากตั้งค่าไว้ ค่านี้จะถูกเพิ่มลงในตาราง defaultvalues สำหรับคำถามนี้
- same_default => same_default -- 'Y' หมายถึงจริง ซึ่งในกรณีนี้ defaultvalue ที่ตั้งไว้สำหรับภาษาหลักจะใช้กับภาษาอื่นๆ ด้วย
คำถามย่อย
หนึ่งแถวคำถามย่อยต่อหนึ่งภาษาของแบบสำรวจ โดยถือว่าคำถามย่อยเป็นของคำถามที่อยู่ก่อนหน้า
- id => หมายเลขระบุตัวตนที่ไม่ซ้ำกันซึ่งใช้กับคำถาม คำถามย่อยควรใช้ค่าถัดไปที่ยังว่างอยู่ โดย ID ของคำถามและคำถามย่อยต้องไม่ซ้ำกัน (เช่น ใช้ ID 1 สำหรับคำถาม และ ID 2, 3 และ 4 สำหรับคำถามย่อยของคำถามที่ 1 จากนั้น ID ของคำถามถัดไปควรเป็น 5 และเป็นเช่นนี้ต่อไป) ใช้ ID คำถามย่อยเดียวกันสำหรับภาษาอื่นของคำถามย่อยนั้น
- class => 'SQ'
- type/scale => scale_id -- 0 หรือ 1 ขึ้นอยู่กับประเภทคำถาม (เช่น คำถามแบบอาร์เรย์ข้อความจะมีสองมาตราส่วน)
- name => title -- "ชื่อ" ของคำถามย่อย เช่น ชื่อที่ใช้สำหรับ exclude_all_others
- relevance => relevance -- (ในอนาคต) เพื่อรองรับความสัมพันธ์กันในระดับคำถามย่อย
- text => question -- ข้อความของคำถามย่อยในแต่ละภาษา
- help => help -- (ในอนาคต) เพื่อรองรับข้อความช่วยเหลือในระดับคำถามย่อย
- language => language -- ภาษาของคำถามย่อย
- validation => preg -- (ในอนาคต) เพื่อรองรับการตรวจสอบด้วยนิพจน์ปรกติในระดับคำถามย่อย (เช่น สำหรับส่วนต่าง ๆ ของที่อยู่)
- mandatory => mandatory -- (ในอนาคต) เพื่อรองรับการกำหนดให้จำเป็นในระดับคำถามย่อย (เช่น กำหนดให้จำเป็นเฉพาะคำถามย่อยบางข้อ)
- default => default -- หากตั้งค่าไว้ จะเป็นค่าเริ่มต้นของคำถามย่อย (เพิ่มลงในตาราง defaultvalues)
- same_default => same_default -- หากตั้งค่าไว้ ค่าเริ่มต้นของภาษาหลักจะถูกใช้กับทุกภาษาอื่น
คำตอบ
หนึ่งแถวคำตอบต่อหนึ่งภาษาของแบบสำรวจ (เช่น หากแบบสำรวจมี 3 ภาษา จะมีแถวคำตอบ 3 แถว) โดยถือว่าคำตอบเป็นของคำถามที่อยู่ก่อนหน้า และเรียงลำดับตามที่ต้องการ
- id => ใช้ ID เดียวกับ ID ของคำถามที่คำตอบนั้นเป็นของ
- class => 'A'
- type/scale => scale_id -- 0 หรือ 1 (เช่น สำหรับคำถามแบบสองมาตราส่วน)
- name => code -- ตัวระบุคำตอบที่ไม่ซ้ำกัน
- relevance => assessment_value -- หากใช้ตัวเลือกการประเมิน นี่คือค่าการประเมินของคำตอบ
- text => answer -- ข้อความของคำตอบในแต่ละภาษา
- language => language -- ภาษาของคำตอบนี้ (เช่น 'en')
การประเมิน
หนึ่งแถวการประเมินต่อหนึ่งภาษาของแบบสำรวจ (เช่น หากแบบสำรวจมี 3 ภาษา จะมีแถวการประเมิน 3 แถว) การประเมินจะถูกเขียนไว้ท้ายไฟล์
- id => หมายเลขระบุตัวตนที่ไม่ซ้ำกันของการประเมิน เริ่มต้นด้วยหมายเลข 1 ใช้ ID เดียวกันสำหรับภาษาอื่นของการประเมินนั้น
- related_id => ID ของกลุ่มที่การประเมินนี้เป็นของ
- class => 'AS'
- type/scale => ขอบเขตการประเมิน: T-ทั้งหมด, G-กลุ่ม
- name => name
- text => message
- min_num_value => ขั้นต่ำ
- max_num_value => สูงสุด
- language => language -- ภาษาของคำตอบนี้ (เช่น 'en')
โควตา
หนึ่งแถวต่อหนึ่งโควตา โควตาจะถูกเขียนไว้ท้ายไฟล์
- id => หมายเลขระบุตัวตนที่ไม่ซ้ำกันของโควตา เริ่มต้นด้วยหมายเลข 1
- class => 'QTA'
- name => ชื่อโควต้า
- mandatory => limit
- other => สถานะของโควต้า
- default => active
- same_default => การเรียก URL อัตโนมัติ
การตั้งค่าของภาษาตามโควต้า
หนึ่งแถวโควตาต่อหนึ่งภาษาของแบบสำรวจ โดยถือว่าการตั้งค่าของภาษาตามโควต้าเป็นของโควตาที่อยู่ก่อนหน้า
- id => หมายเลขระบุตัวตนที่ไม่ซ้ำกันของการตั้งค่าของภาษาตามโควต้า เริ่มต้นด้วยหมายเลข 1 แต่ละแถวของภาษาแบบสำรวจที่ต่างกันต้องมี ID ที่ต่างกัน
- related_id => ID ของโควตาที่การตั้งค่านี้เป็นของ
- class => 'QTALS'
- relevance => message
- text => URL
- help => คำอธิบาย URL
- language => language -- ภาษาของโควตานี้ (เช่น 'en')
สมาชิกของโควตา
หนึ่งแถวต่อหนึ่งสมาชิกของโควตา ไม่ขึ้นกับภาษา แถวสมาชิกของโควตาควรวางไว้ถัดจากคำถามที่เกี่ยวข้องทันที โดยถือว่าสมาชิกของโควตาเป็นของคำถามที่อยู่ก่อนหน้า
- id => หมายเลขระบุตัวตนที่ไม่ซ้ำกันของสมาชิกของโควตา เริ่มต้นด้วยหมายเลข 1
- related_id => ID ของโควตาที่สมาชิกนี้เป็นของ
- class => 'QTAM'
- name => รหัสคำตอบ
เงื่อนไข
หนึ่งแถวต่อหนึ่งเงื่อนไข ไม่ขึ้นกับภาษา แถวเงื่อนไขควรวางไว้ถัดจากคำถามที่เกี่ยวข้องทันที โดยถือว่าเงื่อนไขเป็นของคำถามที่อยู่ก่อนหน้า
- id => หมายเลขระบุตัวตนที่ไม่ซ้ำกันของเงื่อนไข เริ่มต้นด้วยหมายเลข 1
- related_id => ID ของคำถามที่เกี่ยวข้อง (ถ้ามี)
- class => 'C'
- type/scale => scenario
- name => ชื่อฟิลด์คำตอบ
- relevance => ตัวเปรียบเทียบ
- text => คำตอบที่คาดหวัง