2013-07-24 30 views
5

Tôi đã được giao nhiệm vụ với một giao diện người dùng hiệu suất cao cho một back-end ActivePivot trực tiếp. Tôi đã có một lớp dịch vụ phía máy khách cung cấp luồng liên tục (IObservable<T>) dữ liệu được tổng hợp trước, được định dạng trước cũng như siêu dữ liệu chi tiết thứ nguyên và không có gì trong báo cáo. Yêu cầu của tôi có thể được tóm tắt là:Lưới xoay vòng hiệu suất cao cho dữ liệu được tổng hợp trước

  1. Tự động thiết lập tiêu đề hàng và cột dựa trên siêu dữ liệu trong luồng.
  2. Tự động truyền dữ liệu trực tiếp đến hàng/cột thích hợp của điều khiển.
  3. Đánh dấu thay đổi đối với dữ liệu. ví dụ. giá trị tăng có thể làm nổi bật tạm thời màu xanh lá cây, giảm giá trị màu đỏ.
  4. Đánh chặn các tác vụ của người dùng trên tiêu đề hàng/cột (ví dụ: các bản tóm tắt) để tôi có thể điều chỉnh thay đổi trong truy vấn MDX cơ bản.
  5. Tác vụ đánh chặn người dùng (có thể nhấp đúp) trên giá trị dữ liệu để tôi có thể điều tra truy vấn khoan (kết quả sẽ được hiển thị trong lưới dữ liệu riêng).

Tất cả các thành phần của bên thứ ba dường như được sắp xếp xung quanh bộ dữ liệu cắt và cắt kết nối (hoặc hiếm khi được cập nhật). Họ hy sinh hiệu suất để đạt được một mức độ linh hoạt cao hơn mà tôi chỉ đơn giản là không cần, và hiệu suất là tối quan trọng cho kịch bản của tôi.

Có ai biết điều khiển WPF có hiệu suất tập trung và hướng nhiều hơn vào việc xem dữ liệu được tổng hợp trước, được định dạng trước không?

+0

Từ WPF và hiệu suất hiếm khi đi cùng nhau (nếu có) ... chúc may mắn. – Sheridan

Trả lời

2

Giao diện người dùng giống như PivotTable cho phép khám phá dữ liệu lát và xúc xắc nói chung được kết hợp với công nghệ OLAP. Một số các giao diện người dùng đó nhắm vào một máy chủ cụ thể, sử dụng một mô hình dữ liệu độc quyền và một số khác thực hiện tiêu chuẩn: các truy vấn MDX trên vận chuyển XMLA.

Nhưng khi công nghệ OLAP được thiết kế cách đây 20 năm, thực hiện nó trong thời gian thực dường như không thể tưởng tượng. Một hệ quả là tiêu chuẩn XMLA không hỗ trợ cho các cập nhật trong một tập hợp ô. Trên thực tế nó thực tế cấm nó vì sự biểu diễn tĩnh của bộ tế bào và trục thiết lập tế bào.

ActivePivot có thể đẩy cập nhật theo thời gian thực vào tập kết quả OLAP và nó cho thấy API phát trực tuyến (độc quyền) để đăng ký các bản cập nhật đó. Lối vào ActivePivot Live được đặt ở vị trí đầu tiên được viết để tận dụng các bản cập nhật thời gian thực, trình bày chúng trong các bảng điều khiển bảng tổng hợp quen thuộc. Nhưng trong năm 2013 ActivePivot vẫn là máy chủ OLAP duy nhất có hỗ trợ thời gian thực. Điều đó giải thích tại sao chưa có tiêu chuẩn để đăng ký cập nhật thời gian thực OLAP. Và điều đó cũng có nghĩa là đến năm 2013 và bên ngoài ActivePivot Live, bạn sẽ không tìm thấy bộ công cụ (WPF hay không) đã thực hiện toàn bộ công việc làm giàu các điều khiển bảng tổng hợp của nó với các bản cập nhật theo thời gian thực. Các thư viện mà chúng ta biết đã thực sự chuyển đổi biểu diễn dữ liệu tĩnh của XMLA trong thiết kế bảng tổng hợp của chúng, làm cho nó cồng kềnh hoặc không thể cập nhật các ô (ví dụ như Microsoft Excel Pivot Table).

Dưới sự ràng buộc của một công nghệ cụ thể như WPF, tôi sẽ chọn bộ công cụ giao diện người dùng có mục đích chung, giúp dễ dàng sắp xếp và soạn bảng. Từ đó là một D.I.Y. việc làm.

+0

@KentBoogaart - Tôi đã tạo một bộ công cụ giao diện người dùng cho phép bạn tạo các bảng trực tiếp có thể được nối, lọc, mở rộng với các cột được tính toán và sau đó được liên kết với các điều khiển WPF. Các bảng hiển thị một giao diện IObservable và đã được thiết kế để thực hiện. Trang dự án là https://bitbucket.org/mendelmonteiro/reactivetables – Slugart

1

Chỉ trong trường hợp ai đó tự hỏi, tôi đã kết thúc viết WPF của riêng mình PivotGrid kiểm soát thiết kế đặc biệt cho hiệu suất cao. Nó xử lý hàng chục triệu tế bào với hàng trăm ngàn bản cập nhật mỗi giây. Tại sao bất cứ ai sẽ muốn có nhiều dữ liệu trong một lưới duy nhất tôi không biết, nhưng có bạn đi.

Nó xử lý tất cả các yêu cầu tôi đặt ra trong câu hỏi của tôi và hơn thế nữa. Tuy nhiên, không thể chia sẻ nhiều hơn thế, vì nó là độc quyền.

+0

Bạn có thể nhận xét về các kỹ thuật bạn đã sử dụng để đạt được hiệu suất đó không? – Slugart

+0

@Slugart: lớp dịch vụ của tôi tương đối đơn giản và cũng dựa trên Rx như reactivetables. Lớp giao diện người dùng sử dụng ảo hóa giao diện người dùng nặng và lập trình lớp trực quan. –

Các vấn đề liên quan