我有以下格式的数据,示例如下:
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中轻松实现这一点吗?谢谢!
发布于 2015-12-02 00:09:27
我最终做了和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
FilteredRowsLukasz使用pivot列的第二个想法如下所示:
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我发现的诀窍是添加除以2的索引列(即0,0,1,1,2,2...)所以透视表知道前两行应该是相关的,接下来的两行应该是相关的,依此类推。
发布于 2015-12-02 00:03:51
您可以执行以下操作:
1)使用如下逻辑创建两个新的计算列: if column1 contains ValA then Column1 else null。第二列中的ValB也有相同的逻辑。
2)使用最左列的向下填充功能。这将生成在不同列中同时具有ValA和ValB值的行
3)使用筛选功能筛选出两个新列中包含空值的行
这应该会给你你想要的。
编辑:考虑到这一点,你也可以尝试:在等号上拆分column1。然后透视新的列,它应该生成两个具有离散值的列。HTH。
https://stackoverflow.com/questions/34017874
复制相似问题