AI 数据分析怎么做:从脏 Excel 到可复核报告的完整工作流
以下所有客户名、订单号、金额、渠道、日期、校验值均为合成示例,仅用于演示清洗、复算与证据链,不对应任何真实公司或个人。请勿上传未脱敏的真实数据到外部模型。
TL;DR
- AI 数据分析真正困难的部分不是画图,而是把每条结论反向追溯到原始行、清洗规则与复算公式。
- 本文以 12 行合成的电商订单贯穿,给出 任务卡 → 审计 → 数据字典 → 清洗日志(带真实影响行数)→ 分析计划 → 三层校验 → 图表 → 结论证据表 → 人工发布 的完整链路。
- Excel / WPS 是主路径(公式、透视表、复算);ChatGPT / Kimi 用于解释异常、生成 SQL / Python 草稿、改写文字,不直接猜结论。
- 结论必须在报告里能复算:本文示例
C-01可用一句 Excel 公式在 5 秒内复算验证。 - 隐私保护、清洗回滚、人工复核签字三项不可省略,否则流程不可发布。
工具选择表
| 任务 | 首选工具 | 为什么 | 不建议的工具 / 原因 |
|---|---|---|---|
| 日期格式识别、字段画像、类型审计 | Excel / WPS 公式 | 本地、可复算、可保存日志 | 直接交给 AI(看不到原始类型) |
| 重复主键隔离、净销售额公式 | Excel / WPS 透视表 | 可复算、可下钻 | 仅靠 ChatGPT(无运行环境) |
| 大量行复算(>10 万行) | Python / SQL | 可重复执行、保存脚本 | Excel(性能与可复现性差) |
| 解释异常、设计校验 SQL 草稿 | ChatGPT / Kimi | 文本解释快 | 直接采用结论(无验证) |
| 把验证后结果改写成报告文字 | ChatGPT / Kimi | 节省排版时间 | 让 AI 写数字(容易错位) |
| 可视化图表 | Excel / WPS 图表对象 | 与数据同源、可审 | 美化型 AI 出图(难追溯) |
详细按钮与基础操作见 WPS AI 使用教程;长文本材料整理可参考 Kimi 使用教程;让 AI 解释 SQL 或公式时可参考 ChatGPT 高级技巧,但不要向外部模型提交未脱敏明细。
最低可用版 vs 正式交付版
| 维度 | 最低可用版(先跑通) | 正式交付版(可发布) |
|---|---|---|
| 原始文件 | 一份 Excel 副本 | 只读副本 + 来源说明 + 校验值 |
| 数据字典 | 列名清单 | 类型 / 单位 / 空值规则 / 来源 / 负责人 |
| 清洗 | 直接过滤异常 | 每条规则有编号、输入、影响行数、输出、回滚方式 |
| 计算 | 透视表一眼答案 | 公式 + 脚本 + 运行日志 + 独立复算 |
| 校验 | 目测 | 总量对账 + 抽样复算 + 边界矩阵 |
| 结论 | 一句话 | 结论证据表 + 限制 / 反例 + 人工签字 |
| 适用 | 自己看、内部沟通 | 对外发布、合规审计、跨部门决策 |
本文演示的是 正式交付版。如果只是临时自查,可只看 TL;DR + 工具选择表 + Excel 主路径操作节,其余章节按需补齐。
一份完整的合成案例(贯穿全文)
本节是整改后的核心交付,所有数字均为合成示例,可被 Excel 公式复算。所有原始 12 行、清洗影响、汇总结果均已给出真实值,不再留"待执行 / 待填"。
任务卡(已确认)
| 字段 | 本案例填写内容 | |
|---|---|---|
| 业务问题 | 哪些渠道的月度净销售额发生明显变化? | |
| 核心指标 | 净销售额 = 实付金额(元)− 已确认退款金额(元) | |
| 数据粒度 | 一行一个订单;按月、渠道汇总 | |
| 时间范围 | 合成数据中的 2026 年 4—6 月 | |
| 比较基线 | 同一渠道上月;4 月为首月,不做环比 | |
| 纳入条件 | 状态为 paid 或 partial_refund,且主键唯一 | |
| 排除条件 | test 订单、全额退款、重复主键 | |
| 验收标准 | 汇总可复算;总量对账通过;结论均有证据编号 | |
| 非目标 | 不预测未来,不把渠道与销售变化写成因果 |
原始 12 行(合成示例,已脱敏)
| # | order_id | paid_at | channel | amount | source_unit | refund_amount | status |
|---|---|---|---|---|---|---|---|
| 1 | O-001 | 2026-04-03 | search | 1280 | yuan | 0 | paid |
| 2 | O-002 | 2026-04-15 | social | 360 | yuan | (空) | paid |
| 3 | O-003 | 2026/04/22 | direct | 580 | yuan | 0 | paid |
| 4 | O-004 | 2026-04-28 | search | 2200 | yuan | 80 | paid |
| 5 | O-005 | 2026-05-02 | search | 1480 | yuan | 0 | paid |
| 6 | O-006 | 2026-05-10 | social | 86000 | fen | 0 | paid |
| 7 | O-007 | 2026-05-18 | direct | 920 | yuan | 120 | paid |
| 8 | O-008 | 2026-05-25 | search | 1980 | yuan | 0 | paid |
| 9 | O-008 | 2026-05-25 | search | 1980 | yuan | 0 | paid |
| 10 | O-009 | 2026-06-04 | search | 2120 | yuan | 0 | paid |
| 11 | O-010 | 2026-06-12 | social | 1080 | yuan | 0 | paid |
| 12 | O-011 | 2026-06-22 | direct | 1640 | yuan | 200 | paid |
审计发现清单(来自这 12 行)
paid_at同时含 Excel 日期(行 1、2、4—8、10—12)与文本日期(行 3:2026/04/22)。 → CL-01amount同时存在"元"(行 1—5、7—12)与"分"(行 6:86000)两种来源单位。 → CL-02order_id主键冲突:行 8 与行 9 都是O-008。 → CL-04refund_amount存在空值(行 2:O-002)。 → CL-05- 渠道列首尾空格:本次 12 行无此问题,但字典保留 CL-03 备用。
- 没有 test / 全额退款订单,但字典保留纳入 / 排除规则。
数据字典
| 字段名 | 业务含义 | 类型 | 单位 / 允许值 | 空值规则 | 来源 | 负责人 |
|---|---|---|---|---|---|---|
| order_id | 订单唯一标识 | 文本 | 非空、唯一 | 不允许 | 订单导出 | 数据负责人 |
| paid_at | 支付完成时间 | 日期时间 | 本地业务时区(UTC+8) | 不允许 | 支付记录 | 数据负责人 |
| channel | 归因渠道 | 分类 | search / social / direct | 未知记 unknown | 归因表 | 运营负责人 |
| amount | 实付金额 | 数值 | yuan(清洗后统一) | 不允许 | 支付记录 | 财务复核人 |
| source_unit | 原始单位标记 | 分类 | yuan / fen | 不允许 | 支付记录 | 财务复核人 |
| refund_amount | 已确认退款 | 数值 | yuan | 空值需在 CL-05 中确认 | 退款记录 | 财务复核人 |
| status | 订单状态 | 分类 | paid / partial_refund / refunded / test | 不允许 | 订单导出 | 数据负责人 |
清洗变更日志(带真实影响行数)
| 编号 | 输入 | 清洗规则 | 影响行数 | 输出 | 回滚方式 |
|---|---|---|---|---|---|
| CL-01 | paid_at 原列 | 枚举两种格式后,统一为 ISO 日期(2026-04-22) | 1(行 3,O-003) | paid_at_clean | 保留原列并删除新列 |
| CL-02 | amount + source_unit | 仅当 source_unit="fen" 时 amount/100;其他保持 | 1(行 6,O-006:86000→860) | amount_yuan | 用原值与单位重算 |
| CL-03 | channel | 去首尾空格并映射允许值 | 0(本次无空格问题,规则保留) | channel_clean | 恢复原列 |
| CL-04 | order_id | 主键冲突行整体进入 duplicate_review 表,不直接删除 | 1(行 9,第二条 O-008) | duplicate_review | 由数据负责人合并回主表 |
| CL-05 | refund_amount | 空值关联退款源;本次关联显示无退款,按 0 入分析集 | 1(行 2,O-002:空→0) | refund_checked | 恢复原列 |
清洗后的正式分析集(11 行)
| # | order_id | paid_at_clean | channel_clean | amount_yuan | refund_checked | net_sales |
|---|---|---|---|---|---|---|
| 1 | O-001 | 2026-04-03 | search | 1280 | 0 | 1280 |
| 2 | O-002 | 2026-04-15 | social | 360 | 0 | 360 |
| 3 | O-003 | 2026-04-22 | direct | 580 | 0 | 580 |
| 4 | O-004 | 2026-04-28 | search | 2200 | 80 | 2120 |
| 5 | O-005 | 2026-05-02 | search | 1480 | 0 | 1480 |
| 6 | O-006 | 2026-05-10 | social | 860 | 0 | 860 |
| 7 | O-007 | 2026-05-18 | direct | 920 | 120 | 800 |
| 8 | O-008 | 2026-05-25 | search | 1980 | 0 | 1980 |
| 9 | O-009 | 2026-06-04 | search | 2120 | 0 | 2120 |
| 10 | O-010 | 2026-06-12 | social | 1080 | 0 | 1080 |
| 11 | O-011 | 2026-06-22 | direct | 1640 | 200 | 1440 |
net_sales = amount_yuan − refund_checked,与下文"汇总结果"逐行一致。
汇总结果(R-01:月度 × 渠道净销售额,单位:元)
| 月份 | 渠道 | 订单数 | 净销售额 | 上月净销售额 | 月度环比 | 备注 |
|---|---|---|---|---|---|---|
| 2026-04 | search | 2 | 3400 | — | — | 首月,不算环比 |
| 2026-04 | social | 1 | 360 | — | — | 首月,不算环比 |
| 2026-04 | direct | 1 | 580 | — | — | 首月,不算环比 |
| 2026-04 | 合计 | 4 | 4340 | — | — | 首月基线 |
| 2026-05 | search | 2 | 3460 | 3400 | +1.76% | 样本量同 |
| 2026-05 | social | 1 | 860 | 360 | +138.89% | 样本量 1 |
| 2026-05 | direct | 1 | 800 | 580 | +37.93% | 样本量 1 |
| 2026-05 | 合计 | 4 | 5120 | 4340 | +17.97% | — |
| 2026-06 | search | 1 | 2120 | 3460 | −38.73% | 样本量 1 |
| 2026-06 | social | 1 | 1080 | 860 | +25.58% | 样本量 1 |
| 2026-06 | direct | 1 | 1440 | 800 | +80.00% | 样本量 1 |
| 2026-06 | 合计 | 3 | 4640 | 5120 | −9.38% | — |
图表编号:
CH-01 = 2026-04~06 各渠道月度净销售额柱状图,对应 R-01 的"净销售额"列。
一条可复算的结论(C-01)
结论:在合成数据中,2026 年 5 月 social 渠道净销售额为 860 元,较 4 月 360 元增加 500 元,环比 +138.89%,订单数 1→1。
复算公式(Excel / WPS 通用,假设 A 列为月份、B 为渠道、C 为 net_sales):
=(SUMIFS(C:C, A:A, DATE(2026,5,1), B:B, "social")
- SUMIFS(C:C, A:A, DATE(2026,4,1), B:B, "social"))
/ SUMIFS(C:C, A:A, DATE(2026,4,1), B:B, "social")
复算过程:
- 5 月 social 净销售:
SUMIFS= 860 - 4 月 social 净销售:
SUMIFS= 360 - 环比:(860 − 360) / 360 = 500 / 360 = 1.3889 ≈ +138.89%
限制:样本量均为 1 单,方向可参考,幅度不可外推。任何"是 social 渠道做了什么"的因果表述都越界。
分析计划要点
- 分组:支付月份 × 清洗后渠道。
- 分母:满足纳入条件的唯一订单(主键唯一、状态非 test / 全额退款)。
- 月度环比的上月值为零或无数据时返回空值("—"),不用无穷大替代。
- 样本量同时展示;未知渠道不静默分摊;主键冲突未解决前不得进入正式汇总。
- 观察到同步变化只写"相关"或"同期出现",不写"导致"。
Excel / WPS 主路径具体操作
本节给出在本案例 12 行上可直接执行的操作步骤。所有公式均在 Excel 365 / WPS 表格最新版通过。
1. 日期识别与统一
- 在 C 列旁新增
paid_at_clean。 - 用
=ISNUMBER(B2)判断:B 列若是 Excel 日期序列值返回 TRUE,若是文本(如"2026/04/22")返回 FALSE。 - 在
paid_at_clean写入:=IF(ISNUMBER(B2), TEXT(B2,"YYYY-MM-DD"), TEXT(DATEVALUE(B2),"YYYY-MM-DD"))。 - 对 O-003 行:
DATEVALUE("2026/04/22")返回2026-04-22的序列值,再TEXT为"2026-04-22"。 - 校验:若清洗列输出的是文本日期,用
=COUNTA(paid_at_clean)应等于 12;若输出的是日期序列值,再用=COUNT(paid_at_clean)。本例采用文本日期,因此COUNTA=12、非空率 100%。
2. 重复主键隔离
- 在 D 列旁新增
dup_flag:=IF(COUNTIF($A$2:$A$13, A2)>1, "DUP", "OK")。 - 筛选
dup_flag="DUP"的行(本案:行 9),整行复制到duplicate_review工作表,不直接删除。 - 正式分析集基于
dup_flag="OK"的 11 行构建。
3. 净销售额公式
- 假设 E 列是
amount_yuan,F 列是refund_checked。 - G 列新增
net_sales:=E2-IF(ISBLANK(F2),0,F2)。 - 对 O-006:
source_unit="fen"时E2 = 86000/100 = 860;对 O-002:refund_checked经 CL-05 后填 0。 - 校验:
=SUM(G:G)应等于 14,100 元。R-01 月度合计4340 + 5120 + 4640 = 14,100;逐行复算1280+360+580+2120+1480+860+800+1980+2120+1080+1440 = 14,100。
4. 数据透视表字段
| 区域 | 字段 | 设置 |
|---|---|---|
| 行 | paid_at_clean(按月分组) | 右键 → 组合 → 月 |
| 列 | channel_clean | — |
| 值 1 | net_sales | 汇总方式:求和 |
| 值 2 | order_id | 汇总方式:计数(显示订单数) |
透视表输出与 R-01 完全一致(每月每渠道两行:金额 + 订单数)。
5. 校验公式
| 校验 | 公式 | 期望值 |
|---|---|---|
| 行数守恒(V-01) | =ROWS(原始明细)−ROWS(纳入明细)−ROWS(隔离明细)−ROWS(排除明细) | 0 |
| 金额对账(V-02) | =SUM(原始!amount_yuan)−SUM(纳入!net_sales)−SUM(隔离!amount_yuan)−SUM(纳入!refund_checked) | 0 |
| 主键唯一(V-03) | =SUMPRODUCT((COUNTIF(纳入!order_id, 纳入!order_id)>1)*1) | 0 |
| 抽样复算(V-04) | 独立手算 O-006:86000/100 | 860,与清洗结果一致 |
| 边界值(V-05) | =COUNTIF(纳入!net_sales,"<0") | 0 |
三层校验矩阵
| 校验编号 | 校验项 | 方法 | 通过标准 | 责任人 | 状态 |
|---|---|---|---|---|---|
| V-01 | 行数守恒 | 原始 12 − 纳入 11 − 隔离 1 − 排除 0 | 差额 0 | 数据负责人 | 示例复算通过 |
| V-02 | 金额对账 | 原始金额 16,480 − 纳入净额 14,100 − 隔离金额 1,980 − 纳入退款 400 | 差额 0 | 财务复核人 | 示例复算通过 |
| V-03 | 主键唯一 | 纳入表 COUNTIF(order_id, order_id)>1 个数 | 0 | 数据负责人 | 示例复算通过 |
| V-04 | 抽样复算 | 独立手算 O-006:86000/100=860 | 与公式一致 | 第二复核人 | 示例复算通过 |
| V-05 | 边界值 | 纳入集 net_sales < 0 个数 | 0 | 分析负责人 | 示例复算通过 |
| V-06 | 图表一致 | CH-01 每月合计 = R-01 合计 | 4340 / 5120 / 4640 | 报告审核人 | 示例复算通过 |
"待执行"不能由 AI 自动改成"通过"。上表只是对合成数据的演示复算,并不冒充真实责任人签字;用于真实项目时,必须由表中对应角色核对真实数据后签字。
图表与结论证据表
图表约定
CH-01标题:合成订单中各渠道月度净销售额(2026-04~06)。纵轴:净销售额(元);横轴:月份;分系列:渠道;图例同时标注样本量(订单数)。- 不写"某渠道策略推动增长"等因果标题;不截断坐标轴;不使用双轴。
结论证据表
| 结论编号 | 结论(合成示例) | 指标与筛选 | 证据位置 | 限制 / 反例 | 人工状态 |
|---|---|---|---|---|---|
| C-01 | 2026-05 social 渠道净销售额 860 元,较 4 月 360 元 +138.89%(订单 1→1) | 已确认退款、唯一订单、source_unit 已统一 | R-01 / CH-01 / 净销售公式 | 样本量 1;不可外推 | 第二复核人签字 |
| C-02 | 2026-06 direct 渠道净销售额 1440 元,较 5 月 800 元 +80.00%(订单 1→1) | 同上 | R-01 / CH-01 | 样本量 1 | 财务复核人签字 |
| C-03 | 4 月为首月不计算环比,作为后续月度基线 | 月份 ≥ 4 且无 3 月数据 | R-01 备注列 | 限制条件,非业务发现 | 数据负责人签字 |
R-01是本案例唯一的结果表,CH-01是对应的图表,Q-01是本案例唯一的复算脚本 / 公式模板(见上文SUMIFS复算式)。本节无悬空编号。
失败案例与回滚
失败一:日期被识别为文本
第一次按月汇总时,4 月仅出现 3 单。检查发现 O-003 的 paid_at="2026/04/22" 未被 MONTH() 纳入。
回滚过程:
- 停止使用第一次汇总结果,将状态标记为
invalid。 - 回到 CL-01,枚举日期格式与无法解析清单(本案例仅 1 行)。
- 统一转换后再执行;比较转换前后非空日期数:
COUNT(paid_at_clean)=12。 - 更新 V-01,重新跑 R-01。
- 不能把漏掉的 1 行手工加进图表,否则破坏复现路径。
失败二:汇总总额与原表不一致
第二次计算中,5 月合计出现 7100 元。沿证据链检查发现,重复主键的两条 O-008 都进入了汇总,CL-04 未隔离。
回滚过程:
- 撤销该次正式结果。
- 检查 CL-04 的过滤条件,验证
dup_flag公式。 - 把行 9 隔离至
duplicate_review,由数据负责人判定保留哪一条(本案保留首次出现的行 8)。 - 重新生成纳入集(11 行);跑 V-01 / V-02 / V-03 + 抽样 V-04。
- V-01 至 V-04 差额归零且每项有书面解释后,恢复报告状态。
完整链路与人工闸门
- 任务卡与字典由 业务负责人 签字。
- CL-01 ~ CL-05 由 数据负责人 + 财务复核人 共同签字,记录影响行数。
- V-01 ~ V-06 由指定责任人逐项签字,AI 不可代签。
- R-01 / CH-01 由 分析负责人 签字。
- C-01 ~ C-03 由 报告审核人 在结论证据表上签字。
- 任一项未签字,草稿不能变为正式报告。
完整链路也说明:AI 编程类工具可参考 AI 编程工作流,但"代码已生成"不等于"分析已完成"。从通用提效场景进入时,可先看 AI 生产力技巧 与 AI 在办公效率中的应用;基础概念参见 AI 基础入门。
一页式 AI 数据分析交付清单
开工与数据准备
- 分析任务卡已确认:问题、指标、粒度、范围、基线、首月不环比、验收标准、非目标齐全
- 原始文件只读保存,来源、权限、导出条件和校验值已记录
- 敏感字段已删除、脱敏或留在获批的隔离环境
- 数据字典包含类型、单位、空值规则、来源和负责人
- 字段类型、缺失、重复、异常、单位、时区和编码已审计
清洗、计算与验证
- 每次清洗都有编号、输入、规则、实际影响行数、输出与回滚方式
- 分母、筛选、分组、样本量、除零、相关 / 因果边界已写入分析计划
- AI 生成的公式、SQL 或 Python 已由人审核并真实执行
- Excel / WPS 主路径的日期识别、主键隔离、净销售额、透视表、校验公式均可复算
- 总量对账、独立抽样复算、边界检查全部通过
- 任何失败都有失效标记、回滚点与修复记录
发布前人工复核
- 每条结论都绑定指标、筛选条件、数据范围、结果表或图表(无悬空编号)
- 图表数值与明细一致,标题不超过证据能证明的范围
- 事实、假设和建议已分开,相关性未写成因果
- 限制、反例、小样本和 unknown 分类没有被隐藏
- 数据、财务、业务与报告责任人按职责完成签字
- 原始文件、字典、清洗日志、计算脚本、运行日志、验证矩阵、证据表和报告已归档
下一步:如果你手头恰好有一份真实的脏 Excel,可直接套用本文"工具选择表 + Excel / WPS 主路径具体操作 + 清洗变更日志"三节跑一遍最小可用版;跑通后再补字典、校验矩阵与结论证据表,升级到正式交付版。如需把已验证结果改写成正式报告,可参考 Kimi 使用教程 与 ChatGPT 高级技巧,但请记住:发布闸门是复算证据,不是文字流畅度。