Power Query M实现按指定行值计算新列(利率贴现因子平移)
Power Query M 处理利率曲线贴现因子数据集解决方案
完整M代码实现
假设你的原始表名为原始贴现因子表,将以下代码粘贴到Power Query的高级编辑器中(替换表名后即可使用):
let // 加载原始数据 源 = 原始贴现因子表, // 步骤1:按gpt_date分组,提取每组的最大Value 分组取最大值 = Table.Group(源, {"gpt_date"}, {{"Max_Value", each List.Max([Value]), type nullable number}}), // 步骤2:获取基准日期(2024/10/28)的Max_Value作为除数 基准值 = Table.SelectRows(分组取最大值, each [gpt_date] = #date(2024,10,28)){0}[Max_Value], // 步骤3:计算Value_rolled,排除2024/10/25的数据 计算滚动值 = Table.AddColumn( Table.SelectRows(分组取最大值, each [gpt_date] <> #date(2024,10,25)), "Value_rolled", each [Max_Value] / 基准值, type nullable number ), // 保留需要的列(gpt_date和Value_rolled) 整理最终表 = Table.SelectColumns(计算滚动值, {"gpt_date", "Value_rolled"}) in 整理最终表
代码关键部分解释
- 分组取最大值:使用
Table.Group按日期分组,通过List.Max提取每组的最大Value,确保每个日期只保留一个最大值记录。 - 基准值获取:通过
Table.SelectRows筛选出2024/10/28的记录,用{0}[Max_Value]直接提取该记录的最大值,作为后续计算的除数。 - 滚动值计算:先通过
Table.SelectRows排除2024/10/25的数据,再用Table.AddColumn新增Value_rolled列,实现每个日期最大值除以基准值的计算。 - 整理列:最后只保留需要的两列,得到最终结果表。
使用注意事项
- 确保原始表中的
gpt_date列是日期类型,如果是文本格式,需先通过Table.TransformColumns转换为日期类型,例如:转换日期类型 = Table.TransformColumns(源, {{"gpt_date", Date.FromText, type date}}) - 如果基准日期(2024/10/28)不存在于数据中,代码会报错,需确认该日期的数据存在。
内容的提问来源于stack exchange,提问作者C H
相关产品推荐
相关产品推荐

