能否在Power Query M中新增线性插值计算的利率列?
实现步骤
1. 预处理利率基准表(表1)
首先把你已经导入Power Query的表1重命名为利率基准表,按营业日升序排序,M代码参考:
let 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content], 更改类型 = Table.TransformColumnTypes(源,{{"BusinessDays", Int64.Type}, {"InterestRate", type number}}), 按营业日升序排序 = Table.Sort(更改类型,{{"BusinessDays", Order.Ascending}}) in 按营业日升序排序
该步骤确保利率基准点按天数从小到大排列,是后续插值计算的前提。
2. 创建线性插值自定义函数
新建空白查询,命名为fx_利率插值,粘贴以下代码:
(待插值天数 as number) as number => let // 引用已排序的利率基准表 基准表 = 利率基准表, // 提取小于等于待插值天数的最大基准点 前序点 = Table.Last(Table.SelectRows(基准表, each [BusinessDays] <= 待插值天数)), // 提取大于等于待插值天数的最小基准点 后序点 = Table.First(Table.SelectRows(基准表, each [BusinessDays] >= 待插值天数)), // 计算插值结果,同步处理边界情况:待插值天数超出基准范围时取最近端点利率,刚好落在基准点时直接取值 结果 = if 前序点[BusinessDays] = 后序点[BusinessDays] then 前序点[InterestRate] else 前序点[InterestRate] + (后序点[InterestRate] - 前序点[InterestRate]) * (待插值天数 - 前序点[BusinessDays]) / (后序点[BusinessDays] - 前序点[BusinessDays]) in 结果
3. 为表2添加插值利率列
打开表2对应的查询,调用上述自定义函数生成新列即可,参考代码:
let 源 = Excel.CurrentWorkbook(){[Name="表2"]}[Content], 更改类型 = Table.TransformColumnTypes(源,{{"InstrumentID", type text}, {"BusinessDays", Int64.Type}}), 添加插值利率列 = Table.AddColumn(更改类型, "InterpolatedInterestRate", each fx_利率插值([BusinessDays])) in 添加插值利率列
注意事项
- 如果基准表存在空值、错误值,可在预处理步骤通过
Table.RemoveRowsWithErrors、Table.Fill等函数提前清理,避免插值报错 - 如需使用三次样条等其他插值逻辑,仅需修改
fx_利率插值函数中的结果计算部分即可
内容的提问来源于stack exchange,提问作者rafael ventura
相关产品推荐
相关产品推荐

