Multi-key joins require adding hidden filters through PreExecuteReportSet that will add hidden filters that connect the data sources. Here is an example of the type of SQL that should be generated.
SELECT DISTINCT [dbo].[Categories].[CategoryName] AS 'Category Name',
COUNT(DISTINCT [dbo].[Order Details].[OrderID]) AS 'Count Distinct(Order ID)',
AVG([dbo].[Order Details].[Discount]) AS 'Average(Discount)',
SUM([dbo].[Products].[UnitsInStock]) AS 'Sum(Units In Stock)'
FROM [dbo].[Categories],[dbo].[Products],[dbo].[Order Details]
WHERE [dbo].[Products].[CategoryID]=[dbo].[Categories].[CategoryID]
AND [dbo].[Order Details].[ProductID]=[dbo].[Products].[ProductID]
GROUP BY [dbo].[Categories].[CategoryName]