Expand Configuration Properties
Each entry in the sources[].expand array accepts the following properties:
| Name | Type | Default | Description |
|---|
name | string | Required | Navigation property name from the data model relationships. Must match a direct.name or back.name value on the parent entity type. |
title | string | None | Display title for the expanded entity group in the sheet header row. If omitted, the navigation property name is used. |
expand | array | None | Nested expand definitions for multi-level hierarchies. Each entry follows the same schema recursively. |
The name property is mandatory. An expand entry without name is invalid and will prevent the sheet from loading related data.
Expansion Path Syntax
Expansion paths follow navigation properties defined in the data model. Each name value must correspond to a relationship property on the parent entity type.
Single-Level Expansion
Load direct related entities of the root entity type:
This loads the Chapter entity associated with each UserNeed via the many-to-one chapter navigation property.
Multi-Level Expansion
Load deeper levels by nesting expand arrays inside each other:
Each nested expand resolves relative to its parent entity type.
Parallel Branches
A single entity type can expand multiple navigation properties at the same level. List multiple entries in the same expand array:
This loads both SystemRequirement entities (via the association) and the parent Chapter alongside each UserNeed.
Cardinality and Expansion Patterns
The relationship cardinality defined in the data model determines the expand syntax and the resulting UI behavior in the sheet.
Many-to-One (N:1)
Each child entity references exactly one parent. The navigation property is scalar (singular name).
Data model relationship:
Source expand:
Column binding:
chapter renders as a single-value reference picker (scalar navigation property).
chapter.title renders the referenced Chapter entity’s title as a read-only column.
One-to-Many (1:N)
A parent entity has a collection of children. This is the reverse side of a many-to-one relationship. The navigation property is plural (collection name).
Source expand:
Column binding:
userNeeds expands into child rows in the sheet, creating a new hierarchical level.
- No dot-notation is needed for the expand itself; the expand directly opens the child level.
Many-to-Many (M:N)
Many-to-many relationships use an association entity between the two types. The expansion requires two nested levels: first to the association collection, then through to the target entity.
Many-to-many expansion patterns use an implicit association entity generated by the data model. The exact association entity structure depends on how the relationship is defined. Consult a domain expert when configuring complex M:N expansions for the first time.
Data model relationship:
Source expand (two-level):
Column binding:
- The source expand uses two levels:
systemRequirements (association collection) followed by systemRequirement (target entity).
- Column binding uses dot-notation matching the expand path:
systemRequirements.systemRequirement.
- The column renders as a multi-item reference picker.
Many-to-many expansions are bidirectional. The same relationship can be navigated from either end:
UserNeed expands systemRequirements.systemRequirement to reach SystemRequirement
SystemRequirement expands userNeeds.userNeed to reach UserNeed
The navigation property names come from the direct.name and back.name values in the data model relationship definition.
Cardinality Summary
| Cardinality | Model Definition | Source Expand | Column Binding | UI Behavior |
|---|
| N:1 | cardinality: many-to-one, direct.name: chapter | - name: chapter | chapter, chapter.title | Single-value reference picker |
| 1:N | Reverse of N:1, back.name: userNeeds | - name: userNeeds | userNeeds | Child rows (new sheet level) |
| M:N | cardinality: many-to-many, back.name: systemRequirements | - name: systemRequirements then nested - name: systemRequirement | systemRequirements.systemRequirement | Multi-item reference picker |
Expand and Column Binding Alignment
Every column with a navigation binding path must have a corresponding expansion in the source configuration. The expand hierarchy must match the column binding path structure.
| Column Binding Path | Required Expand |
|---|
title | None (direct property on root entity) |
chapter | expand: [{ name: chapter }] |
chapter.title | expand: [{ name: chapter }] |
systemRequirements.systemRequirement | expand: [{ name: systemRequirements, expand: [{ name: systemRequirement }] }] |
systemRequirements.systemRequirement.title | Same as above |
If a column references a navigation property that is not expanded in the source configuration, the column cells will remain empty. The related entities are simply not loaded and no error is shown.
Query Execution
The expand clause is converted to dot-notation strings for query execution. Nested expand arrays are recursively flattened:
| YAML Expand | Dot-Notation Query |
|---|
- name: chapter | chapter |
- name: systemRequirements with nested - name: systemRequirement | systemRequirements.systemRequirement |
This enables loading all related entities in a single server request rather than multiple round-trips. The query engine pre-fetches all expanded entities so the data is available when the sheet renders.
Validation
Expand property paths are validated against the data model metadata at query time. If a name references a navigation property that does not exist on the entity type, the query fails with a validation error.
Document Context
When a source defines constraints.applyCurrentDocumentTo, the expand clause operates within the document scope. Expanded entities are filtered to those associated with the current document context. See Document Filtering for details.
| Factor | Impact | Recommendation |
|---|
| Expand depth | Each level adds query overhead | Keep to 3-4 levels for responsive loading |
| Entity count per level | Large collections at each level multiply data volume | Use predicates to filter root entities |
| Parallel branches | Multiple expands at the same level fetch independently | Combine into views to show only needed branches |
| M:N associations | Association entities add an extra level | Account for the association level when planning depth |
Maximum supported expand depth and performance characteristics depend on the Polarion server configuration and the number of entities at each level.
Complete YAML Example
A full requirements traceability matrix (RTM) configuration showing multi-level and parallel expand paths:
This configuration:
- Queries
UserNeed entities scoped to the current document.
- Expands the parent
Chapter (N:1) for each user need.
- Expands
SystemRequirement entities through the M:N association (systemRequirements.systemRequirement).
- Further expands
DesignRequirement entities through another M:N association at the next level.
- Binds columns to display titles at each level with appropriate pickers.
Related Pages
- EntityQuery — top-level query structure containing the expand clause
- Sources — source configuration including expand, constraints, and query settings
- Binding Syntax — column binding paths that must align with expand paths
- Relationships — data model relationships defining available navigation properties
- Navigation Directions — direct and back navigation direction semantics
- Cardinality — relationship cardinality rules governing expand patterns
- Document Filtering — how document constraints interact with expanded data