ADOMD.NET-Clientfunktionalität

ADOMD.NET bildet genau wie andere Microsoft .NET Framework-Datenanbieter eine Verbindung zwischen einer Anwendung und einer Datenquelle. Im Gegensatz zu anderen .NET Framework-Datenanbietern arbeitet ADOMD.NET jedoch mit analytischen Daten. Um das leisten zu können, unterstützt ADOMD.NET eine Funktionalität, die sich von der anderer .NET Framework-Datenanbieter erheblich unterscheidet. ADOMD.NET ermöglicht nicht nur das Abrufen von Daten, sondern auch das Abrufen von Metadaten und Änderungen an der Struktur des analytischen Datenspeichers:

  • Abrufen von Metadaten
    Anwendungen können mehr über die Daten "lernen", die durch Metadatenabruf aus der Datenquelle abgerufen werden können, wobei entweder Schemarowsets oder das Objektmodell verwendet werden. Informationen, wie zum Beispiel die jeweils verfügbaren Key Performance Indicator (KPI)-Arten, die Dimensionen in einem Cube, und die von den Miningmodellen benötigten Parameter, können alle ermittelt werden. Metadaten sind am wichtigsten für dynamische Anwendungen, die Benutzereingaben benötigen, um die Art, Tiefe und den Bereich der abzurufenden Daten zu bestimmen. Beispiele: Query Analyzer, Microsoft Excel und andere Abfragetools. Metadaten sind für statische Anwendungen, die vordefinierte Aktionen ausführen, weniger kritisch.

    Weitere Informationen: Abrufen von Metadaten aus einer analytischen Datenquelle.

  • Abrufen von Daten
    Datenabruf ist das eigentliche Abrufen der in der Datenquelle gespeicherten Informationen. Datenabruf ist die primäre Funktion "statischer" Anwendungen, die die Struktur die Datenquelle kennen. Datenabruf ist auch das Endergebnis "dynamischer" Anwendungen. Der Wert des KPI zu einer bestimmten Tageszeit, die Anzahl der in den letzten Stunden je Geschäft verkauften Fahrräder und die Faktoren, welche die Jahresleistung der Mitarbeiter beeinflussen, sind allesamt Beispiele für Daten, die abgerufen werden können. Das Abrufen von Daten ist für jede Abfrageanwendung von entscheidender Bedeutung.

    Weitere Informationen: Abrufen von Daten von einer analytischen Datenquelle.

  • Ändern der Struktur analytischer Daten
    ADOMD.NET kann auch verwendet werden, um die Struktur des analytischen Datenspeichers zu ändern. Dies erfolgt zwar in der Regel durch das Analysis Management Objects (AMO)-Objektmodell, doch können Sie auch ADOMD.NET verwenden, um Analysis Services Scripting Language (ASSL)-Befehle zum Erstellen, Ändern oder Löschen von Objekten auf dem Server zu senden.

    Weitere Informationen: Ausführen von Befehlen für eine analytische Datenquelle, Analysis Management Objects (AMO), Analysis Services Scripting Language-Referenz

Das Abrufen von Metadaten, das Abrufen von Daten und das Ändern der Datenstruktur erfolgt jeweils an einem bestimmten Punkt im Workflow einer typischen ADOMD.NET-Anwendung.

Typischer Verarbeitungsablauf

Beim Arbeiten mit einer analytischen Datenbank folgen herkömmliche ADOMD.NET-Anwendungen normalerweise demselben Workflow:

  1. Zuerst wird mit dem AdomdConnection-Objekt eine Verbindung zur Datenbank hergestellt. Wenn Sie die Verbindung öffnen, macht das AdomdConnection-Objekt Metadaten über den Server verfügbar, zu dem Sie eine Verbindung hergestellt haben. In einer dynamischen Anwendung wird ein Teil dieser Informationen meist dem Benutzer angezeigt, damit er eine Auswahl treffen kann, z. B. welcher Cube abgefragt werden soll. Die bei diesem Schritt erstellte Verbindung kann mehrmals von der Anwendung wiederverwendet werden, was den Verwaltungsaufwand verringert.

    Weitere Informationen: Aufbauen von Verbindungen in ADOMD.NET

  2. Sobald eine Verbindung hergestellt ist, würde eine dynamische Anwendung den Server abfragen, um genauere Metadaten zu erhalten. Bei einer statischen Anwendung weiß der Programmierer vorher, welche Objekte die Anwendung abfragen wird. Somit müssen diese Metadaten nicht abgerufen werden. Abgerufene Metadaten können von der Anwendung und dem Benutzer für den nächsten Schritt verwendet werden.

    Weitere Informationen: Abrufen von Metadaten aus einer analytischen Datenquelle

  3. Die Anwendung führt dann einen Befehl für den Server aus. Dieser Befehl kann zum Zweck haben, zusätzliche Metadaten abzurufen, Daten abzurufen oder die Datenbankstruktur zu verändern. Für jeden dieser Tasks könnte die Anwendung eine zuvor festgelegte Abfrage verwenden oder mithilfe neu abgerufener Metadaten weitere Abfragen erstellen.

    Weitere Informationen: Abrufen von Metadaten aus einer analytischen Datenquelle, Abrufen von Daten von einer analytischen Datenquelle, Ausführen von Befehlen für eine analytische Datenquelle

  4. Nachdem der Befehl an den Server gesendet wurde, beginnt die Rückgabe der Metadaten oder Daten vom Server an den Client. Diese Informationen können mit einem CellSet-Objekt, einem AdomdDataReader-Objekt oder einem System.XmlReader-Objekt angezeigt werden.

Zur Veranschaulichung dieses herkömmlichen Workflows enthält das folgende Beispiel eine Methode, die eine Verbindung mit der Datenbank öffnet, einen Befehl für einen bekannten Cube ausführt und die Ergebnisse in ein Cellset abruft. Das Cellset gibt dann eine tabstoppgetrennte Zeichenfolge zurück, die Spaltenheader, Zeilenheader und Zellendaten enthält.

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
}

Siehe auch

Verweis