竖屏版损益同期对比分析图制作指南:Excel/PowerBI/Python全流程
损益同期对比几乎是财务汇报里最常做的一张分析但多数版本都是横向宽屏、塞满十几个科目的折线柱状图放到手机上看基本没法用。这次我们直接解决“竖屏版”这个需求从数据口径、指标计算、图表类型到输出尺寸给出一套损益同期对比分析综合图表的完整制作方案覆盖 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(years1) 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 竖屏信息层级竖屏页面的阅读顺序通常是自上而下因此要把最重要的结论放在顶部第一屏。推荐的布局是标题区项目名称、报告期、数据单位。核心结论区三项关键数字卡片如“营业收入变动率”“净利润变动率”“净利润变动额”。主体图表区损益瀑布图或科目对比柱状图。明细分析区期间费用对比双柱图加折线图。补充信息区贡献度条形图、口径注释、数据来源。和宽屏从左到右的阅读习惯不同竖屏必须让读者在第一个屏幕内就看到最重要的“涨或跌”。如果第一屏全是标题和筛选器用户往下滑两屏才看到图表汇报效果会大打折扣。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 中通常要用“增长柱”和“占位柱”两个系列来实现。实际操作步骤选中科目名称、占位值、显示值三个列插入“堆积柱形图”。将“占位”系列填充色设为“无填充”。调整科目顺序营业收入、营业成本、税金及附加、销售费用、管理费用、财务费用、其他收益、营业利润、净利润。为上升和下降的柱子分别设置正向颜色和警示色。添加数据标签显示金额单位统一保留两位小数。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 中先把页面设置为纵向并手动调整宽度和高度选择“页面布局” - “纸张大小” - 选择 A4 纵向。在图表的整体排版区域将画布宽度设置为 21 厘米高度设置为 37.3 厘米比例接近 9:16。如果只是屏幕展示不打印建议直接使用“自定义视图”或留出顶部标题行按 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), dpi150) # 数据准备 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(axisx, rotation30) # 第二张图本期与上年同期对比 width 0.4 x range(len(df)) axes[1].bar(x, df[本期], widthwidth, label本期) axes[1].bar([i width for i in x], df[上年同期], widthwidth, label上年同期) axes[1].set_xticks([i width / 2 for i in x]) axes[1].set_xticklabels(df[科目], rotation30) axes[1].legend() # 第三张图变动率 colors [#C00000 if v 0 else #4472C4 for v in df[变动率]] axes[2].barh(df[科目], df[变动率], colorcolors) 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, dpi150)这段代码是演示级真实使用时建议把数据源换成 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 自动化。下一版扩展方向可以加入预算达成率、现金流联动、多期趋势预测以及更细粒度的成本结构对比。