检查问卷逻辑 - 高级
From LimeSurvey Manual
概述
检查问卷逻辑是一个重要的选项,可帮助您创建并轻松维护复杂的问卷。
在问卷的开发和测试过程中,以及在激活问卷之前,验证问卷逻辑非常重要。当您使用复杂的相关性、定制和验证公式时尤其如此——您需要确保运行问卷时不会出现任何问题。
此功能可让您快速验证问卷、问题组和问题的准确性。您可以通过位于问卷相关设置下方的顶部栏菜单选项访问该功能。它位于工具菜单中:
如上所示,问卷中使用的每种语言都可以运行一次此选项,因此最多可运行四次。
说明
检查问卷逻辑选项会以便捷的表格形式显示您为每个问题和问题组指定的所有内容(例如名称、文本、帮助、条件/相关性、验证规则、默认值、子问题、答案)。它会突出显示错误,并允许您点击问题和问题组ID(或公式中使用的变量),在新的浏览器标签页中打开并编辑相应的问题或问题组。这样您就可以快速修正错误,并在激活问卷之前刷新逻辑检查页面,以确认问卷的准确性。
该显示界面的设计也便于研究人员和研究资助方阅读,以便他们验证问卷设计和逻辑的准确性。检查问卷逻辑会更新活动问卷中所有表达式的缓存。
它包含以下列:
- # - 显示问题组和问题的序号计数,从0开始。
- Relevance [Validation] (Default) - 显示以下内容:
- Relevance - 问题或问题组的语法高亮相关性公式。如果该公式始终为真(即在任何情况下都显示),则其值为1。
- Validation - ExpressionScript 会根据所选的问题属性(例如答案的最小/最大数量、最小/最大/等于总和值、最小/最大单个值或正则表达式验证)自动生成验证公式。此部分显示生成的验证公式,以便您发现是否存在错误(例如未定义的变量)。
- 问题级验证显示用于校验上述问题属性所需的公式
- 子问题级验证显示用于实现 array_filter、array_filter_exclude 和 exclusive_option 所需的公式
- Default - 如果问题有默认值,则会在此处以语法高亮方式显示(因为默认值可能是表达式)。
- Text [Help] (Tip) - 显示以下内容:
- Text - 问题组、问题、子问题或答案的文本。它以语法高亮方式显示任何嵌入的定制内容,让您可以验证是否已声明定制中计划使用的所有变量。
- Help - 显示问题的帮助文本,同样以语法高亮方式显示。
- Tip - 显示根据问题属性在内部生成的验证提示。该提示在所有问卷样式以及可打印问卷和数据录入界面中均相同。
- Question Attributes - 显示此问题所有相关问题属性的表格。可能是公式的属性会以语法高亮方式显示,以便您验证其准确性。
各行按以下颜色标示:
- 问题组 - 以浅灰色背景显示
- 问题 - 以浅绿色背景显示
- 子问题 - 以淡黄色背景显示
- 答案 - 以纯白色背景显示
答案在Relevance列中有一个额外的属性:
- Value - 这是计算所使用的默认内部值。如果您使用了评估,则该值为评估值。否则,它与答案名称相同。
使用方法
页面顶部有一条摘要消息。如果一切正常,它会显示“No syntax errors detected in this survey”,或者“This group”或“This question”,“by itself, does not contain any syntax errors”。反之,它会显示“X questions have syntax errors that need to be corrected”。
每个存在语法错误的问题,其最左侧列(即#)的背景会以红色标示。此外,Name [ID]列下方还会显示一条警告,说明该问题的最少错误数量。以下是常见的错误:
- 未定义变量 - 如果您没有定义所有变量,或者 array_filter 输入有误(或 array_filter 使用了不同的答案选项集),则部分验证问题会显示错误。未定义的变量以红色文字显示,并带有红色边框。
- 语法错误 - 开始使用相关性公式时,您可能会使用过多或过少的括号。此类语法问题会以红色高亮并加框显示。如果将鼠标悬停在任何此类红框文本上,工具提示会说明该错误。
ExpressionScript 语法中的颜色
条件和公式会进行语法高亮,以便您更轻松地识别所查看的内容:
- 绿色/浅蓝色:引用问卷中前面问题的变量
- 蓝色:函数
- 灰色:字符串表达式
- 棕色: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 在运行时完全支持使用逗号作为小数分隔符,但在设计时(例如,在高级问题属性中指定最小值/最大值时)仍必须使用小数点作为小数分隔符。可在此处找到可运行的示例。
另外,请记住,验证逻辑是根据已启用的问题属性自动为您创建的。这些等式看起来可能让人眼花缭乱,但您无需担心。

