PostProcessors
Atoti Server includes a key feature called post-processing, which provides the ability to evaluate business logic for each request to aggregated data . It is defined on the server side using Java code.
It is extremely flexible and can use the following types of data to compute its value:
-
Pre-aggregated data
-
Custom aggregations
-
Other PostProcessor results
-
External resources (eg share prices, FOREX)
User-defined aggregation functions and PostProcessors allow users to configure the exact data sets to be visualized for their business goals. Post-processor advantages include the following:
-
The user does not need to know if a measure is post-processed or pre-processed.
-
Written in Java, this allows PostProcessors to use many external systems and provides a lot more flexibility over MDX calculated measures.
-
Post-processing offers infinite possibilities for aggregation. It is very easy for Atoti Server’s PostProcessor to accurately compute the PnL of a trade, using real-time data streams (e.g. share prices and FOREX).
-
The results of any such computations can be aggregated across any dimension.
-
Post-processors are more flexible than traditional database stored procedures.
-
They always have a value and this value can depend on the query context.
Post-procesed measures
Some of the common business cases dealt with using PostProcessors are:
-
Simple arithmetic operations (e.g. calculating a ratio between levels)
-
Currency conversions (e.g. using external data to convert a trade’s currency to a common currency)
-
Presentation effects (e.g. hiding meaningless values from users)
-
Displays of market data (e.g. show the market data used in a currency conversion)
-
Running totals (e.g. showing how cash flows accumulate over a time)
-
Computing non-aggregating values (e.g.VaR)
-
Real-time market data updates (e.g. FX and P&L)
Postprocessors in Atoti Market Risk
The available PostProcessors are found in the *-lib modules, calculations
packages. The resulting folders follow the pattern:
/mr-*-lib/src/main/java/com/activeviam/mr/*/calculations/postprocessors/
The following table describes the PostProcessors available in Atoti Market Risk.
Postprocessor | Description |
---|---|
DynamicTenorsAndMaturitiesPostProcessor | Dynamically buckets from an input tenor and maturity to the appropriate destination tenors and maturities. Can be configured to bucket on a single dimension (either tenors or maturities). |
AppendD2DDiffPostProcessor | Appends the day-to-day difference value to a measure. |
AsOfDateNeighbourValuePostProcessor | Extension of the NeighborValuePostProcessor, which uses a day-to-day analysis hierarchy to select the AsOfDate to shift to. By default, it removes the cube filtering. |
CoPPerPostProcessors | Helper class containing definitions of CoPPer API measures to be wired into the Cube definition by the Starter module. |
ConstantZeroPostProcessor | Returns zero at any location, to allow usage as an underlying measure for analysis hierarchy PostProcessors. |
DoubleDifferencePostProcessor | Computes the difference between two double values. Used over a basic FormulaPostProcessor to allow for null checks. |
DynamicTenorsAndMaturitiesPostProcessor | Postprocessor that dynamically buckets from an input tenor and maturity to the appropriate destination tenors and maturities. Can be configured to bucket on a single dimension (either tenors or maturities). |
ESIndicesPostProcessor | Computes expected shortfall, the average of losses greater than the VaR of a given position. |
FXPostProcessor | Provides dynamic aggregation of values in multiple currencies, with conversion into a contextual reference currency. |
FXVectorPostProcessor | Provides dynamic aggregation of values in multiple currencies, with conversion into a contextual reference currency. Applied to vectors. |
IncrementalVaRPostProcessor | Computes incremental VaR, a measure of the change in the VaR of a parent portfolio should a sub-portfolio be removed from it. |
ScenarioNamePostProcessor | Queries the datastore and returns the scenario names for an array of indices. |
TenorAndMaturityExpand | Add-ons. These are Var and ES Sign-off adjustments applied at predefined levels in the hierarchies, for example, book / risk. |
TenorExpand | Expands a sensitivity measure along the tenor hierarchy. |
UnderlyingMeasureSelectorPostProcessor | Returns the valid Delta at the given location, between the aggregated vector, the tenor expansion, or the dynamically bucketed value. |
VaRIndicesPostProcessor | Computes the VaR index (or indices if we are interpolating) for a given PnL vector and confidence level. |
VaRPostProcessor | Computes the VaR for a given PnL vector and confidence level. |
VectorAggregationPostProcessor | Aggregates a vector. |