2013-07-24 4 views
5

Мне поставили задачу создать высокопроизводительный интерфейс для активного ActivePivot-back-end. У меня уже есть уровень обслуживания на стороне клиента, который обеспечивает непрерывный поток (IObservable<T>) предварительно агрегированных, предварительно отформатированных данных, а также метаданные, детализирующие размеры и что-то не в отчете. Мои требования можно охарактеризовать как:Высокопроизводительная сводная сетка для предварительно агрегированных данных

  1. Динамически настроенные заголовки строк и столбцов на основе метаданных в потоке.
  2. Динамически передавать данные в реальном времени через соответствующий столбец/столбец элемента управления.
  3. Выделение изменений в данных. например. увеличенные значения могут временно выделяться зеленым цветом, уменьшенные значения - красным.
  4. Перехват действий пользователя в заголовках строк/столбцов (т. Е. Развертки), чтобы я мог инициировать изменение основного запроса MDX.
  5. Перехватить действия пользователя (возможно, дважды щелкнуть) по значениям данных, чтобы я мог инициировать сквозной запрос (результаты которого будут отображаться в отдельной сетке данных).

Все сторонние компоненты, по-видимому, ориентированы вокруг срезанных и нарезанных нарезанных (или редко обновляемых) наборов данных. Они приносят в жертву производительность, чтобы достичь более высокой степени гибкости, которой мне просто не нужна, и производительность имеет первостепенное значение для моего сценария.

Кто-нибудь знает об элементе управления WPF, который ориентирован на производительность и больше ориентирован на просмотр предварительно агрегированных предварительно отформатированных данных?

+0

Слова WPF и производительность редко идут вместе (если когда-либо) ... удачи. – Sheridan

ответ

2

PivotTable-подобные интерфейсы, которые позволяют проводить исследования данных на срезе и кости, в общем связаны с технологией OLAP. Некоторые из этих интерфейсов нацелены на один конкретный сервер, используя проприетарную модель данных, а некоторые другие реализуют стандарт: запросы MDX по транспорту XMLA.

Но когда технология OLAP была разработана 20 лет назад, делать это в режиме реального времени казалось немыслимым. Одним из следствий является то, что стандарт XMLA не поддерживает обновления в наборе ячеек. Фактически это практически запрещает его из-за статического представления наборов ячеек и оси набора ячеек.

ActivePivot может передавать обновления в реальном времени в набор результатов OLAP и предоставляет (собственный) потоковый API для подписки на эти обновления. Интерфейс ActivePivot Live был в первую очередь написан, чтобы использовать эти обновления в реальном времени, представляя их в привычных элементах управления сводной таблицей. Но в 2013 году ActivePivot по-прежнему остается единственным OLAP-сервером с поддержкой в ​​режиме реального времени. Это объясняет, почему еще не существует стандарта для подписки на обновления OLAP в режиме реального времени. И это также означает, что с 2013 года и за пределами ActivePivot Live вы не найдете инструментарий (WPF или нет), который выполнил всю работу по обогащению своих элементов сводной таблицы с помощью обновлений в реальном времени. Библиотеки, о которых мы знаем, фактически перенести статическое представление данных XMLA в их конструкции сводной таблицы, что делает его громоздким или невозможным для обновления ячеек (например, в таблице сводной таблицы Microsoft Excel).

Под ограничением определенной технологии, такой как WPF, я бы выбрал универсальный инструментарий пользовательского интерфейса, который упрощает организацию и составление таблиц. Оттуда это D.I.Y. работа.

+0

@KentBoogaart - Я создал инструментарий пользовательского интерфейса, который позволяет создавать живые таблицы, которые могут быть объединены, отфильтрованы, расширены с вычисленными столбцами и затем привязаны к элементам управления WPF. Таблицы предоставляют интерфейс IObservable и предназначены для повышения производительности. Страница проекта: https://bitbucket.org/mendelmonteiro/reactivetables – Slugart

1

На всякий случай кто-то задавался вопросом, я закончил тем, что написал свой собственный WPF PivotGrid, специально разработанный для высокой производительности. Он обрабатывает десятки миллионов ячеек сотнями тысяч обновлений в секунду. Почему кто-то захочет столько данных в одной сетке, которую я не знаю, но там вы идете.

Он обрабатывает все требования, которые я излагаю в своем вопросе, и многое другое. Однако не могу поделиться этим, так как он является собственностью.

+0

Не могли бы вы прокомментировать методы, которые вы использовали для достижения этой производительности? – Slugart

+0

@Slugart: мой сервисный уровень был относительно прост, и также Rx-based, как реактивируемые. Уровень пользовательского интерфейса использует мощную виртуализацию пользовательского интерфейса и визуальное программирование. –