Fonctionnalités clientes ADOMD.NET
À l'image des autres fournisseurs de données Microsoft .NET Framework, ADOMD.NET joue le rôle de lien entre une application et une source de données. Cependant, ADOMD.NET se différencie des autres fournisseurs de données .NET Framework en ce sens qu'ADOMD.NET utilise des données analytiques. Pour ce faire, ADOMD.NET prend en charge des fonctionnalités très différentes de celles des autres fournisseurs de données .NET Framework. ADOMD.NET permet non seulement de récupérer des données, mais également d'extraire des métadonnées et modifier la structure de la banque de données analytiques :
Récupération de métadonnées
Les applications peuvent s'enquérir des données susceptibles d'être récupérées à partir de la source de données en recourant à la récupération de métadonnées via les ensembles de lignes de schéma ou le modèle objet. Certaines informations, telles que les types de chaque indicateur de performance clé (KPI) disponible, les dimensions d'un cube et les paramètres nécessaires aux modèles d'exploration de données, sont toutes détectables. Les métadonnées sont particulièrement importantes pour les applications dynamiques qui requièrent des entrées utilisateur pour déterminer le type, la profondeur et l'étendue des données à récupérer. Tel est le cas notamment de l'Analyseur de requêtes, de Microsoft Excel et d'autres outils d'interrogation. Les métadonnées sont moins cruciales pour les applications statiques qui exécutent un ensemble prédéfini d'actions.Pour plus d'informations : Récupération de métadonnées à partir d'une source de données analytiques.
Récupération de données
La récupération de données consiste en la récupération effective des informations stockées dans la source de données. La récupération de données est la fonction principale des applications « statiques », qui connaissent la structure de la source de données. La récupération de données représente également le résultat final des applications « dynamiques ». La valeur de l'indicateur de performance clé à une heure donnée de la journée, le nombre de vélos vendus au cours de la dernière heure dans chaque magasin, et les éléments qui conditionnent les performances annuelles des employés sont autant d'exemples de données susceptibles d'être récupérées. La récupération de données est vitale pour les applications d'interrogation.Pour plus d'informations : Récupération de données à partir d'une source de données analytiques.
Modification de la structure de données analytiques
ADOMD.NET permet également de modifier à proprement parler la structure d'une banque de données analytiques. Bien que cette opération soit généralement accomplie par le biais du modèle objet AMO (Analysis Management Objects), vous pouvez utiliser ADOMD.NET pour envoyer des commandes ASSL (Analysis Services Scripting Language) afin de créer, modifier ou supprimer des objets sur le serveur.Pour plus d'informations : Exécution de commandes sur une source de données analytiques, Objets AMO (Analysis Management Objects), Référence Analysis Services Scripting Language (ASSL)
La récupération de métadonnées, la récuperation de données et la modification d'une structure de données sont des opérations qui interviennent chacune à un moment précis dans le flux de travail d'une application ADOMD.NET classique.
Flux de traitement standard
Les applications ADOMD.NET classiques suivent généralement le même flux de travail lorsqu'elles utilisent une base de données analytique :
En premier lieu, une connexion est établie à la base de données à l'aide de l'objet AdomdConnection. Lorsque vous ouvrez la connexion, l'objet AdomdConnection expose les métadonnées sur le serveur auquel vous vous êtes connecté. Dans une application dynamique, une partie de ces informations est en principe révélée à l'utilisateur pour lui permettre d'effectuer une sélection (p.ex., le cube à interroger). La connexion créée durant cette étape peut être réutilisée plusieurs fois par l'application, ce qui a pour effet de réduire la charge.
Pour plus d'informations : Établissement de connexions dans ADOMD.NET.
Dès lors qu'une connexion a été établie, une application dynamique interroge ensuite le serveur pour obtenir des métadonnées plus spécifiques. Dans le cas d'une application statique, le programmeur sait par avance quels sont les objets que l'application demandera, ce qui rend inutile la récupération de ces métadonnées. Les métadonnées récupérées peuvent être utilisées par l'application et l'utilisateur pour l'étape suivante.
Pour plus d'informations : Récupération de métadonnées à partir d'une source de données analytiques.
L'application exécute ensuite une commande sur le serveur. Cette commande peut être utilisée dans le but de récupérer des métadonnées supplémentaires, des données ou de modifier la structure de la base de données. Pour chacune de ces tâches, l'application peut utiliser une requête déjà définie ou des métadonnées nouvellement récupérées pour créer d'autres requêtes.
Pour plus d'informations : Récupération de métadonnées à partir d'une source de données analytiques, Récupération de données à partir d'une source de données analytiques, Exécution de commandes sur une source de données analytiques
Une fois que la commande a été envoyée au serveur, le serveur commence à retourner les métadonnées ou les données au client. Ces informations peuvent être affichées en utilisant un objet CellSet, un objet AdomdDataReader ou un objet System.XmlReader.
Pour illustrer ce flux de travail standard, l'exemple suivant contient une méthode qui ouvre une connexion à la base de données, exécute une commande sur un cube connu et récupère les résultats dans un ensemble de cellules. L'ensemble de cellules retourne ensuite une chaîne délimitée par des tabulations qui contient des en-têtes de colonne, des en-têtes de ligne et des données de cellule.
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
}