2015-12-01 37 views
0

我有以下格式的數據,如下所示樣品:非結構化密鑰值對數據轉換爲表

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? 謝謝!

回答

1

你可以做到以下幾點:

1)創建邏輯兩個新的計算列一樣,如果列1包含瓦拉則列1否則返回null。第二列ValB的邏輯相同。

2)使用最左列的填充功能。這將在不同的列

3)使用過濾功能來過濾掉在你的兩個新列

這應該給你你想要的空行產生與兩種瓦拉和值Valb值的行。

編輯:想想這更多,你也可以嘗試:在等號上分割column1。然後旋轉新的列,它應該產生兩個離散值的列。 HTH。

3

我落得這樣做是一模一樣的盧卡斯,這裏是全碼:

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 

使用數據透視列盧卡斯的第二個想法是這樣的:

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 ......),因此樞軸知道前兩行應該是相關的,並且接下來的兩行等。