Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Bij het ophalen van analytische gegevens biedt het CellSet object de meeste interactiviteit en flexibiliteit. Het CellSet object is een in-memory cache met hiërarchische gegevens en metagegevens die de oorspronkelijke dimensionaliteit van de gegevens behouden. Het CellSet object kan ook worden doorlopen in een verbonden of niet-verbonden toestand. Vanwege deze niet-verbonden mogelijkheid kan het CellSet object worden gebruikt om gegevens en metagegevens in elke volgorde weer te geven en biedt het meest uitgebreide objectmodel voor het ophalen van gegevens. Deze niet-verbonden functie zorgt er ook voor dat het CellSet object de meeste overhead heeft en dat het het traagste ADOMD.NET objectmodel voor het ophalen van gegevens is om te vullen.
Gegevens ophalen in een verbonden toestand
Als u het CellSet object wilt gebruiken om gegevens op te halen, voert u de volgende stappen uit:
Maak een nieuw exemplaar van het object.
Als u een nieuw exemplaar van het CellSet object wilt maken, roept u de Execute of ExecuteCellSet methode van het AdomdCommand object aan.
Metagegevens identificeren.
Naast het ophalen van gegevens, haalt ADOMD.NET ook metagegevens op voor de cellenset. Zodra de opdracht de query heeft uitgevoerd en een CellSetretourneert, kunt u de metagegevens ophalen via verschillende objecten. Deze metagegevens zijn nodig voor clienttoepassingen om cellensetgegevens weer te geven en te gebruiken. Veel clienttoepassingen bieden bijvoorbeeld functionaliteit voor inzoomen of hiërarchisch weergeven van de onderliggende posities van een opgegeven positie in een cellenset.
In ADOMD.NET vertegenwoordigen de Axes en FilterAxis eigenschappen van het CellSet object respectievelijk de metagegevens van de query- en slicerassen in de geretourneerde cellenset. Beide eigenschappen retourneren verwijzingen naar Axis objecten die op hun beurt de posities bevatten die op elke as worden weergegeven.
Elk Axis object bevat een verzameling Position objecten die de set tuples vertegenwoordigen die beschikbaar zijn voor die as. Elk Position object vertegenwoordigt één tuple die een of meer leden bevat, vertegenwoordigd door een verzameling Member objecten.
Gegevens ophalen uit de cellensetverzameling.
Naast het ophalen van metagegevens, haalt ADOMD.NET ook gegevens op voor de cellenset. Zodra de opdracht de query heeft uitgevoerd en een CellSetretourneert, kunt u de gegevens ophalen met behulp van de Cells verzameling van de CellSet. Deze verzameling bevat de waarden die worden berekend voor het snijpunt van alle assen in de query. Daarom zijn er verschillende indexeerfuncties voor toegang tot elk snijpunt of elke cel. Zie voor een lijst met indexeerfuncties Item[].
Voorbeeld van het ophalen van data in een verbonden toestand
In het volgende voorbeeld wordt een verbinding met de lokale server tot stand gebracht en wordt vervolgens een opdracht op de verbinding uitgevoerd. In het voorbeeld worden de resultaten geparseerd met behulp van het Objectmodel CellSet : de bijschriften (metagegevens) voor de kolommen worden opgehaald van de eerste as en de bijschriften (metagegevens) voor elke rij worden opgehaald uit de tweede as en de kruisingsgegevens worden opgehaald met behulp van de Cells verzameling.
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
}
Gegevens ophalen in een niet-verbonden toestand
Door XML te laden die is geretourneerd uit een vorige query, kunt u het CellSet object gebruiken om een uitgebreide methode voor het bladeren door analytische gegevens te bieden zonder dat hiervoor een actieve verbinding is vereist.
Opmerking
Niet alle eigenschappen van de objecten die beschikbaar zijn in het CellSet object, zijn beschikbaar wanneer de verbinding is verbroken. Zie LoadXml voor meer informatie.
Voorbeeld van het ophalen van gegevens in een niet-verbonden status
Het volgende voorbeeld is vergelijkbaar met de metagegevens en het gegevensvoorbeeld dat eerder in dit onderwerp is weergegeven. De opdracht in het volgende voorbeeld wordt echter uitgevoerd met een aanroep naar ExecuteXmlReaderen het resultaat wordt geretourneerd als een System.Xml.XmlReader. In het voorbeeld wordt het CellSet object vervolgens gevuld met behulp van deze System.Xml.XmlReader met de LoadXml methode. Hoewel in dit voorbeeld de System.Xml.XmlReader onmiddellijk wordt geladen, kunt u de XML die door de lezer is opgenomen, in de cache opslaan op een harde schijf of die gegevens naar een andere toepassing transporteren voordat u de gegevens in een cellenset laadt.
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
}