同比环比等财务统计表
用原始月销售表,在复杂报表里按步骤做出环比、同比、占比、排名和累计。
用一张只有年份、月份、销售额的原始表,在复杂报表设计器里做出「同比环比等财务统计表」:月份环比、年份同比、占当年比重、年内排名、总排名、年内累计、总累计。环比和同比都不在数据库里预先算好。层次坐标写法见 层次坐标。
适用场景:按年、月看销售额,需要本月相对上月、相对去年同月、占全年的比重,以及名次和累计。数据必须是连续的月份,且按年份、月份排好。
1. 做出来是什么样
每一行是一个年月。年份相同的行,年份列合并成一块。1 月没有环比(空白,不用上一年的 12 月)。2010 年整年没有同比(没有 2009 年)。
| 列 | 口径 |
|---|---|
| 月份环比 | 本月 ÷ 上月。显示成百分比,所以 4015 ÷ 2362 是 170%,不是增长 70%。 |
| 年份同比 | 本月 ÷ 去年同月。2011 年 1 月 58333 ÷ 2362 是 2470%。 |
| 占比 | 本月 ÷ 当年 12 个月合计,按整数百分比。 |
| 年内排名 | 同一年里,销售额从高到低,第 1 名最大。 |
| 总排名 | 全部 24 个月里从高到低。 |
| 年内累计 | 从该年 1 月加到本月。 |
| 总累计 | 从 2010 年 1 月加到本月。2011 年 12 月为 792,685。 |
2. 准备原始数据
演示数据源 VRDemo 中的表 fin_month_sales,字段:
| 字段 | 含义 |
|---|---|
sale_year | 年份,如 2010 |
sale_month | 月份,1 到 12 |
amount | 销售额,整数 |
2010 年 12 个月依次为:2362、4015、2729、1001、7135、2546、9579、23981、26381、37516、45600、45240。
2011 年 12 个月依次为:58333、38030、38161、51830、37377、36208、51021、44088、55629、64305、38220、71398。
若库里还没有这张表,在数据源里执行一次下面的语句(这是建表,不要当成报表数据集的 SQL):
CREATE TABLE fin_month_sales ( sale_year INTEGER NOT NULL, sale_month INTEGER NOT NULL, amount INTEGER NOT NULL, PRIMARY KEY (sale_year, sale_month) ); INSERT INTO fin_month_sales (sale_year, sale_month, amount) VALUES (2010, 1, 2362), (2010, 2, 4015), (2010, 3, 2729), (2010, 4, 1001), (2010, 5, 7135), (2010, 6, 2546), (2010, 7, 9579), (2010, 8, 23981), (2010, 9, 26381), (2010, 10, 37516), (2010, 11, 45600), (2010, 12, 45240), (2011, 1, 58333), (2011, 2, 38030), (2011, 3, 38161), (2011, 4, 51830), (2011, 5, 37377), (2011, 6, 36208), (2011, 7, 51021), (2011, 8, 44088), (2011, 9, 55629), (2011, 10, 64305), (2011, 11, 38220), (2011, 12, 71398);
3. 新建报表和数据集
- 打开 数据分析 → 复杂报表,新建报表,进入设计器。
- 左侧 数据集 → 模板数据集 → + 新建 → 数据库查询。
- 数据集名称填
ds1,数据源选 VRDemo。 - SQL 只查原始列,并按年、月排序:
SELECT sale_year AS 年份, sale_month AS 月份, amount AS 销售额 FROM fin_month_sales ORDER BY sale_year, sale_month
- 预览数据集,应看到 24 行。第一行是 2010 年 1 月、2362,最后一行是 2011 年 12 月、71398。保存数据集。
4. 画表头
第 1 行是标题,第 2 行是列名,第 3 行是数据模板(预览时向下扩展成 24 行)。列的用途如下。B 列只给公式用,最后会隐藏。
| 列 | 第 2 行标题 | 预览时 |
|---|---|---|
| A | 年份 | 显示,相同年份合并 |
| B | 月份序 | 隐藏。存 1~12,公式用这个数字 |
| C | 月份 | 显示「1月份」「2月份」 |
| D | 销售额 | 显示 |
| E | 月份环比 | 显示 |
| F | 年份同比 | 显示 |
| G | 占比 | 显示 |
| H | 年内排名 | 显示 |
| I | 总排名 | 显示 |
| J | 年内累计 | 显示 |
| K | 总累计 | 显示 |
- 在
A1输入同比环比等财务统计表。选中A1到K1,点工具栏 合并单元格。标题居中、加粗即可。 - 在第 2 行按上表写入列名。表头加底色、白字、加粗,并给表格加边框,方便预览对齐。
5. 绑定年份、月份和销售额
从 ds1 把字段拖到第 3 行,然后在右侧 单元格属性 → 基本 改聚合、扩展和左主格。
| 单元格 | 字段 | 聚合类型 | 扩展方向 | 左主格 | 格式 |
|---|---|---|---|---|---|
A3 | 年份 | 分组 | 纵向扩展 | 无 | 常规 |
B3 | 月份 | 分组 | 纵向扩展 | 自定义,填 A3 | 常规 |
D3 | 销售额 | 求和 | 不扩展 | 自定义,填 B3 | 数值,#,##0 |
扩展方向是属性栏里的三个图标:不扩展、纵向扩展、横向扩展。左主格先把下拉从「默认」改成 自定义,再填写单元格地址。
A3 按年份分成两大段,B3 在每一年里按月展开,D3 跟着当前月份,不自己再扩展。
6. 月份显示成「1月份」
- 选中
C3。 - 公式栏输入:
=CONCAT(B3, "月份")
- 扩展方向:不扩展。左主格:自定义
B3。
预览时应看到 1月份、2月份……12月份,而不是裸数字。数字仍留在隐藏的 B 列,给后面的判断用。
7. 写入六个公式
E3 到 K3 全部:不扩展,左主格 自定义 B3。在公式栏输入时以 = 开头,下面列出等号后面的内容。
金额用 D3[B3:-0] 表示「当前这一月的销售额」。不要在除法里直接写 D3:D3 设了千分位之后,显示值是带逗号的文字,直接相除会得到 0%。
7.1 E3 月份环比
格式:百分比,格式模式 0%。
if (B3 == 1) { null } else { D3[B3:-0] / D3[B3:-1] }
B3 == 1 时留空,这样 1 月不会去拿上一年的 12 月。D3[B3:-1] 是紧挨着的上一个月。
7.2 F3 年份同比
格式:百分比 0%。若你的数据第一年不是 2010,把 2010 改成数据里最小的年份。
if (A3 == 2010) { null } else { D3[B3:-0] / D3[A3:-1]{B3==B3} }
D3[A3:-1] 是上一年的 12 个月,{B3==B3} 留下和当前月份相同的那一个。
7.3 G3 占比
格式:百分比 0%。
D3[B3:-0] / SUM(D3[]{A3==A3})
分母是当年 12 个月合计。不足 0.5% 的月份会显示成 0%,例如 2010 年 4 月 1001 ÷ 208085。
7.4 H3 年内排名
格式:数值 0。
COUNT(D3[]{A3==A3 && D3>D3[B3:-0]}) + 1
同年里比本月更大的月份有几个,名次就是这个数加 1。2010 年 11 月 45600 最大,排名为 1;4 月 1001 最小,排名为 12。
7.5 I3 总排名
格式:数值 0。
COUNT(D3[]{D3>D3[B3:-0]}) + 1
不再限制年份。2011 年 12 月 71398 是全部最大,总排名为 1。2010 年 4 月是最小,总排名为 24。
7.6 J3 年内累计
格式:数值 #,##0。
SUM(D3[]{A3==A3 && B3<=B3})
2010 年 1 月累计就是 2,362。2010 年 2 月是 2,362 + 4,015 = 6,377。2010 年 12 月是当年合计 208,085。2011 年 12 月是 584,600。
7.7 K3 总累计
格式:数值 #,##0。不要去加 J3:J3 显示成带千分位的文字后再相加,会拼成一长串数字。总累计自己再按销售额求和。
if (A3 == 2010) { SUM(D3[]{A3==A3 && B3<=B3}) } else { SUM(D3[]{A3==A3 && B3<=B3}) + SUM(D3[]{A3<A3}) }
2010 年的总累计等于年内累计。2011 年再加上 2010 年全年。2011 年 1 月是 58,333 + 208,085 = 266,418。2011 年 12 月是 584,600 + 208,085 = 792,685。
8. 隐藏月份数列并预览
- 在列标 B 上单击右键,选择 隐藏。设计器里仍可从列标取消隐藏。预览、导出不再显示「月份序」。
- 点 保存。
- 点 预览 → 分页预览。
对照下面几行即可判断公式是否写对:
| 年月 | 销售额 | 月份环比 | 年份同比 | 占比 | 年内排名 | 总排名 | 年内累计 | 总累计 |
|---|---|---|---|---|---|---|---|---|
| 2010 年 1 月 | 2,362 | 空白 | 空白 | 1% | 11 | 23 | 2,362 | 2,362 |
| 2010 年 2 月 | 4,015 | 170% | 空白 | 2% | 8 | 20 | 6,377 | 6,377 |
| 2010 年 4 月 | 1,001 | 37% | 空白 | 0% | 12 | 24 | 10,107 | 10,107 |
| 2010 年 11 月 | 45,600 | 122% | 空白 | 22% | 1 | 7 | 162,845 | 162,845 |
| 2011 年 1 月 | 58,333 | 空白 | 2470% | 10% | 3 | 3 | 58,333 | 266,418 |
| 2011 年 3 月 | 38,161 | 100% | 1398% | 7% | 9 | 11 | 134,524 | 342,609 |
| 2011 年 12 月 | 71,398 | 187% | 158% | 12% | 1 | 1 | 584,600 | 792,685 |
2011 年 3 月同比是 38161 ÷ 2729,按整数百分比是 1398%。占比很小的月份显示 0% 是四舍五入到整数的结果。
9. 换自己的数据时改哪里
- 表名、字段名不同:只改数据集 SQL 里的列,单元格仍绑定「年份、月份、销售额」这三个名字。若别名改了,拖字段的格子要重新拖。
- 第一年不是 2010:把 F3、K3 里的
2010改成你的第一年。 - 月份不连续,或 SQL 没有
ORDER BY 年份, 月份:B3:-1不再是日历上的上一个月。 - 要做成「增长率」而不是「本月是上月的百分之几」:环比改为
(D3[B3:-0] - D3[B3:-1]) / D3[B3:-1],同比同理。1 月和第一年的if判断保留。
10. 预览不对时先看这几处
环比、同比、占比全是 0%。 除法里写成了带千分位的 D3。改成 D3[B3:-0],上一月、去年同月仍用坐标。
排名全是 13,或比实际月份数大 1。 条件右边没有取到当前金额,每一个月都被当成比当前大。确认写成 D3>D3[B3:-0],并且公式格左主格是 B3。
总累计在第二年变成很长的一串数字。 K3 加的是已经格式化的 J3。按第 7.7 节,两边都用 SUM(D3[]…)。
打开预览就失败,没有表格。 2010 年或 1 月仍在计算 D3[A3:-1]、D3[B3:-1]。用 if 把这些坐标放在条件成立的分支里。
1 月环比等于上一年 12 月的比值。 去掉了 B3 == 1 的判断。:-1 会跨年,1 月必须单独留空。
