设置条件
From LimeSurvey Manual
LimeSurvey 中的条件概览
LimeSurvey 拥有非常强大的逻辑分支功能。点击位于每个问题栏上的设置条件按钮 -
- 即可使用该功能。
在本章中,我们将介绍:
- 您可以在 LimeSurvey 中使用哪些条件
- 使用条件可以做什么、不能做什么
- 设置简单或更复杂的条件需要掌握哪些步骤
如需分步视频说明,请观看此教程,或下载条件示例调查:LimeSurvey_Survey_Setting_Conditions.zip。
显示/隐藏分支与跳转分支
您可以使用 LimeSurvey 设计逻辑分支,也就是说,您可以决定某些问题仅在满足特定条件时才显示,例如“如果问题 Y 的答案为 Z,则显示问题 X”。
我们采用的是显示/隐藏分支逻辑:
- 您可以为调查中的每个问题定义一个条件或一组条件 - 如果满足条件,则显示该问题:

这种方式不同于其他软件有时采用的跳转分支逻辑。在跳转分支逻辑中,条件满足后的动作是跳转到另一个问题(也就是隐藏中间的所有问题)。LimeSurvey 不采用这种跳转分支逻辑方法。如果您想跳过一系列问题,只需对所有不希望显示的问题设置相同的条件即可。例如,若您想为问题2设置的跳转条件是“如果问题1的答案为‘是’,则跳转到问题5”,您可以这样做:
- 为问题 2、3 和 4 设置条件,仅在“问题1的答案不是‘是’”时才显示
LimeSurvey 允许您将某个问题的条件“复制”到其他一系列问题,从而可以轻松地为多个问题设置相同的条件(即实现跳转分支逻辑)。在上面的示例中,您可以先为问题2设置条件,然后在同一屏幕上将该条件复制到问题3和问题4。
支持的条件类型
基本上,条件可以比较各个值,并返回真或假。
可以比较的值是先前问题的答案。例如,如果您对问题1回答“是”,则问题2将显示给调查受访者:

此时,务必了解条件编辑器中哪些问题条目是可用的。
问题条目可以是:
- 简单问题(除阵列问题以外的所有问题类型)
- 例如:文本问题、单选或下拉列表,甚至多选问题
- 或阵列问题中的一行(阵列双尺度和阵列多重灵活问题除外)
- 例如:5 个单选按钮的阵列或标签阵列问题
- 或阵列双尺度问题的左半部分或右半部分
- 或灵活阵列问题的每个单元格
- 常量值
- 例如:“如果您对下面问题的回答大于 18 岁”

- 参与者的个人资料数据: 若要使用调查参与者表中的数据,“匿名反馈”必须设置为否。此选项位于调查的参与者设置面板中。

系统支持多种比较操作符 - 从简单的“等于”到高级的“正规表达式”:
- 基本的操作符包括“等于”和“不等于”
- 也提供大于/小于系列操作符,通常用于数值型问题条目
- 请注意,数值字段的比较使用数值顺序。例如,2 < 10
- 如果您使用的问题条目类型为文本,则条件可能按字符串顺序被判定为 "2" > "10"!
- 数值问题以及文本问题(当其设置了 'numbers_only' 属性时)将使用数值顺序进行比较
- 还提供使用正规表达式的高级比较操作符(别担心!如果您不了解它的含义,那就不需要使用它)
- 模式不需要用 '/' 字符括起来
- 例如:[a-zA-Z]$
如何组合条件?
您可以使用 AND 和 OR 逻辑运算符组合简单条件,从而构建复杂条件。

不过,需要注意的是,LimeSurvey 会自动确定应用哪种逻辑运算符。也就是说,使用 OR 还是 AND 运算符是根据条件的上下文决定的。在上面的示例中,只有一个情境。这意味着 LimeSurvey 采用布尔代数,即运算符 or 会被优先“计算”。
我们将在后文进一步讨论复杂条件。首先,让我们一起了解基本条件。
条件设计器
首先,您需要进入条件设计器。为此,请点击您想要应用条件的问题:

现在,请在顶部问题栏中找到设置条件按钮:

进入后,将显示以下页面:

条件设计器面板可分为三个部分:
条件设计器工具栏
您可以在工具栏中找到以下选项:

- 显示该题条件:点击此按钮可快速概览应用于该问题的现有条件。
- 添加并编辑条件:点击设置条件按钮后,将自动打开此默认页面。该页面分为两部分:(1) 显示所有现有条件和情境的表格;(2) 添加/编辑条件菜单。
- 复制条件:有时,您希望将相同的条件应用于多个问题,以便最终显示问题Y。为此,请点击复制条件。将打开一个新窗口,显示已添加到您的问题(假设为问题3)的现有条件。要将它们添加到问题5,请勾选您想要复制的条件,选择问题5,然后点击面板左下方的复制条件按钮。更多信息,请继续阅读以下维基章节。
- 保存并关闭:完成更改后,点击保存并关闭以保存您的条件。
- 移动到问题:为了在切换到其他问题时不离开条件设计器面板,请使用此选项,从下拉列表中选择您接下来要应用条件的问题。请注意,下拉列表显示的是调查中位于当前问题之前和之后的问题。
- 关闭:如果您想在不做任何更改的情况下退出面板,可以直接转到设置/结构选项卡并选择所需选项,也可以点击位于屏幕右上方的关闭。
现有条件概览
此部分显示一个表格,其中包含某个问题的所有现有情境和条件。您可以在此执行某些操作:

- 在右上方提供三个操作:
- 快速添加条件 - 可加快添加条件的过程(请阅读下文了解所有选项)
- 记住场景 - 点击后,情境将从一开始以递增数字重新编号。请注意,只有当您的问题应用了两个或更多情境时,才会显示此选项。
- 删除所有条件 - 通过此操作,您可以删除应用于该问题的所有现有条件和情境。

- 在每个情境的编号旁边有三个按钮,可执行以下操作:
- 删除场景
- 修改场景序号
- 向这个场景添加条件 - 点击此按钮可向所需情境添加另一个条件

- 每个条件可执行两个操作:
- 删除条件
- 编辑条件 - 点击后,您将可以在条件菜单中编辑该条件

添加/编辑条件
屏幕的下半部分是添加/编辑条件菜单:

为了了解条件功能在 LimeSurvey 中的工作方式,我们将首先介绍基本条件。
基本条件的定义
基本条件就是指不含任何 OR 或 AND 逻辑操作符的单个条件。
它由以下部分组成:
- 左操作数:被测值。您可以在条件编辑器中选择相应的选项卡来选择被测值的类型。它可以是先前问题,也可以是调查参与者属性。

如果您(从先前问题选项卡中)选择了某个问题项,并且该问题使用预定义答案,则相应的预定义答案将显示在比较值选择的预定义选项卡下。
- 比较操作符。从下拉列表中选择要应用的比较操作符(小于、小于或等于、等于、不等于、大于或等于、大于、正规表达式)。
- 右操作数:比较值。您可以在条件编辑器中选择相应的选项卡来选择比较值的类型。创建条件时,您可以选择预定义值(答案)、常量、问题、调查参与者属性或正规表达式作为比较值:

基本条件示例及其创建方法
- 显示问题“AAMN”如果“问题“Gender”的答案为预定义答案“Male””
- 被测值 = 问题“Gender”的答案
- 比较操作符 = 等于
- 比较值 = 预定义答案代码(此例中为“Male”答案)

- 显示问题“Alcohol”如果“问题“Age”的答案大于或等于数值“18””
- 被测值 = 问题“Age”的答案
- 比较操作符 = 大于或等于
- 比较值 = 常量值“18”

- 显示问题“Alcohol”如果“问题“BirthDate”的答案大于 2000-01-01”
- 被测值 = 问题“BirthDate”的答案
- 比较操作符 = 大于或等于
- 比较值 = “2000-01-01”(常量字段中的格式:2000-01-01)

- 显示问题“Alcohol”如果“‘DrinkingHistory’参与者属性”与字符串“Yes”匹配。
- 被测值 = 取自调查参与者表的“DrinkingHistory”值
- 比较操作符 = 等于
- 比较值 = 常量值“Yes”

LimeSurvey 中的条件和情境
默认条件组合
如前所述,LimeSurvey 会根据“上下文”自动决定在条件之间应用哪种逻辑操作符(AND 或 OR)。
另请注意,定义基本条件的顺序并不重要,因为 LimeSurvey 会按照自身的逻辑自动对它们重新排序。
让我们详细研究一下。请始终牢记两条规则:
第一条规则:具有相同被测值的条件之间为 OR 关系
当您有多个条件时,如果它们具有相同的被测值,则它们之间为OR关系。当条件应用于同一个问题的多个答案时就属于这种情况。例如,下面对属于同一问题的三个答案应用了条件——如果问题“FavColour”的答案等于“green”或问题“FavColour”的答案等于“red”或问题“FavColour”的答案等于“blue”,则问题“BirthDate”将显示给调查受访者:

第二条规则:具有不同测试值的条件按 AND 组合
当您有多个条件时,如果它们不共享相同的测试值,则它们会以 AND 方式组合。例如,下面是基于不同先前问题的多个条件的情况——“如果问题 'Alcohol' 的答案等于 'Y' AND 问题 'Gender' 的答案等于 'F'”,则问题 'Alcoholconsumption' 将显示给调查受访者:

多选项问题
多选题和带评论的多选题问题类型将以两种形式显示:
- 复选框组形式,允许您对相应问题的所有可能答案设置条件;
- 一组单选条目,允许您分别对每个复选框设置条件。

复选框组形式
现在,让我们通过一个示例来更好地理解这两种形式的区别。假设我们希望仅当受访者勾选了问题 'MultipleOrganizations' 下列出的测试答案中的至少一项时,才显示问题 'Pointchoice'。
如上所述,复选框组形式允许您对相应问题的所有可能答案设置条件。因此,下面仅选择与职责相关的选项作为比较值:

我们可以看到,由于一开始选择了复选框组形式,这些条件以 OR 方式组合:

在多选题中使用 AND 组合条件
现在,让我们看一个类似的示例。不过这一次,我们只希望找出最活跃的成员,以便向他们提出更多问题。为此,我们使用单选形式,它允许您基于每个复选框单独设置条件。
在此示例中,如果勾选了 A 和 B,则将显示问题 X:


完成后,您可以看到这两个条件现在是以 AND 方式组合的。

这意味着,除非两个测试值(所选子问题)都满足,否则您的问题不会显示。
情境的使用——在不同问题之间使用 OR 条件
现在,您可能会提出,有时即使条件设置在不同的问题上(也就是说设置在不同的测试值上),您也需要使用 OR 条件。这正是我们提供情境的原因!
情境的定义
情境就是对条件进行手动分组,其中一些条件的评估独立于其他情境中的条件。由多个情境组合而成的复杂条件,只有在其中一个情境满足时才会成立。换句话说,情境是遵循上述规则的条件逻辑分组,并且这些分组以 OR 方式组合以构建复杂条件。
上述所有内容适用于每个情境中的条件。默认情况下,所有新条件都创建在默认场景中,其标识符为数字“1”。创建新条件时,您可以选择是否将其添加到默认情境。要更改情境,只需使用其他标识符即可。
将问题添加到另一个场景
创建(或编辑)条件时,只需点击添加场景按钮,即可修改该条件所属的场景:

如您所见,默认场景的标识符为“1”。要将条件添加到不同的场景,请在输入框中键入其他数字来更改标识符。
场景的数字 ID 并不重要,不同场景的 ID 可以不连续。

点击此图标
并为场景指定新的 ID,即可更改分配给该场景的编号。

- 决定使用调查的可打印版本时场景的显示顺序
- 合并两个场景中的条件(要将场景 10 与场景 1 合并,只需将场景 10 重新编号为场景 1)。
示例:创建三个场景
要创建三个场景,您至少需要三个条件,并为每个条件分配不同的场景 ID。完成后,这些场景之间将通过“OR”运算符相连。例如,效果可能如下所示:

同一场景中的 AND 与 OR
在某些情况下,同一个场景中可能同时出现 AND 和 OR 逻辑运算符:

LimeSurvey 总是先应用 OR。有关详细信息,请参阅以下维基百科文章:布尔代数。
此外,运算顺序也可以在相关表达式字段中看到。对于上面的示例,相关表达式在下方高亮显示:

如您所见,系统会为 OR 逻辑运算添加一组额外的括号,以告知软件必须先“计算”这部分。
如何复制条件
如果您希望将应用于问题 5 的同一组条件应用于问题 10,可以使用复制条件功能。这样,您就无需手动重新创建应用于之前问题的条件。
要开始复制条件,请先选择已应用条件的问题(在我们的示例中为问题“LowQ”)。然后,选择要复制的条件,并选择要添加这些条件的问题(在我们的示例中为问题“Alcohol”)。

当您希望将位于不同场景下的一组条件复制并应用到另一个使用相同或不同场景 ID 的问题时,请注意复制条件功能的工作方式。为了概括可能出现的各种情况,请参阅以下示例:
- 您希望将问题 X 中的场景 1 - 条件 A、场景 1 - 条件 B、场景 7 - 条件 C 和场景 7 - 条件 D 复制到问题 Y
- 问题 Y 中已包含场景 1 - 条件 A、场景 - 条件 C、场景 6 - 条件 E、场景 8 - 条件 F。
- 复制完成后,问题 Y 将应用以下条件:
- 场景 1:条件 A、条件 B、条件 C -> 条件 A 不会再被复制,因为它已存在于问题 Y 中,仅复制条件 B。
- 场景 6:条件 E -> 不受影响
- 场景 7:条件 C、条件 D -> 将创建一个新场景,并将这两个条件添加到其中
- 场景 8:条件 F -> 不受影响
重置条件
要快速重置所有调查条件,请点击任意一项与调查相关的设置,在顶部工具栏中找到工具,然后点击重置条件:

接下来,请在下一页确认您要继续,所有条件都将被删除。
注意事项
一般注意事项
在为问题设置条件之前,您应牢记以下几条基本规则:
- 一旦为某个问题设置了一个条件,除非满足该条件,否则该问题将不会显示。
- 条件只能基于出现在设置该条件的问题之前的问题来设置。
- 如果您在创建条件之后更改了调查中问题的顺序,当更改后的顺序会破坏您的某些条件时,LimeSurvey 不会向您发出警告。在您对调查中问题和问题组的顺序满意之前,请先不要创建条件。
- 即使在调查已激活之后,您仍可以修改条件。但应谨慎操作,因为此处不会进行“一致性检查”。
使用“拒答”预定义答案的条件

设置以下条件“如果问题 'Gender' 的答案为 '拒答',则显示问题 'FavColour'”,实际含义是“如果问题 'Gender' 已向调查参与者显示但其未提交答案,则显示问题 'FavColour'”。
链式条件
如果您为一个本身已有条件的问题设置条件,您的调查可能会出现您未曾预料的行为。例如,一个典型的副作用是:如果您隐藏了某个问题组中带有链式条件的所有问题,则除非您按照下文所述更正这些条件,否则该问题组的标题仍会显示。


在上面的示例中,如果受访者之前对问题 'AAMN' 回答了 'No (N)',则显示问题 'Alcohol'。但是,如果受访者在上一个问题 ('Gender') 中没有选择答案 '男性 (M)',则问题 'AAMN' 最终可能不会显示。在这种情况下,如果之前选择了 '男性 (M)',则不会显示问题 'Alcohol'。
要显示问题 'Alcohol',您必须将之前问题的条件复制到您正在编辑的问题中。为了显示问题 'Alcohol',您需要设置以下条件:
- 如果 'Gender' 的答案为 '男性 (M)',则显示 'AAMN'
- 如果 'Gender' 的答案为 '男性 (M)' 和 'AAMN' 的答案为 'No (N)',则显示 'Alcohol'。
更正后,'Alcohol' 的正确条件集应如下所示:

因此,如果您正在设计一个包含大量条件的复杂调查,请务必针对您能想到的尽可能多的不同结果组合来测试该调查。
限制与变通方法
进度条
如果您创建的调查中有许多问题因条件而被跳过,则进度条要么会跳过一批问题,要么调查会在 50% 时结束。
为避免这种情况,应将可能被跳过的问题安排在显示的问题之间。这样,每个答案只会跳过一两个问题。
例如,基于问题 1(是或否问题),如果问题 1 的答案为“是”,则显示 14 个问题(2A 至 15A);如果问题 1 的答案为“否”,则显示 2B 至 15B。
如果您将这些问题放在同一个问题组中,并按 2A、2B、3A、3B 等顺序排列,您将得到一个几乎正确的进度条;而如果按 2A、3A、4A、[...]、2B、3B、4B、... 的顺序排列,则根据第一个问题的答案,进度条将显示为从 0 到 50% 或从 50% 到 100%。
为“日期”问题类型设置常量比较值
您必须使用日期值的内部表示形式(即 YYYY-MM-DD)来定义常量比较值。
为多选题问题类型中的“其它”选项设置条件
在多选题问题类型中,您可以将该问题类型提供的“其它”作为有效选项使用,但无法对其设置条件。例如,问题 1 为“您更喜欢使用哪种颜色?”,答案复选框选项为蓝色、黑色和其它。如果参与者选择蓝色,您可以设置一个条件;如果参与者选择黑色,您可以设置另一个条件。但是,如果参与者选择“其它”并在文本框中输入内容,则无法设置条件。 LimeSurvey 无法识别参与者是否选择了“其它”。这不是错误,而是一项限制。
此问题类型没有为“其它”复选框记录实际字段。因此,要知道用户是否回答了问题的“其它”部分,唯一的办法是检查其它输入字段中所填写文本的值是否为空。
然而,由于多选题的特殊处理方式,从未实现过对“其它”文本输入字段的检测。
作为变通方法,请添加一个名为“其他”的明确答案选项,而不要使用这些问题类型内置的“其他”选项。然后再添加一个简短文本问题,当勾选此“其他”复选框时显示该问题。
如何在布尔表达式中使用括号?
无法使用!
如果您想设计类似以下的条件:
(条件1 OR 条件2) AND (条件3 OR 条件4),
您需要这样设置:
(条件1 AND 条件3) OR
(条件1 AND 条件4) OR
(条件2 AND 条件3) OR
(条件2 AND 条件4)