串联彼此偏移的功率查询列

时间:2019-02-26 18:03:41

标签: excel concatenation powerquery

问题

我有一个包含两个标题行的数据集。在合并之前,我已经将行转换为列以与标题一起使用,但是我需要将column1合并为column2的帮助,因为在过去的第7行中,各列彼此偏移了一行(参见示例图片。

目标

我尝试使用replace并将自己与索引连接,但是在column2 row 8column1 row 7串联的情况下无法实现所需的最终结果,因此当我将这些列和再次转置标题将正确标记(请参见示例图片)。

感谢您的建议和时间。

示例图片:

3 个答案:

答案 0 :(得分:0)

这是一种方式。

我从您的Problem表开始,命名为Table1:

enter image description here

然后我添加一个索引。 (添加列>索引列):

enter image description here

然后添加一个自定义列。 (添加列>自定义列)使用此设置:

enter image description here

({#"Added Index"{[Index]-1}[Column1]引用位置记录行中Column1中的条目,该条目等于Index列中的值减去1。)

...得到这个:

enter image description here

然后我在新的“自定义”列中替换了错误。 (右键单击“自定义列标题”,然后单击“ 替换错误”,然后键入null>单击“确定”)。

enter image description here

然后我选择Column1和Custom列并删除其他列。 (选择第1列的列标题>按住Ctrl,然后单击“自定义列标题”>保持按住Ctrl,然后右键单击“自定义列标题”,然后单击“删除其他列”)

enter image description here

这是我的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

简要说明:

  1. 来源
  2. 添加索引以处理先前的记录
  3. 以这种方式使用Table.TransformRows来分析每一行并将其转换为记录:从每行的column1(row[Column1])获取的Column1,使用Text.Concatenate,{ {1}}。这从上一行的Column1中产生值。 IndexedTable{row[Index]-1}[Column1]返回记录列表。
  4. 将记录列表转换为表。

如果第一行的[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