Power Query中无需辅助列,在空行后NAME行前插入指定文本?
解决方案
可以通过List.Accumulate实现单逻辑步骤的处理,不需要额外辅助列,核心是用累积状态跟踪前一行内容,动态生成目标列表:
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WUoCDcP8gHxelWB1kMWf/UL8QJDEwP8jTNRgshqZYwc/R1xVFzNkxwDPE0Yd0xWCBAP+AUB/HEE9/P6XYWAA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [INPUT = _t]), // 预处理输入列表:将空文本/空白转为null,统一空行标记 InputList = List.Transform(Source[INPUT], each if _ = null or Text.Trim(_) = "" then null else _), // 用List.Accumulate遍历并生成输出列表 OutputList = List.Accumulate( InputList, {[Prev = null, Result = {}]}, // 初始状态:保存前一行值和结果列表 (state, current) => let PrevVal = state{0}[Prev], CurrentResult = state{0}[Result], // 判断当前行是NAME且前一行是空行(null),则插入NEXT_COUNTRY UpdatedResult = if current = "NAME" and PrevVal = null then CurrentResult & {"NEXT_COUNTRY", current} else CurrentResult & {current} in {[Prev = current, Result = UpdatedResult]} ){0}[Result], // 转换为包含输入和输出列的表格 FinalTable = Table.FromColumns({InputList, OutputList}, {"INPUT", "OUTPUT"}) in FinalTable
逻辑说明
- 先把输入列中的空文本/空白行统一转为
null,方便判断空行 - 用
List.Accumulate的状态对象同时记录前一行的值和已生成的结果列表 - 遍历每一行时,若当前行是
NAME且前一行是空行(null),则在结果列表中先添加NEXT_COUNTRY,再添加当前行;否则直接添加当前行 - 最后将原输入列表和生成的输出列表合并为表格,得到目标效果
内容的提问来源于stack exchange,提问作者Rasec Malkic
相关产品推荐
相关产品推荐

