Récupération de données à l'aide d'un ensemble de cellules
Lorsque vous récupérez des données analytiques, l' CellSet objet fournit l’interactivité et la flexibilité les plus interactives. L' CellSet objet est un cache en mémoire de données hiérarchiques et de métadonnées qui conserve la dimensionnalité d’origine des données. L' CellSet objet peut également être parcouru dans un état connecté ou déconnecté. En raison de cette capacité déconnectée, l' CellSet objet peut être utilisé pour afficher les données et les métadonnées dans n’importe quel ordre et fournit le modèle d’objet le plus complet pour la récupération de données. Grâce à cette fonctionnalité déconnectée, l' CellSet objet a la plus grande surcharge et le modèle objet de récupération de données ADOMD.net le plus lent à remplir.
Récupération de données en état connecté
Pour utiliser l' CellSet objet pour récupérer des données, procédez comme suit :
Créez une nouvelle instance de l'objet.
Pour créer une nouvelle instance de l' CellSet objet, vous appelez la Execute méthode ou ExecuteCellSet de l' AdomdCommand objet.
Identifiez les métadonnées.
En plus de récupérer les données, ADOMD.NET récupère également les métadonnées pour l'ensemble de cellules. Dès que la commande a exécuté la requête et retourné un, vous pouvez récupérer les métadonnées par le biais de CellSet différents objets. Ces métadonnées sont nécessaires aux applications clientes en vue d'afficher et d'interagir avec les données d'ensemble de cellules. Par exemple, de nombreuses applications clientes proposent des fonctionnalités qui permettent d'explorer vers le bas une position spécifiée dans un ensemble de cellules, c'est-à-dire, d'en afficher hiérarchiquement les positions enfants.
Dans ADOMD.NET, les Axes Propriétés et FilterAxis de l' CellSet objet représentent les métadonnées des axes de requête et de secteur, respectivement, dans le CellSet retourné. Les deux propriétés retournent des références à Axis des objets qui, à leur tour, contiennent les positions représentées sur chaque axe.
Chaque Axis objet contient une collection d' Position objets qui représentent le jeu de tuples disponibles pour cet axe. Chaque Position objet représente un tuple unique qui contient un ou plusieurs membres, représentés par une collection d' Member objets.
Récupérez les données de la collection d'ensembles de cellules.
En plus de récupérer les métadonnées, ADOMD.NET récupère également les données pour l'ensemble de cellules. Dès que la commande a exécuté la requête et retourné un CellSet , vous pouvez récupérer les données à l’aide de la Cells collection de CellSet . Cette collection contient les valeurs calculées pour l'intersection de tous les axes de la requête. Par conséquent, il existe plusieurs indexeurs pour accéder à chaque intersection (ou cellule). Pour obtenir la liste des indexeurs, consultez Item[] .
Exemple de récupération de données en état connecté
L'exemple suivant établit une connexion au serveur local, puis exécute une commande sur la connexion. L’exemple analyse les résultats à l’aide du modèle objet de l’ensemble de cellules : les légendes (métadonnées) des colonnes sont récupérées à partir du premier axe, et les légendes (métadonnées) de chaque ligne sont récupérées à partir du deuxième axe, et les données d’intersection sont extraites à l’aide de la Cells collection.
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
}
Récupération de données en état déconnecté
En chargeant le code XML retourné à partir d’une requête précédente, vous pouvez utiliser l' CellSet objet pour fournir une méthode complète d’exploration des données analytiques sans nécessiter de connexion active.
Notes
Toutes les propriétés des objets qui sont disponibles à partir de l' CellSet objet ne sont pas disponibles dans un état déconnecté. Pour plus d’informations, consultez LoadXml.
Exemple de récupération de données en état déconnecté
L'exemple suivant est similaire à l'exemple de métadonnées et de données présenté précédemment dans cette rubrique. Toutefois, la commande dans l’exemple suivant s’exécute avec un appel à ExecuteXmlReader , et le résultat est retourné en tant que System.Xml. XmlReader. L’exemple remplit ensuite l' CellSet objet à l’aide de cette System.Xml. XmlReader avec la LoadXml méthode. Bien que cet exemple charge le System.Xml. XmlReader immédiatement, vous pouvez mettre en cache le XML qui est contenu par le lecteur sur un disque dur ou le transporter vers une autre application par le biais de n’importe quel moyen avant de charger les données dans un ensemble de cellules.
string DemonstrateDisconnectedCellset()
{
//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 an XmlReader
System.Xml.XmlReader x = cmd.ExecuteXmlReader();
//At this point, the XmlReader could be stored on disk,
//transmitted, modified, cached, or otherwise manipulated
//Load the CellSet with the specified XML
CellSet cs = CellSet.LoadXml(x);
//Now that the XmlReader has finished being read
//we can close it and the connection, while the
//CellSet can continue being used.
x.Close();
conn.Close();
//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();
}
return result.ToString();
} // using connection
}