2013-07-24 45 views
5

我的任务是为活动ActivePivot后端提供高性能前端。我已有一个客户端服务层,提供预先汇总的预格式化数据的连续流(IObservable<T>),以及详细说明报告中维度和内容的元数据。我的要求可以概括为:用于预聚合数据的高性能枢轴网格

  1. 根据流中的元数据动态设置行和列标题。
  2. 将实时数据动态传递到控件的相应行/列。
  3. 突出显示对数据的更改。例如。增加的值可能会暂时以绿色突出显示,红色值会减少。
  4. 拦截用户对行/列标题(即向下钻取)的操作,以便我可以在底层MDX查询中发起更改。
  5. 拦截数据值的用户操作(可能是双击),以便我可以煽动钻取查询(其结果将显示在单独的数据网格中)。

所有的第三方组件似乎都围绕切片和切块断开连接(或很少更新)的数据集。他们牺牲性能来实现我不需要的更高程度的灵活性,并且性能对我的情况至关重要。

有谁知道一个WPF控件是专注于性能,更适合查看预先聚合的预格式化数据吗?

+0

单词WPF和表现很少一起(如果有的话)...祝你好运。 – Sheridan

回答

2

允许切片和骰子数据探索的数据透视表前端通常与OLAP技术相关联。其中一些前端使用专有数据模型针对一台特定服务器,另一些则实施标准:通过XMLA传输的MDX查询。

但是,当20年前设计OLAP技术时,实时执行它似乎是不可想象的。其中一个后果是XMLA标准不支持单元集中的更新。实际上,由于单元集和单元集轴的静态表示,它实际上禁止它。

ActivePivot可以将实时更新推送到OLAP结果集中,并公开一个(专有的)流API以订阅这些更新。 ActivePivot Live前端首先被编写为利用这些实时更新,并将它们呈现在熟悉的数据透视表控件中。但在2013年,ActivePivot仍然是唯一具有实时支持的OLAP服务器。这就解释了为什么还没有订阅OLAP实时更新的标准。这也意味着,从2013年开始,在ActivePivot Live之外,您将找不到一个工具包(WPF或不),它已经完成了通过实时更新丰富其数据透视表控件的整个工作。我们知道的库实际上已将XMLA的静态数据表示转换为其数据透视表设计,这使得更新单元格变得繁琐或不可能(例如,考虑Microsoft Excel数据透视表)。

在像WPF这样的特定技术的约束下,我会选择一个通用的UI工具包,这样可以很容易地安排和组合表格。从那里,这是一个D.I.Y.工作。

+0

@KentBoogaart - 我创建了一个UI工具包,它允许您创建可以连接,过滤,扩展计算列并随后绑定到WPF控件的实时表。这些表格公开了一个IObservable接口,并且是为了性能而设计的。该项目页面是https://bitbucket.org/mendelmonteiro/reactivetables – Slugart

1

为了防万一有人想知道,我最终编写了自己的WPF PivotGrid专门为高性能而设计的控件。它每秒处理成千上万次更新的数千万个单元。为什么有人会想要在单个网格中输入大量数据,我不知道,但是你去了。

它处理我在我的问题中提出的所有要求,等等。因为它是专有的,所以不能与此分享。

+0

你可以评论你用来实现这种性能的技术吗? – Slugart

+0

@Slugart:我的服务层相对比较简单,并且也是基于Rx的,如反应表。 UI层使用沉重的UI虚拟化和可视化层编程。 –