運算式管理員範例問卷
From LimeSurvey Manual
簡介
學習使用 ExpressionScript 的最佳方式,就是試用可運作的範例,並依您的需求加以修改。
以下提供一組範例問卷,用來示範(並測試)如何使用 EM 來強化您的問卷。這些問卷可在發行包的 /docs/demosurveys 資料夾中找到。
相關性、量身訂製與方程式
概觀
以下範例會計算每位受訪者的 BMI(身體質量指數)。請參閱下方此範例所示範的功能。
所示範的 EM 功能
- 相關性 - 支援強大的條件邏輯;
- 管道傳遞/量身訂製 - 可管道傳遞或量身訂製答案與問題中繼資料;
- 動態量身訂製 - 請注意,當您回答問題時,頁面上的報告會隨之變更。
- 微量身訂製 - 使用 if() 陳述式,在句子與報告中進行條件式量身訂製
- 方程式 - 新的題型,可讓您進行計算並將結果儲存在資料庫中,即使該計算是隱藏的
- 條件式驗證 - 驗證條件(例如最小允許值)可以是有條件的,例如依據方程式而定。
螢幕截圖
此範例會計算身體質量指數,也就是根據您的體重與身高來判斷您是否過重。請注意,一開始您只會看到四個必填問題:

輸入您的資料後(您可以選擇使用公制或非公制單位),您會看到一份量身訂製的報告,摘要列出您輸入的內容,並告訴您的體重狀態:

以下是另一個範例,使用非公制單位來示範結果如何動態變化:

在內部層級有隱藏的方程式類型問題,可將資料轉換為公制(如有需要),並將公制的身高、體重、BMI 與體重狀態儲存在資料庫中,無需自訂 JavaScript。
您可以在下一組範例中看到如何在量身訂製的報告中使用數學及其他函數。這是在您輸入任何資料之前頁面的樣子。這裡設有條件邏輯,在未輸入資料(或輸入非數字資料)時顯示空白儲存格,而不是顯示「NaN」或「Divide by Zero」。

輸入數字時,頁面上的報告會變更,以顯示正在執行的計算及其結果。

此範例問卷中還有許多其他範例。例如,下方螢幕截圖顯示了填寫「動態相關性」頁面的數十種方式之一。如說明文字所述,請嘗試不同的年齡,尤其是不合邏輯的回答組合,以查看底部產生的有趣訊息。另請注意,如果您表示有一個以上的孩子,訊息會顯示「I hope you enjoy playing with your X children」,而不是「I hope you enjoy playing with your child」。這展示了如何輕鬆對句子進行微量身訂製,使其符合受訪者的性別和/或數量。您甚至可以依據性別和數量,輕鬆變化動詞和名詞。

下載
若要取得範例問卷,請按一下以下連結:LS3_em_tailoring.zip。
人口普查範例
概觀
這是一個人口普查範例,會詢問您的家庭中有多少人。
它示範了群組層級的相關性如何讓實作問題「迴圈」更為容易。建立「Person 1」的群組後,我匯出了該群組。由於我使用了 p1_name 這類 qcode 變數名稱,而非 SGQA 代碼,因此可以使用文字編輯器快速編輯並多次重新匯入該群組(例如,編輯並重新匯入每個重複群組大約需要 10 秒,並確保所有變數都有唯一的變數名稱,且群組層級的邏輯正確)。
您也可以使用複製問題功能,但速度不及上述建議的方式。
這也展示了如何在問卷真正完成之前(例如,所有必要的群組都已完成時),避免顯示「完成」訊息。
展示的 EM 功能
- 群組層級相關性 - 後續群組(人員 1-5)僅會顯示至指定的同住人數為止;
- 量身訂做(Tailoring) - 最終報告會彙整每位同住者的人口統計資料;
- 漸進式問題顯示 - 無論是逐組模式或全部一頁模式,後續問題都會在回答完前面的問題後才顯示。
螢幕截圖
此問卷會產生一份量身訂做的報告,顯示指定同住人數的人口統計資料:

如果切換為逐題模式,您會看到索引會對問題進行量身訂做。由於使用者表示此人為女性,因此會詢問「她的名字是什麼」。而因為我們回答了「Mary」,下一個問題則會顯示「Mary 幾歲」?

下載
若要下載此問卷範例,請按一下此處:LS3_group_relevance.zip。
串聯陣列篩選
概覽
此問卷依據 Joy Lane Research, LLC 所提供的問卷設計而成。
螢幕截圖
請注意以下幾點:
- Q02 僅顯示在 Q01 中勾選的產品(使用 array_filter)
- Q02 也會顯示「Another product」,即在 Q01 的「Other electronic」欄位中輸入的文字
- Q04 僅顯示 Q02 中已勾選的產品(因此陣列篩選會串聯)
- Q05 僅顯示 Q02 中未勾選的產品(使用串聯的 array_filter_exclude)


下載
請按一下以下連結下載上述範例:LS2_cascading_array_filter 問卷範例。
在所有題型與屬性中使用管線/量身訂做
概覽
如果您對如何命名變數(SGQA 與 Qcode)感到困惑,並非只有您如此。雖然主要文件已說明如何組成 Qcode 變數名稱,但最好的方式還是透過實際運作的示範來了解。此問卷展示如何使用 ExpressionScript 存取問題屬性與回答。
內容
- 每種題型的範例
- 包含所有可使用「其它」的題型,讓您了解其對變數命名的影響
- 所有接受預設值之題型的預設值
- 量身訂做 - 頁面內與頁面外的報告,顯示全部 16 種可用的 EM 點記法後綴
- 這些報告會顯示目前已輸入的所有資料(讓您了解如何為使用者產生自己的可列印報告,以取代列印答案畫面)
- 所有變數皆採用正確的 Qcode 與 SGQA 命名
螢幕截圖
這是一份非常龐大的問卷,因此我們不附上螢幕截圖。請直接下載並親自試用。
下載
請按一下以下連結下載此問卷:LS3_EM_question_attributes.lss
傳統驗證的全新詮釋
概覽
此範例展示所有使用運算式的驗證類型,以及它們如何影響各個支援驗證的題型。在許多情況下,驗證提示一開始是隱藏的,只有在問題未通過驗證條件時才會顯示(因此當問題通過驗證條件後,提示也會消失)。
展示的驗證類型
- min_num_value_n - 答案的最小值
- max_num_value_n - 答案的最大值
- min_answers - 所需答案的最少數量
- max_answers - 允許答案的最多數量
- multiflexible_min - 答案允許的最小值(適用於多重彈性數字題型)
- multiflexible_max - 答案允許的最大值(適用於多重彈性數字題型)
- min_num_value - 該問題所有答案的總和所允許的最小值
- max_num_value - 該問題所有答案的總和所允許的最大值
- equals_num_value - 該問題所有答案的總和必須等於此值
- 驗證 - 這是該問題的正規表示式驗證,可套用於個別儲存格
螢幕截圖
透過新的 CSS 樣式,每種驗證類型都會顯示為獨立的提示。如果顯示這些提示,可以透過 hide_tip 選項將其隱藏。預設選項是在問題未通過驗證條件時以紅色字體顯示,通過時則以綠色顯示:

使用者無法送出含有驗證錯誤的頁面。如果輸入了錯誤的資訊,系統會立即發出警告:

驗證可以套用於陣列中的個別儲存格,例如在此範例中,正規表示式驗證可確保每個項目都是格式正確、包含區碼的美國電話號碼。

下載
若要下載上述範例,請按一下以下連結:LS3_Validation_tests.zip。
驗證方程式
概述
有時您需要無法透過傳統最小值/最大值條件達成的自訂驗證。為此,您需要使用 em_validation_q 和 em_validation_sq 選項,它們可讓您分別在問題和子問題層級建構複雜的驗證方程式。
展示的 EM 功能
- em_validation_q - 這是用來判斷整個問題是否有效的方程式
- em_validation_q_tip - 這是當問題未通過 em_validation_q 條件時顯示的訊息
- em_validation_sq - 這是用來判斷每個子問題(陣列儲存格)是否有效的方程式
- em_validation_sq_tip - 這是當任一子問題無效時顯示的訊息。
一般而言,使用 em_validation_sq 時,若任何儲存格無效,該儲存格的背景顏色會變成紅色,以表示發生錯誤。
螢幕截圖

此問題透過套用以下驗證方程式,確保您依遞減順序輸入子女的年齡:
q1_sq1 >= q1_sq2 && q1_sq2 >= q1_sq3 && q1_sq3 >= q1_sq4

在以下範例中,驗證透過套用以下驗證方程式,確保任何一列最多只回答 3 個問題:
(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)
您也可以如下方式撰寫,LimeSurvey 會在執行時自動將其轉換為上述運算式。
(sum(self.sq_A) <= 3) && (sum(self.sq_B) <= 3) && (sum(self.sq_C) <= 3)

下載
若要下載上述範例中使用的問卷範例,請點選以下連結:ls2_test_em_sq_validation.lss。
子問題相關性
概述
此範例說明 array_filter 與驗證條件如何相互作用。對於適用於總和的驗證,僅會考慮相關(可見)的值。
展示的 EM 功能
此範例也展示了核心問題中已回答問題數量的動態報告。
螢幕截圖
變更可見列的數量會動態改變總和。將某個子問題標示為不相關並不會清除其值。相反地,若其不相關,其值將不會計入任何公式。


請注意,當我們為第一個問題「下方應顯示哪些列」勾選「第五個子問題」時會發生什麼事。請注意,第二個「輸入一些數字」問題的總和現在是 5。儘管該問題的子問題 5 仍然有值 14(例如,若取消勾選第五個子問題,您將再次看到值 14),但由於該值目前不相關,因此不會計入總和。所有不相關的資料會在送出時被清除(在資料庫中設為 NULL),但仍會保留在頁面上,以便使用者想要或需要改變答案時使用。

下載
若要下載我們的範例,請點選此處:ls2_subquestion_relevance.lss。
使用逗號作為小數點分隔符號
概述
ExpressionScript 可確保數字欄位中只能輸入有效的數字。若您輸入無效的數字,系統會警告您有誤(例如,在 fruity 佈景主題中,整個問題會變成紅色)。
請注意,數值在資料庫中一律會轉換為使用句點作為小數點分隔符號。如此一來,統計分析才能正常運作。
若要變更小數點分隔符號,請前往設定索引標籤下的文字元素選項,並找尋小數點記號功能。
使用小數點分隔符號的題型
- 數字輸入 [N]
- 多個數字輸入 [K]
- 陣列(數字) [:]
- 陣列 (文字) [;],使用 numbers_only 屬性時
- 列表(單選) [L],使用 other_numbers_only 屬性時
- 簡短的自由文本 [S],使用 numbers_only 屬性時
- 多重簡短文本 [Q],使用 numbers_only 屬性時
- 多項選擇 [M],使用 other_numbers_only 屬性時
- 帶評論的複選題 [P],使用 other_numbers_only 屬性時
螢幕截圖
您可以在下方的螢幕截圖中看到,逗號可用作小數點分隔符號。

下載
若要下載上述範例,請點選以下連結:ls2_comma_as_radix_separator.lss。
隨機化群組
概述
此問卷示範如何使用 random_group 屬性。
使用此屬性後,每次開始問卷時,問題順序都會隨機排列。但問卷一旦開始,即使切換語言,隨機順序也會保持不變。
螢幕截圖
讓我們一起來看看下面的範例。頁面上第一個隨機問題會是 Q1、Q4 或 Q7,第二個隨機問題則會是 Q2、Q5 或 Q8。

以下是我第一次測試此問卷時產生的隨機順序。

第二次測試此問卷時,則產生了不同的隨機順序。

但是,當我切換為法文(未重新開始問卷)時,隨機順序保持不變。

下載
若要下載上述範例,請點擊以下連結:Randomization_Group_Test.lss
每個題組隨機詢問一個問題
概述
此問卷示範如何設定問卷,使每個題組隨機顯示一個問題。其中共有 5 個題組,每個題組有 6 個問題。一開始,在題組 0 中,會填入五個隱藏的 Equation 問題,名稱為 ask1-ask5。每個問題的問題文字欄位中的值皆為 {floor(rand(1,6.9999))},這表示變數 ask1-ask5 的值都會介於 1 到 6 之間。接著,題組中的每個問題都有類似 "ask1==N" 的相關性等式,其中 N 為該問題在題組中的順序(因此題組 1 的第三個問題,其相關性等式為 "ask1==3")。
此問卷在整份問卷單頁顯示、按題組分頁以及逐題顯示模式下均能正常運作。由於隨機設定是在第一個題組中完成,且該題組實際上是隱藏的(因為所有 ask1-ask5 問題都是隱藏的),因此對同一位受訪者而言,隨機結果保持不變;但每位不同的受訪者都會有不同的隨機結果。
示範的功能
- Equation 問題類型
- 隨機函數
- 條件 (if) 函數
螢幕截圖
這是 Group0,它使用 Equation 問題類型為每個題組選取 1 到 6 的隨機值(最後一個題組除外,它只有 4 個問題)。請注意,"if()" 函數會先檢查 ask1 是否已設定,若已設定,則使用該值;若尚未設定,則使用隨機值來設定 ask1 的值。

此題組示範如何使用 Group0 中的變數 (ask4) 來控制第四個題組中顯示哪一個問題。

下載
若要下載上述問卷範例,請點擊此處:題組內隨機問題問卷範例。
在題組中隨機詢問特定數量的問題(問題的子集)
概述
此問卷示範如何在題組中隨機詢問部分問題。例如,從題組內的 10 個問題中隨機顯示 5 個問題。
此問卷包含一個群組,其中有 10 個問題。所有問題都被指派相同的隨機的群組名稱,因此在頁面載入時會以隨機順序顯示。每個問題都設有一個相關性等式:群組中所有其他問題的「relevanceStatus」總和須小於您想要顯示的問題數量。由於 relevanceStatus 會在問題呈現時被指派,因此這實際上就是在加總前面已顯示的問題數量。
因此,以 10 題中顯示 5 題的範例來說,Q1 的等式如下:
sum(Q2.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5
Q2 的等式如下:
sum(Q1.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5
依此類推……
示範的功能
下載
若要下載上述範例,請點選以下連結:10 題中隨機顯示 5 題的問卷範例。
評分使用者輸入的產品清單
概述
以下範例說明如何請使用者列出他們感興趣的一組產品,然後再請他們為這些產品評分。
示範的 EM 功能
- 答案量身訂製 - 在為產品評分時,標籤來自前一個多項選擇問題的評論欄位
- 量表量身訂製 - 許多進階問題選項(例如量表標題)也可以量身訂製。
螢幕截圖
此圖顯示,即使只選取了產品 1、3 和 5,也只會顯示這 3 項(使用 array_filter 屬性)。此外,第二個問題中的列標籤,若評論欄位中未輸入任何內容,則為產品編號,否則為評論欄位的內容。

此圖顯示如何指定量身訂製的答案:

以下是該問題的「顯示邏輯檔案」,可讓我們驗證條件邏輯是否如預期運作(例如檢查是否有語法錯誤):

下一張圖顯示一個群組,您可在其中指定 5 點評分量表(選項 1-5)、量表標題,以及想要評分的產品。最後一個問題顯示陣列問題的每個部分都可以量身訂製:

下一張圖顯示最後一個問題的邏輯檔案檢視。如您所見,子問題、答案和量表標題都可以量身訂製。

下載
若要下載上述問卷範例,請點選以下連結:評分使用者輸入的產品清單問卷範例。