表达式管理器抽样调查
From LimeSurvey Manual
简介
学习如何使用表达式管理器的最佳方法是使用工作示例并根据你的需要进行修改。
你可以在下面找到一组样本调查,以演示(和测试)表达式管理器是如何用于增强你的调查。这些调查可以在安装目录下的docs/demosurveys文件夹中找到。
相关性,裁剪和方程式
综述
以下示例计算每个受访者的BMI(身体质量指数)。请参阅下面的示例中演示的功能。
EM功能演示
- 相关性 - 支持强大的条件逻辑;
- Piping / Tailoring - 提供管道或定制答案和问题元数据的能力;
- 动态裁缝 - 请注意,当您回答问题时,页面上的报告会发生变化。
- 'Micro-Tailoring - 使用if()语句对句子和报告进行条件剪裁
- 方程式 - 一个新的问题类型,它允许您进行计算并将结果存储在数据库中,即使计算被隐藏
- 条件验证 - 验证诸如最小允许值之类的标准可以是有条件的 - 例如,基于等式。
截图
此示例计算身体质量指数,计算你的体重和身高,以确定你是否超重。请注意,最初,你看到的只有四个强制性问题:

输入信息后(你可以选择是使用公制还是非公制单位),你会看到一份量身定制的报告,总结你输入的内容,并告诉你的体重状况:

下面是一个不同的示例,使用非公制单位来显示结果如何动态变化:

在内部级别隐藏|方程式问题,将数据转换为公制(如果需要),将公制高度、权重、BMI和权重状态存储在数据库中,而无需自定义JavaScript 。
你可以在下一组示例中看到如何在定制报告中使用数学和其他功能。这是在输入任何数据之前页面的样子。如果没有输入(或非数字)数据,则显示空白单元格的条件逻辑,而不是显示“NaN”或“除以零”。

输入数字后,页面上的报告会更改以显示正在执行的计算及其结果。

此抽样调查中还有许多其他示例。例如,下面的屏幕截图显示了你可以填写动态相关性页面的几种方法之一。作为帮助文本说明,尝试不同的年龄,特别是不合理的响应组合,以查看底部生成的有趣消息。另请注意,如果你说你有多个孩子,则会显示“我希望你喜欢和X个孩子一起玩”,而不是说“我希望你喜欢和孩子一起玩”。这显示了如何轻松地微调句子,使其与主题的性别和/或数量相匹配。你甚至可以根据性别和数量轻松地结合动词和拒绝名词。

下载
要访问调查样本,请单击以下链接:LS3_em_tailoring.zip。
样本人口普查
综述
这是一个人口普查示例,询问你家中有多少人。
该示例演示了组级相关性如何使实现问题“循环”变得更容易。创建“Person 1”组后,我导出了该组。由于我使用的是 p1_name 这类 qcode 变量名,而不是 SGQA 代码,因此可以使用文本编辑器快速编辑并多次重新导入该组(例如,编辑并重新导入每个重复的组大约只需 10 秒,同时确保所有变量名称唯一,且组级逻辑正确)。
你还可以使用复制问题功能,但它不会像上面建议的那样快。
这还显示了如何防止完成消息出现,直到调查真正完成(例如,当所有需要的组完成时)。
EM功能演示
- 群组级别相关性 - 后续群组(人员1-5)仅显示指定的同居者数量;
- 裁剪 - 最终报告总结每个同居者的人口统计数据;
- 渐进式问题显示 - 无论是分组还是一体化模式,后续问题只会在前面的问题得到解答后立即显示。
截图
该调查生成一份定制报告,显示指定数量的同居者的人口统计数据:

如果切换到一次一个问题模式,你会看到索引会定制问题。由于用户说该人是女性,因此询问“她的名字是什么”。自从我们回答“玛丽”之后,接下来的问题是“玛丽多大了”?

下载
要下载调查样本,请单击此处:LS3_group_relevance.zip。
级联阵列过滤器
综述
该调查基于Joy Lane Research,LLC提供的调查设计。
截图
以下请注意:
- Q02仅显示在Q01中检查的产品组(通过使用array_filter)
- Q02还显示“另一产品”,文本输入到Q01中的“其他电子”字段
- Q04仅显示已检查的Q02产品(因此阵列滤波器级联)
- Q05仅显示Q02中未在Q02中检查的产品(使用级联array_filter_exclude)


下载
点击以下链接下载上述示例:LS2_cascading_array_filter survey example。
使用所有问题类型和属性的管道/裁剪
综述
如果你对如何命名变量(SGQA与Qcodes)感到困惑,那么你并不孤单。虽然主要文档描述了如何编写Qcode变量名,但没有什么比在工作演示中看到它更好的了。此调查显示了如何使用表达式管理器访问问题属性和响应。
内容
- 每个问题类型的示例
- 包含所有可以使用“其他”的问题类型,以便你可以看到它如何影响变量命名
- 接受默认值的所有问题类型的默认值
- 裁剪- 显示所有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 - 该问题所有答案之和必须等于此值
- validation - 这是该问题的正规表达式验证,可应用于单个单元格
截图
通过新的 CSS 样式,每种验证类型都会显示单独的提示。如果显示这些提示,可以通过 hide_tip 选项将其隐藏。默认设置是:如果问题未通过验证条件,则以红色字体显示提示;如果通过,则以绿色字体显示:

用户无法提交存在验证错误的页面。如果输入了错误的信息,系统会立即发出警告:

验证可以应用于阵列中的单个单元格,例如在此示例中,正规表达式验证可确保每个条目都是格式正确的美国电话号码(包括区号)。

下载
要下载上述示例,请点击以下链接:LS3_Validation_tests.zip。
验证方程式
概览
有时您需要自定义验证,而传统的最小值/最大值条件无法实现。为此,您需要使用 em_validation_q 和 em_validation_sq 选项,它们可分别让您在问题和子问题级别构建复杂的验证方程式。
演示的表达式管理器功能
- 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 组中设置了五个隐藏的方程式问题,名为 ask1-ask5。每个问题的问题文本字段中的值均为 {floor(rand(1,6.9999))},这意味着变量 ask1-ask5 的值都在 1 到 6 之间。然后,该组中的每个问题都有一个类似 "ask1==N" 的相关表达式,其中 N 是该问题在组内的序号(因此第 1 组中的第三个问题的相关表达式为 "ask1==3")。
此调查在整个调查一页显示、按组显示和逐题显示模式下都同样适用。由于随机化是在第一个组中设置的,而该组实际上是隐藏的(因为所有 ask1-ask5 问题都是隐藏的),因此对于同一受访者来说随机结果保持不变;但每个不同的受访者将获得不同的随机结果。
演示的功能
- 方程式问题类型
- 随机函数
- 条件(if)函数
截图
这是第 0 组,它使用方程式问题类型为每个组选择 1 到 6 的随机值(最后一个组除外,它只有 4 个问题)。请注意,"if()" 函数首先检查 ask1 是否已被设置,如果已设置,则使用该值;如果尚未设置,则使用一个随机值来设置 ask1 的值。

此组展示了如何使用第 0 组中的变量 (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
依此类推……
演示的功能
下载
要下载上述示例,请点击以下链接:十选五随机调查示例。
对用户输入的产品列表进行评分
概览
下面的示例演示了如何让用户列出他们感兴趣的一组产品,然后对这些产品进行评分。
演示的 EM 功能
- 定制答案 - 在对产品进行评分时,标签来自前一个多选题的评论字段
- 定制尺度 - 许多高级问题选项(如尺度标题)也可以进行定制。
截图
此图显示,尽管只选择了产品 1、3 和 5,但只显示这 3 个产品(使用 array_filter 属性)。此外,第二个问题中的行标签要么是产品编号(如果评论字段中未输入任何内容),要么是评论字段的内容。

此图显示了如何指定定制的答案:

下面是该问题的“显示逻辑文件”,通过它可以验证条件逻辑是否按预期工作(例如,检查是否存在语法错误):

下图显示了一个问题组,您可以在其中指定 5 级评分尺度(选项 1-5)、尺度标题以及要评分的产品。最后一个问题表明,阵列问题的每个部分都可以进行定制:

下图显示了最后一个问题的逻辑文件视图。如您所见,子问题、答案和尺度标题都可以进行定制。

下载
要下载上述调查示例,请点击以下链接:对用户输入的产品列表进行评分的调查示例。