I have created Report Type Opportunity without Contracts (Criteria used primary object- "Opportunity" and Contract as the related object. Relationship used - "A" records may or may not have related "B" records.). But when I run the report it will show the records in opportunity with contracts and even Opportunities without contracts. Could you tell me why this issue is happening?
Have you tried to insert a filter on your report? It seems that you are forgetting to filter out all of the Opportunities without a Contract. Possibly grab a field on the Contract that all Contracts have filled out, and say "Contract Field Equals NULL". That should filter out all of the records with Contracts.
If that doesnt work, you could get more complicated and do a data load to update all Opportunities without a Contract. Create a Boolean field, called "Contract Attached", and do a data load of TRUE for all Opportunities with a Contract. After the data is loaded and you have the historical data correct, you can setup a Process Builder to check the box anytime a Contract is added to an Opportunity. You can then run your reports off of this field and not need a custom report type.
Hopefully one of those two solutions works for you.
When creating a custom report type you have two choices when adding the child object as described in help:
For each child object, select one of the following criteria:
- Each "A" record must have at least one related "B" record. Only parent records with child records are shown in the report.
- "A" records may or may not have related "B" records. Parent records are shown, whether or not they have child records.
If you want only Opportunities with Contracts then you would need to choose the first option above. You chose the second option which is intended to show both Opportunities with or without Contracts. Alternatively, you could continue to use the report type you have created but use a cross object filter to only show Opportunities with Child Contracts.
Example cross filter using Quotes: