Back to skills
SKILL.md
Report Making
ASecurity报表制作——把业务数据做成读者看完就能拍板的周报、月报:先定读者与决策问题,再定口径、表结构、图表与异常标注。当用户说「报表怎么做」「周报模板」「月报模板」「指标口径怎么写」「数据透视表怎么用」时使用。
- 2 stars
- 0 votes
- 0 copies
- 1 view
- Added October 13, 2026
Security analysis
100/100Pro scans all 5 files and shows the line behind each finding
npx -y skills add po-et/workbuddy-skills --skill report-making --agent claude-codeAre you the author of Report Making?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/po-et-report-making)---
name: report-making
description: "报表制作——把业务数据做成读者看完就能拍板的周报、月报:先定读者与决策问题,再定口径、表结构、图表与异常标注。当用户说「报表怎么做」「周报模板」「月报模板」「指标口径怎么写」「数据透视表怎么用」时使用。"
author: Captain
version: 0.1.1
metadata:
openclaw:
requires:
bins: [python3]
display_name: "报表制作"
display_name_en: "Report Making"
description_zh: "做业务报表的完整方法:先问清读者和他要做的决定,再写指标口径(定义、来源、粒度、更新频率),按维度×指标搭表,按问题选图,给异常值定阈值并标注原因,定好发布与更正节奏;附 Excel 数据透视与常用公式做法、周报月报模板和口径说明模板。"
description_en: "Build business reports that lead to decisions by defining the reader and the decision, pinning down metric definitions, designing dimension-by-metric tables, choosing charts, flagging anomalies and fixing a publishing cadence, with Excel pivot tables, core formulas, weekly and monthly templates and a metric definition template."
tags:
- "报表制作"
- "业务报表"
- "周报模板"
- "月报模板"
- "指标口径"
- "数据透视表"
- "Excel 报表"
- "图表选择"
- "business report"
examples_zh:
- "报表怎么做,老板说我的周报全是数,看不出重点"
- "帮我出一份月报模板,销售数据要按区域和渠道拆开"
- "数据透视表怎么用,汇总出来的数和明细对不上"
examples_en:
- "How should I build a report? My boss says my weekly report is all numbers and has no focus."
- "Give me a monthly report template with sales broken down by region and channel."
- "How do pivot tables work? My totals don't match the detail data."
---
# 报表制作
定位一句话:**报表不是把数据摆出来,而是让一个具体的人看完能做一个具体的决定;读者和决定没定,一个指标都别加。**
**文件导航**:本页是主流程。周报、月报、口径说明三份模板见 [references/templates.md](references/templates.md);按区域和渠道拆的月报完整交付见 [examples/monthly-report-region-channel.md](examples/monthly-report-region-channel.md);两个脚本:`scripts/csv_profile.py` 给明细 CSV 体检,`scripts/anomaly_flag.py` 按阈值标异常。
## 何时使用
新做或重做周报、月报、专题数据报表;老板说「看不出重点」;两份报表同一个数对不上;要把 Excel 明细汇总成固定格式。用户常这样说:
- 「报表怎么做,老板说我的周报全是数,看不出重点」
- 「帮我出一份月报模板,销售数据要按区域和渠道拆开」
- 「数据透视表怎么用,汇总出来的数和明细对不上」
- 「指标口径怎么写,两个部门报的数不一样」
- 「哪些波动该标成异常,阈值怎么定」
不适用:
- 指标本身怎么选、权重怎么分:属于 KPI 制定,本技能只管把已定的指标做成报表。
- 资产负债表、利润表、现金流量表的编制、审计与税务:找会计或审计师。
- 要从数据库直接取数写查询:转交 SQL 类技能;用 Python 批量处理 Excel 文件:转交 Excel 处理类技能。
## 先判断:谁看,看完决定什么
动手前填完这三行,填不出来先去问,别急着做表:
```
读者 谁看(职位、人数),在哪看(手机群消息 / 邮件 / 例会投屏),愿意看几分钟
决策问题 看完要决定 ____(例:下周预算要不要往华东倾斜)
必要的数 回答这个问题最少要哪几个数,各跟什么比(上期 / 去年同期 / 目标)
```
读者不同,报表形态完全不同:管理层要一页、结论先行、不超过 5 个指标、每个数都配对比,关心「达没达标、要不要加资源」;业务负责人要能下钻到区域、渠道、产品,关心「哪里掉了、为什么」;一线要看自己的数和待办。同一份数据给三类读者,就做三个版本,不要做一张大表让大家各取所需。自检:拿掉某个指标,决策受不受影响?不受影响的移到附表或删掉。
## 流程:从口径到发布五步
**第 1 步 定口径。** 每个指标写清定义(数什么、不数什么)、来源(哪个表或导出文件的哪个字段)、粒度(按订单、用户还是门店计,汇总到日、周还是月)、更新频率(每天几点出前一天的数、月数据哪天冻结)。时间口径写死:以下单、支付还是完成时间为准;一周从周一还是周日算起。口径写好后请业务负责人书面确认一次,之后的改动都走版本号。
**第 2 步 搭表。** 行放维度(时间、区域、渠道、产品),列放指标和对比。一张表只回答一个问题;维度最多两层;按指标值降序排;单位写进表头,同列小数位一致;合计行加粗。明细存成一行一条记录的长表,展示表由透视表或公式生成,不手敲数字。
**第 3 步 选图。** 先写下这张图回答什么问题,再按下表选:
```
看趋势 折线图,时间放横轴;只有两三期就用柱形图
比大小 横向条形图,按数值排序
看构成 堆积柱形图;饼图只用于不超过 5 块且合计 100% 的情况
看达成 条形图加目标线,或直接用表格列完成率
看分布 直方图、箱线图;看两个指标的关系用散点图
不用 3D 图、双纵轴、纵轴不从 0 开始的柱形图
```
图标题直接写结论,如「华东连续三周下滑,主要掉在线上渠道」,而不是「华东销售额趋势」;要读者注意的那条线用深色,其余用浅灰。
**第 4 步 标异常。** 先定规则再看数据。默认阈值(按业务波动调整):环比变化超过 ±20% 且绝对量变化够大(小基数的 20% 没意义),或超出近 8 周均值 ±2 倍标准差。表里用 ▲▼ 加颜色,不只靠颜色,黑白打印也要看得出。每个异常写「现象—原因—影响—动作」,原因没确认就写「待查,负责人 ____」。异常值不删不改;确属数据错误的,修正后在数据说明里写明改了什么。口径变更点在趋势图上画竖线标注。汇总表导出成 CSV 后,可以让脚本按同样的规则先标一遍(`--min-abs` 就是「绝对量变化够大」的下限,对两条规则都生效):
```bash
python3 scripts/anomaly_flag.py 周汇总.csv --period 周 --value 销售额 --by 区域 --min-abs 30 --out 周汇总_标注.csv
```
**第 5 步 定节奏。** 例如周报每周一 10:00 发上周(数据截至周日 24:00),月报在次月第 3 个工作日前发。时间、模板固定,口径带版本号;发出后发现错误,发更正说明(错在哪、正确的数、影响哪些结论),不悄悄替换附件。
## Excel 做法:数据透视与基础公式
透视前先把明细整理成一维表:单行表头、一列一个字段、无合并单元格、无空行空列、日期是真日期、数字不是文本(单元格左上角有绿色小三角的,多半是文本数字)。
```
1 选中明细按 Ctrl+T 转成表格,表名改成「明细」,新增行自动纳入
2 插入 → 数据透视表 → 新工作表;行放维度,列放时间,值放指标
3 值默认成了「计数」,说明该列混有文本或空值,回去清洗
4 日期字段右键 → 组合 → 月 / 季度 / 年
5 占比、环比:值字段设置 → 值显示方式 →「总计的百分比」「差异百分比」
6 率类指标用计算字段(分子字段 ÷ 分母字段),它按合计值相除,正合适
7 插入切片器,读者可以自己按区域、渠道筛
8 源数据改动后点 数据 → 全部刷新,透视表不会自己更新
9 核对:透视表总计必须等于明细列求和,不等就查筛选、空白行和文本数字
```
常用公式(B1 填月初日期;日期区间用「≥ 月初且 < 下月初」,带时刻的记录才不会漏掉最后一天):
```
当月金额 =SUMIFS(明细[金额],明细[区域],$A2,明细[日期],">="&$B$1,明细[日期],"<"&EDATE($B$1,1))
环比 =IFERROR(C2/D2-1,"—") C 本期、D 上期;上期为 0 或空时显示 —
转化率 =IFERROR(SUMIFS(明细[成交],明细[区域],$A2)/SUMIFS(明细[访客],明细[区域],$A2),"—")
查目标 =XLOOKUP($A2,目标[区域],目标[月目标],"未设目标") 旧版没有 XLOOKUP,改用 INDEX 加 MATCH
周序号 =WEEKNUM(A2,2) 以周一为一周开始;不想让元旦切开一周用 =ISOWEEKNUM(A2),跨年那几天会归到相邻年份
```
计数就把 SUMIFS 换成 COUNTIFS,去掉求和列即可。
上透视表前,用脚本给导出的明细 CSV 体检,能一眼看出「华东」「华东 」「华东区」这类同物异名、空值、空行、重复行、带千分位的文本数字和混用的日期写法(编码自动识别 UTF-8 和 GBK,只读不改原文件):
```bash
python3 scripts/csv_profile.py 明细.csv --key 订单号
```
## 模板:周报、月报、口径说明
三份纯文本模板在 [references/templates.md](references/templates.md):周报五段(本周结论、核心指标、异常、下周动作、数据说明);月报七段(本月结论、目标达成、趋势、结构拆解、异常与专题、下月计划与风险、附录);口径说明九项(名称、定义、公式、来源、粒度、时间口径、剔除规则、更新频率、版本)。
## 信息不全或出错时
| 情况 | 怎么处理 | 对用户说的话(模板) |
|---|---|---|
| 读者或决策问题没说 | 只问三件:谁看、在哪看几分钟、看完要决定什么;不答就按「管理层一页、结论先行、不超过 5 个指标」做,标 [待确认] | 「先问三件事:这份报表谁看、在哪看、看完要决定什么?没定之前我先按管理层一页版做,标了 [待确认]。」 |
| 没有数据,只要模板 | 模板里的数一律留 `____`;取不到的写「待取数」;绝不编示例数字充当真实数据 | 「模板先给你,数字位置都留空;拿到导出数据后再填,取不到的写『待取数』。」 |
| 两份报表同一个数对不上 | 先对口径再对数:时间字段(下单/支付)、周的起始日、剔除规则、截至时间、率是否被求了平均;列出两种口径各自的算法让用户选 | 「A 表按支付时间、剔除退款;B 表按下单时间、没剔除——两个数都对,只是口径不同。以哪个为准?」 |
| 明细读不进来或格式乱(编码、合并单元格、文本数字) | 先跑 `csv_profile.py` 体检,按「需要处理」逐条清洗后再透视 | 「先别透视,体检发现 3 个问题:『华东』有三种写法、金额里有带千分位的文本、有 1 行重复。清完再汇总。」 |
| 超出本技能范围(会计报表、审计税务、投资建议、给员工下绩效结论) | 会计、审计、税务找专业人员;只做业务报表,不预测、不承诺 | 「利润表的编制要按会计准则来,建议找会计;业务月报里的收入指标我可以帮你把口径写清。」 |
| 时间紧,只要最小可用版 | 最小版一页:3 条结论(每条带数字和对比)+核心指标表不超过 5 行+最多 1 条异常说明 | 「来不及就先交一页:三条结论、五个指标、一条异常说明;图和附表下期再补。」 |
| 用户坚持越界(「先编个数填上」「异常数据删掉别让老板看到」) | 不编数、不删异常;取不到写「待取数」,异常照标并写原因 | 「数我不能编,异常也不能删——发现了再更正更伤信任。我把它标出来,原因写『待查』,并写清下一步谁去查。」 |
| 回复太长被截断或中途断了 | 按输出契约的编号分段交付;用户说「继续」就从下一个编号接着写 | 「上一条写到第 3 部分表结构。回复『继续』,我从第 4 部分图表接着写。」 |
两个脚本的退出码与报错:
| 退出码 / 报错 | 原因 | 修正办法 |
|---|---|---|
| 0 | 完成;问题写在「需要处理」或「标出的异常」里 | 逐条处理;异常补上原因—影响—动作 |
| 1「--key 里的列……不在表头里」「--value 的列……不在表头里」 | 列名写错 | 照报错里列出的表头原样填写 |
| 1「文件是空的」「只有表头没有数据行」「没有可用的数字」 | 导出条件不对,或数值列全是文本、NaN 或无穷值 | 重新导出;把「12万」这类写法改成纯数字,缺失数据补取后重跑 |
| 1「表头重复」「表头有空列名」「表头有…列」「CSV 格式有误」「期次或维度为空」 | 表结构有歧义,金额可能被读到错误的列 | 补全列名和期次;重复列改名;含逗号的金额加引号,不让脚本猜列或丢列 |
| 1「要是…有限数字」 | 阈值是 NaN、无穷值或负的绝对变化下限 | `--pct`、`--sigma` 用大于 0 的有限数,`--min-abs` 用不小于 0 的有限数 |
| 1「……出现了两次——先汇总成一期一行」 | 给标异常脚本的不是汇总表 | 先用透视表汇总成每个维度一期一行 |
| 1「--out 不能和输入文件同名」「不认识的编码名」「参数有误」 | 想覆盖原件;编码名写错;参数缺失 | 另存新文件;编码写 utf-8 或 gbk |
| 2「找不到文件」「是表格文件,不是 CSV」「编码认不出来」「写不了……」 | 路径不对;给了 .xlsx;编码不是 UTF-8/GBK;目标文件被 Excel 占用或没写权限 | 核对路径;在 Excel 里另存为 CSV UTF-8;关掉占用的文件 |
| 130 | 按了 Ctrl+C | 重新运行;`--out` 先写临时文件再替换,中断不会留下半个文件 |
CSV 可用逗号、制表符或分号分隔。数值 NaN、无穷值和非数字按缺失标记,当前期与下一期不算环比,不进入历史均值;不会替用户补数。前 N 期恒定时标准差为 0,当前值偏离该恒定值且达到绝对变化下限,仍触发规则二。
## 输出契约
先交「读者—决策问题—指标清单」请用户确认,再搭表、出模板。之后按固定顺序交付:
```
1 读者—决策问题—指标清单 先确认这一步
2 口径卡 每个指标一张,字段不留空;取不到的写「待取数」,不编数字、不估算填空
3 表结构 表头草图,写清透视表字段怎么摆、每列用什么公式
4 图表 每张图写明回答什么问题、为什么选这种图
5 异常与节奏 异常阈值、标注方式、截至时间、发布时间和更正办法
6 报表正文模板 Markdown 表格与纯文本,可直接粘进 Excel 或文档
7 自检结果 下面六条逐条写「是/否」
```
占位符:`____` 是模板里每期要填的数或名字;`[待补:…]` 是只有用户才有的信息(取数人、目标值、测试单怎么识别);`[待确认]` 是按默认值假设的内容(阈值、发布时间、一周从哪天算起);数字取不到写「待取数」,异常原因没确认写「待查,负责人 ____」。
交付前自检(逐条判断是/否,有一条「否」就改完再交):
1. 先交了「读者—决策问题—指标清单」,而且每个指标都能说出它回答哪个决策问题?
2. 每个指标都有口径卡,时间口径(下单/支付/完成、周的起始日)写死了?
3. 率类指标都是总分子 ÷ 总分母,没有对各组的率求平均?
4. 每个数都配了对比(上期、去年同期或目标),并写了数据截至时间?
5. 异常阈值写在看数据之前,异常都有「现象—原因—影响—动作」?
6. 报表里没有编造或估算填空的数字?
## 示例
(示例)周报「看不出重点」——
**用户**:报表怎么做,老板说我的周报全是数,看不出重点。
**助手先问**:① 这份周报谁看、在哪看?② 他看完要决定什么?③ 现在周报里有哪些指标?
**用户**:销售总监看,周一早上在手机上看。他主要想知道要不要调各区域的促销资源。现在有 14 个指标:销售额、订单数、客单价、访客、转化率、退款率……
**助手交付**:
```
读者 销售总监 1 人;周一早上手机上看;约 2 分钟
决策问题 下周促销资源要不要在区域之间调整
必要的数 各区域销售额(对比周目标、上周)→ 判断哪里掉了
掉了的区域再看订单数和客单价 → 判断是量的问题还是价的问题
移到附表 访客、转化率、退款率等其余 11 个指标(不直接回答这个决策)
```
```
××业务周报|____ 年第 __ 周(__ 月 __ 日至 __ 月 __ 日)
数据截至 __ 月 __ 日 24:00|口径版本 v__|每周一 10:00 发布
一、本周结论(最多 3 条,每条带数字和对比)
1. 销售额 ____ 万元,环比 ____%,完成周目标 ____%
2. 掉得最多的是 ____ 区域(环比 ____%),主要是 ____(订单数 / 客单价)下降,原因 ____(已确认 / 待查)
3. 建议 ____ 区域的促销资源 ____,请 ____ 在周二 12:00 前回复
二、各区域 | 区域 | 本周销售额 | 周目标 | 完成率 | 环比 | ▲▼ |(按完成率从低到高排)
三、异常(只列超阈值的) 现象 — 原因 — 影响 — 动作 — 负责人
附表 其余 11 个指标
```
改动说明:14 个指标砍到正文 3 个;结论先行、每个数都带对比;按完成率从低到高排,最需要关注的区域排在最前;手机上看,所以正文只留一张窄表。
按区域和渠道拆的月报完整交付(口径卡、表结构、透视表摆法、图表、异常规则、脚本体检输出)见 [examples/monthly-report-region-channel.md](examples/monthly-report-region-channel.md)。
## 常见问题(FAQ)
**Q:指标太多,删哪些?**
A:逐个问「拿掉它,这个决策受不受影响」;不受影响的移到附表或删掉。管理层版本正文不超过 5 个指标。
**Q:两份报表同一个数对不上,谁对?**
A:多数是口径不同:时间字段、周的起始日、剔除规则、截至时间。把两边的口径卡并排比,定一个为准,另一个在数据说明里注明差异。
**Q:透视表汇总出来和明细对不上?**
A:先查三样:筛选或切片器没清、明细里有空白行、数字存成了文本(值变成「计数」就是信号)。用 `csv_profile.py` 体检明细最快。
**Q:环比超过多少算异常?**
A:默认环比超过 ±20% 且绝对变化够大,或超出近 8 期均值 ±2 倍标准差;阈值要在看数据之前定,并按业务波动调整。
**Q:数据还没取到,能先出模板吗?**
A:能。数字位置留 `____`,取不到的写「待取数」;不用编的示例数字占位,免得被当真。
**Q:报表发出去才发现错了怎么办?**
A:发更正说明:错在哪、正确的数、影响哪些结论;不悄悄替换附件。
**Q:能帮我从公司系统里直接取数吗?**
A:不能,本技能不接任何内部系统、数据库或 BI 平台;数据由你导出成 Excel 或 CSV 提供,含姓名、手机号的先脱敏。
## 常见错误(反模式)
| 错误做法 | 为什么错 | 正确做法 |
|---|---|---|
| 把各区域转化率求平均当总转化率 | 小区域会把结果带偏 | 率只能用总分子除以总分母 |
| 口径悄悄变(本周起剔除退款却没写) | 趋势图凭空出现一个断崖,读者会误判 | 口径带版本号,变更写进数据说明,趋势图上画竖线 |
| 只有数没有对比 | 读者判断不了好坏 | 每个数至少配一个参照:上期、去年同期或目标 |
| 周的定义各用各的 | 两份周报差出一天的数 | 口径卡里写死一周从周几算起 |
| 发现异常就删掉,或者只标红不写原因 | 问题被藏起来,也没人跟进 | 异常不删不改,写「现象—原因—影响—动作」,原因未确认写待查和负责人 |
| 不写数据截至时间 | 读者拿周三的数和周五的数比 | 标题下写明「数据截至」 |
| 指标越加越多 | 重点被淹没,老板看不出要决定什么 | 每加一个指标,先说清它回答哪个决策问题 |
| 图标题只写「××趋势」 | 读者要自己找结论 | 标题直接写结论,重点线用深色 |
| 展示表手敲数字 | 改一处漏一处,和明细对不上 | 明细存长表,展示表由透视表或公式生成 |
| 取不到的数先估一个填上 | 估的数会被当成真的用 | 写「待取数」 |
## 边界与不做什么
- 不接任何内部系统、数据库或 BI 平台,不代为取数;数据由用户导出成 Excel 或 CSV 提供。
- 不做资产负债表、利润表、现金流量表等会计报表的编制、审计与税务处理,这些找会计或审计师。
- 不给投资建议,不对经营结果做预测或承诺;报表里的归因是假设,由业务负责人确认。
- 不对具体员工下绩效结论;含姓名、手机号的明细先脱敏再处理。
- 口径跨部门有分歧时,由双方负责人对齐,本技能只负责把分歧摆清楚。
Files in this skill
- SKILL.md
- examples/monthly-report-region-channel.md
- references/templates.md
- scripts/anomaly_flag.py
- scripts/csv_profile.py
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.