我有以下格式的数据,示例如下所示:
ValA=101
ValB=2938
ValA=998
ValB=387
ValA=876
ValB=9832
我知道每套ValA& ValB是一组属于一起的值,因此输出将为:
ValA ValB
101 2938
998 387
.......
.......
我需要将其转换为表格格式,以便每个valA ValB对都是一行。 我已经尝试在powerquery中执行此操作,方法是拆分=符号,然后转动Val名称,但它不起作用。
关于如何在powerquery中轻松实现这一点的任何想法? 谢谢!
答案 0 :(得分:3)
我最终做的与Lukasz完全相同,这是完整的代码:
let
Source = "ValA=101
ValB=2938
ValA=998
ValB=387
ValA=876
ValB=9832",
Custom1 = Lines.FromText(Source),
#"Converted to Table" = Table.FromList(Custom1, Splitter.SplitTextByDelimiter("="), null, null, ExtraValues.Error),
ChangedType = Table.TransformColumnTypes(#"Converted to Table",{{"Column1", type text}, {"Column2", Int64.Type}}),
CustomA = Table.AddColumn(ChangedType, "ValA", each if [Column1] = "ValA" then [Column2] else null),
CustomB = Table.AddColumn(CustomA, "ValB", each if [Column1] = "ValB" then [Column2] else null),
FilledDown = Table.FillDown(CustomB,{"ValA"}),
FilteredRows = Table.SelectRows(FilledDown, each [ValB] <> null)
in
FilteredRows
Lukasz使用枢轴列的第二个想法如下:
let
Source = "ValA=101
ValB=2938
ValA=998
ValB=387
ValA=876
ValB=9832",
Custom1 = Lines.FromText(Source),
#"Converted to Table" = Table.FromList(Custom1, Splitter.SplitTextByDelimiter("="), null, null, ExtraValues.Error),
ChangedType = Table.TransformColumnTypes(#"Converted to Table",{{"Column1", type text}, {"Column2", Int64.Type}}),
AddedIndex = Table.AddIndexColumn(ChangedType, "Index", 0, 1),
IntegerDividedColumn = Table.TransformColumns(AddedIndex, {{"Index", each Number.IntegerDivide(_, 2), Int64.Type}}),
PivotedColumn = Table.Pivot(IntegerDividedColumn, List.Distinct(IntegerDividedColumn[Column1]), "Column1", "Column2")
in
PivotedColumn
我发现的技巧是添加二分词索引列(分别为0,0,1,1,2,2 ......),因此枢轴知道前两行应该是相关的,而下一行二,等等。
答案 1 :(得分:1)
您可以执行以下操作:
1)使用逻辑创建两个新的计算列,如果column1包含ValA,则Column1为null。第二栏中ValB的逻辑相同。
2)使用最左侧列的填充功能。这将生成具有不同列中的ValA和ValB值的行
3)使用过滤器功能过滤掉两个新列中具有空值的行
那可以给你你想要的东西。
编辑:考虑到这一点你也可以尝试:在等号上拆分column1。然后转动新列,它应该生成两列具有离散值的列。 HTH。