CellSet kullanarak veri alma
Analitik veri alırken CellSet nesnesi sağlar en etkileşim ve esneklik.The CellSet object is an in-memory cache of hierarchical data and metadata that retains the original dimensionality of the data.The CellSet object can also be traversed in either a connected or disconnected state.Bu nedenle yeteneği, bağlantısı kesilen CellSet nesnesi veri ve meta veriler istediğiniz sırayla görüntülemek için kullanılabilir ve sağlar en kapsamlı nesne modeli veri alma.Bu yeteneği nedenleri de kesilmiş CellSet nesne için en genel gider ve en yavaş ADOMD.NET doldurmak için veri alma nesne modeli.
Bağlı durumdaki veri alma
Kullanmak için CellSet Nesne verileri almak için aşağıdaki adımları izleyin:
Yeni bir oluşturmak örnek nesnesi.
Yeni bir oluşturmak için örnek , CellSet nesne, çağrı Execute veya ExecuteCellSet yöntem, AdomdCommand nesne.
meta veriler tanımlayın.
Yanı sıra, veri alma ADOMD.NET de hücre kümesi meta veriler alır.Komut sorguyu çalıştırabilir ve döndürülen hemen bir CellSet, çeşitli nesneler aracılığıyla meta veriler almaBu meta veriler görüntülemek ve hücre kümesi verilerle etkileşimli, istemci uygulamaları için gereklidir.Örneğin, birçok istemci uygulamaları için Delme işlevsellik sağlamak kapalı alt konumları, bir hücre belirli bir pozisyonda açık veya hiyerarşik olarak görüntüleme.
De ADOMD.NET, Axes ve FilterAxis özelliklerini CellSet nesnesini temsil eden meta veriler sorgu ve parçaların eksenler, sırasıyla, döndürülen hücre kümesi.Her iki özellikleri için başvuruları geri Axis nesneleri, hangi sırayla içeren konumlar temsil edilen her eksen.
Her Axis nesne topluluğu içeren Position temsil eden nesneleri küme dizilerini bu eksen. için kullanılabilir,Her Position nesnesini temsil eden tek bir tanımlama grubu topluluğu tarafından temsil edilen bir veya daha fazla üye içeren Member nesneler.
Veri setinden almak koleksiyon.
Meta veriler alınırken yanı sıra ADOMD.NET de hücre kümesi kümesi verilerini alır.Komut sorguyu çalıştırabilir ve döndürülen hemen bir CellSet, verileri kullanarak almak Cells koleksiyon , CellSet.Bu koleksiyon sorgudaki tüm eksenleri kesişim için hesaplanan değerleri içerir.Bu nedenle, her kesişme erişmek için birkaç dizinleyiciler vardır veya hücre.Dizinleyicileri bir listesi için bkz: Item.
Bağlı durumdaki veri alma örneği
Aşağıdaki örnek, yerel sunucuyla bağlantı kurar ve sonra bağlantı üzerinde bir komut çalıştırır.Örnek sonuçlar kullanarak ayrıştırmak CellSet nesne modeli: sütun başlıkları (meta veriler) ilk Eksenden alınır (meta veriler) her satır başlıkları ikinci Eksenden alınır ve kesişen verileri kullanılarak alınır Cells koleksiyon.
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
}
Bağlantısı kesilmiş durumda veri alma
Önceki bir sorgudan döndürülen xml yükleyerek kullanabilirsiniz CellSet nesne sağlamaya yönelik kapsamlı bir yöntem tarama analitik veri gerektirmeden etkin bir bağlantı.
Bağlantısı kesilmiş durumda veri alma örneği
Aşağıdaki örnek, bu konunun önceki bölümlerinde gösterilen meta veriler ve veri örneğin benzeridir.Ancak, aşağıdaki örnek komutta bir çağrı ile çalışır ExecuteXmlReader, ve sonuç olarak döndürülen bir System.Xml.XmlReader.Örnek daha sonra doldurur CellSet kullanarak bu nesneyi System.Xml.XmlReader ile LoadXml yöntem.Bu örnek yükler, ancak System.Xml.XmlReader , bir sabit diske okuyucu tarafından bulunan xml önbelleğe veya hemen farklı bir uygulama yüklenirken verileri önce herhangi bir araç üzerinden verileri taşımabir hücre kümesi.
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
}