Forum Discussion
How to filter by subtotals if over $5000 - Pivot Table/VBA?
- Jun 19, 2022
We may play with Power Query. For such model
first prepare the source table
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], #"Changed Type" = Table.TransformColumnTypes( Source, { {"Year", type date}, {"Price", Currency.Type}, {"Trip", type text} } ), #"Merged Columns" = Table.CombineColumns( #"Changed Type", {"First Name", "Last Name"}, Combiner.CombineTextByDelimiter(" ", QuoteStyle.None),"Name"), #"Extracted Year" = Table.TransformColumns( #"Merged Columns", {{"Year", Date.Year, Int64.Type}}) in #"Extracted Year"
Next generate list of people who spent more than 5000 annually. We ignore years with no trips.
let Source = Table, Bar = Excel.CurrentWorkbook(){[Name="PriceBar"]}[Content]{0}[Column1], #"Grouped Rows" = Table.Group( Source, {"Name", "Year"}, { {"Total", each List.Sum([Price]), type nullable number}}), #"Grouped Rows1" = Table.Group( #"Grouped Rows", {"Name"}, {{"Data", each List.Min( _[Total] ) > Bar }}), #"Filtered Rows" = Table.SelectRows( #"Grouped Rows1", each ([Data] = true)), #"Removed Other Columns" = Table.SelectColumns( #"Filtered Rows",{"Name"}), Name = #"Removed Other Columns"[Name] in Name
Finally filter source table by these names and land query to the grid as PivotTable
let Source = Table, #"Filtered Rows" = Table.SelectRows( Source, each List.Contains(#"Names Filtered", [Name] )) in #"Filtered Rows"
Thank you for your reply. I should have mentioned that I already tried doing that but it also shows if the grand total of the individual is greater than $5000 for all years instead of isolating for the subtotal of each year and checking that. Please see below. Thanks.
Dataset:
First Name Last NameTrip PriceYear
Esther | Allan | US | 1806.45 | 2019-04-19 |
Esther | Allan | Canda | 359.26 | 2019-07-20 |
Esther | Allan | Italy | 5078.45 | 2022-05-04 |
John | Smith | US | 2000.26 | 2021-02-02 |
John | Smith | Poland | 2500.45 | 2022-05-05 |
John | Smith | Japan | 3516.56 | 2021-05-07 |
John | Smith | Japan | 3500.89 | 2022-07-04 |
Ayana | Grant | Canada | 653.23 | 2021-03-05 |
Ayana | Grant | Canada | 756.23 | 2022-04-09 |
Ayana | Grant | US | 4000.56 | 2021-02-25 |
Jimmy | Lee | Canada | 455.23 | 2019-04-19 |
Jimmy | Lee | Canada | 454.56 | 2021-05-02 |
Jimmy | Lee | Canada | 670.21 | 2021-07-02 |
We may play with Power Query. For such model
first prepare the source table
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(
Source,
{
{"Year", type date},
{"Price", Currency.Type},
{"Trip", type text}
} ),
#"Merged Columns" = Table.CombineColumns(
#"Changed Type",
{"First Name", "Last Name"},
Combiner.CombineTextByDelimiter(" ", QuoteStyle.None),"Name"),
#"Extracted Year" = Table.TransformColumns(
#"Merged Columns",
{{"Year", Date.Year, Int64.Type}})
in
#"Extracted Year"
Next generate list of people who spent more than 5000 annually. We ignore years with no trips.
let
Source = Table,
Bar = Excel.CurrentWorkbook(){[Name="PriceBar"]}[Content]{0}[Column1],
#"Grouped Rows" = Table.Group(
Source,
{"Name", "Year"},
{ {"Total", each List.Sum([Price]), type nullable number}}),
#"Grouped Rows1" = Table.Group(
#"Grouped Rows",
{"Name"}, {{"Data", each List.Min( _[Total] ) > Bar }}),
#"Filtered Rows" = Table.SelectRows(
#"Grouped Rows1",
each ([Data] = true)),
#"Removed Other Columns" = Table.SelectColumns(
#"Filtered Rows",{"Name"}),
Name = #"Removed Other Columns"[Name]
in
Name
Finally filter source table by these names and land query to the grid as PivotTable
let
Source = Table,
#"Filtered Rows" = Table.SelectRows(
Source,
each List.Contains(#"Names Filtered", [Name] ))
in
#"Filtered Rows"
- zander140Jun 19, 2022Copper Contributor
Hi Sergei, Thank you very much. I thought Esther's data would show as well since her subtotal is greater than $5000 for 2022. I think what the program is doing is, it is removing Esther from the list since for 2019 her spent was only $2165.71. It would be great if any of the year had over $5000 as a subtotal it would show those (highlighted in red). Thanks.
- SergeiBaklanJun 19, 2022Diamond Contributor
- zander140Jun 19, 2022Copper Contributor
SergeiBaklan Thank you so much, Sergei. Can this method be used for a pre-existing Excel Table? Thank you.