第2章:需求分析与方案设计

说实话,很多自动化项目翻车,不是技术不行,而是需求没理清。我见过太多团队一上来就选框架、写代码,结果做到一半发现业务方要的根本不是那回事。所以这一章,咱们先把地基打牢。

2.1 业务需求梳理

做自动化报告,第一步不是写代码,而是搞清楚:谁在用?用来干嘛?痛点在哪?

我个人习惯先画一张「干系人-需求矩阵」。你想想看,一份完整性报告,至少涉及三类人:

  • 业务分析师:他们要的是数据完整、格式规范,能直接拿去跟客户对账。
  • 质量审核员:他们关心报告里的异常标记、缺失项统计,最好一眼能看出问题。
  • 管理层:他们只看摘要、趋势图和关键指标,别给我塞一堆原始数据。

我在项目中遇到过最典型的坑:业务方说「我要自动化」,结果你问他具体要自动生成什么,他说「就跟现在Excel一样就行」。嗯,这句话背后往往藏着几十个手工步骤和潜规则。

我的建议: 先花一周做需求访谈,把每个角色的「日常操作」录下来。你会发现,很多「需求」其实是「习惯」。

需求梳理的输出,我一般整理成一张表:

角色 核心诉求 当前痛点 自动化目标
业务分析师 数据完整、格式统一 手动复制粘贴易出错 一键生成标准报告
质量审核员 异常可追溯、统计清晰 逐行检查耗时 自动标记+汇总
管理层 关键指标、趋势图 报告太长没人看 自动生成摘要+图表

2.2 技术选型原则

技术选型这事儿,我踩过不少坑。曾经有个项目,我选了当时最火的框架,结果团队没人会,光培训就花了两周。所以我现在选技术,就三条原则:

  1. 团队熟悉度优先——再好的技术,没人会用就是废的。
  2. 生态成熟度——别选那种只有几百个Star的库,出了问题连个问的人都没有。
  3. 可维护性——代码写出来是给人看的,不是给机器跑的。

具体到报告自动化,我常用的技术栈是这样的:

环节 推荐方案 备选方案 我的选择理由
数据源接入 Python + Pandas SQL + Shell Pandas处理脏数据更灵活
报告生成 Jinja2 + WeasyPrint ReportLab 模板驱动,改样式不改代码
图表绘制 Matplotlib / Plotly ECharts Python生态无缝集成
任务调度 Apache Airflow Cron + Shell 可视化DAG,出错可重跑
避坑指南: 我曾经选了一个「看起来很美」的轻量级调度工具,结果不支持任务依赖,最后自己写了个调度器,比项目本身还复杂。所以,别为了「轻量」牺牲核心功能。

2.3 架构设计思路

架构设计说白了,就是把「输入-处理-输出」这条线理清楚。我习惯画一张分层图,把每个模块的职责定死。

下面这张图,是我在多个项目中沉淀下来的通用架构:

完整性报告自动化 — 分层架构图 数据源层 数据库 | API | 文件系统(CSV/Excel/PDF)| 消息队列 数据处理层 数据清洗 | 校验规则引擎 | 缺失值处理 | 格式标准化 报告生成层 模板引擎(Jinja2)| 图表生成 | 样式渲染 | 多格式输出 交付层 邮件推送 | 文件归档 | 消息通知 | 历史版本管理 每一层只做自己的事,层与层之间通过标准化接口通信

这个架构的核心思想就一句话:解耦。数据源变了,只改最下面一层;报告样式变了,只改模板层。我在项目中见过最惨的代码,是把数据查询、逻辑判断、HTML拼接全写在一个函数里,3000行,没人敢动。

关键设计决策:
  • 数据源层与处理层之间,用「数据契约」——也就是固定的Schema——来解耦。
  • 处理层与生成层之间,用「中间数据格式」——我习惯用Pandas DataFrame——来传递。
  • 生成层与交付层之间,用「文件路径+元数据」来衔接。

2.4 可行性评估

方案再好,落不了地也是白搭。所以每次出方案,我都会做一轮可行性评估,从三个维度打分:

维度 评估要点 风险等级 应对策略
技术可行性 现有技术栈能否支撑? 低 Python生态成熟,无技术瓶颈
时间可行性 2个月能否交付核心功能? 中 分阶段交付,MVP优先
资源可行性 团队是否有对应人力? 中高 前期培训+外部顾问支持

我记得有一次,方案技术上完全可行,但业务方要求「下周一上线」。我算了一下,光数据清洗就要两周。后来我跟业务方说:「先给你一个能跑的最小版本,数据不全的字段先留空,后面迭代补。」 他们同意了。这就是MVP思维——别想着一步到位。

一个小技巧: 可行性评估别光自己闷头做。拉上业务方、开发、测试一起过一遍。你会发现,很多「我以为没问题」的地方,其实全是坑。

最后总结一下:需求梳理要细到每个角色的操作步骤,技术选型要务实不要追新,架构设计要分层解耦,可行性评估要留好退路。这四步走完,方案基本就稳了。