Sap Fiori Add Visual Filter

by cline26378461e978No license34 starsListed Oct 8, 2026Updated Oct 8, 2026Repository updated 2 months ago

Add visual filters (chart-based) to SAP Fiori Elements filter bar/value help using CAP or ABAP RAP.

Instructions onlySoftware Development
AI-generated overview

Adds chart-based visual filters to SAP Fiori Elements filter bars and value help dialogs using CAP or ABAP RAP.

What it does
Guides an agent through adding chart-based (Bar or Line) visual filters to an SAP Fiori Elements filter bar or value help dialog over OData V4. It covers CAP CDS annotations and ABAP RAP annotation XML, including aggregation setup, chart, presentation variant, value list and selection field annotations, plus the required manifest configuration. It also lists testing commands and common mistakes.
When to use it
Use when a Fiori Elements app needs a chart-based filter on a dimension field aggregated by a numeric measure. It applies to CAP or ABAP RAP projects using OData V4. It requires the entity, dimension field, measure field, aggregation method and chart type to be known first.
Requirements
No scripts ship with the skill; it is instructions only. It assumes an SAP Fiori Elements project on OData V4 using either CAP (CDS annotations, cds/npm watch) or ABAP RAP (backend CDS and metadata.xml), with npm available for the listed run commands. A Fiori MCP server is mentioned as optional for refreshing RAP metadata.

SAP Fiori Visual Filter

Purpose

Add chart-based filters (Bar/Line) to filter bar or value help dialog (OData V4).


MANDATORY: Gather Required Inputs First

STOP and ASK the user for ALL of these inputs if ANY are missing from the prompt:

  1. Entity - Which entity to add the visual filter to
  2. Dimension field - The field to filter by (e.g., Category, Status, Destination)
  3. Measure field - The numeric field to aggregate (e.g., Amount, TotalPrice, ReservationPrice)
  4. Aggregation method - How to aggregate: sum, avg, min, or max
  5. Chart type - Bar or Line (recommend Bar as default)

DO NOT proceed with implementation until all inputs are confirmed.


CAP Implementation

Enable Aggregation (MANDATORY)

cds
@Aggregation.ApplySupported: {  Transformations: ['aggregate','groupby'],  AggregatableProperties: [{ Property: Amount }],  GroupableProperties: [Category]}

Aggregated Property (Measure)

cds
Analytics.AggregatedProperty #Amount_sum : {  $Type: 'Analytics.AggregatedPropertyType',  Name: 'Amount_sum',  AggregatableProperty: Amount,  AggregationMethod: 'sum'}

Chart Annotation

cds
UI.Chart #visualFilter : {  ChartType: #Bar,  Dimensions: [Category],  DynamicMeasures: ['@Analytics.AggregatedProperty#Amount_sum']}

✅ Uses DynamicMeasures

PresentationVariant

cds
UI.PresentationVariant #visualFilter: {  Visualizations: ['@UI.Chart#visualFilter']}

ValueList (on Dimension Field)

cds
Category @Common.ValueList #visualFilter: {  $Type: 'Common.ValueListType',  CollectionPath: 'EntityName',  Parameters: [    { $Type: 'Common.ValueListParameterInOut', LocalDataProperty: Category, ValueListProperty: 'Category' }  ],  PresentationVariantQualifier: 'visualFilter'}

SelectionFields

cds
UI.SelectionFields: [Category]

ABAP RAP Implementation

  • Aggregation.ApplySupported and Aggregation.CustomAggregate annotations must be available in metadata.xml (RAP). If not, below backend configuration is required.

Backend CDS (MANDATORY)

abap
@OData.applySupportedForAggregation: #FULLdefine root view entity ZC_ENTITY  provider contract analytical_query  as projection on ZI_ENTITY{  key EntityID,
  @Aggregation.default: #SUM  Amount,
  Category}

Chart Annotation

xml
<Annotation Term="UI.Chart" Qualifier="visualFilter">  <Record Type="UI.ChartDefinitionType">    <PropertyValue Property="ChartType" EnumMember="UI.ChartType/Bar"/>    <PropertyValue Property="Dimensions">      <Collection>        <PropertyPath>Category</PropertyPath>      </Collection>    </PropertyValue>    <PropertyValue Property="Measures">      <Collection>        <PropertyPath>Amount</PropertyPath>      </Collection>    </PropertyValue>  </Record></Annotation>

✅ Uses Measures (not DynamicMeasures)
❌ Metadata is read-only

PresentationVariant Annotation

xml
<Annotation Term="UI.PresentationVariant" Qualifier="visualFilter">  <Record Type="UI.PresentationVariantType">    <PropertyValue Property="Visualizations">      <Collection>        <AnnotationPath>@UI.Chart#visualFilter</AnnotationPath>      </Collection>    </PropertyValue>  </Record></Annotation>

ValueList Annotation

xml
<Annotation Term="Common.ValueList" Qualifier="visualFilter">  <Record Type="Common.ValueListType">    <PropertyValue Property="CollectionPath" String="EntityName"/>    <PropertyValue Property="PresentationVariantQualifier" String="visualFilter"/>    <PropertyValue Property="Parameters">      <Collection>        <Record Type="Common.ValueListParameterInOut">          <PropertyValue Property="LocalDataProperty" PropertyPath="Category"/>          <PropertyValue Property="ValueListProperty" String="Category"/>        </Record>      </Collection>    </PropertyValue>  </Record></Annotation>

SelectionFields Annotation

xml
<Annotation Term="UI.SelectionFields">  <Collection>    <PropertyPath>Category</PropertyPath>  </Collection></Annotation>

Manifest Configuration (REQUIRED)

json
"@com.sap.vocabularies.UI.v1.SelectionFields": {  "layout": "CompactVisual",  "initialLayout": "Visual",  "filterFields": {    "Category": {      "visualFilter": {        "valueList": "com.sap.vocabularies.Common.v1.ValueList#visualFilter"      }    }  }}

✅ Connects filter field to visual filter chart
✅ Sets initial layout to visual mode


Testing

CAP Projects

bash
npm run watch-<app-name>  # e.g., npm run watch-manage-travel# or use generic watch script if availablecds watch

RAP Projects

bash
npm run start-mock # Needs metadata refresh
npm start          # No refresh needed - fetches metadata from live backend at runtime
  • Consult fiori mcp server if available on how to refresh metadata for sap/cloud systems in case of RAP

Key Differences

  • CAP: DynamicMeasures + AggregatedProperty defined in CDS
  • RAP: Measures + @Aggregation.default in backend CDS only
  • CAP: Aggregation and chart defined in same place
  • RAP: Metadata is read-only, must be configured in backend CDS.
  • Qualifier: Must use same qualifier (#visualFilter) across Chart, ValueList, and manifest

Common Mistakes

  • Missing backend aggregation setup
  • Qualifier mismatch between Chart, ValueList, PresentationVariant, and manifest
  • Wrong path in manifest (use full vocabulary path)
  • RAP projects using DynamicMeasures instead of Measures
  • Forgetting PresentationVariantQualifier in ValueList
  • Missing SelectionFields annotation

Best Practices

  • Use Bar chart (most common and recommended)
  • Limit to 3–5 visual filters per filter bar
  • Always configure backend aggregation first
  • Use consistent qualifiers throughout
  • Test with real data to verify aggregation works correctly

Source and attribution

Source:cline/skillsinskills/sap-fiori-add-visual-filterat commit2637846

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal