Forum Discussion
Power Query : customize column that count number of rows for each ROW
- 3 years ago
If I understand properly, you can do this in PQ by
- Group by Product Key
- Count the number of YES in each group
- Re-expand the table
Note that your example seems to be incorrect
- 31/2/2000 is not a valid date
- Key A3 only has a count of one (1), not three(3)
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WcjRU0lEystQ30jcyMDIAsiNdg5VidaAShkb6BoYgGUNkGSOQjCGSjJ8/RMIYZBZQwhhDiwlIxginjDG6TCwA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Product Key" = _t, Date = _t, Sold = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{ {"Product Key", type text}, {"Date", type date}, {"Sold", type text}}, "en-150"), #"Grouped Rows" = Table.Group(#"Changed Type", {"Product Key"}, { {"All", each _, type table [Product Key=nullable text, Date=nullable date, Sold=nullable text]}, {"Count", each List.Count(List.RemoveItems(_[Sold],{"NO"})), Int64.Type} }), #"Expanded All" = Table.ExpandTableColumn(#"Grouped Rows", "All", {"Date", "Sold"}, {"Date", "Sold"}) in #"Expanded All"Data
Results
- 3 years ago
Sorry about that.
The new line should have been:
{"Last Date Sold", (t)=> List.Max(Table.SelectRows(t, each [Sold] = "YES")[Date]), type date}
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WcjRU0lEystQ30jcyMDIAsiNdg5VidaAShkb6BoYgGUNkGSOQjCGSjJ8/RMIYZBZQwhhDiwlIxginjDG6TCwA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Product Key" = _t, Date = _t, Sold = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{ {"Product Key", type text}, {"Date", type date}, {"Sold", type text}}, "en-150"), #"Grouped Rows" = Table.Group(#"Changed Type", {"Product Key"}, { {"All", each _, type table [Product Key=nullable text, Date=nullable date, Sold=nullable text]}, {"Count", each List.Count(List.RemoveItems(_[Sold],{"NO"})), Int64.Type}, {"Last Date Sold", (t)=> List.Max(Table.SelectRows(t, each [Sold] = "YES")[Date]), type date} }), #"Expanded All" = Table.ExpandTableColumn(#"Grouped Rows", "All", {"Date", "Sold"}, {"Date", "Sold"}) in #"Expanded All"
Hello, that's an exemple of data set and result desired.
| Product Key | Date | Sold | Count (Output wanted) |
| A1 | 31/2/2020 | YES | 2 |
| A1 | 12/01/2021 | YES | 2 |
| A2 | 11/01/2021 | NO | 0 |
| A3 | 21/03/2021 | YES | 3 |
| A4 | 22/03/2021 | YES | 3 |
| A4 | 23/03/2021 | YES | 3 |
If I understand properly, you can do this in PQ by
- Group by Product Key
- Count the number of YES in each group
- Re-expand the table
Note that your example seems to be incorrect
- 31/2/2000 is not a valid date
- Key A3 only has a count of one (1), not three(3)
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WcjRU0lEystQ30jcyMDIAsiNdg5VidaAShkb6BoYgGUNkGSOQjCGSjJ8/RMIYZBZQwhhDiwlIxginjDG6TCwA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Product Key" = _t, Date = _t, Sold = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{
{"Product Key", type text}, {"Date", type date}, {"Sold", type text}}, "en-150"),
#"Grouped Rows" = Table.Group(#"Changed Type", {"Product Key"}, {
{"All", each _, type table [Product Key=nullable text, Date=nullable date, Sold=nullable text]},
{"Count", each List.Count(List.RemoveItems(_[Sold],{"NO"})), Int64.Type}
}),
#"Expanded All" = Table.ExpandTableColumn(#"Grouped Rows", "All", {"Date", "Sold"}, {"Date", "Sold"})
in
#"Expanded All"Data
Results
- omarelmb1233 years ago
Helper I
thank you it worked, Can you pls tell me how to get the last day of sold product ?
- ronrsnfld3 years ago
Super User
It would be the Max of the date column, either in the grouping aggregations or relative to the entire table depending on what you want for a result and how you want it presented.
- omarelmb1233 years ago
Helper I
so i have to filter first the column sold on YES then operate list.MAX or there's another way to do it ?