Reputation: 145
We use ActivePivot to monitor real-time PnL (profit and loss) over financial trades. New trades (new records) are added or updated to the cube in real-time during the day, and ActivePivot is also connected to real-time sources of market data that trigger the refresh of our post processors.
On top of that we have implemented a custom dimension to provide dynamic time bucketing to our users. This is built with the ActivePivot analysis dimension API. Although we wrote a custom continuous handler to propagate markete data changes to the post processors, when users expand the custom time dimension in their reports to see all time buckets, then only the default member appears to be refreshed with real-time push. When the user manually hits the refresh button all buckets are reloaded alright but the automatic push seems disabled along the analmysis dimension members.
Is that a known limitation of Analysis Dimensions, can you give us some pointers to develop a workaround?
Upvotes: 1
Views: 264
Reputation: 21
Yes this is a known limitation of the analysis dimension. The only member that is known by the pivot is the default member. You need to make AP to be aware of the other non default members.
In order to do this you need to add a custom handler. This handler will send back an 'augmented' impact with the location that are 'hidden' to AP. This handler will listen to the transaction stream.
The calculation of the impact can be done in two times. - first we need to calculate the locations where to we need to recalculate. We clone the location and substitute the coordinate of the analysis dimension with null. With the event we calculate the added objects impact. We put back at the analysis dimension coordinate, the initial member. - second we need to calculate the remove point candidates. We do the same as before but using the removed added objects. We put back the initial member. If this inital member is a collection or null we need to convert this range location into all the underlying point locations.
For example, our analysis dimension is ANY (default member), 1y, 2y, 5y. Our location is eur|null|DeskA. The location we need to recalculate is eur|null|DeskA. The removed point candidates are eur|ANY|DeskA, eur|1y|DeskA, eur|2y|DeskA, eur|5y|DeskA. Another example location is eur|{1y, 5y}|DeskA, the location to recalculate is the same eur|{1y, 5y}|DeskA but the removed point candidates are eur|1y|DeskA, eur|5y|DeskA
Upvotes: 1