Power Query拼接列名向上填充值时遇表达式错误求助
问题描述
已通过M代码将数据中的0值替换为null,需将所有非null值移至前两行(最终目标是集中到第一行并移除null)。尝试用Table.FillUp实现向上填充时,生成列名列表的代码报错,提示找不到对应列。现有M代码如下:
Custom1 = Table.ColumnNames(#"Transposed Table2"), Custom2 = List.Transform(Custom1, each {_, each if _ = 0 then null else _}), Custom3 = Table.TransformColumns(#"Transposed Table2",Custom2), Custom4 = """"&Text.Combine(Table.ColumnNames(Custom3),""", """"&"""", Custom5 = Table.FillUp(Custom3,{Custom4})
效果示例:
解决方案
错误分析
Custom4的写法完全错误:你把列名拼接成了带引号的字符串(类似"列1", "列2"),但Table.FillUp的第二个参数要求传入列名的列表,而非格式化后的字符串。
修正后的填充代码
直接用Table.ColumnNames获取的原始列名列表传入Table.FillUp即可:
Custom1 = Table.ColumnNames(#"Transposed Table2"), Custom2 = List.Transform(Custom1, each {_, each if _ = 0 then null else _}), Custom3 = Table.TransformColumns(#"Transposed Table2", Custom2), // 直接传入列名列表,无需额外拼接 Custom5 = Table.FillUp(Custom3, Custom1)
实现“所有值移至第一行并移除null”
如果要完成最终目标(将所有非null值集中到第一行,清理null列),可在填充步骤后追加以下代码:
// 提取第一行的非null值 FirstRowClean = List.RemoveNulls(Table.First(Custom5)), // 生成新表,自动命名列 FinalTable = Table.FromRows({FirstRowClean}, List.Transform({1..List.Count(FirstRowClean)}, each "列" & Text.From(_)))
内容的提问来源于stack exchange,提问作者Sam R.
相关产品推荐
相关产品推荐

