How it works
A drill-down has two configuration layers, owned by different sides:- The client-side config decides whether the drill-down menu item appears for a given cell (based on the cell’s measure name and the table layout).
- The server-side config decides what the drill-down returns (which measures and which hierarchies on rows) once the menu item is clicked.
- The user right-clicks a cell. The UI evaluates its
drilldownOperationsrules against the cell to decide which drill-down menu items to display. - When the user selects an item, the UI sends the cell’s column key (and a
drillInTypediscriminator if the rule specifies one) to the server endpointGET /drillin/rest/mdx/drillinmdx. - The server matches the measure name against the entries in drillInConfig.json and returns a JSON DTO describing the target measures and the hierarchies to put on rows.
- The UI generates the new MDX from the DTO and opens a new dashboard page with the result.
Client Side
The client-side rules live in the UI SDK, infrtbSettings.drilldownOperations (see FRTBSettings.ts in packages/frtb-sdk). Each rule is a DrillDownOperationSetting object — refer to UI settings → drilldownOperations for the field reference.
Each cell is tested against every rule. A menu item appears only when all of these conditions hold:
- The cell’s measure name contains at least one of the strings in
measureMustContainOneOf(substring match). - The cell’s measure name does not contain any of the strings in
measureMustNotContainAnyOf(used to exclude variants such asEuler,Pro-Rata,Incremental). - If
isRiskClassistrue/false, the current view’s row axes do/don’t include a Risk Class level.nullskips this check. - If
checkDoubleSumsistrue, the cell’s measure must belong to a Double Sums-aware view.
type field ("", "QIS", "notQIS", "riskClassTable", "notRiskClassTable") is forwarded to the server as the drillInType query parameter so the server can pick the right entry.
Server side
The drillInConfig.json configuration file consists of an array of json objects. A particular entry will have the following pattern:If a drillInType parameter is not passed in, the drillInType part of the json entry is ignored.
Constructing the drill-down measure(s)
A common pattern in the drill-down measures is that, in order to construct the measure name, only a small part of the input measure name string needs to be updated. By using captured name groups, it is possible to extract specific parts of the match and update them. For the GIRR Delta Risk Position High example:
Hence, the two measures in the drill-down
are: GIRR Delta Risk Position, Sums and GIRR Delta Risk Position Correlations High.
Constructing the hierarchies used on the rows
In the case of the hierarchies on the rows, the risk class often appears in the name of the hierarchy. Therefore, taking advantage of the named capture groups again, wherever the string {riskClass} appears, it will be replaced by the string matched by the capture group <riskClass>. For the GIRR Delta Risk Position High example, the <riskClass> capture group matches the string GIRR. Hence, after the string manipulations, the hierarchies on the rows are: [Buckets].[GIRRBuckets].[GIRR Bucket], [Double Sums].[GIRR Delta Double Sums].[Curve].Example without named capture groups
Named capture groups make it possible to group similar use cases (e.g. similar type of action for different risk classes). However, you can specify the drill-down functionality without using named capture groups.Defaults
The accelerator ships with the following drill-down operations enabled out of the box. Use these tables as a starting point when extending the configuration — the menu item and the server response must both be configured for a drill-down to work end to end.Client-side (menu items)
Defined infrtbSettings.drilldownOperations (see FRTBSettings.ts in packages/frtb-sdk).
Server-side (drill-down responses)
Defined infrtb-application/src/main/resources/drillInConfig.json. {riskClass} is the named capture group riskClass matched from the source measure name (e.g. GIRR, Equity, FX, Commodity, CSR non-Sec, CSR Sec non-CTP, CSR Sec CTP).
Extending the defaults
To add a new drill-down, both layers must be updated:- Add a
DrillDownOperationSettingtofrtbSettings.drilldownOperationsso the menu item is shown. - Add a matching entry to
drillInConfig.jsonso the server returns the target measures and hierarchies. Use named capture groups inmeasureNamePatternto share a single entry across risk classes; the{groupName}placeholders inonRowsanddrillDownToare substituted from the named groups.
If the menu item is shown but no server entry matches the measure, the server responds with an error — the menu item must not be enabled until the server entry exists.