REDCap中按数据访问组拆分二级唯一字段hospital_number的方案咨询
问题答疑与解决方案
分支逻辑跨记录调用问题
REDCap原生的分支逻辑、管道语法、计算字段(含@CALCTEXT等行动标签)的作用域仅为当前单条记录,不支持跨记录读取其他已录入记录的数值,你提到的仅靠分支逻辑实现重复值警告的思路无法通过原生功能实现。
可行实现方案
以下方案按实施成本从低到高排序:
- 方案1:使用带DAG作用域的
@UNIQUE行动标签(优先推荐)
若你使用的REDCap版本≥12.0.0,直接给hospital_number字段添加如下行动标签即可:
该标签原生支持指定唯一性校验的作用域,设置后仅要求同一个数据访问组(DAG)内的@UNIQUE(scope="dag")hospital_number值唯一,不同DAG之间允许重复,完全匹配你的需求,无需额外新增字段或修改系统二级唯一字段配置。 - 方案2:配置实时数据质量校验规则
若REDCap版本较低不支持带作用域的@UNIQUE标签,可通过原生数据质量(DQ)模块实现:- 进入项目数据质量规则配置页,新建一条规则,规则类型选择「录入保存时实时执行」
- 自定义校验逻辑填写:
exists(1, [record_id], [hospital_number], [__DAGID__]) where [hospital_number] = [current_value:hospital_number] and [__DAGID__] = [current_value:__DAGID__] and [record_id] != [current_value:record_id] - 错误级别设置为「ERROR」,并自定义错误提示为“当前中心已存在相同的院内编号,请核对后重试”
配置完成后,用户保存记录时系统会自动跨记录校验同DAG下的hospital_number是否重复,重复时直接阻止保存并弹窗提示。
- 方案3:自定义JS+API实现实时校验
若需要在用户输入过程中就触发提示,无需等待保存提交,可在项目自定义JS模块中注入前端校验逻辑:监听hospital_number字段的输入事件,调用REDCap API拉取当前DAG下所有已录入的hospital_number值做本地比对,重复时即时标红字段并给出提示。该方案需要少量前端开发能力,灵活性最高。
旧方案报错原因说明
你此前使用计算字段作为二级唯一字段的方案不符合REDCap的设计逻辑:二级唯一字段要求为用户可编辑字段,当重复触发报错时,用户无法修改自动计算的dag_hospital_number值,会陷入无法消除报错的死循环,因此不建议使用该思路。
内容的提问来源于stack exchange,提问作者mat10d
相关产品推荐
相关产品推荐

