Forum Discussion
Converting List to Meaningful Data
Hi,
I have this table:
| Date | A | B | C |
| 5-Jan | 9 | 43 | 133 |
| 6-Jan | 2 | 48 | 118 |
| Date | B | D | A |
| 7-Jan | 17 | 1050 | 7 |
| 8-Jan | 14 | 1257 | 4 |
The desired output looks like the following:
| Date | Item | Value |
| 5-Jan | A | 9 |
| 5-Jan | B | 43 |
| 5-Jan | C | 133 |
| 6-Jan | A | 2 |
| 6-Jan | B | 48 |
| 6-Jan | C | 118 |
| 7-Jan | A | 7 |
| 7-Jan | B | 17 |
| 7-Jan | D | 1050 |
| 8-Jan | A | 4 |
| 8-Jan | B | 14 |
| 8-Jan | D | 1257 |
How do you suggest I go on about this? Unpivoting obviously doesn't work.
Hi PiyushBQ
Copy and paste my query in advanced editor
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMtX1SsxT0lGyBGITYyBhaGysFKsTrWQGlTACSViAJAwtwBIuiSWpQK4TELsAsSNY0Byq2tAcRBiYGgApc7CMBUzGBEQYmYIUmCjFxgIA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Date = _t, A = _t, B = _t, C = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type text}, {"A", type text}, {"B", type text}, {"C", type text}}), #"Demoted Headers" = Table.DemoteHeaders(#"Changed Type"), #"Changed Type1" = Table.TransformColumnTypes(#"Demoted Headers",{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}}), #"Added Index" = Table.AddIndexColumn(#"Changed Type1", "Index", 1, 1), #"Added Conditional Column" = Table.AddColumn(#"Added Index", "Custom", each if [Column1] = "Date" then [Index] else null), #"Filled Down" = Table.FillDown(#"Added Conditional Column",{"Custom"}), #"Removed Columns" = Table.RemoveColumns(#"Filled Down",{"Index"}), #"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Removed Columns", {"Column1", "Custom"}, "Attribute", "Value"), #"Sorted Rows" = Table.Sort(#"Unpivoted Columns",{{"Custom", Order.Ascending}, {"Attribute", Order.Ascending}, {"Value", Order.Descending}}), #"Duplicated Column" = Table.DuplicateColumn(#"Sorted Rows", "Value", "Value - Copy"), #"Changed Type2" = Table.TransformColumnTypes(#"Duplicated Column",{{"Value - Copy", type number}}), #"Replaced Errors" = Table.ReplaceErrorValues(#"Changed Type2", {{"Value - Copy", 9999}}), #"Added Conditional Column1" = Table.AddColumn(#"Replaced Errors", "Custom.1", each if [#"Value - Copy"] = 9999 then [Value] else null), #"Filled Down1" = Table.FillDown(#"Added Conditional Column1",{"Custom.1"}), #"Filtered Rows" = Table.SelectRows(#"Filled Down1", each [#"Value - Copy"] <> 9999), #"Removed Columns1" = Table.RemoveColumns(#"Filtered Rows",{"Custom", "Attribute", "Value - Copy"}), #"Reordered Columns" = Table.ReorderColumns(#"Removed Columns1",{"Column1", "Custom.1", "Value"}), #"Sorted Rows1" = Table.Sort(#"Reordered Columns",{{"Column1", Order.Ascending}, {"Custom.1", Order.Ascending}}) in #"Sorted Rows1"Best Regards
Maggie
Community Support Team _ Maggie Li
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
4 Replies
- parry2k
Super User
PiyushBQ unpivot should work and is the solution.
- transform data
- select date column in the table table
- right-click, unpivot other columns it will add two columns, attribute, and value, rename these as per your requirement
- close and apply
To visual, take table visual, put date, attribute, and value to see the result.I would ❤ Kudos if my solution helped. 👉 If you can spend time posting the question, you can also make efforts to give Kudos whoever helped to solve your problem. It is a token of appreciation!
⚡Visit us at https://perytus.com, your one-stop shop for Power BI related projects/training/consultancy.⚡
- PiyushBQ
Helper I
Thanks for taking the time out parry2k
Unpivoting is the first thing I tried, and it doesn't work.
Here's the output for you (notice how D gets missed out)
DateAttributeValue1/5/2020 A 9 1/5/2020 B 43 1/5/2020 C 133 1/6/2020 A 2 1/6/2020 B 48 1/6/2020 C 118 Date A B Date B D Date C A 1/7/2020 A 17 1/7/2020 B 1050 1/7/2020 C 7 1/8/2020 A 14 1/8/2020 B 1257 1/8/2020 C 4
- v-juanli-msft
Community Support
Hi PiyushBQ
Copy and paste my query in advanced editor
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMtX1SsxT0lGyBGITYyBhaGysFKsTrWQGlTACSViAJAwtwBIuiSWpQK4TELsAsSNY0Byq2tAcRBiYGgApc7CMBUzGBEQYmYIUmCjFxgIA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Date = _t, A = _t, B = _t, C = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type text}, {"A", type text}, {"B", type text}, {"C", type text}}), #"Demoted Headers" = Table.DemoteHeaders(#"Changed Type"), #"Changed Type1" = Table.TransformColumnTypes(#"Demoted Headers",{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}}), #"Added Index" = Table.AddIndexColumn(#"Changed Type1", "Index", 1, 1), #"Added Conditional Column" = Table.AddColumn(#"Added Index", "Custom", each if [Column1] = "Date" then [Index] else null), #"Filled Down" = Table.FillDown(#"Added Conditional Column",{"Custom"}), #"Removed Columns" = Table.RemoveColumns(#"Filled Down",{"Index"}), #"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Removed Columns", {"Column1", "Custom"}, "Attribute", "Value"), #"Sorted Rows" = Table.Sort(#"Unpivoted Columns",{{"Custom", Order.Ascending}, {"Attribute", Order.Ascending}, {"Value", Order.Descending}}), #"Duplicated Column" = Table.DuplicateColumn(#"Sorted Rows", "Value", "Value - Copy"), #"Changed Type2" = Table.TransformColumnTypes(#"Duplicated Column",{{"Value - Copy", type number}}), #"Replaced Errors" = Table.ReplaceErrorValues(#"Changed Type2", {{"Value - Copy", 9999}}), #"Added Conditional Column1" = Table.AddColumn(#"Replaced Errors", "Custom.1", each if [#"Value - Copy"] = 9999 then [Value] else null), #"Filled Down1" = Table.FillDown(#"Added Conditional Column1",{"Custom.1"}), #"Filtered Rows" = Table.SelectRows(#"Filled Down1", each [#"Value - Copy"] <> 9999), #"Removed Columns1" = Table.RemoveColumns(#"Filtered Rows",{"Custom", "Attribute", "Value - Copy"}), #"Reordered Columns" = Table.ReorderColumns(#"Removed Columns1",{"Column1", "Custom.1", "Value"}), #"Sorted Rows1" = Table.Sort(#"Reordered Columns",{{"Column1", Order.Ascending}, {"Custom.1", Order.Ascending}}) in #"Sorted Rows1"Best Regards
Maggie
Community Support Team _ Maggie Li
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.- PiyushBQ
Helper I
This is perfect, Maggie.
Thank you so much!