Aracılığıyla paylaş


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:

  1. Yeni bir oluşturmak örnek nesnesi.

    Yeni bir oluşturmak için örnek , CellSet nesne, çağrı Execute veya ExecuteCellSet yöntem, AdomdCommand nesne.

  2. 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.

  3. 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ı.

Not

Kullanılabilen nesnelerin tüm özelliklerini CellSet nesnesi kullanılabilir durumdayken bağlantısı kesilmiş bir durum.Daha fazla bilgi için bkz: LoadXml.

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
}