x

主要章节

  1. LimeSurvey Cloud 与 LimeSurvey CE 对比
  2. 快速入门指南 - LimeSurvey 3.0+
  3. 软件安装
  4. 如何设计一个不错的调查(向导)
  5. 入门指南
  6. 管理 LimeSurvey
  7. 调查 - 说明
  8. 调查设置
  9. 问卷调查菜单
  10. 调查问卷结构
  11. 问题 - 简介
  12. 题组 - 简介
  13. 调查 - 管理
  14. 调查工具栏选项
  15. 多语言调查
  16. ExpressionScript 引擎 - 快速入门指南
  17. 其他和高级功能
  18. 常规问答
  19. 故障排除
  20. 变通方法
  21. 许可证
  22. 版本更改日志
  23. 插件
 Actions

ExpressionScript 引擎 - 快速入门指南

From LimeSurvey Manual

本页面可能为机器翻译,可能包含错误。 查看英文原文 · 改进此翻译
This page is a translated version of the page ExpressionScript Engine - Quick start guide and the translation is 100% complete.


快速入门指南

在 LimeSurvey 中,您可以通过使用 ExpressionScript(简称:ES)进一步自定义您的调查。 补充说明:“ExpressionScript 在早期版本中称为 Expression Manager(EM)。如果您在其他地方看到 Expression Manager,那只是 ES 的旧名称。”

ES 可用于指定以下内容:

  1. 导航/分支 - 允许根据受访者的答案改变问题的显示顺序;
  2. 定制/嵌入 - 帮助您措辞问题(例如引用之前的答案,或根据调查对象的年龄或性别调整句子),或生成自定义报告(如评估分数或定制建议);
  3. 验证 - 确保答案符合特定条件,例如最小值和最大值或特定的输入格式。

ES 提供了一种直观的方式来为上述每项功能指定逻辑。几乎任何可以写成标准数学方程式的内容都是有效的表达式。

ES 目前提供 70 个函数,并且可以轻松扩展以支持更多函数。它还允许您使用易于理解的变量名(而不是 SGQA 名称)来访问变量。

以下各节介绍了 ES 的主要使用场景。


关联(控制导航/分支)

有些调查使用“跳转逻辑”(Goto Logic),例如,如果您在问题 1 中选择了选项 C,就会被重定向到问题 5。这种方法非常有限,因为很难对其进行验证。此外,当您需要重新排序问题时,它很容易出错。相比之下,ES 使用布尔关联表达式来指定问题有效的所有条件。如果问题相关,则显示该问题;否则该问题不适用,数据库中将存储值“NULL”。

注意:这与通过条件编辑器所能实现的功能类似,但 ES 可让您轻松指定更复杂、更强大的条件(并且可以使用变量名而不是 SGQA 标识符)。




为了更好地理解关联的概念,让我们来看下面这个计算受访者身体质量指数(BMI)的调查。要下载该调查,请点击以下链接:身体质量指数调查示例。

关联表达式显示在下方变量名之后的关联列中。weight、weight_units、height 和 height_units 的关联值均为 1(默认值),这意味着这些问题始终会显示。然而,BMI 的关联表达式为 {!is_empty(height) and !is_empty(weight)},这意味着只有当调查对象同时输入了身高和体重的值时,才会计算 BMI(从而避免出现除以零的错误)。此外,只有当受访者回答了所有四个主要问题(height、heightunits、weight、weightunits)时,才会显示问题“Report”。



注意:上图来自调查逻辑文件,您可以在激活调查之前通过它查找语法错误。


在以下情况下会显示并可编辑关联:

  • 您希望查看/编辑问题级别的关联
  • 您希望查看/编辑题组级别的关联


查看/编辑问题级别的关联

该方程式用于计算身体质量指数(BMI)。只有当受访者输入了身高和体重时才会询问此问题。



这是“BMI”问题的编辑界面。



请注意,输入关联表达式时不要使用花括号。


查看/编辑题组级别的关联

现在让我们来看另一个示例——一个简单的人口普查调查。要下载该调查,请点击以下链接:人口普查调查示例。

第一页询问有多少人与您同住,并将其存储在“cohabs”变量中。只有当同住者多于一人时才会显示此页(它是针对与您同住的第二个人显示的)。此外,只有当 p2name、p2age、p2sum 前面的问题包含反馈时,它们才会显示。



因此,该题组同时具有问题级别的关联条件,使得某些问题只有在您回答了它们之前的特定问题后才会出现(例如,如果回答了 p2name,则显示 p2age)。ES 会为您合并题组级别和问题级别的关联。只有当整个题组相关时,才会询问该组中的问题。然后,只会询问该组中相关的那部分问题。

以下是编辑Cohabitant 2题组级别关联的截图:



请注意,输入相关表达式时无需使用花括号。

定制/管道传递

ES 可让您轻松实现简单和复杂的条件定制。有时您只需要简单的替换,例如:“您说您购买了 [产品]。您最喜欢它的什么?”。有时您需要条件替换,例如:“[先生/女士] [姓氏],您是否愿意完成我们的调查?”。在这种情况下,您需要根据对方的性别使用“先生”或“女士”。还有些时候,您需要更复杂的替换(例如基于数学计算)。ES 支持上述所有类型的定制/管道传递。


条件方程式

体重指数示例展示了计算一个人 BMI 的功能,同时还允许受访者使用两种不同的单位输入身高和体重(厘米与英寸,公斤与磅):



在本例中,weightkg 为 {if(weightunits == "kg", weight, weight * 0.453592)}。这个“if()”函数的含义是:如果受访者以公斤为单位输入体重,则使用该值;否则(备选单位为磅)将输入的值乘以 0.453592,将其转换为公斤。heightm 变量采用类似的方法计算此人以米为单位的身高(以厘米为单位的身高/100),即使其输入的身高单位是英寸(1 米 = 3.28084 英寸)。

BMI 的计算公式为:{weightkg / (heightm * heightm)}。

最后,报告会根据条件为受访者定制消息,告知其所输入的内容。(例如:“您说您身高 2 米,体重 70 公斤。”)

在下图中,weightstatus 使用嵌套的“if()”语句,将人的体重状况从体重过轻到重度肥胖进行分类。您可以通过查看其逻辑来看到它的方程式:



在此问题的编辑窗口中,您可以看到两点:

  1. 定制时,表达式必须用花括号括起来
  2. 表达式可以跨越多行,例如本例中这样做是为了让嵌套的条件逻辑更易于阅读。



定制的问题、答案和报告

注意:如果答案项以下拉选择框的形式显示在同一问题页面上,动态定制可能无法正常工作。这是因为定制会插入 <span> 标签,而该标签在选择项内无效。

BMI 报告如下所示:



下面是同一问题的编辑窗口。



花括号内的任何内容都会被视为表达式,并在上图中以语法高亮(颜色编码)显示。如果存在任何拼写错误(例如变量名或函数名拼写错误或未定义),ES 会显示错误。在下面的示例中:

  • heightunit.shown 是未定义变量名(实际应为 heightunits.shown),并且
  • “rnd()”是未定义函数(正确的函数名为“round()”)。

在这两种情况下,错误都会用红色方框标出,以便您更容易发现并修复。



您还可以看到,您能够快速创建复杂的报告,例如已输入值的表格或定制的建议。

请记住,所有定制都必须用花括号将表达式括起来,以便 LimeSurvey 知道问题中哪些部分是自由文本,哪些部分应由 ExpressionScript 引擎解析。


验证

ES 控制着大多数高级问题选项的工作方式。这些选项涉及答案的最小/最大数量、单个值的最小/最大值、总和的最小/最大值,以及检查输入的值是否符合指定的字符串模式等方面。这些字段中的任何值都会被视为表达式,因此您可以设置与其他问题具有复杂条件关系的最小/最大条件。

在所有这些情况下,由于高级问题属性始终被视为表达式,因此在指定时无需使用花括号。

示例调查页面展示了许多包含各种验证表达式的可用示例。

ExpressionScript - 演示

要进一步了解 ExpressionScript 以及如何使用各种表达式来增强您的调查,请点击以下链接。