檢查問卷邏輯 - 進階
From LimeSurvey Manual
概述
檢查問卷邏輯是一個重要的選項,可協助您建立並輕鬆維護複雜的問卷。
在問卷的開發與測試過程中,以及啟用問卷之前,驗證問卷邏輯非常重要。當您使用複雜的相關性、客製化內容和驗證等式時尤其如此——您需要確保執行問卷時不會出現任何問題。
此功能可讓您快速驗證問卷、題組和問題的正確性。您可以從最上列選單中問卷相關設定下方的選項進入。它位於工具選單中:
如上所示,問卷中使用的每種語言都可以各執行一次此選項,最多四次。
說明
檢查問卷邏輯選項會以方便閱讀的表格形式,顯示您為每個問題和題組所指定的全部內容(例如名稱、文本、說明、條件/相關性、驗證規則、預設值、子問題、答案)。它會醒目標示錯誤,並讓您點擊問題和題組的 ID(或等式中使用的變數),在新的瀏覽器分頁中編輯這些問題或題組。如此您可以快速編輯任何錯誤,並重新整理邏輯檢查頁面,在啟用問卷之前確認問卷的正確性。
此顯示方式也設計成讓研究人員和研究贊助者都能閱讀,以便他們驗證問卷設計和邏輯的正確性。檢查問卷邏輯會更新已啟用問卷中所有運算式的快取。
它包含下列欄:
- # - 顯示題組和問題的順序計數,從 0 開始。
- 相關性 [驗證] (預設) - 顯示下列內容:
- 相關性 - 問題或題組經語法醒目標示的相關性等式。如果始終為真(即在任何情況下都顯示),其值將為 1。
- 驗證 - ExpressionScript 會根據所選的問題屬性(例如答案數量下限/上限、總和下限/上限/等於值、個別值下限/上限,或正規表示式驗證)自動產生驗證等式。此區段會顯示所產生的驗證等式,讓您能夠偵測是否有任何錯誤(例如未定義的變數)。
- 問題層級的驗證會顯示用於驗證上述問題屬性所需的等式
- 子問題層級的驗證會顯示實作 array_filter、array_filter_exclude 和 exclusive_option 所需的等式
- 預設 - 如果問題有預設值,會在此處顯示,並以語法醒目標示(因為預設值可能是運算式)。
- 文字 [幫助] (提示) - 顯示下列內容:
- 文字 - 題組、問題、子問題或答案的文字。它會以語法醒目標示,以顯示任何內嵌的客製化內容,讓您確認已宣告客製化內容中計畫使用的所有變數。
- 幫助 - 顯示問題的說明文字,同樣以語法醒目標示。
- 提示 - 顯示根據問題屬性在內部產生的驗證提示。所有問卷樣式,以及可供列印的問卷和資料登錄畫面都使用相同的提示。
- 問題屬性 - 顯示此問題所有相關問題屬性的表格。可能是等式的屬性會以語法醒目標示,以便您驗證其正確性。
列的顏色編碼如下:
- 題組 - 以淺灰色背景顯示
- 問題 - 以淺綠色背景顯示
- 子問題 - 以淡黃色背景顯示
- 答案 - 以純白色背景顯示
答案在相關性欄中有一個額外的屬性:
- 值 - 這是計算所使用的預設內部值。如果您使用評估,這將是評估值。否則,它將與答案名稱相同。
使用方式
頁面頂端有一則摘要訊息。如果一切正常,它會顯示「沒有在這份問卷中檢測到任何語法錯誤」,或「此題組」或「此問題」「本身不包含任何語法錯誤」。如果情況相反,則會顯示「X 個問題有語法錯誤,需要修正」。
每個有語法錯誤的問題,其最左側欄(即 #)的背景會以紅色標示。此外,姓名 [ID] 欄下方會顯示警告,說明該問題至少有幾個錯誤。以下是常見的錯誤:
- 未定義變數 - 如果您沒有定義所有變數,或將 array_filter 拼錯(或 array_filter 使用了不同的答案選項集),部分驗證問題就會顯示錯誤。未定義的變數會以紅色文字顯示,並以紅線框起。
- 語法錯誤 - 開始使用相關性等式後,您可能會使用過多或過少的括號。此類語法問題會以紅色醒目標示並框起。如果將滑鼠游標移到任何此類紅框文字上,工具提示會說明該錯誤。
ExpressScript 語法中的顏色
條件和等式會以語法醒目標示,讓您更容易辨識內容:
- 綠色 / 淺藍色:參照問卷中較前面問題的變數
- 藍色:函數
- 灰色:字串運算式
- 棕色:TOKEN 運算式(參與者資料)
- 黑色:運算子
需要檢查的項目:
- 紫色:參照問卷中較後面問題的變數。這通常是錯誤,需要檢查。
- 紅色或紅框:不存在的變數、對較前面問題的參照,或語法錯誤——通常需要檢查。
未定義變數
如果使用了未定義的變數,該變數名稱會以紅色標示並以紅線框起。如果將滑鼠游標移到變數名稱上,會顯示「undefined variable」(未定義變數):


}}
語法錯誤
大多數與運算式相關的錯誤都源於語法錯誤。這通常是因為問卷管理員漏掉了大括號、未正確使用括號,或錯誤地使用了運算式:


以下有許多關於使用語法醒目提示的優良範例。
錯誤的自訂 JavaScript
JavaScript 錯誤同樣會在問卷邏輯檢查中以醒目方式標示:

加快編輯與驗證
所有以語法醒目提示的文字都內嵌了工具提示,而且可以點擊:
- 工具提示
- 函數 - 將滑鼠移到函數上,即可查看該函數的用途與語法定義;
- 變數名稱 - 將滑鼠移到變數名稱上,即可查看該問題的位置(群組、問題順序)、問題文字及可用的答案。
- 動作
- 變數名稱 - 點擊變數名稱會開啟新視窗,讓您編輯該問題。這使得瀏覽與驗證邏輯變得很容易 - 只要持續點擊問題的相關性或驗證條件中的變數名稱,即可了解它們的來源及用法。
範例
以下範例取自 ExpressionScript 範例問卷。您可以在該頁面找到執行中問卷的螢幕截圖、說明及下載檔案。
身體質量指數
以下是此範例的螢幕截圖。
這是身體質量指數計算的問題重新排序檢視。您可以在問題欄下看到體重、身高及 BMI 的相關性運算式:

若要更清楚地概覽問卷,請查看問卷邏輯頁面:

此問卷範例也很好地示範了如何使用巢狀 if() 陳述式來產生「weightstatus」。

串聯邏輯
以下是此範例的螢幕截圖。
它顯示了使用 array_filter 和 array_filter_exclude 時自動產生的子問題驗證邏輯。此範例也展示了如何替換經過客製化的「其它」值(Q02_other 的答案為 Q01_other)。

此範例中的 Q05 同時分別對 Q01 和 Q02 使用了 array_filter 和 array_filter_exclude,展示了串聯 array_filter 的功能。請注意,顯示問題與子問題層級驗證條件的主要原因之一,是協助確保您在指定 array_filter 或 array_filter_exclude 的變數名稱時沒有打錯字(或是在您為篩選後的子問題清單使用不同變數名稱的情況下)。如果有此類錯字,所有無效的變數名稱都會以紅色顯示,表示它們未定義,讓您能快速修正問題。

動態相關性
此範例展示如何利用動態串聯相關性邏輯來控制問題的顯示與否。您可以在此下載此範例。
另請注意,只有在符合特定驗證條件時才會顯示問題。例如,如果受訪者表示她有 2 個孩子,則受訪者必須填寫某些問題(kid1 和 kid2)。

群組層級的相關性
此範例說明群組層級的相關性在邏輯檢查中的顯示方式。以下是下述範例的螢幕截圖。
如您所見,群組層級的相關性等式 (cohabs > 1 && p1_rel != "") 顯示在 G-2 灰色的「Person 2」列中。
您可能也會注意到,所有問題都是必填。不過,如果群組不相關,其所有問題也會不相關。因此,只有在群組相關時,這些問題才真正是必填。
您也可能發現,某些問題只有在上一個問題的答案不為空時才會顯示。如下所示,若未填寫 p2_sex,即使 p2_name 是必填問題,也不會顯示;同樣地,若未填寫 p2_name,必填問題 p2_age 也不會顯示。這些問題可視為「有條件必填」。
此外,請注意提示訊息也會自動為您建立。這些訊息依數值範圍(最小值/最大值)、總和數值範圍(最小值/最大值/等於)、答案數量(最小值/最大值)等進行整理(視所使用的問題類型和啟用的屬性而定)。有時您想驗證答案範圍,但不希望向使用者顯示看起來多餘的驗證提示。在這種情況下,您可以使用 hide_tip 問題選項(如本例中,除非使用者嘗試輸入不正確的值,否則不會告知年齡必須介於 0 至 115 之間,請參見 p2_age)。

以逗號作為小數點分隔符號
雖然 LimeSurvey 在執行時完全支援以逗號作為小數點分隔符號,但在設計時(例如在進階問題屬性中指定最小值/最大值時),您仍必須使用句點作為小數點分隔符號。可參考的實際範例請見此處。
此外,請記住,驗證邏輯是根據已啟用的問題屬性自動為您建立的。這些等式看起來可能令人眼花撩亂,但您無需擔心。

