2013-07-24 13 views
5

Zostałem poproszony o stworzenie wydajnego interfejsu dla aktywnego back-endu ActivePivot. Mam już warstwę usługi po stronie klienta, która zapewnia ciągły strumień (IObservable<T>) wstępnie zgrupowanych, wstępnie sformatowanych danych, a także metadane zawierające szczegóły wymiarów i co nie jest w raporcie. Moje wymagania można podsumować jako:Wydajna siatka przegubowa dla danych preagregowanych

  1. Dynamicznie ustawiaj nagłówki wierszy i kolumn na podstawie metadanych w strumieniu.
  2. Dynamicznie przekazuj bieżące dane do odpowiedniego wiersza/kolumny kontrolki.
  3. Wyróżnij zmiany danych. na przykład. zwiększone wartości mogą chwilowo zaznaczać się na zielono, zmniejszone wartości na czerwono.
  4. Przechowuj działania użytkowników w nagłówkach wierszy/kolumnach (np. Drążenia w dół), aby wywołać zmianę w bazowym zapytaniu MDX.
  5. Przechowuj akcje użytkownika (prawdopodobnie podwójnie kliknij) na wartościach danych, dzięki czemu mogę uruchomić zapytanie drążenia wszerz (którego wyniki będą wyświetlane w oddzielnej siatce danych).

Wygląda na to, że wszystkie komponenty stron trzecich są nastawione na rozłączanie (lub rzadko aktualizowane) zestawów danych dotyczących krojenia i wycinania kostek. Poświęcają wydajność, aby osiągnąć wyższy poziom elastyczności, którego po prostu nie potrzebuję, a wydajność jest najważniejsza dla mojego scenariusza.

Czy ktoś wie o kontroli WPF, która jest skoncentrowana na wydajności i nastawiona bardziej na oglądanie wstępnie zgrupowanych, wstępnie sformatowanych danych?

+0

Słowa WPF i wydajność rzadko idą w parze (jeśli w ogóle) ... powodzenia. – Sheridan

Odpowiedz

2

Nakładki podobne do tabel przestawnych, które pozwalają na eksplorację danych plasterków i kostek, są ogólnie związane z technologią OLAP. Niektóre z tych frontend są skierowane na jeden określony serwer, z wykorzystaniem zastrzeżonego modelu danych, a inne implementują standard: zapytania MDX nad transportem XMLA.

Ale kiedy technologia OLAP została zaprojektowana 20 lat temu, robienie tego w czasie rzeczywistym wydawało się nie do pomyślenia. Jedną z konsekwencji jest to, że standard XMLA nie obsługuje aktualizacji w zestawie komórek. W rzeczywistości praktycznie zabrania tego ze względu na statyczną reprezentację zbiorów komórek i osi zestawu komórek.

ActivePivot może przekazywać aktualizacje w czasie rzeczywistym do zestawu wyników OLAP i udostępnia (zastrzeżony) interfejs API do przesyłania strumieniowego w celu subskrybowania tych aktualizacji. Frontend ActivePivot Live był na pierwszym miejscu napisany, aby wykorzystać te aktualizacje w czasie rzeczywistym, prezentując je w znanych kontrolkach tabeli przestawnej. Jednak w 2013 r. ActivePivot jest wciąż jedynym serwerem OLAP z obsługą w czasie rzeczywistym. To wyjaśnia, dlaczego nie ma jeszcze standardu subskrypcji aktualizacji OLAP w czasie rzeczywistym. Oznacza to również, że od 2013 r. I poza ActivePivot Live nie znajdziesz zestawu narzędzi (WPF lub nie), który wykonał całą pracę wzbogacania swoich kontroli tabel przestawnych za pomocą aktualizacji w czasie rzeczywistym. Biblioteki, które znamy, faktycznie przetransponowały statyczną reprezentację danych XMLA w ich projektach tabel przestawnych, powodując, że uciążliwe lub niemożliwe jest uaktualnienie komórek (na przykład, na przykład, z tabeli przestawnej Microsoft Excel).

Pod ograniczeniem konkretnej technologii, takiej jak WPF, wybrałbym uniwersalny zestaw narzędzi interfejsu użytkownika, który ułatwia aranżowanie i tworzenie tabel. Stamtąd to D.I.Y. praca.

+0

@KentBoogaart - Stworzyłem zestaw narzędzi interfejsu użytkownika, który umożliwia tworzenie tabel aktywnych, które można łączyć, filtrować, rozszerzać za pomocą kolumn obliczeniowych, a następnie przypisywać do elementów sterujących WPF. Tabele prezentują interfejs IObservable i zostały zaprojektowane pod kątem wydajności. Strona projektu to https://bitbucket.org/mendelmonteiro/reactivetables – Slugart

1

Na wszelki wypadek, gdy ktoś się zastanawiał, napisałem własną kontrolkę WPF PivotGrid zaprojektowaną specjalnie pod kątem wysokiej wydajności. Obsługuje dziesiątki milionów komórek z setkami tysięcy aktualizacji na sekundę. Dlaczego ktoś chciałby tyle danych w pojedynczej sieci, o których nie wiem, ale proszę.

Zajmuje się wszystkimi wymaganiami określonymi w pytaniu i nie tylko. Nie można jednak udostępniać więcej, ponieważ jest zastrzeżona.

+0

Czy możesz wypowiedzieć się na temat technik użytych do osiągnięcia tego wyniku? – Slugart

+0

@Slugart: moja warstwa usługi była względnie prosta i jest również oparta na Rx, podobnie jak tablice reaktywne. Warstwa interfejsu użytkownika wykorzystuje silną wirtualizację interfejsu użytkownika i programowanie warstwy wizualnej. –