REDCap如何根据上一题选项显示对应多选题选项?
REDCap 联动多选题实现方案
方案1:动态下拉菜单(推荐,REDCap 10.8+ 支持)
这是最直观的实现方式,无需复杂逻辑,直接通过内置功能完成联动:
- 新建第一题(大洲多选),字段名设为
continent,类型选多选框(Multiple Choice - Checkboxes),选项配置如下:1,亚洲 2,欧洲 3,非洲 4,北美洲 5,南美洲 6,大洋洲 7,南极洲 - 新建第二题(国家选框),字段名设为
country,类型选动态下拉菜单(Dynamic Dropdown List),在「动态下拉设置」中:- 选择「基于另一个字段的选项过滤」
- 关联字段选择
continent - 选项列表按「国家编码,国家名称,对应大洲编码」格式配置,示例:
CN,中国,1 JP,日本,1 DE,德国,2 FR,法国,2 NG,尼日利亚,3 US,美国,4 BR,巴西,5 AU,澳大利亚,6 AQ,南极洲,7
- 保存后测试:选中多个大洲,国家下拉框会自动合并显示所有对应国家,无需额外分支逻辑。
方案2:@CALCTEXT + 动态选项生成(兼容旧版本)
若你的REDCap版本不支持动态下拉,可通过计算函数生成适配选项:
- 新建大洲多选字段
continent,选项同方案1 - 新建隐藏计算字段
selected_continents,类型为计算字段(Calculated Field),计算规则用@CALCTEXT拼接选中的大洲编码:
该字段会输出选中大洲的编码拼接字符串(如选亚洲+欧洲则输出@CALCTEXT(if([continent] contains '1','1,','') + if([continent] contains '2','2,','') + if([continent] contains '3','3,','') + if([continent] contains '4','4,','') + if([continent] contains '5','5,','') + if([continent] contains '6','6,','') + if([continent] contains '7','7,',''))1,2,) - 新建国家多选字段
country,在「选项列表」中用@CALCTEXT动态生成对应选项:
注:用@CALCTEXT(if([continent] contains '1','CN,中国\nJP,日本\n','') + if([continent] contains '2','DE,德国\nFR,法国\n','') + if([continent] contains '3','NG,尼日利亚\n','') + ...)\n分隔不同选项,选中对应大洲时,国家题会自动加载该大洲的所有选项。
方案3:SQL查询实现(需数据库权限)
若项目连接外部数据库,可通过SQL动态拉取匹配选项:
- 在外部数据库创建
country_continent表并插入数据:CREATE TABLE country_continent ( country_code VARCHAR(2) PRIMARY KEY, country_name VARCHAR(50), continent_code INT ); INSERT INTO country_continent VALUES ('CN','中国',1), ('JP','日本',1), ('DE','德国',2), ('FR','法国',2); - 新建大洲多选字段
continent,选项同方案1 - 新建国家字段
country,类型选SQL查询下拉/多选框,SQL查询语句配置:
注:SELECT country_code, country_name FROM country_continent WHERE continent_code IN ([continent])[continent]会被REDCap自动替换为选中的大洲编码(多值自动用逗号分隔),实现多选联动。
操作注意事项
- 大洲和国家的编码需严格统一(如亚洲对应编码1,所有亚洲国家的关联编码也必须是1)
- 动态下拉和SQL方案支持多选大洲自动合并对应国家选项
- 使用
@CALCTEXT生成选项时,必须用\n分隔不同选项,否则无法正确解析
参考资料
- REDCap 内置帮助:动态下拉菜单说明(项目设置→字段工具→动态下拉帮助)
- REDCap 计算函数参考:
@CALCTEXT、contains函数说明(创建计算字段时查看右侧帮助) - REDCap SQL查询字段指南:内置在SQL字段设置页面的帮助文本
内容的提问来源于stack exchange,提问作者psoares
相关产品推荐
相关产品推荐

