如何在Power Query中为含分期的费用自动生成后续分期记录?
在Power Query中自动生成费用分期后续记录的解决方案
操作步骤:
拆分分期字段
先添加自定义列,把有分期信息的单元格拆成当前期数和总期数:= Table.AddColumn(源, "分期拆分", each if [Installment] <> null and [Installment] <> "" then Text.Split([Installment], "/") else null)接着把这个列拆分成两列(
Current和Total),并将这两列转换为整数类型。生成待补充的分期序列
再添加一个自定义列,生成从当前期数+1到总期数的所有期数:= Table.AddColumn(上一步结果, "待生成分期", each if [Total] <> null then List.Generate(() => [Current] + 1, each _ <= [Total], each _ + 1) else {})扩展分期序列为行
点击待生成分期列的扩展按钮,选择"扩展到新行"。此时每条分期记录会对应生成后续期数的空行。补充分期字段内容
添加自定义列,填充新生成行的分期信息:= Table.AddColumn(上一步结果, "新分期字段", each if [待生成分期] <> null then Text.From([待生成分期]) & "/" & Text.From([Total]) else [Installment])之后删除掉
分期拆分、Current、Total、待生成分期、原Installment这些临时列,把新分期字段重命名为Installment。整理最终数据
检查数据,确保无分期的记录保留原样,有分期的记录已生成后续所有期数的行。
完整M代码示例(可直接替换数据源后使用):
let 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content], 添加分期拆分列 = Table.AddColumn(源, "分期拆分", each if [Installment] <> null and [Installment] <> "" then Text.Split([Installment], "/") else null), 拆分列 = Table.SplitColumn(添加分期拆分列, "分期拆分", Splitter.SplitTextByDelimiter("/", QuoteStyle.Csv), {"Current", "Total"}), 转换为整数 = Table.TransformColumns(拆分列, {{"Current", each if _ <> null then Number.From(_) else null}, {"Total", each if _ <> null then Number.From(_) else null}}), 添加待生成分期列 = Table.AddColumn(转换为整数, "待生成分期", each if [Total] <> null then List.Generate(() => [Current] + 1, each _ <= [Total], each _ + 1) else {}), 扩展到新行 = Table.ExpandListColumn(添加待生成分期列, "待生成分期"), 生成新分期字段 = Table.AddColumn(扩展到新行, "新分期字段", each if [待生成分期] <> null then Text.From([待生成分期]) & "/" & Text.From([Total]) else [Installment]), 删除临时列 = Table.RemoveColumns(生成新分期字段,{"分期拆分", "Current", "Total", "待生成分期", "Installment"}), 重命名列 = Table.RenameColumns(删除临时列,{{"新分期字段", "Installment"}}) in 重命名列
这个方案可以处理任意起始期数的情况,比如原记录是1/4会自动生成2/4、3/4、4/4;原记录是3/5会生成4/5、5/5,完全匹配需求。
内容的提问来源于stack exchange,提问作者Arnon Vichy
相关产品推荐
相关产品推荐

