Hyperion Essbase Connection in SSIS

6.5k views Asked by At

How can I get SSIS to connect to an Oracle Hyperion Essbase cube to use it as a data source? Googling this returned the following:

  1. A similar question was asked about a specific version with no real answer other than "a third party tool can do it."

  2. A microsoft SSIS connectors wiki indicates you can do this through Star Analytics.

  3. Beginning with SQL Server 2005 SP2, Reporting Services (SSRS) has a data source connection. This product feature didn't seem to translate to any objects for SSIS. One blogger suggested this may have been done as a quid pro quo arrangement back before Oracle purchased Hyperion since Hyperion began supporting connecting to SQL Server 2005 SSAS cubes at that time.

  4. As per @billinkc he use to connect to it with straight .NET. A little digging returned Hyperion Application Builder .NET (HAB.NET). At first this appeared to be a promising solution, but it turns out the product was discontinued with the 11.1.3 release. @billinkc also provided a code sample now, so I will test it out and see if this works.

Aside from licensing the Star Analytics server product which is cost prohibitive (for me), are there any other solutions out there?

2

There are 2 answers

1
billinkc On BEST ANSWER

I hadn't heard of HAB.NET but +1 for finding that. Instead, I just had a dirt simple connectivity test going in .NET like below. I've modified it a bit to work with the DTS stuff. Obviously, you'll need to define your buffer columns and types but hopefully this gets you through the hyperion stuff.

In order to access the Microsoft.AnalysisServices.AdomdClient class, add a reference to ADOMD.NET and save all. Then the below code will function properly.

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;

using Microsoft.AnalysisServices.AdomdClient;

public class ScriptMain : UserComponent
{
    public override void CreateNewOutputRows()
    {
        string connectionString = string.Empty;
        connectionString = "Provider=MSOLAP;Data Source=http://hyperion00:13080/aps/XMLA; Initial Catalog=GrossRev;User Id=Revenue;Password=ea$yMon3y;";
        string query = "SELECT ...";
        AdomdDataReader reader = null;
        try
        {
            using (AdomdConnection conn = new AdomdConnection(connectionString))
            {
                conn.Open();
                using (AdomdCommand cmd = new AdomdCommand(query, conn))
                {
                    reader = cmd.ExecuteReader();

                    while (reader.Read())
                    {
                        // Replace Console.WriteLine with assignment of
                        // Output0Buffer.AddRow();
                        // Output0Buffer.column = (stronglyTyped) reader[i]
                        Console.WriteLine(reader.GetString(0));
                        Console.WriteLine(reader.GetString(1));
                    }
                    Console.WriteLine("fin");
                }

            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);

            throw;
        }
    }
}
0
Sam Tran On

In case anyone needs it, the easiest and most direct way is through SSRS. More information here: https://samtran.me/2017/05/05/interrogating-and-automation-of-essbase-cubes-with-essbase-web-services/