Hyperion Essbase Connection в SSIS
Как заставить SSIS подключиться к кубу Oracle Hyperion Essbase, чтобы использовать его в качестве источника данных? Погуглив это вернуло следующее:
Аналогичный вопрос был задан в отношении конкретной версии без реального ответа, кроме как "сторонний инструмент может это сделать".
Вики-коннекторы Microsoft SSIS указывают, что вы можете сделать это через Star Analytics.
Начиная с SQL Server 2005 с пакетом обновления 2 (SP2), службы Reporting Services (SSRS) имеют соединение с источником данных. Эта функция продукта, похоже, не переводилась ни на какие объекты для SSIS. Один из блоггеров предположил, что это можно было сделать как договоренность quid pro quo еще до того, как Oracle приобрела Hyperion, поскольку Hyperion начала поддерживать подключение к кубам SQL Server 2005 SSAS.
Согласно @billinkc он использует для подключения к нему с прямым.NET. Небольшое копание вернуло Hyperion Application Builder.NET (HAB.NET). Сначала это казалось многообещающим решением, но оказалось, что с выпуском 11.1.3 продукт был снят с производства. @billinkc также предоставил пример кода, так что я протестирую его и посмотрю, работает ли он.
Помимо лицензирования серверного продукта Star Analytics, который является непомерно дорогостоящим (для меня), есть ли другие решения?
2 ответа
Я не слышал о HAB.NET, но +1 за то, что нашел это. Вместо этого у меня был простой тест подключения в.NET, как показано ниже. Я немного изменил его для работы с DTS. Очевидно, вам нужно определить столбцы и типы буфера, но, надеюсь, это поможет вам разобраться с гиперионами.
Чтобы получить доступ к классу Microsoft.AnalysisServices.AdomdClient, добавьте ссылку на ADOMD.NET и сохраните все. Тогда приведенный ниже код будет работать правильно.
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;
}
}
}
В случае, если это кому-то нужно, самый простой и прямой путь - через SSRS. Более подробная информация здесь: https://samtran.me/2017/05/05/interrogating-and-automation-of-essbase-cubes-with-essbase-web-services/