Brother! I should have had a cup of coffee before submitting that last response. I see your confusion, sorry. Let me explain. The desired report is as follows:
....where Activity.date is in [?fromdate to ?todate]
and Product.number is in [?fromprodn to ?toprodn]
Report the sales, oppt'y, and demo activities that have occurred in the date range spec'd, for the product numbers in the range spec'd. So....if I added the Product table aliases.....
....if Sale.index = Activity.index and
Sale.id = Product_1.id, then a test report
line would be
Activity.index Sale.index Sale.id Product_1.id Activity.date Product_1.number
Activity.other Sale.other Product_1.other
....if Oppt'y.index = Activity.index and
Oppt'y.id = Product_2.id, then a test report
line would be
Activity.index Oppt'y.index Oppt'y.id Product_2.id Activity.date Product_2.number
Activity.other Oppt'y.other Product-2.other
....if Demo.index = Activity.index and
Demo.id = Product_3.id, then a test report
line would be
Activity.index Demo.index Demo.id Product_3.id Activity.date Product_3.number
Activity.other Demo.other Product_3.other
While I dont believe it matters for the SQL Server data source, for the MS Access data source, the Sale, Oppt'y, and Demo tables are indexed on .index and the Product table is indexed on .id, and the Activity table is not indexed at all, and I cannot change any of them.
Therefore I thought it would be best to make Activity the primary table and design the report as diagramed below to take advantage of the indices when the report runs against the MS Access data source:
Activity.index -> LOJ -> Sale.index
Sale.id -> LOJ > Product_1.id
Activity.index -> LOJ -> Oppt'y.index
Oppt'y.id -> LOJ > Product_2.id
Activity.index -> LOJ -> Demo.index
Demo.id -> LOJ -> Product_3.id
(this is the diagram I messed up in the prior post which I believe lead to your confusion)
In the data source data base I am stuck with, any given record in Sale, Oppt'y or Demo, is linked to only one Activity record by Sale.index = Activity.index. I used the LOJ for Sale, Oppt'y, & Demo, because there will be lots of Activity records with an Activity.index value that is e.g. is not in Sale, because instead it is in Oppt'y or Demo. An EQJ to Sale would exclude such Activity records.
Now in your approach, I still need criteria on Activity.date and on Product.number. For a given in-range Product.id, I would get Sale, Oppt'y, and Demo records with matching .id. And for each of those, I would get the Activity record where Activity.index matches. I would then still need aliases of Activity, correct? and need to use LOJ's throughout for the reasons above.
I think the key to it, is that the Sale, Oppt'y, and Demo and Activity data must all be reported as it exists in the same report for the in-range Product numbers.
Conclusions:
1) Aliases must be used if separate look-ups in the same secondary table are called by multiple primary tables in the same report.
2) LOJ's must be used to avoid restricting output based on the existence of the join field value in one activity type like Sale, over the others.
3) Might as well take advantage of the indexing.
Hope this clarifies my situation. Since I am still learning CR, any feedback is very welcome.