platform-report-generate
Use this skill when users need to create, generate, or validate Salesforce Lightning Report metadata. Trigger when users mention reports, creating reports, report metadata, .report-meta.xml files, tabular reports, summary reports, matrix reports, joined reports, report columns, report groupings, rep
By forcedotcom · 2,611 installs
npx skills add forcedotcom/sf-skills --skill platform-report-generate
Source repository · Upstream listing
Overview
Lightning Reports define how Salesforce data is queried, grouped, filtered, and displayed. Each report is a single .report meta.xml file placed under reports/<FolderName / within the project's source directory (check sfdx project.json → packageDirectories[].path for the source root).
Critical Rules (Read First)
TOP DEPLOYMENT KILLERS — check these BEFORE generating any report:
1. Grouping fields in columns — Fields in <groupingsDown or <groupingsAcross must NEVER also appear in <columns
2. Wrong column names — Column names are report type specific. ALWAYS call MCP tools to verify (see references/column names.md )
3. Wrong scope — LeadList uses org , not organization
4. Filter column dot notation — Filter <column values use FLAT names ( INDUSTRY , TYPE ) NOT dot notation ( ACCOUNT.INDUSTRY is INVALID)
5. Multi value picklist filters — Use ONE <criteriaItems with comma separated <value (e.g., Technology,Financial Services ). Do NOT split into multiple criteriaItems with booleanFilter
Rule 1: Format Determines Required Elements
Format <groupingsDown <groupingsAcross <block
Tabular Not allowed Not allowed No
Summary At least 1 (max 3) Not allowed No
Matrix At least 1 (max 3) At least 1 (max 3) No
Joined Not at top level Not at top level At least 2 (max 5)
Rule 2: Use Platform Column Names
Report metadata uses platform report column names , NOT raw API field names. ALWAYS call get metadata type sections or get metadata type context to confirm valid column names. See references/column names.md for common mappings per report type.
Rule 3: Valid Report Type Required
<reportType must be a standard API name (e.g., Opportunity , AccountList , CaseList , LeadList , AccountContactRole ) or a deployed custom report type developer name.
Rule 4–5: Chart & Aggregates Require Summary/Matrix
Charts and <aggregateTypes (Sum, Average, etc.) only work in Summary and Matrix reports.
Rule 6–8: Limits
Max 3 cross filters per report, each with up to 5 criteria items
<filterLogic must reference all filters sequentially (e.g., 1 AND (2 OR 3) )
Joined reports: 2–5 blocks, each block format must be Summary or Matrix (not Tabular)
Rule 9: Folder Structure
Reports must live inside a folder with a corresponding folder metadata file:
Determine <sourceDir from sfdx project.json (commonly force app/main/default , but this is configurable).
Rule 10–11: Date Columns & Scope
Date columns use platform names ( CLOSE DATE , not CloseDate )
LeadList scope is org ; Opportunity/AccountList/CaseList use organization
Rule 12–13: Description & Groupings
<description max 255 characters
Grouping fields must NOT appear in <columns — automatic deployment failure
Rule 14: Folder Metadata Requires <sharedTo
Rule 15: Valid Date Intervals Only
Use INTERVAL CURRENT for "this quarter", INTERVAL CURY for "this year", INTERVAL LAST30 for last 30 days. Do NOT use INTERVAL CURQ — it is not valid. See references/date intervals.md for the full list.
Top Level Elements
Element Required Notes
<name Yes Report name (max 40 chars)
<reportType Yes Report type API name
<format Yes Tabular , Summary , Matrix , or Joined
<scope Recommended organization (or org for LeadList)
<columns Yes Field columns — each has <field and optional <aggregateTypes
<filter No Contains <criteriaItems with <column , <operator , <value
<groupingsDown Conditional Row groupings: <field , <dateGranularity , <sortOrder
<groupingsAcross Conditional Column groupings (Matrix only)
<timeFrameFilter Recommended <dateColumn , <interval , optional <startDate / <endDate
<chart No See references/chart types.md
<buckets No Bucket field definitions
<crossFilters No Cross object filters ( with / without )
<showDetails Recommended true / false
<showGrandTotal Recommended true / false
<showSubTotals Recommended true / false
<description Recommended Business purpose (max 255 chars)
<block Conditional Joined format blocks
Filter Syntax
Multi value picklist: Use ONE criteriaItem with comma separated values:
Common operators: equals , notEqual , lessThan , greaterThan , contains , startsWith , includes , excludes , isBlank , notBlank . Full list in references/filter operations.md .
Generation Workflow
1. Gather Requirements — object, fields, groupings, filters, chart needs
2. Determine Format — no groupings → Tabular; row groupings → Summary; row + column → Matrix; multiple objects → Joined
3. Identify Column Names — call get metadata type sections MCP tool to get valid platform column names for the report type
4. Author Metadata — start from closest example in examples/ and adapt
5. Create Folder — generate folder directory + <FolderName meta.xml with <folderShares
6. Validate — run through references/verification checklist.md
Reference File Index
File When to read
references/column names.md Step 3 — column name mappings per report type
references/date intervals.md When setting timeFrameFilter intervals
references/chart types.md When adding a chart — all 17 types + legendPosition rules
references/filter operations.md When building filters — complete operator reference
references/verification checklist.md Step 6 — pre deploy validation
references/errors and troubleshooting.md When fields are missing or deployment fails
examples/TabularOpportunitiesReport.report meta.xml Tabular report template
examples/OpportunitiesByStageReport.report meta.xml Summary report with chart
examples/OpportunitiesByStageAndQuarter.report meta.xml Matrix report template
examples/AccountsCreatedThisYear.report meta.xml Filtered report with time frame