Document toolboxDocument toolbox

Working with Segmentations

Segmentations

Segmentations are used to generate the optimal structure for a visualisation (e.g. table or chart) by defining how data will be aggregated. Segmentations are a part of the reporting business logic (see https://bmpi.atlassian.net/wiki/spaces/CRDOC/pages/2296610958).

This page describes the features of a segmentation. See also https://bmpi.atlassian.net/wiki/spaces/CRDOC/pages/1157431299 for a more in depth discussion about how to use segmentations.

Types of segmentations

Type

Description

 

Type

Description

 

Base Segmentation

Base segmentations like currency, country, asset class are typically delivered by the source systems (e.g. a portfolio management system) and are described by a source API segmentations delivering

  • the native order of the segments

  • the structure of a multi-level segmentation (tree)

 

Derived Segmentations

In reporting we typically don’t want to list all currencies invested but a rather more optimised break down to populate a table or chart., e.g. CHF, USD + next 3 largest currencies + a rest segment (aggregating all other currencies).

Derived segmentations allow features like grouping, ordering, selection of segments on top of base segmentations or even other derived segmentations.

  • mostly stored, reuse them by name

  • create ad-hoc by modifiers (segmentationId<6)

 

The Segmentation Editor

To create or modify a derived segmentation, the Segmentation Editor can be used. The UI is organised into the following sections:

Listing of segmentations

The list of segmentations allows to

  • search for segmentations

  • upload a segmentation from a json file

  • create a new segmentation

  • filter for drafts or published segmentations

  • on a segmentation (icons appear when hovering):

    • duplicate/export/delete a published segmentation

    • publish/export/revert a draft segmentation

Header and Settings

  • label for translation will always be segmentation_segmentationId

 

Segments (Grouping)

  • create and define segments

 

  • label for translation will always be segment_segmentId$

rule language

  • “in”

  • use normal javascript logic (!, &&, || )

 

Segments

rule language

Alternatively to an include list, a segment can be defined by a rule (just toggle the type). A rule has a priority (number) and a filterPredicate:

Supported syntax for filterPredicate:

  • Javascript logic (!, &&, ||)

  • in can be used for checking array members, e.g. "'foo' in ['foo','bar']" evaluates to true

  • Segmentations are available like this: "filterPredicate": "OVERALL_CONTROVERSY_FLAG in ['Green']"

  • figures are available like this: "filterPredicate": "mktValuePflCcy > 100000"

  • there is a pure js mode in filter predicates: "filterPredicate": "pure(p.details.isin === 'LU2479964202')"

    • p is just e.g. the valuation of the portfolio

    • within pure(..) all javascript is possible

    • only use this if you know what you are doing

Rest Segment

  • define a rest segment

 

Ordeing

  • define the order (sorting) of segments

 

Selection

  • define segments to be mandatory