我有一个包含两个标题行的数据集。在合并之前,我已经将行转换为列以与标题一起使用,但是我需要将column1
合并为column2
的帮助,因为在过去的第7行中,各列彼此偏移了一行(参见示例图片。
我尝试使用replace并将自己与索引连接,但是在column2 row 8
与column1 row 7
串联的情况下无法实现所需的最终结果,因此当我将这些列和再次转置标题将正确标记(请参见示例图片)。
感谢您的建议和时间。
示例图片:
答案 0 :(得分:0)
这是一种方式。
我从您的Problem表开始,命名为Table1:
然后我添加一个索引。 (添加列>索引列):
然后添加一个自定义列。 (添加列>自定义列)使用此设置:
({#"Added Index"{[Index]-1}[Column1]
引用位置记录行中Column1中的条目,该条目等于Index列中的值减去1。)
...得到这个:
然后我在新的“自定义”列中替换了错误。 (右键单击“自定义列标题”,然后单击“ 替换错误”,然后键入null>单击“确定”)。
然后我选择Column1和Custom列并删除其他列。 (选择第1列的列标题>按住Ctrl,然后单击“自定义列标题”>保持按住Ctrl,然后右键单击“自定义列标题”,然后单击“删除其他列”)
这是我的M代码:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", type text}}),
#"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1),
#"Added Custom" = Table.AddColumn(#"Added Index", "Custom", each #"Added Index"{[Index]-1}[Column1]&"-"&[Column2]),
#"Replaced Errors" = Table.ReplaceErrorValues(#"Added Custom", {{"Custom", null}}),
#"Removed Other Columns" = Table.SelectColumns(#"Replaced Errors",{"Column1", "Custom"})
in
#"Removed Other Columns"
答案 1 :(得分:0)
另一种方式。
代码:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
IndexedTable = Table.AddIndexColumn(Source, "Index", 0, 1),
Transform = Table.TransformRows(IndexedTable, (row)=>[Column1= row[Column1], Column2 = if row[Column1]=null then Text.Combine({IndexedTable{row[Index]-1}[Column1], "-",row[Column2]}) else row[Column2]]),
ToTable = Table.FromRecords(Transform)
in
ToTable
简要说明:
Table.TransformRows
来分析每一行并将其转换为记录:从每行的column1(row[Column1]
)获取的Column1,使用Text.Concatenate
,{ {1}}。这从上一行的Column1中产生值。 IndexedTable{row[Index]-1}[Column1]
返回记录列表。如果第一行的[Column1]中包含null,则此代码将失败。如果不可接受,请添加另一个Table.TransformRows
。
答案 2 :(得分:0)
另一种方式:
let
Source = Excel.CurrentWorkbook(){[Name="Table"]}[Content],
fillDown = Table.FillDown(Table.DuplicateColumn(Source, "Column1", "copy"),{"copy"}),
replace = Table.ReplaceValue(fillDown, each [Column2], each if [Column2] = null then null
else [copy]&"-"&[Column2], Replacer.ReplaceValue, {"Column2"})[[Column1],[Column2]]
in
replace