Forum Discussion
transforming excel sheet in power query editor
I am new to power query editor. I have an excel sheet with three columns, Notification, Stat., and Date. Each column has 1311 rows. I want the notification column to stay where it is. I need all 1311 rows in the Stat. column to become the 1st row. I then need the entire date column to become rows.
This is how it looks like:
| Notificaition | Stat. | Date |
| 300642957 | E0002 | 5/22/2024 |
| 300634015 | E0042 | 1/24/2024 |
I need it to look like this:
| Notification | E0002 | E0042 |
| 300634015 | 5/22/2024 | 1/24/2024 |
Is this even possible? I have spent 5 hours using transpose and pivot/unpivot columns.
Thank you!
- Intern
11 Replies
- HotChilliCommunity Champion
I'm reasonably sure you don't really want to do this (in power query at least).
If you did do it and if you want do anything with those new columns, you'll have to write a measure for each column => 1311 measures.
Also, what happened to row with Notification 300642957?
- AnonymousNot applicable
HotChilli,
The row with notification 300642957 would be moved below the first notification. Atleast, that is what my boss wants.
Notification E0002 E0042 30054015 1/24/2024 01/17/2024 300642957 5/22/2024 1/5/2024
What does it mean to write a measure for each column?
- ronrsnfldSuper User
I am assuming that you must have multiple rows with the same notification but different Stat and Date, and that your example is not realistic.
Perhaps a more realistic data source would look like:
That being the case, the below might be what you want:
let Source = Excel.CurrentWorkbook(){[Name="Table2"]}[Content], #"Changed Type" = Table.TransformColumnTypes(Source,{{"Notification", Int64.Type}, {"Stat.", type text}, {"Date", type date}}), //will be used below in Pivot Stats = List.Sort(List.Distinct(#"Changed Type"[#"Stat."])), fieldTypes = List.Repeat({type nullable date}, List.Count(Stats)), rowColumnTypes = List.Transform(fieldTypes, (t) => [Type = t, Optional = false]), rowType = Type.ForRecord(Record.FromList(rowColumnTypes, Stats),false), #"Grouped Rows" = Table.Group(#"Changed Type", {"Notification"}, { {"Pivot", each Table.Pivot(_, Stats,"Stat.","Date"), type table rowType}}), #"Expanded Pivot" = Table.ExpandTableColumn(#"Grouped Rows", "Pivot", Stats) in #"Expanded Pivot"producing:
- AnonymousNot applicable
You're a life saver! I am going to try this! I will have to find where I can enter M-code in power query editor! Thank you so much! I will update if this works!
- AnonymousNot applicable
UPDATE:
I tried the M-code given in the earlier comment. It got me the correct format, however it got rid of most of my data. Unfortunatly, I now have 6 columns and 268 rows, despite me changing it to "column profiling based on entire data set".
I havent lost hope yet! I still have 8 hours left in the work day!
Any more ideas to help this new intern out? Thank you!- ronrsnfldSuper User
Hard to tell for sure without the data and expected outcome wrt the extra rows (and your screenshot is virtually useless to me in that regard), but it might be as simple as adding those other three column to the "key" argument. Basically you would group by all the columns except "Stat." and "Date". See if that works. If not, you'll need to provide more detail.
... #"Grouped Rows" = Table.Group(#"Changed Type", List.RemoveMatchingItems(Table.ColumnNames(Source),{"Date","Stat."}), ...- AnonymousNot applicable
Provided is a screenshot of the email from my boss:
Screenshot of Data, plus another 1000 and some entries, each column has 1310 entries:
Screenshot of the format my boss gave me that they wanted:
Thank you for being so patient, you have been so helpful!