Build a custom report on ProcessInstance, ProcessInstanceStep, and the target object so finance or compliance can see approval cycle time, volume, and bottleneck steps in one place.
- Identify the target object
Pick the object the approval runs on (Opportunity, Quote, Contract, custom). Note which fields you need on the report (Amount, Region, Owner, Stage).
- Create a custom report type
Setup, Report Types, New. Primary object is the target object. Add ProcessInstance as a related object linked by TargetObjectId. Add ProcessInstanceStep as a related object linked by ProcessInstanceId.
- Mark useful fields available
On the report type, mark Status, CreatedDate, CompletedDate, and the comment field as available for reporting. Add the step's Actor and StepStatus.
- Build a cycle-time report
Create a report on the new report type. Add a custom formula column: CompletedDate minus CreatedDate. Group by the target object's region or owner.
- Add filters
Filter to approvals that completed in the last quarter. Filter status to Approved or Rejected (exclude Pending for cycle time).
- Build the dashboard
Add the report to a dashboard with a bar chart of cycle time by region and a tile of Pending vs Completed counts. Pin to the finance or compliance home page.
Parent runtime object; one row per approval submitted.
Child object capturing each completed step with actor and timestamp.
Pending step record; one row per active workitem awaiting approver action.
Joins ProcessInstance to the target object to make the runtime data reportable alongside business fields.
- ProcessInstance freezes the approval flow at submission. Edits to the underlying Approval Process do not apply to in-flight instances; they only affect new submissions.
- ProcessInstanceWorkitem is the only place pending state lives. Reports on completed approvals use ProcessInstance plus ProcessInstanceStep; reports on pending approvals must include Workitem.
- CompletedDate is null while the instance is still pending. Cycle-time formulas need to handle the null case or filter completed instances only.
- Comments on a step are stored on the step row, not the instance. A report that needs the comment trail must include ProcessInstanceStep in the report type.