The ultimate Microsoft Fabric, Power BI, Azure AI, and SQL learning event: Join us in Stockholm, September 24-27, 2024.
Save €200 with code MSCUST on top of early bird pricing!
Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started
Hello, I have a dataset that came in a single column. The list is consistently structured to include a Customer's Name, Address, and Amount. as shown below.
John Doe
123 Main Street
123.45
James Smith
587 West Avenue
547.36
Robert Polk
639 Howard Blvd.
974.22
I would like to convert this vertical list into a 3-column table as shown below in Power Query.
Name | Address | Amount -------------|------------------|----------|-- Jhon Doe | 123 Main Street | 123.45 James Smith | 587 West Avenue | 547.36
Robert Polk | 639 Howard Blv. | 974.22
Thank you for your assistance!
Solved! Go to Solution.
To transform your single-column vertical list into a structured three-column table in Power Query, follow these steps:
Steps to Transform Data in Power Query
if Number.Mod([Index], 3) = 1 then "Name"
else if Number.Mod([Index], 3) = 2 then "Address"
else "Amount"
Example M Code
Here is an example of how the M code might look after performing these transformations:
let
// Load the source data
Source = Excel.CurrentWorkbook(){[Name="YourTableName"]}[Content],
// Add an index column
AddIndex = Table.AddIndexColumn(Source, "Index", 1, 1, Int64.Type),
// Add a custom column to identify the row type
AddCustomColumn = Table.AddColumn(AddIndex, "CustomColumn", each if Number.Mod([Index], 3) = 1 then "Name" else if Number.Mod([Index], 3) = 2 then "Address" else "Amount"),
// Pivot the data
PivotedTable = Table.Pivot(AddCustomColumn, List.Distinct(AddCustomColumn[CustomColumn]), "CustomColumn", "Column1"),
// Rename columns
RenamedColumns = Table.RenameColumns(PivotedTable, {{"Name", "Name"}, {"Address", "Address"}, {"Amount", "Amount"}}),
// Change column types
ChangedType = Table.TransformColumnTypes(RenamedColumns, {{"Amount", type number}})
in
ChangedType
Tips
By following these steps, you should be able to transform your vertical list into a structured three-column table in Power Query.
Hi @mmunozjr5 ,
Thanks for @Shravan133 reply.
You can try this code
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8srPyFNwyU9VitWJVjI0MlbwTczMUwguKUpNLYGJ6ZmYgpleibmpxQrBuZklGWC+qYW5QnhqcYmCY1lqXinECFMTcz1jMzAzKD8ptahEISA/JxvMNzO2VPDIL08sSlFwyilL0QMLWpqb6BkZKcXGAgA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column = _t]),
AddIndexColumn = Table.AddIndexColumn(Source, "Index", 1, 1, Int64.Type),
AddGroup = Table.AddColumn(AddIndexColumn, "Group", each Number.IntegerDivide([Index] - 1, 3) + 1),
GroupedRows = Table.Group(AddGroup, {"Group"}, {{"AllData", each _, type table [Column=nullable text, Index=Int64.Type, Group=Int64.Type]}}),
ExpandColumns = Table.TransformColumns(GroupedRows, {"AllData", each Table.Transpose(Table.RemoveColumns(_, {"Index", "Group"}))}),
ExpandColumns2 = Table.ExpandTableColumn(ExpandColumns, "AllData", {"Column1", "Column2", "Column3"}, {"Name", "Address", "Amount"}),
#"Removed Columns" = Table.RemoveColumns(ExpandColumns2,{"Group"})
in
#"Removed Columns"
Final output
Best regards,
Albert He
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly
Hi @mmunozjr5, different approach:
Result
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8srPyFNwyU9VitWJVjI0MlbwTczMUwguKUpNLYGJ6ZmYgpleibmpxQrBuZklGWC+qYW5QnhqcYmCY1lqXinECFMTcz1jMzAzKD8ptahEISA/JxvMNzO2VPDIL08sSlFwyilL0QMLWpqb6BkZKcXGAgA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t]),
Transformed = Table.FromRows(List.Split(Table.ToList(Source), 3), {"Name", "Address", "Amount"}),
ChangedType = Table.TransformColumnTypes(Transformed,{{"Name", type text}, {"Address", type text}, {"Amount", type number}}, "en-US")
in
ChangedType
Hi @mmunozjr5, different approach:
Result
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8srPyFNwyU9VitWJVjI0MlbwTczMUwguKUpNLYGJ6ZmYgpleibmpxQrBuZklGWC+qYW5QnhqcYmCY1lqXinECFMTcz1jMzAzKD8ptahEISA/JxvMNzO2VPDIL08sSlFwyilL0QMLWpqb6BkZKcXGAgA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t]),
Transformed = Table.FromRows(List.Split(Table.ToList(Source), 3), {"Name", "Address", "Amount"}),
ChangedType = Table.TransformColumnTypes(Transformed,{{"Name", type text}, {"Address", type text}, {"Amount", type number}}, "en-US")
in
ChangedType
Hi @mmunozjr5 ,
Thanks for @Shravan133 reply.
You can try this code
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8srPyFNwyU9VitWJVjI0MlbwTczMUwguKUpNLYGJ6ZmYgpleibmpxQrBuZklGWC+qYW5QnhqcYmCY1lqXinECFMTcz1jMzAzKD8ptahEISA/JxvMNzO2VPDIL08sSlFwyilL0QMLWpqb6BkZKcXGAgA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column = _t]),
AddIndexColumn = Table.AddIndexColumn(Source, "Index", 1, 1, Int64.Type),
AddGroup = Table.AddColumn(AddIndexColumn, "Group", each Number.IntegerDivide([Index] - 1, 3) + 1),
GroupedRows = Table.Group(AddGroup, {"Group"}, {{"AllData", each _, type table [Column=nullable text, Index=Int64.Type, Group=Int64.Type]}}),
ExpandColumns = Table.TransformColumns(GroupedRows, {"AllData", each Table.Transpose(Table.RemoveColumns(_, {"Index", "Group"}))}),
ExpandColumns2 = Table.ExpandTableColumn(ExpandColumns, "AllData", {"Column1", "Column2", "Column3"}, {"Name", "Address", "Amount"}),
#"Removed Columns" = Table.RemoveColumns(ExpandColumns2,{"Group"})
in
#"Removed Columns"
Final output
Best regards,
Albert He
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly
Thank you so much for taking the time to solve this challenge. I greatly appreciate your time and effort. Thanks!
To transform your single-column vertical list into a structured three-column table in Power Query, follow these steps:
Steps to Transform Data in Power Query
if Number.Mod([Index], 3) = 1 then "Name"
else if Number.Mod([Index], 3) = 2 then "Address"
else "Amount"
Example M Code
Here is an example of how the M code might look after performing these transformations:
let
// Load the source data
Source = Excel.CurrentWorkbook(){[Name="YourTableName"]}[Content],
// Add an index column
AddIndex = Table.AddIndexColumn(Source, "Index", 1, 1, Int64.Type),
// Add a custom column to identify the row type
AddCustomColumn = Table.AddColumn(AddIndex, "CustomColumn", each if Number.Mod([Index], 3) = 1 then "Name" else if Number.Mod([Index], 3) = 2 then "Address" else "Amount"),
// Pivot the data
PivotedTable = Table.Pivot(AddCustomColumn, List.Distinct(AddCustomColumn[CustomColumn]), "CustomColumn", "Column1"),
// Rename columns
RenamedColumns = Table.RenameColumns(PivotedTable, {{"Name", "Name"}, {"Address", "Address"}, {"Amount", "Amount"}}),
// Change column types
ChangedType = Table.TransformColumnTypes(RenamedColumns, {{"Amount", type number}})
in
ChangedType
Tips
By following these steps, you should be able to transform your vertical list into a structured three-column table in Power Query.
Thank you so much for taking the time to solve this challenge. I greatly appreciate your time and effort. Thanks!
Join the community in Stockholm for expert Microsoft Fabric learning including a very exciting keynote from Arun Ulag, Corporate Vice President, Azure Data.
Check out the August 2024 Power BI update to learn about new features.
Learn from experts, get hands-on experience, and win awesome prizes.