第 5 讲:AI 生成数据报表 - 一键搞定月度汇报

大家好,我是正在实战各种 AI 项目的程序员晚枫。

😫 场景导入:月底汇报的痛苦

场景:又到月底了...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
老板:下周一月度会议,大家准备一下月度汇报

你的内心:
❌ 又要做PPT...
❌ 又要从各个表里拉数据...
❌ 又要做图表...
❌ 又要写分析...
❌ 整整一天就没了...

实际操作:
- 打开销售系统,导出数据 → 30分钟
- 整理数据,去掉重复、空行 → 30分钟
- 做透视表,计算各种指标 → 1小时
- 做图表,调整样式 → 1小时
- 写文字分析 → 1小时
- 做PPT,排版调整 → 1小时
总计:5小时+

如果用AI自动化呢?

1
2
3
4
5
- 用AI自动汇总数据 → 5分钟
- 用AI生成图表 → 3分钟
- 用AI写分析报告 → 5分钟
- 用AI生成PPT → 5分钟
总计:18分钟

这一讲,我教你如何用AI一键生成数据报表。


📊 一、常见报表类型与结构

1. 销售报表

核心指标:

指标类别具体指标计算方式
总量指标总销售额、总订单数SUM求和
增长指标环比增长、同比增长(本期-上期)/上期
排名指标Top10产品、Top10销售排序取前10
分布指标区域分布、品类分布分组汇总
效率指标客单价、转化率销售额/订单数

标准结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# XX月销售报表

## 一、整体业绩
- 本月销售额:XXX万元
- 环比增长:XX%
- 同比增长:XX%
- 目标完成率:XX%

## 二、产品分析
- Top10产品销售情况
- 产品结构占比

## 三、区域分析
- 各区域销售排名
- 增长最快/最慢区域

## 四、客户分析
- 新老客户占比
- 客户集中度

## 五、问题与建议
- 发现的问题
- 改进建议

2. 财务报表

核心指标:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 财务报表关键指标

# 收入类
总收入 = SUM(所有收入科目)
主营业务收入占比 = 主营业务收入 / 总收入

# 支出类
总支出 = SUM(所有支出科目)
成本率 = 总成本 / 总收入

# 利润类
毛利润 = 总收入 - 总成本
净利润 = 毛利润 - 费用 - 税金
利润率 = 净利润 / 总收入

# 现金流类
经营现金流 = 经营活动现金流入 - 经营活动现金流出
自由现金流 = 经营现金流 - 资本支出

3. 运营报表

核心指标:

指标定义计算公式
DAU日活跃用户数当日登录用户数
MAU月活跃用户数当月登录用户数
留存率用户留存比例N日后仍在使用的用户 / 新增用户
转化率用户转化比例完成目标用户数 / 总用户数
ARPU平均每用户收入总收入 / 用户数
LTV用户生命周期价值ARPU × 平均生命周期

🤖 二、用 AI 自动汇总数据

方法1:ChatExcel 快速汇总

场景: 生成月度销售报表

提示词:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
帮我生成一份完整的月度销售报表。

原始数据包含:
- 日期:订单日期
- 产品:产品名称
- 销售员:负责人
- 销售额:订单金额
- 区域:销售区域

报表要求:
1. 本月总销售额、总订单数
2. 环比增长(与上月对比)
3. 同比增长(与去年同月对比)
4. Top10产品销售排名
5. 各区域销售汇总
6. 各销售员业绩排名

输出格式:多个表格,每个表格一个主题

ChatExcel执行过程:

1
2
3
4
5
6
7
8
9
10
[处理中...]
✅ 统计本月总销售额:152.3万元
✅ 统计本月订单数:328单
✅ 计算环比增长:+15.2%
✅ 计算同比增长:+28.6%
✅ 提取Top10产品
✅ 按区域汇总
✅ 按销售员排名

[生成报表预览]

方法2:Claude/ChatGPT 深度分析

场景: 需要更深入的数据分析

提示词模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
你是一名资深的数据分析师。
请分析以下销售数据,生成一份完整的分析报告。

数据概览:
- 时间范围:2026年1月-3月
- 数据量:1000条订单记录
- 字段:日期、产品、销售员、销售额、区域、客户类型

数据内容:
[粘贴数据或上传文件]

分析要求:
1. 整体业绩分析
- 总销售额、订单数、客单价
- 环比、同比增长情况
- 目标完成情况

2. 产品分析
- Top10产品及占比
- 增长最快的产品
- 产品结构分析

3. 区域分析
- 各区域销售情况
- 区域增长对比
- 区域问题识别

4. 客户分析
- 新老客户占比
- 客户集中度(Top10客户占比)

5. 趋势分析
- 月度趋势
- 周度规律

6. 问题与建议
- 发现的问题
- 改进建议
- 风险预警

输出格式:
用Markdown格式,包含表格、图表描述、分析文字。

AI返回示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# 2026年Q1销售分析报告

## 一、整体业绩分析

### 1.1 核心指标

| 指标 | 数值 | 环比 | 同比 |
|------|------|------|------|
| 总销售额 | 452.6万元 | +12.3% | +28.6% |
| 订单数 | 968单 | +8.5% | +15.2% |
| 客单价 | 4676元 | +3.5% | +11.6% |

**分析:**
- Q1整体业绩表现良好,超额完成季度目标(目标450万)
- 同比增长显著,说明业务扩张有效
- 客单价提升,说明产品结构优化

### 1.2 月度趋势

| 月份 | 销售额 | 环比增长 |
|------|--------|---------|
| 1月 | 138.2万 | - |
| 2月 | 142.4万 | +3.0% |
| 3月 | 172.0万 | +20.8% |

**分析:**
- 3月增长明显,主要受春节后复工和新品上市影响
- 整体呈上升趋势

## 二、产品分析

### 2.1 Top10产品

| 排名 | 产品名称 | 销售额 | 占比 | 同比 |
|------|---------|--------|------|------|
| 1 | 产品A | 85.3万 | 18.8% | +45% |
| 2 | 产品B | 72.1万 | 15.9% | +22% |
| 3 | 产品C | 58.6万 | 12.9% | +18% |
| ... | ... | ... | ... | ... |

**分析:**
- Top10产品占总销售额的68%,集中度较高
- 产品A增长最快,是明星产品
- 需关注尾部产品,优化产品结构

### 2.2 产品结构

产品A ████████████ 18.8%
产品B ██████████ 15.9%
产品C ████████ 12.9%
产品D ██████ 10.5%
产品E █████ 9.2%
其他 ████████████████████████ 32.7%

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

## 三、区域分析

### 3.1 各区域销售情况

| 区域 | 销售额 | 占比 | 环比 | 同比 | 目标完成率 |
|------|--------|------|------|------|-----------|
| 华东 | 152.3万 | 33.6% | +15% | +32% | 105% ✅ |
| 华北 | 98.5万 | 21.8% | +10% | +25% | 98% ⚠️ |
| 华南 | 85.2万 | 18.8% | +8% | +20% | 95% ⚠️ |
| 华中 | 62.1万 | 13.7% | +5% | +15% | 92% ⚠️ |
| 西部 | 54.5万 | 12.1% | +12% | +35% | 108% ✅ |

**分析:**
- 华东区表现最佳,贡献三分之一销售额
- 华北、华南未达标,需重点关注
- 西部增长最快,是潜力市场

### 3.2 区域问题识别

⚠️ **需要关注的问题:**
1. 华北区目标未达成(完成率98%)
- 原因:3月最后一周订单延迟
- 建议:加强客户跟进

2. 华南区增长放缓(环比仅+8%)
- 原因:竞品价格战
- 建议:调整定价策略

## 四、客户分析

### 4.1 新老客户占比

| 客户类型 | 销售额 | 占比 | 客单价 |
|---------|--------|------|--------|
| 老客户 | 316.8万 | 70% | 5200元 |
| 新客户 | 135.8万 | 30% | 3400元 |

**分析:**
- 老客户贡献主要收入,忠诚度高
- 新客户客单价较低,需加强培育

### 4.2 客户集中度

Top10客户销售额:135.8万,占比30%

**风险提示:** 客户集中度适中,无明显风险

## 五、趋势分析

### 5.1 月度趋势

📈 销售额走势:

180万 │ ╭─── 3月
160万 │ ╭────╯
140万 │ ╭────╯ 2月
120万 │ ╭────╯
100万 │╭────╯ 1月
└─────────────────────

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

### 5.2 周度规律

| 星期 | 平均销售额 | 占比 |
|------|-----------|------|
| 周一 | 15.2万 | 15% |
| 周二 | 16.8万 | 17% |
| 周三 | 17.5万 | 18% |
| 周四 | 18.2万 | 18% |
| 周五 | 19.8万 | 20% |
| 周六 | 8.5万 | 8% |
| 周日 | 5.2万 | 5% |

**规律:** 周五销售额最高,周末较低

## 六、问题与建议

### 6.1 发现的问题

1. **区域不均衡**
- 华东贡献1/3,其他区域增长慢
- 建议:加强其他区域的市场拓展

2. **产品集中度高**
- Top10产品占68%
- 风险:明星产品下滑会影响整体
- 建议:培育第二增长曲线

3. **新客户转化率低**
- 新客户客单价仅为老客户的65%
- 建议:优化新客户培育流程

### 6.2 改进建议

| 优先级 | 建议 | 预期效果 | 责任人 |
|--------|------|---------|--------|
| 高 | 加强华北、华南区域投入 | Q2目标达成率>100% | 区域经理 |
| 高 | 推出新品培育计划 | 降低产品集中度 | 产品部 |
| 中 | 优化新客户转化流程 | 新客客单价提升20% | 运营部 |
| 中 | 建立客户预警机制 | 降低客户流失率 | 客服部 |

### 6.3 风险预警

⚠️ **需要关注的风险:**
1. 产品A依赖度过高(占18.8%)
2. 华南竞品压力增大
3. 部分区域目标未达成

---

报告生成时间:2026-04-01
数据来源:ERP系统
分析师:AI助手

方法3:Python 自动化脚本

场景: 需要定期生成报表,自动化程度高

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# 安装依赖:pip install pandas openpyxl matplotlib

import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime

class SalesReport:
"""销售报表自动生成器"""

def __init__(self, data_file):
"""初始化"""
self.df = pd.read_excel(data_file)
self.df['日期'] = pd.to_datetime(self.df['日期'])
self.report_date = datetime.now().strftime('%Y-%m-%d')

def overall_analysis(self):
"""整体业绩分析"""
# 核心指标
total_sales = self.df['销售额'].sum()
total_orders = len(self.df)
avg_order_value = total_sales / total_orders

# 环比增长(假设数据包含多月份)
monthly_sales = self.df.groupby(
self.df['日期'].dt.to_period('M')
)['销售额'].sum()

if len(monthly_sales) >= 2:
current_month = monthly_sales.iloc[-1]
last_month = monthly_sales.iloc[-2]
mom_growth = (current_month - last_month) / last_month
else:
mom_growth = 0

return {
'总销售额': f'{total_sales/10000:.1f}万元',
'总订单数': total_orders,
'客单价': f'{avg_order_value:.0f}元',
'环比增长': f'{mom_growth:.1%}'
}

def product_analysis(self, top_n=10):
"""产品分析"""
# Top10产品
top_products = self.df.groupby('产品').agg({
'销售额': 'sum',
'订单号': 'count'
}).rename(columns={'订单号': '订单数'})

top_products['占比'] = top_products['销售额'] / self.df['销售额'].sum()
top_products = top_products.sort_values('销售额', ascending=False)

return top_products.head(top_n)

def region_analysis(self):
"""区域分析"""
region_data = self.df.groupby('区域').agg({
'销售额': 'sum',
'订单号': 'count'
}).rename(columns={'订单号': '订单数'})

region_data['占比'] = region_data['销售额'] / self.df['销售额'].sum()
region_data = region_data.sort_values('销售额', ascending=False)

return region_data

def generate_charts(self, output_dir='./charts/'):
"""生成图表"""
import os
os.makedirs(output_dir, exist_ok=True)

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS', 'SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 1. 月度趋势图
monthly_sales = self.df.groupby(
self.df['日期'].dt.to_period('M')
)['销售额'].sum() / 10000

plt.figure(figsize=(10, 6))
plt.plot(monthly_sales.index.astype(str), monthly_sales.values,
marker='o', linewidth=2)
plt.title('月度销售趋势')
plt.xlabel('月份')
plt.ylabel('销售额(万元)')
plt.xticks(rotation=45)
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig(f'{output_dir}月度趋势.png', dpi=300)
plt.close()

# 2. 产品Top10柱状图
top_products = self.product_analysis(10)

plt.figure(figsize=(12, 6))
plt.barh(top_products.index, top_products['销售额'] / 10000)
plt.title('Top10产品销售额')
plt.xlabel('销售额(万元)')
plt.ylabel('产品')
plt.tight_layout()
plt.savefig(f'{output_dir}产品Top10.png', dpi=300)
plt.close()

# 3. 区域分布饼图
region_data = self.region_analysis()

plt.figure(figsize=(8, 8))
plt.pie(region_data['销售额'], labels=region_data.index,
autopct='%1.1f%%', startangle=90)
plt.title('销售区域分布')
plt.tight_layout()
plt.savefig(f'{output_dir}区域分布.png', dpi=300)
plt.close()

print(f'图表已保存到:{output_dir}')

def generate_report(self, output_file='销售报表.xlsx'):
"""生成完整报表"""
with pd.ExcelWriter(output_file, engine='openpyxl') as writer:
# 整体业绩
overall = pd.DataFrame([self.overall_analysis()])
overall.to_excel(writer, sheet_name='整体业绩', index=False)

# 产品分析
self.product_analysis().to_excel(writer, sheet_name='产品分析')

# 区域分析
self.region_analysis().to_excel(writer, sheet_name='区域分析')

# 原始数据
self.df.to_excel(writer, sheet_name='原始数据', index=False)

print(f'报表已生成:{output_file}')

# 使用示例
if __name__ == '__main__':
report = SalesReport('销售数据.xlsx')

# 生成报表
report.generate_report('2026年Q1销售报表.xlsx')

# 生成图表
report.generate_charts('./报表图表/')

# 打印核心指标
print('=== 整体业绩 ===')
for key, value in report.overall_analysis().items():
print(f'{key}: {value}')

📈 三、AI 生成图表

1. 柱状图(对比数据)

场景: 展示各产品销售额对比

提示词:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
我需要生成一个柱状图。

数据:
产品A:85万
产品B:72万
产品C:58万
产品D:45万
产品E:38万

要求:
1. 横向柱状图,产品名称在Y轴
2. 销售额在X轴,单位:万元
3. 颜色:蓝色渐变
4. 标题:Top5产品销售额
5. 显示数值标签

请给出Python代码。

AI返回:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import matplotlib.pyplot as plt

# 数据
products = ['产品A', '产品B', '产品C', '产品D', '产品E']
sales = [85, 72, 58, 45, 38]

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS', 'SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 创建图表
fig, ax = plt.subplots(figsize=(10, 6))

# 绘制横向柱状图
colors = plt.cm.Blues([0.3, 0.4, 0.5, 0.6, 0.7])
bars = ax.barh(products, sales, color=colors)

# 添加数值标签
for bar, value in zip(bars, sales):
ax.text(value + 1, bar.get_y() + bar.get_height()/2,
f'{value}万', va='center')

# 设置标题和标签
ax.set_title('Top5产品销售额', fontsize=16, fontweight='bold')
ax.set_xlabel('销售额(万元)')

# 反转Y轴,让第一名在上面
ax.invert_yaxis()

plt.tight_layout()
plt.savefig('Top5产品销售额.png', dpi=300)
plt.show()

2. 折线图(趋势分析)

场景: 对比两年销售趋势

提示词:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
我需要生成一个双折线图。

数据:
月份:1月、2月、3月、4月、5月、6月
2025年销售额:120万、135万、128万、145万、152万、168万
2026年销售额:138万、142万、172万、185万、195万、210万

要求:
1. X轴:月份
2. Y轴:销售额(万元)
3. 两条折线:2025年(蓝色)、2026年(橙色)
4. 添加数据点标记
5. 图例
6. 标题:销售趋势对比

请给出Python代码。

AI返回:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import matplotlib.pyplot as plt

# 数据
months = ['1月', '2月', '3月', '4月', '5月', '6月']
sales_2025 = [120, 135, 128, 145, 152, 168]
sales_2026 = [138, 142, 172, 185, 195, 210]

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS', 'SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 创建图表
fig, ax = plt.subplots(figsize=(12, 6))

# 绘制折线
ax.plot(months, sales_2025, marker='o', linewidth=2,
label='2025年', color='#3498db')
ax.plot(months, sales_2026, marker='s', linewidth=2,
label='2026年', color='#e74c3c')

# 添加数据标签
for i, (v1, v2) in enumerate(zip(sales_2025, sales_2026)):
ax.text(i, v1 + 3, f'{v1}', ha='center', color='#3498db')
ax.text(i, v2 + 3, f'{v2}', ha='center', color='#e74c3c')

# 设置标题和标签
ax.set_title('销售趋势对比', fontsize=16, fontweight='bold')
ax.set_xlabel('月份')
ax.set_ylabel('销售额(万元)')

# 添加图例
ax.legend()

# 添加网格
ax.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('销售趋势对比.png', dpi=300)
plt.show()

3. 饼图(占比分析)

场景: 展示销售区域分布

提示词:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
我需要生成一个饼图。

数据:
华东:33.6%
华北:21.8%
华南:18.8%
华中:13.7%
西部:12.1%

要求:
1. 饼图,显示各区域占比
2. 显示百分比标签
3. 突出显示最大的区域(分离效果)
4. 颜色:商务配色
5. 标题:销售区域分布

请给出Python代码。

AI返回:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import matplotlib.pyplot as plt

# 数据
regions = ['华东', '华北', '华南', '华中', '西部']
percentages = [33.6, 21.8, 18.8, 13.7, 12.1]

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS', 'SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 创建图表
fig, ax = plt.subplots(figsize=(8, 8))

# 设置颜色(商务配色)
colors = ['#3498db', '#2ecc71', '#f39c12', '#e74c3c', '#9b59b6']

# 突出显示最大的区域(华东)
explode = (0.05, 0, 0, 0, 0)

# 绘制饼图
wedges, texts, autotexts = ax.pie(
percentages,
labels=regions,
autopct='%1.1f%%',
colors=colors,
explode=explode,
startangle=90,
shadow=True
)

# 设置标签样式
for autotext in autotexts:
autotext.set_color('white')
autotext.set_fontweight('bold')

# 设置标题
ax.set_title('销售区域分布', fontsize=16, fontweight='bold')

plt.tight_layout()
plt.savefig('销售区域分布.png', dpi=300)
plt.show()

4. 组合图(多维度展示)

场景: 销售额与增长率组合图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import matplotlib.pyplot as plt

# 数据
months = ['1月', '2月', '3月', '4月', '5月', '6月']
sales = [138, 142, 172, 185, 195, 210]
growth_rate = [0, 2.9, 21.1, 7.6, 5.4, 7.7]

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS', 'SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 创建图表
fig, ax1 = plt.subplots(figsize=(12, 6))

# 柱状图:销售额
ax1.bar(months, sales, color='#3498db', alpha=0.7, label='销售额')
ax1.set_xlabel('月份')
ax1.set_ylabel('销售额(万元)', color='#3498db')
ax1.tick_params(axis='y', labelcolor='#3498db')

# 第二个Y轴:增长率
ax2 = ax1.twinx()
ax2.plot(months, growth_rate, color='#e74c3c', marker='o',
linewidth=2, label='增长率')
ax2.set_ylabel('增长率(%)', color='#e74c3c')
ax2.tick_params(axis='y', labelcolor='#e74c3c')

# 添加标题
plt.title('销售额与增长率趋势', fontsize=16, fontweight='bold')

# 添加图例
lines1, labels1 = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax1.legend(lines1 + lines2, labels1 + labels2, loc='upper left')

plt.tight_layout()
plt.savefig('销售额与增长率.png', dpi=300)
plt.show()

🔄 四、AI 做数据透视表

场景1:产品×区域交叉分析

提示词:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
你是一名Excel专家。
帮我创建一个数据透视表的配置说明。

原始数据:
- A列:日期
- B列:产品名称
- C列:销售员
- D列:销售额
- E列:区域

透视表需求:
- 行:产品名称
- 列:区域
- 值:销售额(求和)
- 筛选器:销售员

请提供:
1. Excel操作步骤
2. Python pandas代码实现

AI返回:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
## 方法1:Excel操作步骤

1. 选中数据区域(A1:E100)
2. 插入 → 数据透视表 → 新工作表
3. 配置字段:
- 行:产品名称
- 列:区域
- 值:销售额(求和)
- 筛选器:销售员
4. 设置格式:数字格式为货币

## 方法2:Python代码

```python
import pandas as pd

# 读取数据
df = pd.read_excel('销售数据.xlsx')

# 创建透视表
pivot_table = pd.pivot_table(
df,
values='销售额',
index='产品名称',
columns='区域',
aggfunc='sum',
fill_value=0
)

# 添加汇总列
pivot_table['合计'] = pivot_table.sum(axis=1)

# 格式化输出
print(pivot_table.style.format('{:,.0f}'))

# 保存到Excel
pivot_table.to_excel('产品区域透视表.xlsx')

输出示例:

产品名称华东华北华南华中西部合计
产品A28万22万18万12万5万85万
产品B25万20万15万8万4万72万
产品C20万15万12万8万4万58万
.....................
合计152万98万85万62万55万452万
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

### 场景2:多维度分组统计

```python
import pandas as pd

# 读取数据
df = pd.read_excel('销售数据.xlsx')

# 多维度分组统计
report = df.groupby(['产品', '区域', '销售员']).agg({
'销售额': ['sum', 'count', 'mean'],
'订单号': 'nunique'
}).round(2)

# 重命名列
report.columns = ['总销售额', '订单数', '平均订单金额', '客户数']

# 重置索引
report = report.reset_index()

# 筛选特定销售员的数据
report[report['销售员'] == '张三']

# 保存
report.to_excel('多维度统计.xlsx', index=False)

📊 五、完整案例:自动化月报生成

场景: 每月自动生成销售月报

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime
import os

class MonthlyReport:
"""月度报表自动生成器"""

def __init__(self, data_file, month):
"""
初始化

参数:
- data_file: 数据文件路径
- month: 报表月份(格式:2026-04)
"""
self.df = pd.read_excel(data_file)
self.df['日期'] = pd.to_datetime(self.df['日期'])
self.month = month
self.output_dir = f'./报表输出/{month}/'
os.makedirs(self.output_dir, exist_ok=True)

def generate_all(self):
"""生成所有报表内容"""
print(f'开始生成{self.month}月度报表...')

# 1. 数据汇总
self._generate_summary()

# 2. 图表
self._generate_charts()

# 3. 分析报告
self._generate_analysis()

# 4. Excel报表
self._generate_excel()

print(f'报表已生成:{self.output_dir}')

def _generate_summary(self):
"""生成数据汇总"""
# 筛选当月数据
month_data = self.df[
self.df['日期'].dt.to_period('M') == self.month
]

# 核心指标
summary = {
'月份': self.month,
'总销售额': f"{month_data['销售额'].sum()/10000:.1f}万元",
'订单数': len(month_data),
'客单价': f"{month_data['销售额'].mean():.0f}元",
'产品数': month_data['产品'].nunique(),
'客户数': month_data['客户'].nunique()
}

# 保存汇总
pd.DataFrame([summary]).to_excel(
f'{self.output_dir}核心指标.xlsx',
index=False
)

return summary

def _generate_charts(self):
"""生成图表"""
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS', 'SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 筛选当月数据
month_data = self.df[
self.df['日期'].dt.to_period('M') == self.month
]

# 图表1:产品销售排行
product_sales = month_data.groupby('产品')['销售额'].sum().sort_values()

plt.figure(figsize=(10, 8))
product_sales.tail(10).plot(kind='barh', color='steelblue')
plt.title('Top10产品销售额')
plt.xlabel('销售额(元)')
plt.tight_layout()
plt.savefig(f'{self.output_dir}产品排行.png', dpi=300)
plt.close()

# 图表2:区域分布
region_sales = month_data.groupby('区域')['销售额'].sum()

plt.figure(figsize=(8, 8))
plt.pie(region_sales, labels=region_sales.index,
autopct='%1.1f%%', startangle=90)
plt.title('销售区域分布')
plt.savefig(f'{self.output_dir}区域分布.png', dpi=300)
plt.close()

print('图表生成完成')

def _generate_analysis(self):
"""生成分析报告"""
month_data = self.df[
self.df['日期'].dt.to_period('M') == self.month
]

# 生成Markdown报告
report = f"""# {self.month}销售月报

## 一、整体业绩

- 总销售额:{month_data['销售额'].sum()/10000:.1f}万元
- 订单数:{len(month_data)}
- 客单价:{month_data['销售额'].mean():.0f}

## 二、产品分析

Top5产品:
{month_data.groupby('产品')['销售额'].sum().sort_values(ascending=False).head(5).to_markdown()}

## 三、区域分析

{month_data.groupby('区域')['销售额'].sum().sort_values(ascending=False).to_markdown()}

## 四、问题与建议

[需要人工补充]

---
报告生成时间:{datetime.now().strftime('%Y-%m-%d %H:%M')}
"""

# 保存报告
with open(f'{self.output_dir}分析报告.md', 'w', encoding='utf-8') as f:
f.write(report)

print('分析报告生成完成')

def _generate_excel(self):
"""生成Excel报表"""
month_data = self.df[
self.df['日期'].dt.to_period('M') == self.month
]

with pd.ExcelWriter(
f'{self.output_dir}完整报表.xlsx',
engine='openpyxl'
) as writer:
# 原始数据
month_data.to_excel(writer, sheet_name='明细数据', index=False)

# 产品汇总
month_data.groupby('产品')['销售额'].agg(['sum', 'count']).to_excel(
writer, sheet_name='产品汇总'
)

# 区域汇总
month_data.groupby('区域')['销售额'].agg(['sum', 'count']).to_excel(
writer, sheet_name='区域汇总'
)

print('Excel报表生成完成')

# 使用示例
if __name__ == '__main__':
report = MonthlyReport('销售数据.xlsx', '2026-04')
report.generate_all()

⚠️ 六、避坑指南

坑1:图表美化过度

表现: 花2小时调整图表颜色、字体

建议:

  1. 使用现成模板
  2. 不要过度追求完美
  3. 数据准确比美观更重要

坑2:指标堆砌

表现: 报表包含50个指标,看的人眼花缭乱

建议:

  1. 只放关键指标(3-5个)
  2. 其他指标放附录
  3. 老板只关心结果和建议

坑3:没有结论

表现: 列了一堆数据,没有分析和建议

建议:

  1. 每个图表下面写结论
  2. 最后给行动建议
  3. 用"发现→建议→预期效果"结构

💡 七、本讲作业

作业1:生成销售报表

使用课程提供的数据,生成一份完整的月度销售报表:

  1. 核心指标(至少5个)
  2. 产品分析(Top10)
  3. 区域分析
  4. 图表(至少3个)

作业2:制作数据透视表

创建以下透视表:

  1. 产品×区域销售额
  2. 销售员×月份业绩
  3. 产品×客户类型占比

作业3:编写自动化脚本

编写Python脚本,实现:

  1. 自动读取数据
  2. 自动生成图表
  3. 自动生成报表
  4. 自动发送邮件

🎯 本讲总结

核心要点

  1. 报表类型:销售、财务、运营,各有重点
  2. 汇总方法:ChatExcel快速、AI深度分析、Python自动化
  3. 图表类型:柱状图对比、折线图趋势、饼图占比
  4. 透视表:多维度交叉分析
  5. 自动化:定期自动生成报表

实用清单

1
2
3
4
5
6
7
8
9
10
11
12
✅ 报表标准结构:
1. 整体业绩
2. 细分分析
3. 趋势分析
4. 问题发现
5. 改进建议

✅ 图表选择:
- 对比数据 → 柱状图
- 趋势分析 → 折线图
- 占比分析 → 饼图
- 多维度 → 组合图

🔗 课程导航

上一讲:AI 处理 Excel 数据 | 下一讲:Excel 自动化实战


💬 加入学习交流群

👉 点击加入交流群


💬 联系我

平台账号/链接
微信扫码加好友
微博@程序员晚枫
知乎@程序员晚枫
抖音@程序员晚枫
小红书@程序员晚枫
B 站Python 自动化办公社区

主营业务:AI 编程培训、企业内训、技术咨询


科技不高冷,AI很好用。

下一讲,我们进入Excel自动化实战!

🎓 AI 编程实战课程

想系统学习 AI 编程?程序员晚枫的 AI 编程实战课 帮你从零上手!