Question

I have been tasked with coming up with a high performance front-end for a live ActivePivot back-end. I already have a client-side service layer that provides a continuous stream (IObservable<T>) of pre-aggregated, pre-formatted data, as well as metadata detailing the dimensions and what-not in the report. My requirements can be summarized as:

  1. Dynamically set up row and column headers based on metadata in the stream.
  2. Dynamically pass live data through to the appropriate row/column of the control.
  3. Highlight changes to data. eg. increased values may highlight temporarily in green, decreased values in red.
  4. Intercept user actions on row/column headers (ie. drill-downs) so that I can instigate a change in the underlying MDX query.
  5. Intercept user actions (probably double-click) on data values so that I can instigate a drill-through query (the results of which would be displayed in a separate data grid).

All the third party components appear to be geared around slicing and dicing disconnected (or rarely updated) data sets. They sacrifice performance to achieve a higher degree of flexibility that I simply don't need, and performance is paramount for my scenario.

Does anyone know of a WPF control that is performance-focussed and geared more towards the viewing of pre-aggregated, pre-formatted data?

Was it helpful?

Solution

PivotTable-like frontends that allow slice and dice data exploration are in general associated with OLAP technology. Some of those frontends target one specific server, using a proprietary data model, and some others implement the standard: MDX queries over XMLA transport.

But when OLAP technology was designed 20 years ago, doing it in real-time seemed unthinkable. One consequence is that the XMLA standard has no support for updates in a cell set. Actually it practically forbids it because of the static representation of cell sets and cell set axis.

ActivePivot can push real-time updates into an OLAP result set and it exposes a (proprietary) streaming API to subscribe to those updates. The ActivePivot Live frontend was in the first place written to leverage those real-time updates, presenting them in familiar pivot table controls. But in 2013 ActivePivot is still the only OLAP server with real-time support. That explains why there isn't yet a standard to subscribe to OLAP real-time updates. And that also means that as of 2013 and outside of ActivePivot Live you will not find a toolkit (WPF or not) that has done the whole job of enriching its pivot table controls with real-time updates. The libraries we know of have actually transposed the static data representation of XMLA in their pivot table designs, making it cumbersome or impossible to update the cells (think of the Microsoft Excel Pivot Table for instance).

Under the constraint of a particular technology like WPF, I would select a general purpose UI toolkit, that makes it easy to arrange and compose tables. From there that's a D.I.Y. job.

OTHER TIPS

Just in case anyone was wondering, I ended up writing my own WPF PivotGrid control specifically designed for high performance. It handles tens of millions of cells with hundreds of thousands of updates per second. Why anyone would want that much data in a single grid I don't know, but there you go.

It handles all the requirements I lay out in my question, and more. Can't share any more than this, however, as it's proprietary.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top