操作方法

操作方法:重新格式化 Survey123 中多选问题的结果

Last Published: February 10, 2025

描述

在 Survey123 中选择多个问题将所选选项的名称存储为 CSV 字符串,即 Option1,Option2,Option3,Option4。 虽然存储选择的唯一名称很有用,但有时我们希望轻松访问所选选择的标注列表。 例如,植物名称 Acacia、Banksia、Callistemon 和 Eucalyptus。

与名称相比,在选择标注时,我们在命名约定方面具有更大的灵活性和自由度。 为了提高可读性,还必须重新格式化 CSV 字符串,以在选项之间包含空格,这在手动完成时非常耗时。 可以在 XLSForm 中创建一个新对象,以使用标注而不是名称重新格式化所选选项。 我们可以通过组合“计算”字段中的一系列公式来做到这一点。 本例使用了一些澳大利亚植物的学名和通用名。

解决方案或解决方法

  1. 创建多选问题类型,并附带关联的选择列表。 请务必记下选择选项的编号,这是第二部分所必需的。 我们也可以在这里选择是否将问题设置为必答问题。 在这种情况下,我们不需要答案。

table1-au-plants-800px.png

  1. 创建一个文本问题来存储重新格式化的标注。 如果我们不希望调查参与者看到列表,可以将外观设置为隐藏。 为了填充此文本问题,我们结合了 elected-at()jr:choice-name()concat()if 语句公式。

table2-au-plants-800px.png

创建计算

由于我们将组合多个功能,因此最好从端点开始并向外构建。 首先,我们将使用 jr:choice-name() 和 selected-at() 函数:

  • 给定问题的 jr:choice-name() 函数返回与选择名称关联的标注。
  • 必须使用 selected-at() 函数来提取单个答案的标注。
  • 必须在引号内定义问题。
jr:choice-name(selected-at(${PlantSpeciesCSV},0), '${PlantSpeciesCSV}')

我们可以使用 concat() 函数将所有选定答案的所有标注连接成一个字符串,并带有我们想要的标点符号。

concat(jr:choice-name(selected-at(${PlantSpeciesCSV},0), '${PlantSpeciesCSV}'), ', ', jr:choice-name(selected-at(${PlantSpeciesCSV},1),  '${PlantSpeciesCSV}'), ', ', jr:choice-name(selected-at(${PlantSpeciesCSV},2), '${PlantSpeciesCSV}'), ', and ',  jr:choice-name(selected-at(${PlantSpeciesCSV},3), '${PlantSpeciesCSV}'))

从这里,我们需要创建一系列嵌套的 if 语句,以按所选答案的数量过滤标注。 我们将每个 if 语句的条件设置为在给定数字处有一个值或选择,则返回 true。 计数从零开始,因此“3”将返回第四个选定的选项。 例如,如果我们想在选择三个选项时显示标注,我们将条件设置为 selected-at(${PlantSpeciesCSV},2)。 如果此条件返回 TRUE,则输出串连字符串,即 Gold Dust Wattle、Silver Banksia 和 Willow Bottlebrush。 如果条件为 false,则测试下一个 if 语句。 这一直持续到条件返回 TRUE 为止。 如果不满足任何条件,则可以指定返回自定义语句,例如 No Plants Observed,指示未选择任何选项。

if(selected-at($PlantSpeciesCSV},3),concat(jr:choice-name(selected-at(${PlantSpeciesCSV},0), '${PlantSpeciesCSV}'), ', ', 
jr:choice-name(selected-at(${PlantSpeciesCSV},1), '${PlantSpeciesCSV}'), ', ', jr:choice-name(selected-at(${PlantSpeciesCSV},2), '${PlantSpeciesCSV}'), ', and ', jr:choice-name(selected-at(${PlantSpeciesCSV},3),
'${PlantSpeciesCSV}')), if(selected-at($PlantSpeciesCSV},2),concat(jr:choice-name(selected-at(${PlantSpeciesCSV},0), '${PlantSpeciesCSV}'), ', ',
jr:choice-name(selected-at(${PlantSpeciesCSV},1), '${PlantSpeciesCSV}'), 'and ', jr:choice-name(selected-at
(${PlantSpeciesCSV},2), '${PlantSpeciesCSV}')), if(selected-at($PlantSpeciesCSV},1),concat(jr:choice-name(selected-at(${PlantSpeciesCSV},0), '${PlantSpeciesCSV}'), 'and ',
jr:choice-name(selected-at(${PlantSpeciesCSV},1), '${PlantSpeciesCSV}')), if(selected-at($PlantSpeciesCSV},0),jr:choice-name(selected-at(${PlantSpeciesCSV},0), '${PlantSpeciesCSV}'), 'No Plants Observed'))))

有一些事情需要注意:

  • 请注意您要打开多少个括号。 难以定位的不匹配括号对可能会出现问题。 特别是如果您有很多选择。
  • IF 语句需要从选择次数最多的实例开始,然后向下级联到仅一个。 如果没有,第一个 IF 语句将返回 true,即使做了多个选择,输出字符串将仅包含第一个选择的标注。

文章 ID: 000031066

接收通知并查找新问题或常见问题的解决方案

从我们全新的 AI 聊天机器人中获得简明答案和视频解决方案。

下载 Esri 支持应用程序

发现关于本主题的更多内容

获取来自 ArcGIS 专家的帮助

联系技术支持部门

下载 Esri 支持应用程序

转至下载选项