You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerQuery中如何指定fill down填充行数实现限定步长向下填充

PowerQuery 限定步长向下填充+向上填充实现方法

实现逻辑

默认的「向下填充」功能会将非空值填充至下一个非空值出现的位置,无法直接限制填充行数。我们可以通过索引列标记每个客户值的起始位置,先完成限定6行范围的定向向下填充,再对剩余空值执行向上填充,即可达到每8行归为一个客户分组的效果。

分步操作指引

  • 步骤1:导入原始数据表后,添加从0开始的索引列
    操作路径:「添加列」选项卡 > 「索引列」> 选择「从0开始」,新增列默认名称为Index
  • 步骤2:标记所有Client非空值的行位置
    新增自定义列,列名设为ClientStartRow,输入公式:
    = if [Client] <> null then [Index] else null
    
  • 步骤3:对ClientStartRow列执行默认向下填充
    选中ClientStartRow列,点击「转换」选项卡 > 「填充」> 「向下」,此时每一行都会匹配到上方距离最近的Client非空值所在的索引行号
  • 步骤4:对原始Client列执行默认向下填充,得到临时填充列
    选中原始Client列,同样执行「填充」>「向下」,将该列重命名为TempFilledClient
  • 步骤5:生成限定6行范围的第一次填充结果
    新增自定义列,列名设为Client_FirstStep,输入公式:
    = if [Index] - [ClientStartRow] <= 6 then [TempFilledClient] else null
    
    该公式判断当前行与最近的上方Client起始行的偏移量,偏移量不超过6(即起始行+下方连续6行)时保留填充值,其余位置置空
  • 步骤6:清理临时列
    删除原始Client、ClientStartRow、TempFilledClient三列,将Client_FirstStep重命名为Client
  • 步骤7:执行向上填充补全剩余空值
    选中新的Client列,点击「转换」选项卡 > 「填充」>「向上」,剩余空值会自动匹配下方距离最近的Client值,最终完成每8行对应一个客户的分组效果。

可直接复用的M代码示例

如果需要直接在高级编辑器中修改代码,可参考以下核心逻辑(替换你自己的源步骤即可):

let
    源 = 你的原始数据表步骤,
    已添加索引 = Table.AddIndexColumn(源, "Index", 0, 1, Int64.Type),
    已添加起始行标记 = Table.AddColumn(已添加索引, "ClientStartRow", each if [Client] <> null then [Index] else null),
    向下填充起始行 = Table.FillDown(已添加起始行标记,{"ClientStartRow"}),
    临时向下填充Client = Table.FillDown(向下填充起始行,{"Client"}),
    重命名临时列 = Table.RenameColumns(临时向下填充Client,{{"Client", "TempFilledClient"}}),
    第一次限定步长填充 = Table.AddColumn(重命名临时列, "Client", each if [Index] - [ClientStartRow] <=6 then [TempFilledClient] else null),
    删除临时列 = Table.RemoveColumns(第一次限定步长填充,{"ClientStartRow", "TempFilledClient", "Index"}),
    向上填充补全 = Table.FillUp(删除临时列,{"Client"})
in
    向上填充补全

注意:如果需要调整向下填充的行数,只需要修改公式里的<=6数值即可,不需要改动其他逻辑。


内容的提问来源于stack exchange,提问作者Rafael N. De Pietro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 11:00:58