Grain is the right place to start. Joining Opportunity, OpportunityLineItem and OpportunityFieldHistory in one table and getting plausible but wrong totals is the classic version of this, and plausible is what makes it dangerous. The 2,000 row limit on the Reports connector is also a good reason on its own to go to Objects early. How do you handle record level security from Salesforce, rebuild it as RLS in the model or keep the dataset limited to people who can see everything?