Thanks for the responses.
Regarding Aryeh's response: The solution you're proposing is essentially to find out the full criteria of a product group (type, brand, ID, etc.) by analyzing the heirarchy in the ad_group_criterion.display_name and then filtering the shopping_performance_view with those conditions. This is the same as the reverse engineering solution Mat mentioned. In additon to the problems Mat mentioned with this solution, there is also another reason this solution will not work.
Consider the scenario when one of the subdivisions in your hierarchy is the Everything else product group (see the screenshot below). In the example I show in the screenshot, the cafe appliances product group sits under a parent called Everything else in kitchen>cooking..... The condition of this parent node is basically the opposite of all other nodes at that parent level. Hence, for me to filter by that condition I'll have to find all other nodes, etc. and work out the opposite condition of all of them. You can see how messy this can get.
What we need is, like what Mat said, a way to segment the shopping_performance_view by the product group ID (i.e. ad_group_criterion.criterion_id). At the moment, shopping_performance_view can't be segmented by anything related to the product groups. Segmenting by adgroup is not of much help because obviously there are lots of product groups per adgroup and we want to zoom into one product group only.
I considered using the Content API for this but my understanding is that API deals only with the data in the Merchant Centre and hence doesn't know anything about the product group structure. Please correct me if I'm wrong.
It's puzzling why something as simple as this is so hard to do in the API. In the Google UI, it's very easy to see the products under a product group.
Any ideas?
Oliver