Build a custom report type when no standard type exposes the object combination or fields your users need. You create it in Setup, define the object chain, then set the fields and deployment status. You need the Manage Custom Report Types permission, which admins normally have.
- Open the report type setup area
In Setup, use Quick Find to open Report Types, then click New Custom Report Type. Salesforce offers a legacy builder and an enhanced builder; either one walks you through the same core choices.
- Choose the primary object and label it
Select the primary (A) object, then enter a clear label, a unique developer name, a description, and a report type category so users can find it. Leave the deployment status as In Development for now.
- Add related objects and set record inclusion
Attach related objects (B, C, D) up to a total of four relationships. For each one, choose whether every A record must have a related child, or whether A records may or may not have children, which controls inner versus outer join behavior.
- Lay out the fields
Open the field layout, add or remove fields, group them into sections, and rename column labels. Pull in lookup fields where helpful so the right columns are offered when people build reports.
- Deploy and test
Switch the deployment status to Deployed so eligible users can see it, then build a quick test report to confirm the rows and columns behave the way you intended.
The anchor (A) object every report on this type returns first; it cannot be changed after creation without rebuilding the type.
The friendly name shown to users when they pick a report type to start a new report.
The unique developer name (API name) used internally and in metadata; it must be unique across report types.
The report type category, such as Accounts and Contacts, that determines where the type is grouped in the report type list.
In Development hides the type from non-admins; Deployed exposes it to users who already have access to the underlying objects.
- A type left In Development is invisible to regular users, so a brand new report type that "won't show up" is usually just undeployed.
- The with-related-records option acts like an inner join and hides primary records that have no children; use may-or-may-not when you need every primary record.
- You cannot change the primary object after the report type is created, so plan the object chain before you start.
- A report type can join at most four objects, and a report that pulls columns from more than 20 objects throws an error at run time.
- Report types never widen access; field-level security and object permissions still filter what each user can see.