Funzionalità client di ADOMD.NET
Analogamente agli altri provider di dati Microsoft .NET Framework, ADOMD.NET funge da ponte tra un'applicazione e un'origine dati. A differenza degli altri provider di dati .NET Framework, tuttavia, in ADOMD.NET vengono utilizzati dati analitici. Per utilizzare dati analitici, ADOMD.NET supporta funzionalità notevolmente diverse da quelle degli altri provider di dati .NET Framework. ADOMD.NET consente non solo di recuperare dati, ma anche di recuperare metadati e di modificare la struttura dell'archivio dati analitici:
Recupero di metadati
Per ottenere maggiori informazioni sui dati che possono essere recuperati dall'origine dati tramite il recupero di metadati, le applicazioni possono utilizzare set di righe dello schema o il modello di oggetti. È possibile individuare informazioni quali i tipi di ogni indicatore di prestazioni chiave (KPI) disponibile, le dimensioni in un cubo e i parametri necessari per i modelli di data mining. I metadati sono molto importanti per applicazioni dinamiche per cui è necessario l'input dell'utente per determinare il tipo, la profondità e l'ambito dei dati da recuperare, ad esempio Query Analyzer, Microsoft Excel e altri strumenti per l'esecuzione di query. I metadati sono meno critici per applicazioni statiche che eseguono un set predefinito di azioni.Per ulteriori informazioni, vedere Recupero di metadati da un'origine dati analitica.
Recupero di dati
Per recupero di dati si intende il recupero effettivo delle informazioni archiviate nell'origine dati. Il recupero di dati rappresenta la funzione principale di applicazioni "statiche" cui è nota la struttura dell'origine dati, nonché il risultato finale di applicazioni "dinamiche". Il valore dell'indicatore di prestazioni chiave a un'ora specificata del giorno, il numero di biciclette vendute nell'ultima ora per ogni punto vendita e i fattori che governano le prestazioni annuali dei dipendenti sono tutti esempi di dati che possono essere recuperati. Il recupero di dati è estremamente importante per tutte le applicazioni che eseguono query.Per ulteriori informazioni, vedere Recupero di dati da un'origine dati analitica.
Modifica della struttura di dati analitici
ADOMD.NET può essere utilizzato inoltre per modificare la struttura dell'archivio dati analitici. Sebbene questa operazione venga in genere eseguita mediante il modello di oggetti della libreria AMO (Analysis Management Objects), è possibile utilizzare ADOMD.NET per inviare comandi ASSL (Analysis Services Scripting Language) per creare, modificare o eliminare oggetti nel server.Per ulteriori informazioni, vedere Esecuzione di comandi in un'origine dati analitica, Libreria AMO (Analysis Management Objects) e Guida di riferimento ASSL (Analysis Services Scripting Language)
Il recupero di metadati e di dati e la modifica della struttura di dati vengono eseguiti ciascuno in un punto specifico nel flusso di lavoro di un'applicazione ADOMD.NET tipica.
Flusso di elaborazione tipico
In caso di utilizzo di un database analitico, le applicazioni ADOMD.NET tradizionali seguono in genere lo stesso flusso di lavoro:
Viene stabilita innanzitutto una connessione al database mediante l'oggetto AdomdConnection. Quando si apre la connessione, l'oggetto AdomdConnection espone metadati relativi al server cui è stata eseguita la connessione. In un'applicazione dinamica alcune di queste informazioni vengono in genere mostrate all'utente in modo che quest'ultimo possa eseguire una selezione, ad esempio il cubo su cui eseguire una query. La connessione creata durante questo passaggio può essere riutilizzata più volte dall'applicazione, con la conseguente riduzione dell'overhead.
Per ulteriori informazioni, vedere Implementazione di connessioni in ADOMD.NET
Una volta stabilita una connessione, un'applicazione dinamica potrebbe quindi eseguire una query sul server per ottenere metadati più specifici. Nel caso di un'applicazione statica, il programmatore conosce in anticipo gli oggetti sui quali l'applicazione eseguirà una query e pertanto non sarà necessario recuperare tali metadati. I metadati recuperati possono essere utilizzati dall'applicazione e dall'utente per il passaggio successivo.
Per ulteriori informazioni, vedere Recupero di metadati da un'origine dati analitica
Successivamente l'applicazione esegue un comando sul server al fine di recuperare metadati o dati aggiuntivi o di modificare la struttura del database. Per ciascuna di queste attività, l'applicazione potrebbe utilizzare una query determinata in precedenza oppure avvalersi dei metadati appena recuperati per creare query aggiuntive.
Per ulteriori informazioni, vedere Recupero di metadati da un'origine dati analitica, Recupero di dati da un'origine dati analitica e Esecuzione di comandi in un'origine dati analitica
Una volta che il comando è stato inviato al server, quest'ultimo inizia a restituire i metadati oppure i dati al client. Per visualizzare queste informazioni, è possibile utilizzare un oggetto CellSet, AdomdDataReader o System.XmlReader.
Per illustrare questo flusso di lavoro tradizionale, nell'esempio seguente viene utilizzato un metodo che apre una connessione al database, esegue un comando su un cubo noto e recupera i risultati inserendoli in un set di celle. Quest'ultimo restituisce quindi una stringa delimitata da tabulazione che contiene intestazioni di colonna e di riga e dati delle celle.
string ReturnCommandUsingCellSet()
{
//Create a new string builder to store the results
System.Text.StringBuilder result = new System.Text.StringBuilder();
//Connect to the local server
using (AdomdConnection conn = new AdomdConnection("Data Source=localhost;"))
{
conn.Open();
//Create a command, using this connection
AdomdCommand cmd = conn.CreateCommand();
cmd.CommandText = @"
WITH MEMBER [Measures].[FreightCostPerOrder] AS
[Measures].[Reseller Freight Cost]/[Measures].[Reseller Order Quantity],
FORMAT_STRING = 'Currency'
SELECT
[Geography].[Geography].[Country].&[United States].Children ON ROWS,
[Date].[Calendar].[Calendar Year] ON COLUMNS
FROM [Adventure Works]
WHERE [Measures].[FreightCostPerOrder]";
//Execute the query, returning a cellset
CellSet cs = cmd.ExecuteCellSet();
//Output the column captions from the first axis
//Note that this procedure assumes a single member exists per column.
result.Append("\t");
TupleCollection tuplesOnColumns = cs.Axes[0].Set.Tuples;
foreach (Tuple column in tuplesOnColumns)
{
result.Append(column.Members[0].Caption + "\t");
}
result.AppendLine();
//Output the row captions from the second axis and cell data
//Note that this procedure assumes a two-dimensional cellset
TupleCollection tuplesOnRows = cs.Axes[1].Set.Tuples;
for (int row = 0; row < tuplesOnRows.Count; row++)
{
result.Append(tuplesOnRows[row].Members[0].Caption + "\t");
for (int col = 0; col < tuplesOnColumns.Count; col++)
{
result.Append(cs.Cells[col, row].FormattedValue + "\t");
}
result.AppendLine();
}
conn.Close();
return result.ToString();
} // using connection
}