第一篇《如何在Tableau中进行杜邦分析》讲的是怎么填数据、怎么看那棵杜邦树。那篇把扩展当成一个结构查看器在用:拖一年的数进去,树上标出 ROE、销售净利率、资产周转率、权益乘数,你顺着父子关系往下点,能看到管理费用吃掉了几个点的净利率。
但 ROE 是一个会变的数。今年 15%,去年 12%,中间差 3 个百分点。静态的树只能告诉你今年 ROE 是 15%,说不出这 3 个点是净利率涨出来的、还是权益乘数(杠杆)加上去的。
ROE 变动归因就是我们后来单独加进扩展的一个模块,专门回答这个问题。它没写进第一篇,因为它和怎么填数、怎么看树不是一回事,它有一套独立的财务分析依据,是杜邦树之上的一层分析。这篇文章把它单独拆开讲:怎么用、背后的原理、以及我们为什么选了现在这套做法。
一、它回答的问题
ROE = 销售净利率 × 资产周转率 × 权益乘数。三个因子任意一个动了,ROE 都动。归因要做的是把 ROE 的变动拆回去,告诉你每个因子各贡献了多少个百分点(pp)。
一个实际的读法:ROE 从 12% 涨到 15%,归因说"净利率贡献 +2.0pp、周转率贡献 +0.8pp、权益乘数(杠杆)贡献 +0.2pp"。你马上知道这次 ROE 的提升主要靠盈利改善,不是靠加权益乘数(杠杆)。反过来,如果三个里权益乘数(杠杆)占了大头,那 ROE 涨得虚,钱是借出来的。
这就是归因存在的意义:把"ROE 涨了"翻译成"谁让它涨的"。
二、怎么用
归因不是默认就显示的,它有两个硬前提。
前提一:得有两个期间。 归因比的是两个期间之间的差异(ΔROE = 报告期 ROE − 基期 ROE),所以数据里至少得有两个不同的期间,而且"期间"字段必须拖进扩展的「期间」编码槽。只拖一年、或者把期间字段拖到详细信息架(不进期间槽),归因都不会出现。扩展默认拿最新一期当报告期、次新一期当基期,两个下拉各自独立,你可以手动改成任意两期;如果把基准期和显示期选成同一期,对比自然消失。
前提二:三个比率得有意义。 净资产 ≤ 0、营业收入 = 0、或者 总资产 = 0 时,权益乘数 / 净利率 / 周转率里至少有一个算出来没有财务含义,归因会直接停用并提示原因,不会静默给你一个 0。这是有意的:这种数据下硬算归因会误导人。
满足这两点,归因自动出现,由两部分组成:
抽屉。 图表右侧有个抽屉把手。收起时是一行摘要,告诉你 ROE 比基期变了多少 pp;点开是瀑布图加明细表。瀑布图首尾两根是 ROE 的总量(从基期到报告期),必须从 0 画起,中间三根各因子的增量用虚线串起累积高度,一眼能看出是谁拉着 ROE 走。截断的纵轴会夸大变动,所以我们坚持从 0 起。
贡献胶囊。 树上每个节点右侧有个小胶囊,直接标这个节点对 ROE 变动的贡献(pp)。配置页里你可以选胶囊显示什么:只显示 pp、只显示占比、或者两者都显示。
占比的口径要单独说一句。单个因子的贡献额除以 ΔROE 得到一个占比,但 ΔROE 接近 0 时这个占比会失真,分母太小,正负被放大,一个 +0.1pp 的因子可能算出 +500% 的占比。所以我们做了三档:
- 占比含正负:正贡献为正、负贡献为负,正常情况用它;
- 占比取绝对值:所有因子按绝对值算占比,适合某因子贡献极小、正负占比失去意义时;
- 自动:默认占比含正负,只有
|ΔROE| < 0.01pp时才自动降级成绝对值。
配置页里归因这一组共五项:归因总开关、显示贡献胶囊、胶囊内容(pp / 占比 / 两者)、占比口径(自动 / 含正负 / 绝对值)、抽屉默认展开。前四项控制归因的呈现,最后一项控制打开工作簿时抽屉是开着还是收着。
三、原理:顺序替代法
归因用的是顺序替代法(也叫连环替代法),是杜邦分析里拆解变动的标准做法。
ROE = M × T × L(M 净利率、T 周转率、L 权益乘数)。我们有基期的一组 (M₀, T₀, L₀) 和报告期的一组 (M₁, T₁, L₁)。顺序替代法的做法是:从基期出发,按固定顺序把因子一个一个换成报告期的值,每换一个,ROE 的增量就是那个因子这一轮的"贡献"。
顺序固定为 净利率 → 周转率 → 权益乘数(M → T → L),这是教材惯例:先动盈利能力,再动营运能力,最后动资本结构。
用一组数走一遍。假设:
| 净利率 M | 周转率 T | 权益乘数 L | ROE = M×T×L | |
|---|---|---|---|---|
| 基期 | 10% | 1.0 | 2.0 | 20% |
| 报告期 | 12% | 1.1 | 2.0 | 26.4% |
ΔROE = 26.4% − 20% = 6.4pp。
从基期 (10%, 1.0, 2.0) 开始,ROE = 20%:
- 换净利率:
(12%, 1.0, 2.0)→ROE = 24%。这一步增量24% − 20%= +4.0pp,记给净利率。 - 换周转率:
(12%, 1.1, 2.0)→ROE = 26.4%。增量26.4% − 24%= +2.4pp,记给周转率。 - 换权益乘数:
(12%, 1.1, 2.0)→ROE = 26.4%。增量 0,0pp,记给权益乘数(杠杆)。
三笔加总:+4.0 + 2.4 + 0 = 6.4pp,正好等于 ΔROE。这里权益乘数(杠杆)没动,所以贡献是 0;如果权益乘数(杠杆)也变了,第三步就会分出对应的 pp。
这个方法最关键的性质是链条闭合、零残差:三个因子的贡献额加起来严格等于 ROE 的变动,没有第四笔"交互项"要解释。能做到这一点,是因为我们的杜邦树里净利率的分母和周转率的分子是同一个数(营业收入),三因子相乘能严格还原 ROE = 净利润 ÷ 净资产,中间的收入项约得掉。一般公司自己搭的杜邦模型常常在这里对不拢(净利率用营业收入、周转率用主营业务收入,两个分母不一样),约不掉就会多出一个残差。我们定死口径,就是为了换来求和点。
占比那栏就是拿每笔贡献除以 ΔROE:净利率 4.0 ÷ 6.4 ≈ 62.5%,周转率 2.4 ÷ 6.4 ≈ 37.5%,权益乘数(杠杆) 0%。负号代表这个因子在拖 ROE 后腿,是预期内的,不是 bug。
四、为什么是顺序替代法,不是对数分解法
顺序替代法有个绕不开的脾气:单个因子的贡献额跟替代顺序有关。换个顺序,三步分到的 pp 不一样,但三者之和不变,变的是功劳怎么分给三个因子。
财务分析里还有另一种做法能避开这个顺序问题:对数分解法。把乘积取对数,ln(ROE) = ln M + ln T + ln L,ROE 的变动就变成三个对数项变动之和,各因子的贡献天然对称、可加总,不依赖你先换哪个因子。它也有硬伤:不直观,解释性比顺序替代法弱,这是它的模型决定的;而且对数要求每个因子严格大于 0,踩到 0 或负数就无定义。
对普通公司的财务分析,顺序替代法已经够用:结果以 pp 呈现,能直接加减验证,读图的人一眼懂。所以我们没把对数分解法加进扩展。
五、边界和已知限制
- 归因固定三因素,顺序是 净利率 → 周转率 → 权益乘数,不可改。
- 必须有「期间」槽且至少两个不同期间,否则不显示。
净资产 ≤ 0/营业收入 = 0/总资产 = 0时停用并提示,不显示 0。- 它只解释 ROE 的变动来自哪个因子,不解释"为什么净利率会涨",那是你点开树、看管理费用那一层要回答的事。
- 不是五因素杜邦,也不是归母净利润口径。
六、小结
ROE 变动归因是杜邦分析扩展里独立加的一层:静态的树告诉你 ROE 现在是多少,归因告诉你 ROE 这段变动是谁造成的。它用顺序替代法把 ΔROE 拆成三个因子的贡献,链条闭合、零残差,以 pp 呈现;我们用固定顺序锁死替代顺序,避开"同一数据两个答案";对数分解法更对称但我们没选,因为它牺牲了财务直觉和对负值的包容。前提就两个:有两个期间、三个比率有意义,满足后抽屉和贡献胶囊自动出现。
No comments yet