Search code examples
c#asp.netmdxolapashx

Querying OLAP Cubes via ASHX Service


I'm using the following code to execute a query in C#:

        // Create Connection String
        AdomdConnection testConnection = new AdomdConnection("Data Source=*****;User ID=******;Provider=MSOLAP.6;Persist Security Info=True;Impersonation Level=Impersonate;Password=******");

        // Test Open
        testConnection.Open();

        // Make Query
        AdomdCommand cmd = new AdomdCommand(@"SELECT { [Measures].[Payment Amount] } ON COLUMNS,
                                             { [Charging Low Orgs].[Charging Division].[Charging Division] } ON ROWS 
                                              FROM [Payments]", testConnection);

        AdomdDataReader dataReader = cmd.ExecuteReader();

        // Close Connection
        testConnection.Close();

And I keep getting this error on the cmd.ExecuteReader() call:

{"XML for Analysis parser: The CurrentCatalog XML/A property was not specified."}

The only literature that I could find that was relavent to this was that the query isn't resolving because impersonation wasn't set, but I specified that in the connection string.

Another article which I don't think is related, said to enable BAM on Excel, but I don't have that option in Excel, and I fail to see how that would make a difference for a web service.

Please help!


Solution

  • The following example includes a catalog parameter in the connection string:

    static void Main(string[] args)
            {
                AdomdConnection conn = new AdomdConnection(
                    "Data Source=localhost;Catalog=Adventure Works DW Standard Edition");
                conn.Open(  );
    
                string commandText = "SELECT {[Measures].[Sales Amount], " +
                    "[Measures].[Gross Profit Margin]} ON COLUMNS, " +
                    "{[Product].[Product Model Categories].[Category]} ON ROWS " +
                    "FROM [Adventure Works] " +
                    "WHERE ([Sales Territory Country].[United States])";
    
                AdomdCommand cmd = new AdomdCommand(commandText, conn);
                AdomdDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);