案例背景
某服饰电商公司,月 GMV 约 3000 万,业务线包含自营仓 + 第三方店铺 + 直播带货三条。每周一早上 9 点前需要向 CEO 提交《上周经营周报》,传统流程是:
| 环节 | 负责人 | 耗时 | 痛点 |
|---|---|---|---|
| 取数(SQL) | 数据分析师 A | 60 分钟 | 8 张表 SQL 反复改 |
| 清洗(Excel) | 数据分析师 B | 90 分钟 | VLOOKUP 卡死、口径不一致 |
| 出图(PPT) | 数据分析师 C | 60 分钟 | 改一次图重画一遍 |
| 写结论 | 三人讨论 | 30 分钟 | 主观判断,难追溯 |
总耗时约 4 小时 × 3 人 = 12 工时,且每周重复。目标:用 AI 工具把流程压缩到 1 人 30 分钟内完成。
工具组合
| 工具 | 角色 | 选型理由 |
|---|---|---|
| Claude Code | 数据工程师 | 长上下文(200K),适合 SQL 与 Python 脚本生成 |
| Cursor | 前端工程师 | 代码补全 + MCP 文件系统,适合搭建仪表板 |
| GPT-4(备用) | 结论润色 | 文案撰写稳定性高,用作交叉校验 |
| 本地 PostgreSQL | 数据源 | 已有数仓,无需迁移 |
| Plotly + Streamlit | 可视化 | Python 生态、改图快、可交互 |
实施步骤
步骤 1:用 Claude Code 生成取数 SQL(5 分钟)
把 8 张周报表的表结构 DDL + 业务口径文档喂给 Claude Code:
项目根目录下有 schema.sql(含 8 张表的 DDL)和 metrics.md(含每张表的业务口径)。
请基于这两个文件,生成 get_weekly_report.sql,要求:
1. 输入参数:@start_date, @end_date
2. 每张表输出一个 CTE,最后 UNION 或 JOIN 汇总
3. 字段命名统一 snake_case
4. 添加注释说明每个 CTE 对应的口径
5. 性能要求:在 5000 万行数据上 < 10 秒
Claude Code 会读取 schema.sql 与 metrics.md,生成约 200 行 SQL。关键技巧:让它在 SQL 里加 EXPLAIN ANALYZE 注释,方便手动验证执行计划。
步骤 2:用 Claude Code 生成 Python 取数脚本(5 分钟)
基于上一步的 get_weekly_report.sql,写一个 fetch_data.py:
1. 用 psycopg2 连接 Postgres(连接串从 .env 读取)
2. 执行 SQL,把结果存为 pandas DataFrame
3. 同时输出 raw_data_YYYYMMDD.csv 作为留档
4. 字段类型自动推断,日期字段转 datetime
5. 加上异常重试(最多 3 次,指数退避)
跑通后得到 raw_data_20260728.csv,约 200 行 × 30 列。
步骤 3:用 Claude Code 生成 Plotly 图表脚本(10 分钟)
读取 raw_data_20260728.csv,生成 plot_charts.py:
1. 输出 8 张图,对应 8 个指标:
- GMV 趋势(折线)
- 品类结构(饼图)
- Top10 SKU(横向条形)
- 复购率漏斗(漏斗图)
- 库存周转热力图(按仓库 × 品类)
- 渠道对比(堆叠柱)
- 客单价分布(直方图)
- 退款率预警(散点 + 阈值线)
2. 每张图保存为独立 HTML(便于嵌入 PPT)
3. 配色用 Plotly 的 'plotly_white' 主题
4. 标题、坐标轴、图例中文化
5. 图表尺寸 1200×600,字体 14
Claude Code 会一次性生成约 300 行 Plotly 代码。踩坑提示:第一次跑可能中文字体显示成方框,让 Claude 补一句 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] 即可。
步骤 4:用 Cursor 搭建 Streamlit 仪表板(8 分钟)
在 Cursor 中新建 app.py,输入自然语言:
用 Streamlit 搭建一个周报仪表板:
- 侧边栏:日期选择器(默认上周一到上周日)
- 主区域:2 列布局,依次嵌入 8 张 Plotly 图
- 顶部:3 个 KPI 卡片(GMV、复购率、毛利率)
- 底部:数据表格(可下载 CSV)
- 顶部加一个"生成结论"按钮,调用 GPT-4 写 200 字摘要
Cursor 会用 MCP Filesystem 直接读写文件、用 streamlit run 调试。10 轮对话内可拿到可运行版本。
步骤 5:用 GPT-4 自动写结论(2 分钟)
把 KPI 数据 + 同比环比 + Top3 异常项塞给 GPT-4:
你是电商数据分析师。基于以下数据写 200 字周报结论:
【本周 GMV】820 万(环比 +12%,同比 +28%)
【复购率】23%(环比 -2pp)
【异常项】
- 品类「连衣裙」退款率 18%(行业基准 8%)
- 渠道「直播」GMV 占比首次突破 30%
- SKU「白色T恤」库存周转 45 天(预警线 30 天)
要求:
1. 先讲总体表现,再讲异常,最后给建议
2. 数据用「金额/百分点」表述,不用「上升了很多」
3. 不要套话,每句话都要有信息量
得到结论后直接嵌入仪表板顶部。
关键 Prompt 合集
Prompt 1:让 Claude Code 理解业务口径
读 metrics.md,把每张表的口径转成一句话 SQL 注释。
例如「GMV = 实付金额 - 退款金额」转成 -- GMV: 实付金额 - 退款金额
然后把所有注释追加到 get_weekly_report.sql 顶部。
Prompt 2:让 Cursor 自动修 Streamlit 报错
运行 streamlit run app.py 报错:
KeyError: 'column_name'
看 raw_data_20260728.csv 的列名是 Column_Name(大写)。
请修复所有引用此列的地方,统一改成大小写不敏感。
Prompt 3:让 GPT-4 写"反直觉洞察"
基于以下数据,找出 3 条反直觉洞察(即和常识相反、但数据支持的现象):
{数据 JSON}
要求每条洞察:
- 一句话结论
- 一句话证据(引用具体数字)
- 一句话行动建议
效果数据
| 指标 | 改造前 | 改造后 | 提升 |
|---|---|---|---|
| 单次周报耗时 | 4 小时 × 3 人 | 30 分钟 × 1 人 | 24 倍 |
| 周报出错率 | 月均 2.3 处 | 月均 0.4 处 | -83% |
| 图表迭代速度 | 改一张图 10 分钟 | 改一句 Prompt 30 秒 | 20 倍 |
| 结论可追溯性 | 口头讨论无记录 | 全程 Prompt + SQL 留档 | 质的飞跃 |
| 分析师满意度 | 6.2/10 | 8.7/10 | +40% |
经验总结
成功要点
- 业务口径先于代码:把 metrics.md 写清楚再让 AI 写 SQL,否则 AI 会瞎猜字段含义。
- 小步快跑:每步生成后立即跑通验证,避免最后调试 500 行代码无从下手。
- 人机分工:AI 负责取数、画图、初稿;人负责异常解读、策略建议。
- 留档 Prompt:每周复用时直接复用上周 Prompt,只改日期参数。
踩过的坑
- Claude Code 把字段名拼错:让它生成 SQL 后必须用
EXPLAIN跑一遍,否则上线才报错。 - Cursor 改文件改错位置:用 MCP Filesystem 时要明确指定文件路径,别让它"猜"。
- GPT-4 编造数据:写结论时如果不给数字,它会自己编。务必把 KPI 数字塞进 Prompt。
- Streamlit 中文字体:默认字体不支持中文,需手动设置
font.sans-serif。 - Plotly 图表在 PPT 中失真:导出 PNG 时分辨率要设
scale=3,否则投影到大屏模糊。
复用建议
这套方案不仅适用于电商周报,改 schema 和 metrics.md 就能迁移到:
- SaaS 产品的用户行为周报
- 内容平台的内容消费日报
- 物流公司的运力日报
- 学校的学生出勤月报
核心是把"业务口径文档化"这一步做扎实,剩下的交给 AI 即可。
工具版本
- Claude Code:v1.0.20+
- Cursor:v0.40+
- Python:3.11+
- Streamlit:1.30+
- Plotly:5.18+
- PostgreSQL:14+