I created a report of Contacts with Accounts and showed the NPSP Total Gifts This Year and Total Gifts Last Year fields.
I cross-filtered by Contacts with Opportunities WHERE Opp Record Type = Membership
To my surprise, I got a bunch of rows back that had $0 in the two Totals fields.
I believe this happened because those Contacts had a Contact Role record associated with an Opportunity from an organization Account. We made them be the Primary Contact for the Opp for customized thank you letters, so NPSP created a Contact Role record for them.
No harm done I thought because I have NPSP's Always Rollup to Primary Contact unchecked. SO the NPSP Contact and HH Account rollup fields do not include these Opps.
But it appears that a cross filter between Contact and Opp in a report means, "include the Contact if they have a Contact Role record on any Opp, regardless of Role or Primary".
Does that sound correct?