2.4 Reports, Custom Report Types & Dynamic Dashboards
Key Takeaways
Salesforce provides four distinct report formats: Tabular (simple lists), Summary (grouped by rows), Matrix (grouped by rows and columns), and Joined (multi-block comparative analysis).
Custom Report Types govern data visibility by defining object relationship joins (inner join 'with' vs left outer join 'with or without') and allowing lookup field inclusion up to 4 levels deep.
Row-level formulas evaluate record-specific criteria (limit 1 per report), whereas Summary formulas evaluate grouped aggregates (limit 5 per report) using functions like PARENTGROUPVAL and PREVGROUPVAL.
Dynamic Dashboards run as the logged-in user to show personalized data based on each viewer's individual sharing permissions, but cannot be scheduled for email delivery.
Access to shared report/dashboard artifacts uses Folder Sharing together with the relevant system permissions with Viewer, Editor, or Manager access levels, rather than at the individual artifact level.
2.4 Reports, Custom Report Types & Dynamic Dashboards
Data analytics in Salesforce allows stakeholders to monitor key performance indicators, discover trends, and make evidence-based business decisions. Building effective analytics requires an app builder to master report formats, understand how Custom Report Types dictate data availability, implement formula calculations, and configure Dynamic Dashboards while adhering to platform boundaries.
The Four Core Report Formats
Salesforce Report Builder supports four foundational report formats, each serving distinct analytical requirements:
- Tabular Reports: The simplest report format. Presents a flat list of records with selected columns, similar to a spreadsheet. Tabular reports do not group data or show group subtotals. A row-limited tabular report can be used as a dashboard source with the appropriate dashboard settings; adding a row limit does not turn it into a grouped report. Best suited for contact lists, mailing lists, and data exports for Data Loader.
- Summary Reports: The most widely utilized format. Rows are grouped by one or more fields (up to 3 grouping levels, such as grouping Opportunities by
StageNameand then byFiscalQuarter). Supports subtotals, grand totals, summary formulas, and visual charts. - Matrix Reports: Groups records by both rows and columns in a two-dimensional grid (e.g., grouping Opportunities by
StageNamealong the rows and byCloseDatemonth along the columns). Ideal for comparing volume and monetary values across two intersecting dimensions. - Joined Reports: Combines up to 5 separate report blocks in a single consolidated view. Each block can use a different report type, apply its own filters, and display its own columns, provided the blocks share common grouping fields (e.g., displaying open Support Cases in Block 1 and Closed Opportunities in Block 2, both grouped by
AccountName).
Custom Report Types (CRT)
Standard report types are generated automatically by Salesforce, but they impose strict limitations: their available objects and relationship behavior are predefined. They can include custom fields; inspect the selected type rather than assuming every standard report is an inner join. When business analysis requires complex multi-object relationships or fields from remote parent objects, an app builder must build a Custom Report Type (CRT).
Primary and Related Object Hierarchy
A Custom Report Type defines a primary object and can navigate up to 4 levels of related objects (e.g., Object A -> Object B -> Object C -> Object D).
For each related object relationship, the architect defines the join logic:
- "Each A record must have at least one related B record" (Inner Join): An A record appears in the report only if it has a matching child B record. If an Account has zero Contacts, it will not appear on an "Accounts with Contacts" report.
- "A records may or may not have related B records" (Left Outer Join): All A records appear in the report, regardless of whether any related B records exist.
Important
A standard exam question asks: "How can a marketing director see a report of all Accounts, including those that have NO Opportunities?" An Opportunities-based source excludes Accounts without Opportunities; choose a source that includes the required parent records. The app builder must create a Custom Report Type with Accounts as Object A and Opportunities as Object B, selecting "A records may or may not have related B records".
Field Layout Management in CRT
The Custom Report Type layout editor provides immense declarative power:
- Add Fields Related via Lookup: You can navigate up lookup relationships (up to 4 levels away) to pull fields onto the report layout. For example, on a Case report type, you can add fields from
Case -> Account -> Owner -> User Role. - Custom Display Labels: You can rename a field's display label on the report layout without altering the underlying database field label in Object Manager.
- Default Columns: You can specify which fields appear as default selected columns whenever a user creates a new report using that report type.
Advanced Calculations: Bucketing and Formulas
Salesforce provides three distinct mechanisms to calculate or categorize data directly within the reporting layer without adding custom formula fields to the underlying database schema.
| Calculation Type | Evaluation Scope | Platform Limit | Requires Grouping? | Primary Use Case |
|---|---|---|---|---|
| Bucket Field | Evaluates individual record values to assign categories | Up to 5 per report | No | Grouping picklist values or numerical ranges (e.g., Deal Size: Small, Medium, Large) |
| Row-Level Formula | Evaluates logic row-by-row on individual records | Exactly 1 per report | No | Calculating date differences or line-item margins on a single record |
| Summary Formula | Evaluates aggregated groupings and grand totals | Up to 5 per report | Yes (Summary/Matrix) | Calculating percentages of subtotals (PARENTGROUPVAL) or period-over-period trends (PREVGROUPVAL) |
Advanced Summary Formula Functions
Summary formulas allow architects to compute complex ratios across report groupings using two specialized functions:
PARENTGROUPVAL: Returns the value of a summary metric from a parent grouping level or grand total. Commonly used to calculate a category's percentage contribution to overall revenue:AMOUNT:SUM / PARENTGROUPVAL(AMOUNT:SUM, GRAND_SUMMARY)PREVGROUPVAL: Returns the value of a summary metric from the previous group in a chronological sequence. Commonly used to evaluate month-over-month sales growth.
Dashboards: Components, Filters & The Running User
A Dashboard provides a visual representation of report data using charts (bar, column, line, donut), gauges, metrics, and Lightning tables. Dashboards are powered entirely by underlying source reports; a dashboard component cannot query the database directly.
The Running User Architecture
The Running User determines whose security and sharing permissions are used to query the underlying data when the dashboard is rendered:
- Run as Specified User (Static Dashboard): All dashboard viewers see data based on the single designated user's security permissions, regardless of their own personal access. For example, if a dashboard runs as the VP of Sales, all sales representatives viewing the dashboard see company-wide revenue metrics, even if their individual OWD is Private.
- Run as Logged-In User (Dynamic Dashboard): The dashboard renders data dynamically based on the specific viewer's personal sharing permissions and role hierarchy level. When a regional sales rep opens the dashboard, they see only their opportunities; when the regional director opens it, they see all opportunities in their region.
Critical Limits on Dynamic Dashboards
- Organization Limits: Enterprise Edition organizations are limited to 5 Dynamic Dashboards; Performance and Unlimited Editions receive 10 Dynamic Dashboards.
- No Scheduled Subscriptions: Dynamic Dashboards cannot be scheduled for email delivery or subscribed to. Because the system cannot determine which user's security context should be used when generating a mass automated email, scheduled delivery is disabled.
Dashboard Filters
Administrators can add up to 5 Dashboard Filters, each with up to 50 filter options. Filters allow viewers to slice dashboard data interactively across all components simultaneously (e.g., filtering all charts by StageName, Region, or FiscalYear).
Folder Sharing & Access Governance
Reports and dashboards use folder sharing to control artifact access; private folders and relevant user permissions also matter. Folder sharing controls access to the analytics artifact, combined with the user's report/dashboard permissions. Object, field, and record access still govern the underlying data; a specified dashboard running user can expose additional aggregate data:
- Viewer: The user can open, view, and run reports or dashboards in the folder. They cannot edit or save changes.
- Editor: The user can view, edit, add, and delete reports or dashboards within the folder.
- Manager: The user can view, edit, delete, and manage folder sharing permissions, including granting folder access to other users, roles, or public groups.
Note
Reports saved in a user's "Private Reports" folder cannot be accessed by anyone else in the company, including system administrators, unless an administrator explicitly logs in as that user or utilizes administrative API migration tools.
Official Source Check
Checked October 19, 2026: Reports and dashboard allocations.
Universal Containers has 12 regional sales directors. The Vice President of Global Sales wants all 12 directors to view their regional key performance indicators on a centralized dashboard. Each director must only see the opportunities and revenue data belonging to their respective sales territory. What is the most efficient, scalable configuration?
Create 12 separate clone dashboards, configuring each with a static running user matching the regional director.
Build a single Dynamic Dashboard configured to 'Run as logged-in user', saving it in a shared folder accessible to all directors.
Build a single dashboard with a Static Running User and apply a Dashboard Filter on the territory field, because dashboard filters enforce row-level security and guarantee that each director can never view another region's opportunity data.
Configure an Opportunity Restriction Rule on the Vice President's user account and schedule daily dashboard emails.
A marketing manager needs an analytical report listing all business Accounts in the database, showing their associated Opportunities if any exist. Accounts that currently have zero Opportunities must still appear on the report to identify under-engaged accounts. Standard report types only display Accounts that have at least one Opportunity. How should the app builder satisfy this requirement?
Create a Joined Report pairing a Tabular Account block with a Summary Opportunity block, because the cross-block outer join on Account ID preserves every Account row even when the Opportunity block contains zero matching related records.
Add an Opportunity Row-Level Formula that evaluates whether the Opportunity ID is null.
Create a Custom Report Type with Accounts as the primary object and Opportunities as the secondary object using 'A records may or may not have related B records'.
Create a Bucket Field on Account that categorizes accounts based on opportunity volume.
A sales operations analyst is building an Opportunity Summary Report grouped by StageName. The sales VP wants to see a summary column displaying the percentage that each stage's dollar amount contributes to the grand total pipeline value. Which report calculation feature must the analyst use?
A Row-Level Formula dividing each Opportunity Amount by the grand total pipeline value, wrapped in an AVG summary function that recalculates across every StageName grouping level of the report.
A Bucket Field that groups stages into percentage bands.
A Custom Report Type field layout with an aggregate lookup field.
A Summary Formula using the PARENTGROUPVAL function to divide the stage subtotal by the grand summary total.
Sections you finish are checked off in the contents.