桑基图凭借其清晰展示流向与比例的能力,已成为财务和投资分析领域的经典可视化工具。你可能见过类似下图的应用——用桑基图呈现的微软2025财年第四季度利润结构:
这种直观呈现”收入从何而来、流向何处、最终结余多少“的图表非常直观。但长期以来,PowerBI中在制作这种效果时存在明显局限,我们只能依赖专业的桑基图工具来实现。
随着本月更新的发布,用PowerBI中的自定义图表Sankey Chart by Powerviz,让制作这种桑基图成为现实。
今天我将手把手带你用PowerBI这个视觉对象来制作媲美专业工具的利润表桑基图。
1. 准备数据
Sankey Chart by Powerviz 在数据结构的要求上与以往常用的桑基图有所不同。传统桑基图通常只需要“来源”和“目标”两个字段,通过两者之间的相互转换来构建多层流动关系。
而新的桑基图则要求每一层级都单独对应一个字段。因此,在制作利润表桑基图时,你需要根据希望展示的层级数量准备相应数目的层级字段,如下图所示:
这份示例数据结构基于微软2025财年利润表整理,主要反映收入的构成来源及其最终分配到哪些项目。数据中仅包含一列金额数值,确保在每一个层级中,各项目均能对应正确的金额。
如果想在桑基图中嵌入图标,可以分别为每个层级都添加对应的图标列,这里我只让层级1显示图标,只做了一列图标,利用在线URL来存放。
注:这里的图标主要是说明如何在桑基图中嵌入,并不一定和实际业务完全对应。
2. 制作桑基图
在报表画布上添加Sankey Chart by Powerviz,把数据字段的每个层级、金额、图片依次拖拽进相应的字段框中:
刚放进来的初始效果看起来不仅不美观,还显得非常杂乱,没关系,下面我们来一步步美化~
调整标题和数据单位
通过格式窗格修改标题和数据标签单位:
更多的美化效果通过单击右上角的齿轮“⚙️”图标,进行高级设置。
节点格式
通过Chart options设置节点的形状、圆角以及连接线的透明度等,这里主要设置是垂直内边距Vertical Node Padding,我把它修改为40,这样收入节点高度就会缩短,其他层级的节点同比例缩小,防止节点太拥挤。
数据标签
通过Labels设置数据标签的内容、位置、颜色、大小以及是否换行显示。

图像
通过Images设置图表的格式,只有在把图像字段拖入到Images字段框中,才可以进行此项设置。
选择By node Level进行按层级设置,这里只让第一个层级显示我们放入的图标字段,其他都设置为none,这样在其他层级的节点就看不到图标了。
并将图标设置为左端外侧显示。
排序
通过Sorting功能对节点进行排序,这里按照金额降序排列。
颜色设置
每个节点和连接线的颜色支持分别设置,进入Data Colors,模式模式“By Category”,然后就可以每个层级分别设置了。
你可以自由选择某个颜色,这里为了复刻上面的桑基图,后面三个层级中,和利润有关的额节点都设置为绿色,其他节点设置为红色:
移除空值节点
如果数据表中某个层级含有空值(本示例层级5含有空值),空值也会有个单独的节点,这种情况下可以通过Chart Options中,勾选“Remove Null/Blank nodes”来移除:
至此,主要的格式设置完成,出来了一个大致的效果:
关于节点的垂直位置,需要手动拖拽,最终呈现如下的效果。
基本复刻出了专业工作制作的利润表桑基图。
实际体验下来,Sankey Chart by Powerviz还有一些瑕疵,或者不够灵活的地方需要改进:
1、连接线不会自动撑满整个节点,目前只能通过调整视觉对象尺寸来尝试修正。
2、同一层级的节点没有自动垂直对齐选项,手动拖动更改后难以实现完全对齐;
3、排序只能按照整个层级进行排序,无法在同一个节点的子节点内排序;
4、节点颜色无法按条件格式来设置,手动一个个设置太繁琐;
5、如果设置了TOPN和其他,其他项的连接线不能强制显示在最后。
希望这些不足之处也能尽快完善。
不过现在能有这个效果已经相当满意了,后面我也会继续制作资产负债表和现金流量表的桑基图。