Udostępnij przez


Pobieranie danych przy użyciu zestawu komórek

Podczas pobierania dane analityczne, CellSet obiekt zapewnia najbardziej interakcję i elastyczność.CellSet Obiekt znajduje się w pamięci podręcznej pamięci hierarchicznych danych i metadane, który zachowuje wymiarze oryginalnych danych.CellSet Również musi okreslac obiektu albo połączone lub rozłączone Państwo.Z tego powodu odłączony zdolności, CellSet obiektu mogą być używane do wyświetlania danych i metadane w dowolnej kolejności i zapewnia najbardziej wszechstronne modelu obiektowego dla pobierania danych.To odłączony możliwości również powoduje CellSet obiektu mają największe obciążenie i być najmniejszą ADOMD.NET modelu obiektu pobierania danych do wypełniania.

Pobieranie danych w stanie połączonym

Aby użyć CellSet obiektu do pobierania danych, wykonaj następujące kroki:

  1. Utwórz nowe wystąpienie obiektu.

    Aby utworzyć nowe wystąpienie CellSet obiektu wywołania Execute lub ExecuteCellSet metoda AdomdCommand obiektu.

  2. Rozpoznania metadane.

    Oprócz pobieranie danych ADOMD.NET również pobiera metadane dla zestaw komórek.Tak szybko, jak polecenie ma uruchomić kwerendę i zwrócił CellSet, można pobrać metadane za pomocą różnych obiektów.metadane jest niezbędne do wyświetlania i interakcji z aplikacji klient zestaw komórek danych.Na przykład wiele aplikacji klienckich zapewniają funkcje służące do niedziałający z lub hierarchicznie wyświetlanie pozycji podrzędnej pozycji, określonego zestawu komórek.

    W ADOMD.NET, Axes i FilterAxis Właściwości CellSet obiektu reprezentują metadane osi kwerendy i fragmentator odpowiednio w zwracane zestaw komórek.Obie właściwości zwracają odniesienia do Axis obiektów, które z kolei zawierają pozycje reprezentowane na każdej oś.

    Każdy Axis zawiera obiektu kolekcja z Position obiektów, które stanowią zestaw krotek dostępne dla tej oś.Każdy Position obiekt reprezentuje pojedynczy spójna kolekcja, zawierający jeden lub więcej członków, reprezentowane przez kolekcja Member obiektów.

  3. Pobieranie danych z zestaw komórek kolekcja.

    Oprócz pobierania metadane, ADOMD.NET również pobiera dane dla zestaw komórek.Tak szybko, jak polecenie ma uruchomić kwerendę i zwrócił CellSet, można pobrać dane przy użyciu Cells kolekcja CellSet.Ta kolekcja zawiera wartości, które są obliczane dla przecięcia wszystkich osi w kwerendzie.Dlatego istnieje kilka indeksatory dostępu do każdego przecięcia lub komórka.Zobacz listę indeksatory Item.

Przykład pobierania danych w stanie połączonym

Poniższy przykład tworzy połączenie do serwera lokalnego, a następnie uruchamia polecenie połączenia.Przykład analizuje wyniki za pomocą CellSet model obiektowy: kolumny (metadane) podpisy są pobierane z pierwszej osi podpisów (metadane) dla każdego wiersza są pobierane z drugą oś i przecinających się dane są pobierane za pomocą Cells kolekcja.

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
}

Pobieranie danych rozłączony

Ładując XML zwróconych z poprzedniej kwerendy, można użyć CellSet obiekt, aby zapewnić wszechstronne metoda przeglądania dane analityczne bez konieczności aktywnego połączenia.

Ostrzeżenie

Nie wszystkie właściwości obiektów, które są dostępne z CellSet obiektu są dostępne podczas pracy w stanie odłączona.Aby uzyskać więcej informacji, zobacz LoadXml.

Przykład pobierania danych rozłączony

Poniższy przykład jest podobne do danych i metadane przykładu wcześniej w tym temacie.Jednak w następującym przykładzie polecenie uruchamia wywołaniu ExecuteXmlReader, a wynik jest zwracany jako System.Xml.XmlReader.Przykład następnie wypełni CellSet obiektu za pomocą tego System.Xml.XmlReader z LoadXml metoda.Chociaż ten przykład ładuje System.Xml.XmlReader natychmiast, może buforować plik XML, który jest zawarty w czytnik na dysku twardym lub transport danych do innej aplikacji za pomocą wszelkich środków przed załadowaniem danych do zestaw komórek.

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
}