You need to enable JavaScript to run this app. Power BI Power Query M时间序列数据空值线性插值简便实现问询
优惠活动
大模型
产品
解决方案
定价
更多

Power BI Power Query M时间序列数据空值线性插值简便实现问询

Power Query M 无自定义函数的线性插值实现方案

Power Query 原生未提供单步执行线性插值的界面功能,但可以通过内置能力组合实现,无需手动编写完整的插值逻辑函数,两种常用方案如下:

方案1:界面操作实现(适合单空值间隔场景)

  • 提前确认数据已按「州、郡、时间列」升序排序,且每个分组内的时间序列间隔均匀(线性插值的前置要求)
  • 选中需要处理的数值列,依次点击「转换」选项卡→「填充」→「向下」,生成向下填充后的列;再重复操作选择「填充」→「向上」,生成向上填充后的列
  • 新增自定义列计算最终插值结果,公式为:
    if [原始数值列] = null then ([向下填充列] + [向上填充列])/2 else [原始数值列]
  • 计算完成后删除中间生成的填充列即可

注意:该方案仅适用于空值不连续的场景,若存在连续多个空值请使用方案2

方案2:内置List.Interpolate函数实现(适配连续空值场景)

M语言原生内置List.Interpolate函数直接处理列表插值,仅需少量代码调用即可,无需自行实现插值计算逻辑:

  1. 按州、郡字段对数据分组,聚合方式选择「所有行」,生成分组后的子表列
  2. 对分组后的子表列应用转换,示例代码如下:
// 替换代码中对应中文为你实际的列名即可
= Table.TransformColumns(
    上一步生成的分组表,
    {"分组生成的子表列名", (groupTable) =>
      let
        sortedTable = Table.Sort(groupTable, {{"时间列名", Order.Ascending}}),
        // 对目标数值列做插值
        interpolatedValues = List.Interpolate(sortedTable[目标数值列名], Table.RowCount(sortedTable)),
        // 替换原列的空值
        outputTable = Table.FromColumns(
            Table.ToColumns(sortedTable) & {interpolatedValues},
            Table.ColumnNames(sortedTable) & {"插值后列名"}
        )
      in outputTable
    }
  )
  1. 展开处理后的子表列即可得到完整插值后的数据集

如果有多个数值列需要插值,只需循环对每个列调用List.Interpolate生成对应的插值结果列即可,无需修改核心逻辑。

内容的提问来源于stack exchange,提问作者OJT

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 14:09:03