很多人觉得“问卷分析进表格”就是导出 CSV。但 /home/ubuntu/odoo-temp/enterprise/documents_spreadsheet_survey 做的远不止导出:它是在把问卷答案重写成适合电子表格继续分析的数据结构。
参考入口:
enterprise/documents_spreadsheet_survey/models/survey_survey.pyenterprise/documents_spreadsheet_survey/controllers/survey.pyenterprise/documents_spreadsheet_survey/tests/test_spreadsheet_survey_results.py
一、为什么不是“一行一个答案明细”
_get_survey_values() 输出的是二维数组,但组织方式并不是常见的明细表,而是“列为问题、行为受访者提交”的矩阵。第一列还是 Timestamp,之后再按问卷配置补 User、Attempts、Score、Quiz passed 等列。
这说明官方更看重的是让业务用户直接在表格里做横向比较,而不是让他们先做透视清洗。
二、题型不同,列展开策略也不同
源码对不同 question_type 分别处理:
- 单选/多选:答案列 + 评论列;
- matrix:每个 matrix row 单独成列,必要时另加评论列;
- 其他题型:按
_get_answer_value()直接落列。
这一步很关键。问卷如果不按题型展开,后续表格分析会变得非常难用,尤其是矩阵题和带评论的选择题。
三、为什么 comments 要单独拆列
选择题 comments 并没有和答案拼在同一个单元格里,而是生成 Comments - 问题标题 这类独立列。官方显然不想让“标准化答案”和“自由文本补充”混成一格,因为两者后续分析方式完全不同。
这也是一个很值得借鉴的设计:定量字段和定性备注最好从导出层就分开。
四、日期和分数不是字符串导出,而是电子表格原生格式
datetime/date 会被转成 spreadsheet date number,并附带 locale format;分数则写成小数并附 '0.00%'。这说明目标不是“把值显示出来”,而是“让表格继续能排序、过滤、公式计算”。
很多系统导出看起来能看,实则全是字符串;Odoo 这里明显是按电子表格二次分析来设计的。
五、测试透露的边界
测试覆盖了:
- 单个回答、多回答、多问题;
- 简单选择题带评论;
- 多选题;
- matrix;
- 时间字段格式。
这说明官方把“问卷转表格”视为一个结构化数据工程问题,而不是附件导出功能。
六、结论
documents_spreadsheet_survey 的价值,不是省一次导出点击,而是把 Survey 的答案模型转换成 Spreadsheet 真正适合继续分析的表结构。列展开、评论拆列、格式转换,决定了表格是能继续算,还是只能截图汇报。
DISCUSSION
评论区