The original was taking way too much memory so a quick hack on the outside
gives us processing in groups by the first attribute. Because we always group
by project for the esi.portfolio import, we'll get groupBy(project) semantics