☰
竖屏版损益同期对比分析图制作指南:Excel/PowerBI/Python全流程
2026/9/25 0:42:40 网站建设 项目流程

损益同期对比几乎是财务汇报里最常做的一张分析,但多数版本都是横向宽屏、塞满十几个科目的折线柱状图,放到手机上看基本没法用。这次我们直接解决“竖屏版”这个需求:从数据口径、指标计算、图表类型到输出尺寸,给出一套损益同期对比分析综合图表的完整制作方案,覆盖 Excel/WPS、Power BI 和 Python 三条路线。无论你是财务分析师、BI 工程师,还是想自己搭一张移动端看板,本文都可以直接作为参考模板。

竖屏版和普通版的差异不只是“把图旋转一下”。它需要重新设计信息层级、调整对比维度、压缩视觉密度,还要保证在 1080×1920 或 9:16 的页面上,每一个数字和标签都清晰可读。下面从数据侧开始讲,再进入图表设计和落地操作。

1. 需求分析与方案速览

损益同期对比分析的核心目的是回答三个问题:收入和利润是上升还是下降;变化主要来自哪些科目;变化比例和变化金额是否匹配。综合图表则是把这些问题用可视化方式一次性呈现,而不是给出一堆孤立表格。

分析要素方案建议
分析对象营业收入、营业成本、毛利、期间费用、营业利润、净利润
对比口径本期累计 vs 上年同期累计,或本月 vs 上年同月
核心指标变动额、变动率、预算达成率、同期增减贡献度
推荐图表柱状图对比、瀑布图、双柱图、趋势折线图、贡献度条形图
竖屏尺寸Excel 9:16 页面;Power BI 1080×1920 像素;导出 1080×1920 长图
工具选择Excel/WPS 适合单次报表;Power BI 适合自动刷新;Python 适合批量和模板化
输出场景手机端汇报、移动 BI 看板、竖屏大屏、PPT 投屏配合手机查看

从材料看,这个主题的重点不在单一工具,而是“数据处理 + 图表设计 + 竖屏输出”的组合。你不需要同时掌握三个工具,但至少要清楚自己的报表刷新频率和分发渠道。如果只需要每周手动更新,Excel/WPS 完全够用;如果要做自助分析,优先 Power BI 或同类 BI 工具;如果要做批量生成同名报表,Python 更合适。

2. 数据整理:损益表标准结构与对比口径

2.1 数据表必备字段

无论是哪套系统导出的损益数据,最终都要整理成至少包含以下字段的结构:

字段名类型说明
期间日期/文本如 2024-01、2024-02,建议统一为 YYYY-MM 格式
科目编码文本如 6001、6401、6601,用于科目分类汇总
科目名称文本如 营业收入、营业成本、销售费用
本期金额数值当前期间或当前累计的发生额
上年同期金额数值上年同一期间或同期累计的发生额
预算金额数值预算数,用于达成率,按需引入

最关键的是“期间”字段必须是标准化的。很多 ERP 系统导出的期间是“2024年1月”“2024.01”“202401”这类混合格式,统一成 YYYY-MM 再做透视表或关联查询,能省掉后面一多半麻烦。

2.2 对比口径设计

损益同期对比至少有两种口径,必须提前定清楚:

  • 月度口径:2025 年 3 月 对比 2024 年 3 月。
  • 累计口径:2025 年 1-3 月 对比 2024 年 1-3 月。

累计口径更常见,也是财报分析默认口径,因为可以消除单月波动。如果你发现某些科目受季节性影响显著,建议同时保留两类指标:本月数和累计数,并将计算结果放到同一张明细表里。

2.3 数据清洗示例代码

如果从数据库中导出,建议直接写 SQL 做预处理,而不是在 Excel 里手工配对:

SELECT a.period, a.subject_code, a.subject_name, a.amount AS current_amount, b.amount AS previous_amount, a.amount - b.amount AS change_amount, ROUND((a.amount - b.amount) / NULLIF(b.amount, 0) * 100, 2) AS change_rate FROM current_pl AS a LEFT JOIN previous_pl AS b ON a.subject_code = b.subject_code AND DATEADD(YEAR, 1, b.period) = a.period ORDER BY a.period, a.subject_code;

这里需要注意一个细节:如果上年同期金额为零或负数,change_rate会变成无意义值,所以在后续展示时要单独处理为“不适用”或“扭亏为盈/由盈转亏”。

3. 核心指标计算:同比、环比、变动贡献度

3.1 Excel/WPS 公式模板

假设数据从 B 列开始:A 列为科目名称,B 列为本期金额,C 列为上年同期金额,D 列为预算金额,E 列到 H 列放计算结果。

E2 = B2 - C2 F2 = IF(ABS(C2) > 0, E2 / ABS(C2), "基数异常") G2 = B2 / D2 - 1 H2 = IF(SUM($B$2:$B$20)=0, "", E2 / SUM($B$2:$B$20))

其中E2是变动额,F2是变动率。用ABS(C2)做分母,是为了在利润类科目上年同期为负时,仍能正确判断扭亏方向。H2计算的是每个科目变动额占所有科目总变动额的比例,也就是“贡献度”,这张辅助表是用来支撑后面贡献度条形图的。

3.2 Power BI DAX 度量值

如果要做成可交互的自动刷新看板,建议用 DAX 写度量值,而不是建计算列:

本期损益 = SUM('损益表'[本期金额]) 上年同期损益 = CALCULATE( SUM('损益表'[本期金额]), SAMEPERIODLASTYEAR('日期表'[日期]) ) 变动额 = [本期损益] - [上年同期损益] 变动率 = DIVIDE( [变动额], ABS([上年同期损益]), 0 )

SAMEPERIODLASTYEAR依赖于日期表,如果数据集没有日期表,不建议直接套用,需要先补一张连续的日期维度表。

3.3 Python Pandas 计算

批量处理多个月度损益文件时,Pandas 会更方便:

import pandas as pd df = pd.read_excel("pl_raw.xlsx") df["期间"] = pd.to_datetime(df["期间"]) df["上年同期"] = df["期间"] - pd.DateOffset(years=1) merged = df.merge( df, left_on=["上年同期", "科目编码"], right_on=["期间", "科目编码"], suffixes=("_本期", "_上年") ) merged["变动额"] = merged["金额_本期"] - merged["金额_上年"] merged["变动率"] = merged["变动额"] / merged["金额_上年"].abs()

这段代码的核心思路是“自关联”,把同一张表的本期数据和上年同期数据通过“科目编码 + 期间向前推一年”拼接在一起。科目编码必须唯一且稳定,如果科目编码经常调整,建议用辅助映射表。

4. 竖屏版图表设计原则

4.1 竖屏画布设定

竖屏输出的基础尺寸有三档常用场景:

输出渠道尺寸建议说明
手机屏幕浏览1080×1920 像素主流手机长截图比例,约 9:16
微信/内部汇报长图720×1280 像素压缩后仍清晰,文件更小
竖屏大屏/直播屏1080×1920 或 1440×2560用于电视、竖屏拼接屏

在 Excel 中,把页面设置成“A4 纵向”并不能直接得到 9:16,建议把打印区域宽度设为 21 厘米、高度约 37.3 厘米,或者直接导出后裁剪。Power BI 则可以在“页面大小”里选择“自定义”,宽度设置为 1080、高度设置为 1920。

4.2 竖屏信息层级

竖屏页面的阅读顺序通常是自上而下,因此要把最重要的结论放在顶部第一屏。推荐的布局是:

  1. 标题区:项目名称、报告期、数据单位。
  2. 核心结论区:三项关键数字卡片,如“营业收入变动率”“净利润变动率”“净利润变动额”。
  3. 主体图表区:损益瀑布图或科目对比柱状图。
  4. 明细分析区:期间费用对比,双柱图加折线图。
  5. 补充信息区:贡献度条形图、口径注释、数据来源。

和宽屏从左到右的阅读习惯不同,竖屏必须让读者在第一个屏幕内就看到最重要的“涨或跌”。如果第一屏全是标题和筛选器,用户往下滑两屏才看到图表,汇报效果会大打折扣。

4.3 字号与配色

竖屏不是简单缩小宽屏内容。字号需要重新设计:

元素字号/大小建议
主标题32-40pt
关键数字36-48pt
图表标题20-24pt
轴标签和科目标签12-14pt
注释和口径说明10-12pt

配色上建议以“常规色 + 警示色”为主。上涨科目用蓝色或绿色系,下降科目统一用红色系,其他辅助元素用灰色。不要在竖屏图里使用超过四种高饱和颜色,否则在手机上会显得非常混乱。

5. 图表类型选择与制作步骤

5.1 主体图表:瀑布图

瀑布图非常适合展示“营业收入到净利润”的损益过渡关系,是损益同期对比综合图表的核心。它把收入、成本、费用、利润按顺序排列,每一段表示一项金额的增减,直观展示利润形成的链条。

制作瀑布图前需要准备辅助列。以 Excel/WPS 为例,原始数据需要增加“占位”和“增减方向”列:

A列为项目名称,B列为本期金额,C列为上年同期金额 D列为变动额,E列为瀑布图占位值,F列为显示值

瀑布图的数据逻辑:首项“营业收入”从 0 起柱;中间每个科目的柱子起点承接上一科目的累计值;最后“净利润”从累计值落到本期净利润。这一过程在 Excel 中通常要用“增长柱”和“占位柱”两个系列来实现。

实际操作步骤:

  1. 选中科目名称、占位值、显示值三个列,插入“堆积柱形图”。
  2. 将“占位”系列填充色设为“无填充”。
  3. 调整科目顺序:营业收入、营业成本、税金及附加、销售费用、管理费用、财务费用、其他收益、营业利润、净利润。
  4. 为上升和下降的柱子分别设置正向颜色和警示色。
  5. 添加数据标签,显示金额单位,统一保留两位小数。

5.2 明细对比:双柱图 + 趋势折线组合图

期间费用占损益比重通常较高,需要单独做成“本期 vs 上年同期”双柱对比图。对于销售费用、管理费用、研发费用、财务费用,分别显示两期柱高。

Excel 中插入“组合图”:

  • 柱形图系列:销售费用本期、销售费用上年同期、管理费用本期、管理费用上年同期。
  • 折线图系列:各费用科目变动率。

设置完成后,需要注意柱形图分类间距通常设为 30% 左右,避免柱子过宽。若竖屏展示,建议把横向柱形图改成纵向柱形图排列,6 个费用科目两两一组,形成 3 行 2 列的紧凑布局。

5.3 贡献度图:水平条形图

贡献度图用来回答“利润变化主要是谁拉动的”。每个科目的变动额除以整体净变动额,得到一个百分比,用水平条形图展示。

这个图在竖屏中适合放在第三屏,因为它的信息是补充性的。如果整体利润是下降的,你会看到销售费用、管理费用的正贡献度或负贡献度,一眼看出拖累项。

5.4 核心数字卡片

竖屏页面顶部用 2 到 4 个数字卡片,直接给出“营业收入同比 +5.2%”“净利润同比 -12.3%”“毛利变动额 -850 万”这类结论。数字卡片在 Excel 中可以直接用单元格排版,也可以做独立的 KPI 卡片图。

6. Excel/WPS 竖屏版实操流程

6.1 页面设置

在 Excel/WPS 中,先把页面设置为纵向,并手动调整宽度和高度:

  1. 选择“页面布局” -> “纸张大小” -> 选择 A4 纵向。
  2. 在图表的整体排版区域,将画布宽度设置为 21 厘米,高度设置为 37.3 厘米,比例接近 9:16。
  3. 如果只是屏幕展示,不打印,建议直接使用“自定义视图”或留出顶部标题行,按 1080×1920 像素比例设置行高和列宽。

这个过程无法一步到位,需要多次预览。比较实用的做法是先做一个宽 21 厘米、高 37.3 厘米的空白画布,把所有图表放入其中,最后用“文件 -> 导出 -> 导出为 PDF”或另存为单页 PDF 再转长图。

6.2 数据透视表准备

为了实现后续自动刷新,建议先建一个数据透视表:

  • 行:科目名称。
  • 列:期间(筛选本期、上年同期)。
  • 值:金额。

再让图表直接引用透视表数据。这样每次源数据表新增月份后,只需要刷新透视表,图表会自动更新,不需要手工调整数据区域。

6.3 动态筛选器

如果需要在竖屏中切换“本月”和“累计”,可以加两个单选按钮或切片器:

  • 切片器字段为“口径”,两个选项为“本月”和“累计”。
  • 所有图表均连接同一个切片器。
  • 透视表的值区域改用计算字段,根据口径选择返回不同金额。

更直接的办法是添加两个辅助列,先计算出每个科目月度金额和累计金额,再用 GETPIVOTDATA 或直接选择图表数据区域。

7. Power BI 竖屏看板实现思路

7.1 设置 9:16 页面

Power BI Desktop 打开报表,进入“页面大小”:

  • 格式 -> 页面大小 -> 自定义。
  • 宽度:1080 像素。
  • 高度:1920 像素。
  • 背景颜色推荐浅灰或白色,避免深色背景在手机端字体过小的问题。

竖屏页面中,多个视觉对象建议使用 2 列布局,而不是 1 列铺到底。2 列可以让同一屏幕内的信息密度更高,减少上下滑动次数。但也要注意列宽不要小于 320 像素,否则数字会被严重压缩。

7.2 视觉对象搭配

推荐的 Power BI 视觉对象组合:

  • 顶部 KPI 卡片:使用内置卡片图或“文本框 + 度量值”。
  • 损益瀑布图:Power BI 原生“瀑布图”视觉对象,类别放科目名称,Y 轴放金额。
  • 双柱对比图:用“簇状柱形图”,图例放“期间类型”。
  • 费用贡献度图:用“条形图”,按贡献度排序。

实际操作时发现,Power BI 原生瀑布图对“分类汇总”支持有限,净利润不能直接表示为汇总柱。解决方式是在数据源里增加一行“净利润”并标记为汇总,或者使用第三方视觉对象。如果不想引入第三方对象,也可以改用“簇状柱形图 + 数字标签”做损益对比,效果也够用。

7.3 移动端发布

Power BI 生成的竖屏页面可以发布到工作区,在手机端 App 中查看。手机端建议开启“手机布局”编辑器,把桌面端 2 列布局调整为更合适的移动端 1 列布局。如果你的报表只是用来导出长图,也可以跳过手机布局,直接在桌面端“导出为 PDF”或截图。

8. Python 批量生成竖屏损益对比图

如果每个月要给多个事业部或多家公司生成同样的损益对比长图,Python 效率会高很多。基本流程是:读取 Excel 数据、计算对比指标、用 Matplotlib 按 9:16 画布绘制纵向组合图、批量导出 PNG。

8.1 基础绘图脚本

import matplotlib.pyplot as plt import pandas as pd from matplotlib import rcParams rcParams["font.sans-serif"] = ["Microsoft YaHei", "SimHei"] rcParams["axes.unicode_minus"] = False # 设置 9:16 画布 fig, axes = plt.subplots(4, 1, figsize=(9, 16), dpi=150) # 数据准备 df = pd.DataFrame({ "科目": ["营业收入", "营业成本", "毛利", "销售费用", "管理费用", "财务费用", "净利润"], "本期": [12000, 7600, 4400, 1800, 950, 220, 1430], "上年同期": [11000, 7000, 4000, 1700, 900, 180, 1220] }) df["变动额"] = df["本期"] - df["上年同期"] df["变动率"] = df["变动额"] / df["上年同期"].abs() # 第一张图:损益渐变瀑布图(这里用柱状示意,真实场景可换 waterfall 库) axes[0].bar(df["科目"], df["本期"], color="#4472C4") axes[0].set_title("损益科目本期金额") axes[0].tick_params(axis="x", rotation=30) # 第二张图:本期与上年同期对比 width = 0.4 x = range(len(df)) axes[1].bar(x, df["本期"], width=width, label="本期") axes[1].bar([i + width for i in x], df["上年同期"], width=width, label="上年同期") axes[1].set_xticks([i + width / 2 for i in x]) axes[1].set_xticklabels(df["科目"], rotation=30) axes[1].legend() # 第三张图:变动率 colors = ["#C00000" if v < 0 else "#4472C4" for v in df["变动率"]] axes[2].barh(df["科目"], df["变动率"], color=colors) axes[2].set_title("同比变动率") # 第四张图:贡献度 df["贡献度"] = df["变动额"] / df["变动额"].sum() axes[3].barh(df["科目"], df["贡献度"], color="#70AD47") axes[3].set_title("变动贡献度") plt.tight_layout() plt.savefig("pl_compare_vertical.png", dpi=150)

这段代码是演示级,真实使用时建议把数据源换成 Excel 读取和透视表聚合,并对代码做模块化封装。生成的 PNG 分辨率在 9 英寸宽、16 英寸高、150 DPI 下约为 1350×2400 像素,足够手机端查看。

8.2 批量处理目录

批量处理时建议按以下目录组织:

├── data/ │ ├── 公司A_损益.xlsx │ ├── 公司B_损益.xlsx ├── output/ │ ├── 公司A_损益对比_202503.png │ ├── 公司B_损益对比_202503.png ├── scripts/ │ ├── generate_report.py

脚本里只需要遍历data目录,按公司名读取文件,调用同一个函数生成 PNG。文件命名建议包含期间字段,方便后续归档和追溯。

9. 自动化刷新与模板复用

Excel/WPS 和 Power BI 的自动化逻辑不同。

场景自动化方式注意事项
Excel 数据透视表使用 Power Query 连接数据库或文件夹每次打开刷新
Excel 图表模板把图表保存为图表模板 .crtx只能复用图表样式,数据区域仍要重选
Power BI 看板设置计划刷新,连接数据源需要有网关或云端数据集
Python 批量脚本定时任务执行 .py注意内存释放和异常日志

对于需要固定时间出数、发送给管理层的场景,建议优先使用 Power BI 计划刷新或 Python 定时脚本。纯 Excel 手工刷新依赖个人操作,漏刷会直接导致报表数据错误。

模板复用时有一个容易踩的坑:复制含有透视表的工作表时,透视表缓存也会一起复制,最终导致文件体积迅速膨胀。建议每次新建报表时,把“数据源表、透视表、图表”分别放在不同工作表,并定期删除无用的透视表缓存。

10. 常见问题与排查方法

问题现象可能原因排查方式解决方案
上年同期数据对不上期间字段格式不一致检查原始数据日期格式统一为 YYYY-MM
变动率出现上下万上年同期接近零查看对应科目上年基数改为显示“基数异常”或只显示变动额
瀑布图柱子错乱缺少占位系列检查辅助列公式重新按模板构建占位序列
竖屏导出后文字模糊导出尺寸低检查 DPI 和分辨率至少 150 DPI
单位显示不一致有的科目是万元,有的是元检查数据源单位统一单位
Power BI 移动端布局错乱桌面布局直接套用移动端进入手机布局编辑单独设置手机布局
图表更新但数字不变透视表未刷新手动刷新所有透视表设置打开文件自动刷新
净利润与利润表不一致有科目未纳入汇总检查科目范围补全“其他收益”等科目

11. 最佳实践与合规提醒

损益数据属于敏感的财务数据,制作综合图表时要注意以下事项:

  • 数据脱敏:对外演示版本建议使用模拟数据,不要直接使用真实公司名称和真实金额。
  • 口径标注:每个图表下方必须标注“本期累计/本月、含税/不含税、数据单位”,防止误读。
  • 授权边界:涉及多公司汇总时,先确认各公司财务负责人是否允许披露明细科目。
  • 图表复核:发布前至少检查净利润计算公式、期间筛选条件、上年同期日期范围三个关键点。
  • 版本留存:生成最终 PNG/PDF 后,应同时保留原始数据 Excel 和图表模板,方便审计追溯。

竖屏版损益对比分析的核心不是炫技,而是让决策者在手机上 30 秒内看懂利润变化的核心原因。建议先选定一个公司、一个期间,用本文的 Excel 方案跑通数据源和瀑布图,再根据实际汇报反馈决定是否升级到 Power BI 或 Python 自动化。

下一版扩展方向可以加入预算达成率、现金流联动、多期趋势预测,以及更细粒度的成本结构对比。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询