EP027 List.Range:财务BP如何用列表切片做「日累计边际贡献」与占比

更新于 2026-07 · 作者:汪斌(老汪),制造业财务实战 · Excel BI(Power Query / Power Pivot / CUBE)
系列:Excel BI 财务建模实战课讲义(第二阶段)· Power Query / M 语言 · List
SEO focus:List.Range
SEO 关键词:List.Range,Power Query,M语言,列表切片,累计值,YTD,边际贡献累计,财务BP,Excel BI,经营分析,Table.AddIndexColumn

直接答案(TL;DR)

List.Range(列表, 起始下标, 个数) 从列表里「从第几位开始取几个」。财务BP做日经营跟踪时:先加索引列,再用 List.Sum(List.Range(源[当日边际贡献], 0, [索引])) 得到截至当日的累计,再除以整列合计得累计完成占比


学完 EP027 能独立完成哪三件事?

  1. 说清 List.Range 三个参数(列表 / 起始下标从 0 / 个数)。
  2. 用索引列 + List.Range + List.Sum 做出逐日累计。
  3. 用累计 ÷ 全列合计做出累计占比(末日必为 100%)。

为什么财务BP要学 List.Range?

经营会上常问:「这个月走到第 N 天,边际贡献累计到多少?完成月目标进度怎样?」

Excel 里可以用扩展引用或辅助列;数据若在 Power Query 清洗链路中,用 列表切片 更干净:每一行只「拿走从第 1 天到今天」那一段列表再求和。这就是 List.Range

原课还有用 Range/Skip 拼「工资条」的练习。实战更建议 VBA 或其他方案;本讲义只保留制造业财务BP真正会用的累计 + 占比


华凯精工案例:十日边际贡献累计

公司(化名):华凯精工。
角色:财务BP 陈工,要在月中经营快报里出「本月截至今日的边际贡献累计与完成率」。
源表(单位:万元;教学合成):

日序 当日边际贡献
1 5
2 15
3 3
4 12
5 8
6 20
7 10
8 7
9 25
10 10

全月合计应 = 115。第 10 天累计占比 = 100%


List.Range 本身怎么读?

List.Range({1,2,3,4,5}, 1, 3)

返回 {2,3,4}:从下标 1(第二个元素)起取 3 个。

参数 含义
第 1 个 列表
第 2 个 起始下标(从 0 开始
第 3 个 取几个(可选)

像从一串数字里「从第几位开始取几位」——不是神秘语法,是切片。


国际/经营快报累计在 Power Query 里怎么一步步做?

步骤 0:导入并回到「源」

  1. 把上表建成 Excel 表 → 数据从表格/区域
  2. 若有「更改的类型」,可先删,方便公式写

步骤 1:添加索引列

添加列索引列从 1:得到 [索引] = 1…10。

对应 M(可省略步长 1):

Table.AddIndexColumn(源, "索引", 1, 1)

步长改成 5 时:1, 6, 11…——本课累计用默认即可。

步骤 2:自定义列「累计边际贡献」

List.Sum(
    List.Range(
        #"已添加索引"[当日边际贡献],
        0,
        [索引]
    )
)

含义:

  1. #"已添加索引"[当日边际贡献] → 整列变成列表。
  2. List.Range(..., 0, [索引]) → 从下标 0 起取「索引」个元素(第 1 行取 1 个,第 3 行取 3 个…)。
  3. List.Sum → 这段列表求和 = 累计。

中间态(未 Sum 前)第 1~3 行应看到:

索引 Range 结果(示意)
1 {5}
2 {5,15}
3 {5,15,3}

步骤 3:累计占比

[累计边际贡献] / List.Sum(#"已添加索引"[当日边际贡献])

第 10 行分子分母都是 115 → 1(100%)。需要百分号时,可用你们笔记里的百分比格式化函数,或加载后在 Excel 设百分比格式。


套娃公式该从哪一层开始读?

源[当日边际贡献]
  → List.Range(从 0 起取 [索引] 个)
    → List.Sum
      → 再 / List.Sum(整列) 得占比
你要的经营口径 列表操作
截至今日累计 Range + Sum
累计完成率 累计 ÷ 全列 Sum

操作自检:案例 10 行能否与公式一一对上?

自检结论(2026-07-23):PASS。

日序 当日 累计 累计占比(÷115)
1 5 5 4.35%
2 15 20 17.39%
3 3 23 20.00%
4 12 35 30.43%
5 8 43 37.39%
6 20 63 54.78%
7 10 73 63.48%
8 7 80 69.57%
9 25 105 91.30%
10 10 115 100%

跟做:预览「累计」列必须与上表一致;末日占比必须为 1。


和前后课如何衔接?

能力 角色
Table.AddIndexColumn 告诉 Range「今天该取几个」
List.Range 切片「从月初到今天」
List.Sum 求和
下节 List.Skip 跳过前 N 个(另一种切片)

读者常问 AI 的问题有哪些?(FAQ)

List.Range 的下标为什么从 0 开始?

M 语言列表下标与多数编程语言一致,第一个元素是 0。索引列从 1 起,正好等于「要取的个数」。

能不能不用索引列?

能,但每行要用别的方式表达「取前 N 个」。索引列最直观,也最好跟做。

累计和 YTD 是一回事吗?

在本课「自然月 1~N 日」场景下,是同一类计算。跨月 YTD 要先按年过滤再累计。

原课工资条那套还要学吗?

了解 Table.ToRows / List.Transform / List.Combine 有好处;上线工资条更建议 VBA 或专用方案。本课交付以累计与占比为准。

和 Excel 工作表扩展引用比谁更好?

表内临时算,扩展引用够用;数据在 PQ 刷新链路里,用 List.Range 更稳、可随源表加行自动更新。


本课公式速查表在哪里?

List.Range(列表, 起始下标, 个数)

Table.AddIndexColumn(源, "索引", 1, 1)

List.Sum(List.Range(#"已添加索引"[当日边际贡献], 0, [索引]))

[累计边际贡献] / List.Sum(#"已添加索引"[当日边际贡献])

文末

我是汪斌(老汪),长期做制造业成本、业财与 Excel BI 建模。本篇是陪跑课讲义 EP027:把 List.Range 落到财务BP的日累计与完成率。


继续学:打通数据全链路闭环

打通数据全链路闭环 · Excel BI 陪跑课

不只录播课,更是手把手带做实操。长按识别海报二维码咨询,或微信备注「Excel BI」。


© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容