Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!
Hi I would like to append multiple columns from one table into one column in PowerQuery.
I have a data looking like this:
bundle-id | content1-id | quantity1 | content2-id | quantity2 | content3-id | quantity3 | content4-id | quantity4 |
abcd1 | xyC1-1 | 10 | xyC2-1 | 1 | xyC3-1 | 12 | xyC4-1 | 11 |
abcd2 | xyC1-2 | 12 | xyC2-2 | 1 | xyC3-2 | 12 | xyC4-2 | 11 |
abcd3 | xyC1-3 | 14 | xyC2-3 | 1 | xyC3-3 | 3 | xyC4-3 | 11 |
abcd4 | xyC1-4 | 14 | xyC2-4 | 1 | xyC3-4 | 12 | xyC4-4 | 11 |
abcd5 | xyC1-5 | 14 | xyC2-5 | 1 | xyC3-5 | 12 | xyC4-5 | 11 |
abcd6 | xyC1-6 | 14 | xyC2-6 | 1 | xyC3-6 | 3 | xyC4-6 | 11 |
abcd7 | xyC1-7 | 14 | xyC2-7 | 1 | xyC3-7 | 12 | xyC4-7 | 11 |
abcd8 | xyC1-8 | 14 | xyC2-8 | 1 | xyC3-8 | 12 | xyC4-8 | 11 |
abcd9 | xyC1-9 | 14 | xyC2-9 | 1 | xyC3-9 | 3 | xyC4-9 | 11 |
abcd10 | xyC1-10 | 14 | xyC2-10 | 1 | xyC3-10 | 12 | xyC4-10 | 11 |
abcd11 | xyC1-11 | 14 | xyC2-11 | 1 | xyC3-11 | 12 | xyC4-11 | 11 |
I would like to have the following result:
contentAll | QuantityAll |
xyC1-1 | 10 |
xyC1-2 | 12 |
xyC1-3 | 14 |
xyC1-4 | 14 |
xyC1-5 | 14 |
xyC1-6 | 14 |
xyC1-7 | 14 |
xyC1-8 | 14 |
xyC1-9 | 14 |
xyC1-10 | 14 |
xyC1-11 | 14 |
xyC1-12 | 14 |
xyC2-1 | 1 |
xyC2-2 | 1 |
xyC2-3 | 1 |
xyC2-4 | 1 |
xyC2-5 | 1 |
xyC2-6 | 1 |
xyC2-7 | 1 |
xyC2-8 | 1 |
xyC2-9 | 1 |
xyC2-10 | 1 |
xyC2-11 | 1 |
xyC2-12 | 1 |
xyC3-1 | 12 |
xyC3-2 | 12 |
xyC3-3 | 3 |
xyC3-4 | 12 |
xyC3-5 | 12 |
xyC3-6 | 3 |
xyC3-7 | 12 |
xyC3-8 | 12 |
xyC3-9 | 3 |
xyC3-10 | 12 |
xyC3-11 | 12 |
I would appreciate all the help you can give me. Thank you!
Andraz
Solved! Go to Solution.
Hi @apoje
I am not sure why you've completely ignored my solution all along 🤔. It does exactly what you showed in your first post in a simple way. If the base table is "tbl_bundle" in the files you've shared, you can create a blank query with the following M code and you'll get the result. It is the same as I posted a couple of days ago already:
let
Source = tbl_bundle,
#"Removed Columns" = Table.RemoveColumns(Source,{"SKU-bundleID"}),
ExtractColumns_ = Table.ToColumns(#"Removed Columns"),
ContentCols_ = List.Combine(List.Alternate(ExtractColumns_,1,1,1)),
QuantityCols_ = List.Combine(List.Alternate(ExtractColumns_,1,1,0)),
final_ = Table.FromColumns({ContentCols_, QuantityCols_}, {"ContentAll", "QuantityAll"})
in
final_
Please mark the question solved when done and consider giving kudos if posts are helpful.
Contact me privately for support with any larger-scale BI needs, tutoring, etc.
Cheers
Hi, @apoje
my code as below:
let
Source = Excel.CurrentWorkbook(){[Name="tbl_bundle"]}[Content],
trans = Table.Combine(List.Transform(List.Split(List.Skip(Table.ToColumns(Source)),2),each Table.FromColumns(_,{"ContentAll","QuantityAll"}))),
filter = Table.SelectRows(trans, each ([QuantityAll] <> null and [QuantityAll] <> 0)),
chtype = Table.TransformColumnTypes(filter,{{"ContentAll", Text.Type}})
in
chtype
Hi! i don't thinks this is just column. Your idea is whole new table. You can add a new step on your power query that will transform the complete table or create a blank query to query your table creating a second one with the result. Let's assume your table name is Table1. Now you can create a new blank query with a code that should be like this:
= Table.Combine({
Table.RenameColumns(
Table.SelectColumns(Table1, "idcontent1", "idquantity1")
,{{"idcontent1", "idcontent"},{"idquantity1", "idquantity"} })
,
Table.RenameColumns(
Table.SelectColumns(Table1, "idcontent2", "idquantity2")
,{{"idcontent2", "idcontent"},{"idquantity2", "idquantity"} })
,
Table.RenameColumns(
Table.SelectColumns(Table1, "idcontentN", "idquantityN")
,{{"idcontentN", "idcontent"},{"idquantityN", "idquantity"} })
})
Table.Combine is for append. Table.RenameColumns to append the same columns together. Table.SelectColumns is to just select the columns you will use in the append.
Hope this helps,
Happy to help!
hi @ibarrau you are right my phrasing was off. The result would actually be a new table.
= Table.Combine({
Table.RenameColumns(
Table.SelectColumns(tblSL, "var-nr-1", "Multiplication.1")
,{{"var-nr-1", "var-nr"},{"Multiplication.1", "Quantity"} })
,
Table.RenameColumns(
Table.SelectColumns(tblSL, "var-nr-2", "Multiplication.2")
,{{"var-nr-2", "var-nr"},{"Multiplication.2", "Quantity"} })
,
Table.RenameColumns(
Table.SelectColumns(tblSL, "var-nr-3", "Multiplication.3")
,{{"var-nr-3", "var-nr"},{"Multiplication.3", "Quantity"} })
,
Table.RenameColumns(
Table.SelectColumns(tblSL, "var-nr-4", "Multiplication.4")
,{{"var-nr-4", "var-nr"},{"Multiplication.4", "Quantity"} })
})
I have created a blank query and written the code as you suggested. However I am getting an error message
Expression.Error: We cannot convert the value "Multiplication.1" to type Number.
Details:
Value=Multiplication.1
Type=[Type]
All the Multiplication columns are a whole number type. I am not sure how to amend the error...
Regards,
Andraz
Ok good. The error doesn't look that is coming from that code. It says it's trying to convert multiplication.1 to number and it can't do it. Check your previous o next steps and check if you have a convert to number somewhere. You might have wrong data in the column that is not allowing you to convert it or apply math over the column.
You can always check my code by parts. Starting without the combine to see if it works:
Table.RenameColumns(
Table.SelectColumns(tblSL, "var-nr-1", "Multiplication.1")
,{{"var-nr-1", "var-nr"},{"Multiplication.1", "Quantity"} })
If you want you can share previous steps so we can help you find the error.
Regards,
Happy to help!
Hi @ibarrau
I have checked once again and I do not see any overlaps in the data type.
here is the link of my workbook:
I appreciate your help!
Regards,
Andraz
Andraz
Is the error from a specific step? or is it showing that when close & apply?
The sharepoint link doesn't show me anything. Just an excel with A1 = ExternealData_1.
Can you show the "advanced editor" power query code? that way we can check whats is in the query besides what I have sent you.
Regards,
Happy to help!
Hi @ibarrau I have shared the flie where all the data is only loaded with "connection only". So there are no tables loaded. Maybe if you go under Queries&Connections you'll se it...
The blank query only has your code nothing else and that results in the error message I have sent you.
The code of the connected table is:
let
Source = Excel.Workbook(File.Contents("C:\...\fba-pošiljanje-goods-in-v01.xlsx"), null, true),
tblSLO_FBA_Table = Source{[Item="tblSLO_FBA",Kind="Table"]}[Data],
#"Changed Type" = Table.TransformColumnTypes(tblSLO_FBA_Table,{{"Date", type date}, {"Invoice number", type text}, {"SKU", type text}, {" Shipment ID", type any}, {"desc", type text}, {"qty ordered", Int64.Type}, {"Put on invoice (x - for YES, DONE - for DONE)", type text}}),
#"Filtered Rows" = Table.SelectRows(#"Changed Type", each ([#"Put on invoice (x - for YES, DONE - for DONE)"] = "x")),
#"Grouped Rows" = Table.Group(#"Filtered Rows", {"SKU"}, {{"Quantity", each List.Sum([qty ordered]), type number}}),
#"Merged Queries" = Table.NestedJoin(#"Grouped Rows", {"SKU"}, tbl_bundle, {"SKU-amz"}, "tbl_bundle", JoinKind.LeftOuter),
#"Expanded tbl_bundle" = Table.ExpandTableColumn(#"Merged Queries", "tbl_bundle", {"var-nr-1", "content-1", "var-nr-2", "content-2", "var-nr-3", "content-3", "var-nr-4", "content-4"}, {"var-nr-1", "content-1", "var-nr-2", "content-2", "var-nr-3", "content-3", "var-nr-4", "content-4"}),
#"Changed Type1" = Table.TransformColumnTypes(#"Expanded tbl_bundle",{{"content-1", Int64.Type}, {"Quantity", Int64.Type}, {"content-2", Int64.Type}, {"content-3", Int64.Type}, {"content-4", Int64.Type}}),
#"Inserted Multiplication" = Table.AddColumn(#"Changed Type1", "Multiplication", each List.Product({[Quantity], [#"content-1"]}), Int64.Type),
#"Inserted Multiplication1" = Table.AddColumn(#"Inserted Multiplication", "Multiplication.1", each List.Product({[Quantity], [#"content-2"]}), Int64.Type),
#"Inserted Multiplication2" = Table.AddColumn(#"Inserted Multiplication1", "Multiplication.2", each List.Product({[Quantity], [#"content-3"]}), Int64.Type),
#"Inserted Multiplication3" = Table.AddColumn(#"Inserted Multiplication2", "Multiplication.3", each List.Product({[Quantity], [#"content-4"]}), Int64.Type),
#"Reordered Columns" = Table.ReorderColumns(#"Inserted Multiplication3",{"SKU", "Quantity", "var-nr-1", "content-1", "Multiplication", "var-nr-2", "content-2", "Multiplication.1", "var-nr-3", "content-3", "Multiplication.2", "var-nr-4", "content-4", "Multiplication.3"}),
#"Renamed Columns" = Table.RenameColumns(#"Reordered Columns",{{"Multiplication.3", "Multiplication.4"}, {"Multiplication.2", "Multiplication.3"}, {"Multiplication.1", "Multiplication.2"}, {"Multiplication", "Multiplication.1"}})
in
#"Renamed Columns"
There is one more querry connected where I am doing the outer join from:
let
Source = Excel.Workbook(File.Contents("C:\...\dAMZ-BundleContent-v02.xlsx"), null, true),
tbl_bundle_Table = Source{[Item="tbl_bundle",Kind="Table"]}[Data],
#"Changed Type" = Table.TransformColumnTypes(tbl_bundle_Table,{{"SKU-amz", type text}, {"ASIN", type text}, {"title-amz", type text}, {"var-nr-1", type text}, {"content-1", Int64.Type}, {"var-nr-2", type text}, {"content-2", Int64.Type}, {"var-nr-3", type text}, {"content-3", Int64.Type}, {"var-nr-4", type text}, {"content-4", Int64.Type}, {"Fulfillment-Channel", type text}}),
#"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"ASIN", "Fulfillment-Channel"}),
#"Replaced Value" = Table.ReplaceValue(#"Removed Columns",null,0,Replacer.ReplaceValue,{"var-nr-1", "content-1", "var-nr-2", "content-2", "var-nr-3", "content-3", "var-nr-4", "content-4"}),
#"Changed Type1" = Table.TransformColumnTypes(#"Replaced Value",{{"var-nr-2", type text}, {"var-nr-1", type text}, {"var-nr-3", type text}, {"var-nr-4", type text}, {"content-1", Int64.Type}, {"content-2", Int64.Type}, {"content-3", Int64.Type}, {"content-4", Int64.Type}})
in
#"Changed Type1"
that is all that is connected to.
Andraz
Ok. At the end of your table, try adding a new step changing the type of the columns as you want. Convert all Multiplication.N to number so the new table have the correct data. This code:
#"Inserted Multiplication1" = Table.AddColumn(#"Inserted Multiplication", "Multiplication.1", each List.Product({[Quantity], [#"content-2"]}), Int64.Type),
This is not changing the column to Int64.Type it is just leting the engine know that you want to have a number but it won't convert it. The real step changing types will show error if you have character that is not a number. You can validate that "Keeping Errors" as the last step of the table. If the step doesn't show rows then delete the step and your dataset is ready to be appended.
Regards,
Happy to help!
Sorry @ibarrau I'm too stupid to understand 😕
the below code is already in the editor:
#"Inserted Multiplication" = Table.AddColumn(#"Changed Type1", "Multiplication", each List.Product({[Quantity], [#"content-1"]}), Int64.Type)
so what exactly do I need to change?
Thanks!
Andraz
Please don't think that, you might be starting and I may not always make myself clear 🙂
I'm talking about this:
https://docs.microsoft.com/en-us/power-bi/connect-data/desktop-data-types
A change of data looks like this:
= Table.TransformColumnTypes(#"Last Step",{{"Column1", Int64.Type}})
Then about errors you can check this:
https://youtu.be/drrh6ciVvXY?t=99
Try that on multiplication.1 column so we can check what is this about.
Regards,
Happy to help!
Hey @ibarrau,
thanks for all your help I really appreciate it.
I think I understand what you meant - but looking at the table from where the error should originate - there is none.
I have no idea where to go from here. I even manually checked the data (because there is not many rows) - I still do not find it.
Can I send you the workbook somewhere if you can check it out?
Regards,
Andraz
Ok, if the data is not private then send me that and I'll check it.
Regards
Happy to help!
HI @ibarrau I created a folder on OneDrive and amended the data.
The file where is the code is: invoice-v01
the folder link: https://ipotechnik-my.sharepoint.com/:f:/g/personal/andraz_poje_ipotechnik_de/EueJyvbjKrFFt5RzW5wvob...
Thank you for the help!
Andraz
Hi @apoje
I am not sure why you've completely ignored my solution all along 🤔. It does exactly what you showed in your first post in a simple way. If the base table is "tbl_bundle" in the files you've shared, you can create a blank query with the following M code and you'll get the result. It is the same as I posted a couple of days ago already:
let
Source = tbl_bundle,
#"Removed Columns" = Table.RemoveColumns(Source,{"SKU-bundleID"}),
ExtractColumns_ = Table.ToColumns(#"Removed Columns"),
ContentCols_ = List.Combine(List.Alternate(ExtractColumns_,1,1,1)),
QuantityCols_ = List.Combine(List.Alternate(ExtractColumns_,1,1,0)),
final_ = Table.FromColumns({ContentCols_, QuantityCols_}, {"ContentAll", "QuantityAll"})
in
final_
Please mark the question solved when done and consider giving kudos if posts are helpful.
Contact me privately for support with any larger-scale BI needs, tutoring, etc.
Cheers
SOLVED:
https://community.powerbi.com/t5/Desktop/Appending-columns/m-p/1555845#M635475
Hi AIB,
I have a similar problem, which I've tried to apply your solutions to, but I'm having some issues still.
Currently, I have a table like this:
Job Card ID | Artisan 1 | Artisan 2 | Artisan 3 |
1 | Bradley | James | |
2 | Mike | Bradley | John |
I would like to create a table like this (excluding blanks as shown below):
Job Card ID | Artisan |
1 | Bradley |
1 | James |
2 | Mike |
2 | Bradley |
2 | John |
So far, I am able to get all the artisans into one column, but I am unsure on how to get the corresponding Job Card ID.
Any help would be much appreciated and I'll be sure to let you know if the solution does/doesn't work!
SOLVED:
https://community.powerbi.com/t5/Desktop/Appending-columns/m-p/1555845#M635475
Hi @apoje,
copy this M code in a blank query to see the steps starting from your initial example
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("XdJLCgMxDAPQu2Q9hdhxfuseY5hFP4dob98Go9aaXQTRIwHte7rdH09JW3q9r3JZB8me1JOH4kE9mSdJx+aAAtBwSz0BUAKUgQJgHcQAlAisUNAv3Df0jfoW+0YPMAYqgEpAjUAloDLQADQCWgRa/EHjfke/U7/HfqcHdAYGgEHAiMAgYDAwAUwCZgRm/MHkPobznVEmweNvSJmXlE/Kf4zCCs/xtEcM8vgA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"bundle-id" = _t, #"content1-id" = _t, quantity1 = _t, #"content2-id" = _t, quantity2 = _t, #"content3-id" = _t, quantity3 = _t, #"content4-id" = _t, quantity4 = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"bundle-id", type text}, {"content1-id", type text}, {"quantity1", Int64.Type}, {"content2-id", type text}, {"quantity2", Int64.Type}, {"content3-id", type text}, {"quantity3", Int64.Type}, {"content4-id", type text}, {"quantity4", Int64.Type}}),
#"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"bundle-id"}),
ExtractColumns_ = Table.ToColumns(#"Removed Columns"),
ContentCols_ = List.Combine(List.Alternate(ExtractColumns_,1,1,1)),
QuantityCols_ = List.Combine(List.Alternate(ExtractColumns_,1,1,0)),
final_ = Table.FromColumns({ContentCols_, QuantityCols_})
in
final_
Please mark the question solved when done and consider giving kudos if posts are helpful.
Contact me privately for support with any larger-scale BI needs, tutoring, etc.
Cheers