数据修改工具
上传含 datamap + rawdata 的 xlsx,生成比例表,按目标比例修改数据
1
上传文件
拖拽 xlsx 文件到此处,或
点击上传
文件须包含 datamap 和 rawdata 两个工作表
{{ fileName }}
{{ fileSize }} | {{ fileSheets }}
3
比例分析
{{ generating ? '计算中...' : '生成比例表' }}
导出比例 Excel
交叉比例
3D&loop模式:
保持原格式
不拆分3D&loop
拆分3D&loop
{{ crosstabModeHint }}
一级表头
全选
全不选
添加
onQCheck('header', q.id, v)" @click.stop>
{{ q.type }}
{{ q.id }}
{{ truncate(q.questionLabel, 26) }}
{{ q.codesCount }}项
{{ browsingQid.header }} 的选项
全选
全不选
onBrowseOptChange('header', opt.code, v)"> {{ opt.label }}
已选一级表头
全部清空
{{ getQType(sel.qid) }}
{{ sel.qid }}
{{ truncate(getQLabel(sel.qid), 16) }}
{{ getOptDisplay(sel.qid, c) }}
+{{ sel.codes.length - 15 }}
二级表头
可选
全选
全不选
添加
onQCheck('header2', q.id, v)" @click.stop>
{{ q.type }}
{{ q.id }}
{{ truncate(q.questionLabel, 26) }}
{{ q.codesCount }}项
{{ browsingQid.header2 }} 的选项
全选
全不选
onBrowseOptChange('header2', opt.code, v)"> {{ opt.label }}
已选二级表头
全部清空
{{ getQType(sel.qid) }}
{{ sel.qid }}
{{ truncate(getQLabel(sel.qid), 16) }}
{{ getOptDisplay(sel.qid, c) }}
+{{ sel.codes.length - 15 }}
表侧
全选
全不选
添加
onQCheck('side', q.id, v)" @click.stop>
{{ q.type }}
{{ q.id }}
{{ truncate(q.questionLabel, 26) }}
{{ q.codesCount }}项
{{ browsingQid.side }} 的选项
全选
全不选
onBrowseOptChange('side', opt.code, v)"> {{ opt.label }}
已选表侧
全部清空
{{ getQType(sel.qid) }}
{{ sel.qid }}
{{ truncate(getQLabel(sel.qid), 16) }}
{{ getOptDisplay(sel.qid, c) }}
+{{ sel.codes.length - 15 }}
无交叉表头
全选
全不选
添加
onQCheck('simple', q.id, v)" @click.stop>
{{ q.type }}
{{ q.id }}
{{ truncate(q.questionLabel, 26) }}
{{ q.codesCount }}项
{{ browsingQid.simple }} 的选项
全选
全不选
onBrowseOptChange('simple', opt.code, v)"> {{ opt.label }}
已选题目
全部清空
{{ getQType(sel.qid) }}
{{ sel.qid }}
{{ getOptDisplay(sel.qid, c) }}
+{{ sel.codes.length - 15 }}
分母
有效作答
总样本(N)
组合表(品牌)
组合题自动识别基于 Datamap 中的
3D&loop
、
looptext
列
上传 XML 补充识别
{{ g.type }}
{{ g.id }}
{{ truncate(g.label, 20) }}
已添加
需选表头
全部添加
全部清空
已选题目
{{ brandGroups[sel.groupIdx].type }}
{{ brandGroups[sel.groupIdx].id }}
自动
手动
{{ hi.label }}
+{{ sel.headerItems.length - 10 }}
为
{{ brandDialogGroupLabel }}
选择表头
o.code)">全选
全不选
{{ opt.label }}
取消
确定添加
组合交叉表
一级表头
可选
全选
全不选
添加
onQCheck('ccHeader', q.id, v)" @click.stop>
{{ q.type }}
{{ q.id }}
{{ truncate(q.questionLabel, 26) }}
{{ q.codesCount }}项
{{ browsingQid.ccHeader }} 的选项
全选
全不选
onBrowseOptChange('ccHeader', opt.code, v)"> {{ opt.label }}
已选一级表头
全部清空
{{ getQType(sel.qid) }}
{{ sel.qid }}
{{ truncate(getQLabel(sel.qid), 16) }}
{{ getOptDisplay(sel.qid, c) }}
+{{ sel.codes.length - 15 }}
二级表头
可选
全选
全不选
添加
onQCheck('ccHeader2', q.id, v)" @click.stop>
{{ q.type }}
{{ q.id }}
{{ truncate(q.questionLabel, 26) }}
{{ q.codesCount }}项
{{ browsingQid.ccHeader2 }} 的选项
全选
全不选
onBrowseOptChange('ccHeader2', opt.code, v)"> {{ opt.label }}
已选二级表头
全部清空
{{ getQType(sel.qid) }}
{{ sel.qid }}
{{ truncate(getQLabel(sel.qid), 16) }}
{{ getOptDisplay(sel.qid, c) }}
+{{ sel.codes.length - 15 }}
组合题
{{ g.type }}
{{ g.id }}
{{ truncate(g.label, 20) }}
已选组合交叉题
全部清空
{{ brandGroups[item.groupIdx] ? brandGroups[item.groupIdx].id : '?' }}
拆分: {{ item.splitQid }}
{{ ci.label }}
+{{ item.splitItems.length - 8 }}
为
{{ comboCrossDialogGroupLabel }}
选择拆分表头(必选,按此拆分为多张表)
o.code)">全选
全不选
{{ opt.label }}
取消
确定添加
计算格式
全选
全不选
添加
onQCheck('calcFmt', q.id, v)" @click.stop>
{{ q.type }}
{{ q.id }}
{{ truncate(q.questionLabel, 26) }}
{{ q.codesCount }}项
计算格式:
top1
top2
bottom1
bottom2
nps
{{ browsingQid.calcFmt }} 的选项
全选
全不选
onBrowseOptChange('calcFmt', opt.code, v)"> {{ opt.label }}
已选题目
全部清空
{{ getQType(sel.qid) }}
{{ sel.qid }}
{{ truncate(getQLabel(sel.qid), 16) }}
{{ getOptDisplay(sel.qid, c) }}
+{{ sel.codes.length - 10 }}
{{ f }}
修改数据
1. 上传目标比例
拖拽目标比例 Excel 到此处,或
点击上传
直接上传导出的比例表(在右侧填写目标比例),或包含 题号/选项Code/目标比例% 列的文件
{{ targetFileInfo }}
2. 修改计划预览
3. 执行修改
{{ executing ? '修改中...' : '执行修改' }}
{{ executeProgressText }}
修改完成,共 {{ modifyResult.totalPlanned }} 项,全部达标
(含 Hidden Set code:已调整上游条件列 {{ modifyResult.upstreamEditCount }} 处)
修改完成,共 {{ modifyResult.totalPlanned }} 项:成功 {{ modifyResult.totalSuccess }} 项,未达标 {{ modifyResult.totalFailed }} 项
(含 Hidden Set code:已调整上游条件列 {{ modifyResult.upstreamEditCount }} 处,见「修改记录」sheet)
{{ f.questionId }} code={{ f.answerCode }}
[{{ f.subsetCondExpr }}]
{{ f.detail }}
3.5 修改后自动查错
执行查错
{{ autoCheckProgressText }}
查错完成:未发现逻辑错误,数据全部通过检查。
查错完成:发现
{{ autoCheckErrors.length }}
条逻辑错误,请检查后再下载。
查看错误详情
4. 下载结果
下载修改后数据
下载指引&比例表
数据查错
1. 执行查错
{{ checkRunning ? '检查中...' : '开始查错' }}
{{ checkProgressText }}
2. 查错结果
未发现任何逻辑错误,数据全部通过检查。
共发现
{{ checkErrors.length }}
条错误,涉及
{{ checkErrorQidCount }}
个题目
{{ tp }}: {{ cnt }}
显示 {{ checkFilteredErrors.length }} / {{ checkErrors.length }}
{{ e.errorType }}
{{ e.respid }}
{{ e.questionId }}
{{ e.description }}
...还有 {{ checkFilteredErrors.length - 1000 }} 条
{{ checkReportDownloading ? '生成中...' : '下载查错报告 (.xlsx)' }}
3. 一键修复
{{ fixRunning ? '修复中...' : '一键修复所有错误' }}
{{ fixProgressText }}
无需修复,数据已一致。
修复完成,共
{{ fixLog.length }}
处变更。建议重新查错确认。
4. 下载 / 重新查错
重新查错
下载修复后数据