This is a single-step report that uses the Opportunity Contact Role object, with a metric filter applied to the Campaign field of the Opportunity object. Here we use the fact that the Opportunity Contact Role object has two lookups, one to Contact and one to Opportunity. We use the former lookup to extract the Contact fields, and we use the latter lookup to apply a metric on the Campaign field. In this sample report, we have produced just a few fields from the Contact object, but you can of course add more fields if needed. You can also use the same idea in a multi-step report.