2013-07-24 15 views
5

Mi è stato assegnato il compito di creare un front-end ad alte prestazioni per un back-end attivo di ActivePivot. Dispongo già di un livello di servizio sul lato client che fornisce uno streaming continuo (IObservable<T>) di dati pre-aggregati e preformattati, nonché metadati che descrivono in dettaglio le dimensioni e cosa no nel report. Le mie esigenze possono essere riassunte come:Griglia pivot ad alte prestazioni per dati pre-aggregati

  1. Configurare dinamicamente intestazioni di riga e colonna in base ai metadati nel flusso.
  2. Passa dinamicamente i dati in tempo reale alla riga/colonna appropriata del controllo.
  3. Evidenzia le modifiche ai dati. per esempio. i valori aumentati possono evidenziare temporaneamente in verde, i valori diminuiti in rosso.
  4. Intercetta le azioni dell'utente sulle intestazioni di riga/colonna (ad es. Drill-down) in modo che sia possibile attivare una modifica nella query MDX sottostante.
  5. Intercetta le azioni dell'utente (probabilmente doppio clic) sui valori dei dati in modo da poter eseguire una query drill-through (i cui risultati verrebbero visualizzati in una griglia di dati separata).

Tutti i componenti di terze parti sembrano essere orientati su affettare e tagliare i set di dati disconnessi (o raramente aggiornati). Sacrificano le prestazioni per ottenere un maggiore livello di flessibilità che semplicemente non ho bisogno e le prestazioni sono fondamentali per il mio scenario.

Qualcuno sa di un controllo WPF focalizzato sulle prestazioni e orientato maggiormente alla visualizzazione di dati pre-aggregati e pre-formattati?

+0

Le parole WPF e le prestazioni raramente vanno insieme (se mai) ... buona fortuna. – Sheridan

risposta

2

I frontend di tipo pivot che consentono l'esplorazione dei dati di slice e dadi sono in genere associati alla tecnologia OLAP. Alcuni di questi frontend hanno come target un server specifico, utilizzando un modello di dati proprietario e altri implementano lo standard: query MDX su trasporto XMLA.

Ma quando la tecnologia OLAP è stata progettata 20 anni fa, farlo in tempo reale sembrava impensabile. Una conseguenza è che lo standard XMLA non ha supporto per gli aggiornamenti in un set di celle. In realtà lo proibisce praticamente a causa della rappresentazione statica dei set di celle e dell'asse dei set di celle.

ActivePivot può inviare aggiornamenti in tempo reale in un set di risultati OLAP e espone un'API di streaming (proprietaria) per iscriversi a tali aggiornamenti. Inizialmente, il frontend di ActivePivot Live è stato scritto per sfruttare quegli aggiornamenti in tempo reale, presentandoli in familiari controlli della tabella pivot. Ma nel 2013 ActivePivot è ancora l'unico server OLAP con supporto in tempo reale. Questo spiega perché non esiste ancora uno standard per sottoscrivere gli aggiornamenti OLAP in tempo reale. Ciò significa anche che dal 2013 e al di fuori di ActivePivot Live non troverete un toolkit (WPF o meno) che ha svolto l'intero lavoro di arricchimento dei controlli della tabella pivot con aggiornamenti in tempo reale. Le librerie che conosciamo hanno effettivamente trasposto la rappresentazione statica dei dati di XMLA nei loro progetti di tabelle pivot, rendendo ingombrante o impossibile aggiornare le celle (si pensi alla tabella pivot di Microsoft Excel, ad esempio).

Sotto il vincolo di una particolare tecnologia come WPF, selezionerei un kit di strumenti dell'interfaccia utente generico, che semplifica l'organizzazione e la composizione delle tabelle. Da lì è un D.I.Y. lavoro.

+0

@KentBoogaart - Ho creato un kit di strumenti dell'interfaccia utente che consente di creare tabelle live che possono essere unite, filtrate, estese con colonne calcolate e quindi associate ai controlli WPF. Le tabelle espongono un'interfaccia IObservable e sono state progettate per le prestazioni. La pagina del progetto è https://bitbucket.org/mendelmonteiro/reactivetables – Slugart

1

Nel caso in cui qualcuno si chiedesse, ho finito per scrivere il mio controllo WPF PivotGrid appositamente progettato per alte prestazioni. Gestisce decine di milioni di celle con centinaia di migliaia di aggiornamenti al secondo. Perché nessuno vorrebbe che tanti dati in una singola griglia non lo so, ma ci vai.

Gestisce tutti i requisiti che espongo nella mia domanda e altro ancora. Non posso condividere più di questo, tuttavia, in quanto è proprietario.

+0

Potresti commentare le tecniche che hai utilizzato per ottenere tale prestazione? – Slugart

+0

@Slugart: il mio livello di servizio era relativamente semplice, ed è anche reattivo come Rx. Il livello dell'interfaccia utente utilizza la virtualizzazione dell'interfaccia utente e la programmazione del livello visivo. –