Survey123重复字段咋设?关联表怎么做?
Survey123重复字段咋设?关联表怎么做? 这是很多 GIS 调查表设计时都会遇到的问题:一个地块可能有多张照片、一个巡检点可能有多条隐患记录、一个农户可能有多个家庭成员。如果把这些内容都做成普通字段,表单会变得很长,后期数据也很难统计。正确做法通常不是“复制一堆字段”,而是使用 Survey123 的重复字段,也就是 repeat,并让它在 ArcGIS 中生成关联表。
引言:Survey123重复字段适合解决什么问题
Survey123重复字段主要用于“一条主记录对应多条子记录”的场景。它不是简单的字段复制,而是把重复填写的内容存到另一张子表里,再通过关系字段与主表关联。
常见例子包括:
- 一个检查点对应多张现场照片。
- 一个建筑物对应多个楼层信息。
- 一个地块对应多种作物调查记录。
- 一个管线井对应多条缺陷描述。
- 一个农户对应多个家庭成员。
如果你的业务逻辑是“主对象只有一个,但明细可以有很多条”,就应该优先考虑 Survey123 repeat 和关联表,而不是在主表里设计 photo1、photo2、photo3、问题1、问题2、问题3 这类字段。

背景:为什么不要用多个普通字段硬凑重复内容
很多初学者会这样设计表单:照片1、照片2、照片3,隐患类型1、隐患类型2、隐患类型3,整改建议1、整改建议2、整改建议3。这样看起来简单,但实际使用中问题很多。
- 字段数量不可控:现场可能只有 1 条记录,也可能有 10 条记录,固定字段很难覆盖真实情况。
- 统计困难:如果隐患类型分散在多个字段中,后期统计每类隐患数量会很麻烦。
- 表结构臃肿:字段越多,表单加载和维护越复杂。
- 数据质量差:用户容易漏填、错填,字段之间也不容易保持一致。
- 不适合 GIS 关联分析:ArcGIS 后台更适合用主表和关联表表达一对多关系。
Survey123重复字段的价值就在于,它把“可变数量的明细”从主表中拆出去,形成标准的一对多数据结构。这对后期在 ArcGIS Online、ArcGIS Enterprise、ArcGIS Pro 或 Dashboard 中查看数据都更友好。
原理:Survey123 repeat 和关联表到底是什么关系
在 Survey123 Connect 中,重复字段通常通过 XLSForm 的 begin repeat 和 end repeat 来定义。发布后,主表会保存表单的主体信息,repeat 中的字段会被发布为一张关联表。
简单理解如下:
| 对象 | 作用 | 常见字段 |
|---|---|---|
| 主表 | 保存一次调查的主体记录 | 位置、调查人、调查时间、地块编号、巡检点名称 |
| 关联表 | 保存 repeat 中的多条明细记录 | 隐患类型、描述、照片、作物类型、家庭成员信息 |
| 关系字段 | 连接主表和关联表 | globalid、parentglobalid 或系统生成的关系字段 |
在 ArcGIS 托管要素图层中,Survey123 会为主图层和 repeat 表建立关系。主表中的一条记录可以对应关联表中的多条记录。这个结构在 ArcGIS Pro 中查看时,通常表现为一个图层加一个或多个关联表。
需要注意的是:Survey123 repeat 不只是界面上重复显示一组问题,它会影响后台数据模型。因此,设计 repeat 前一定要先想清楚主表和子表之间的业务关系。
步骤:Survey123重复字段怎么设
步骤一:明确主表记录是什么
先确定“每提交一次表单代表什么”。这是设计 Survey123关联表的关键。
- 如果一次提交代表一个巡检点,主表就是巡检点。
- 如果一次提交代表一个地块,主表就是地块调查记录。
- 如果一次提交代表一个农户,主表就是农户基本信息。
不要一开始就急着加 repeat。先把主表字段列清楚,例如位置、编号、日期、调查员、备注等。
步骤二:判断哪些字段需要放进 repeat
凡是可能出现 0 条、1 条或多条的内容,就适合放到 Survey123重复字段中。
例如巡检场景中,主表字段可以是:
- 巡检点编号
- 巡检日期
- 巡检人员
- 点位位置
repeat 中的字段可以是:
- 隐患类型
- 隐患等级
- 问题描述
- 现场照片
- 整改建议
步骤三:在 Survey123 Connect 的 survey 工作表中写 begin repeat
在 XLSForm 的 survey 工作表中,可以按下面的结构设置 repeat。
type,name,label
geopoint,location,巡检位置
text,point_id,巡检点编号
date,inspect_date,巡检日期
text,inspector,巡检人员
begin repeat,hazard_records,隐患记录
select_one hazard_type,hazard_type,隐患类型
select_one hazard_level,hazard_level,隐患等级
text,hazard_desc,问题描述
image,hazard_photo,现场照片
text,rectification,整改建议
end repeat,,
这里的 hazard_records 就是 repeat 的名称。发布后,它通常会成为关联表名称的一部分。repeat 内部的字段会进入关联表,而不是直接进入主表。
步骤四:给 repeat 设置显示数量或最小数量
Survey123 支持通过 repeat_count 控制重复次数,也可以允许用户手动添加多条记录。常见做法有两种:
- 固定数量:比如必须填写 3 张照片,可使用 repeat_count。
- 不固定数量:比如隐患数量不确定,让用户现场点击添加。
如果业务上不确定明细数量,建议不要强行设置固定 repeat_count。固定数量会让无记录的调查也出现空白明细,影响数据质量。
步骤五:在 choices 工作表中配置选项
如果 repeat 里面有单选或多选字段,需要在 choices 工作表中配置选项。例如:
list_name,name,label
hazard_type,road_damage,道路破损
hazard_type,waterlogging,积水
hazard_type,illegal_dumping,乱倒垃圾
hazard_level,low,低
hazard_level,medium,中
hazard_level,high,高
建议 name 使用英文或拼音,不要使用特殊字符。label 可以用中文显示给调查人员看。
步骤六:发布后检查 ArcGIS 中是否生成关联表
发布表单后,需要在 ArcGIS Online 或 ArcGIS Enterprise 的托管要素图层页面检查结构。正常情况下,你会看到:
- 一个主图层或主表。
- 一个 repeat 对应的关联表。
- 主表和关联表之间存在关系。
- 主记录的附件和 repeat 内的 image 字段按对应位置保存。
如果使用 ArcGIS Pro 打开服务,也可以在内容窗格中查看主图层和独立表,并通过关联记录检查一对多关系是否正常。
常见坑:Survey123关联表做错通常出在哪
坑一:把应该进 repeat 的字段放在了主表
如果一个对象有多条明细,但你把明细字段放在主表中,后期基本都会遇到统计困难。比如一个巡检点有多个隐患,却只设计了一个“隐患类型”字段,结果只能记录一个问题。
判断方法很简单:如果你在字段名后面想加 1、2、3,通常就该考虑 Survey123重复字段。
坑二:repeat 名称随便改,导致数据迁移麻烦
repeat 的 name 会影响后台关联表结构。表单发布并采集数据后,不建议频繁修改 repeat 的 name。否则后续同步、脚本处理、报表模板和 Dashboard 配置都可能受到影响。
坑三:在 repeat 里放了不该重复的主信息
调查人、调查日期、地块编号这类主记录信息,通常应该放在主表。除非每条明细确实有不同的调查人或时间,否则不要重复放进 repeat。
坑四:以为关联表一定有空间几何
repeat 生成的关联表默认不一定有几何。如果你需要每条子记录都有自己的空间位置,可以在 repeat 内放一个 geopoint 字段。但这会改变业务含义:每条明细都变成一个带位置的子记录。
坑五:图片字段放错层级
如果一张照片对应整个主对象,image 字段可以放在主表。如果每条隐患都要有自己的照片,image 字段就应该放在 repeat 里面。否则照片与具体隐患之间无法准确对应。
方法比较:普通字段、附件和 repeat 该怎么选
| 方式 | 适用场景 | 优点 | 限制 |
|---|---|---|---|
| 多个普通字段 | 数量固定且很少的简单信息 | 配置简单,查看直接 | 不适合数量不确定的明细,统计麻烦 |
| 附件 | 只需要给主记录附加照片或文件 | 适合简单照片归档 | 附件本身不方便记录类型、等级、说明等属性 |
| Survey123 repeat | 一条主记录对应多条结构化明细 | 形成关联表,适合统计和一对多管理 | 表结构更复杂,需要提前设计关系 |
如果只是给一个点位拍几张照片,不需要分别填写照片说明,可以用附件或普通 image 字段。如果每张照片都要对应一个问题类型、描述和整改建议,就应该使用 Survey123重复字段。
检查清单:发布前确认这些点
- 主表代表的业务对象是否明确。
- repeat 中的字段是否确实属于多条明细。
- repeat 的 name 是否稳定、简洁、易识别。
- 字段 name 是否使用英文、数字和下划线,避免中文和特殊符号。
- image 字段是否放在正确层级。
- 是否需要每条 repeat 子记录有自己的位置。
- 是否真的需要 repeat_count 固定重复次数。
- 发布后是否在 ArcGIS 中检查了关联表。
- 是否用测试账号提交过 0 条、1 条、多条明细的样例。
- 是否确认 Dashboard、报表或 ArcGIS Pro 能正确读取关联记录。
FAQ:Survey123重复字段和关联表常见问题
Survey123重复字段一定会生成关联表吗?
通常情况下,使用 begin repeat 和 end repeat 定义的内容会在发布后形成关联表,并与主表建立关系。具体表现会受发布环境、表单结构和服务类型影响。发布后应在 ArcGIS 图层详情页或 ArcGIS Pro 中检查。
Survey123关联表可以在 ArcGIS Pro 里查看吗?
可以。将 Survey123 发布的托管要素图层添加到 ArcGIS Pro 后,通常可以看到主图层和关联表。你可以查看主记录的相关记录,也可以对关联表做统计、导出或进一步处理。
repeat 里面可以放照片吗?
可以。把 image 字段放在 repeat 内,就表示每条子记录都有自己的照片。这种做法适合“每个隐患一张或多张照片”“每个样方一张照片”等场景。
Survey123重复字段能嵌套吗?
Survey123 支持较复杂的 XLSForm 结构,但嵌套 repeat 会明显增加数据结构和后期分析难度。一般业务中,建议优先使用一层 repeat。只有在确实存在多级一对多关系时,再谨慎设计嵌套结构。
已经发布并采集数据后,还能修改 repeat 吗?
可以做部分修改,但要非常谨慎。新增字段通常相对安全,修改 repeat 名称、删除字段或改变关键结构可能影响已有数据、报表、关联表和应用配置。正式项目中建议先在测试表单中验证。
为什么我在主表里看不到 repeat 字段?
这是正常现象。repeat 里的字段属于关联表,不属于主表。你需要查看相关记录、打开关联表,或在 ArcGIS Pro、Dashboard、报表模板中按关系读取子表数据。
结论:先设计一对多关系,再做 Survey123 表单
Survey123重复字段的核心不是“让表单多填几次”,而是用关联表表达标准的一对多关系。只要业务中存在一个主对象对应多条明细,就应该考虑 repeat。
实际操作时,先确定主表代表什么,再把数量不固定的明细放进 repeat。发布后一定要检查 ArcGIS 中是否生成关联表,并用几条测试数据验证主记录和子记录能否正确对应。这样设计出来的 Survey123 表单,后期统计、制图、报表和 WebGIS 展示都会更稳定。