Essbase Custom Relational Calculation

Home > XMLA, essbase odbc > EssBase ODBC interface / MsSQL 2008R2 EssBase XMLA integration

EssBase ODBC interface / MsSQL 2008R2 EssBase XMLA integration

Под катом описание процесса публикации данных EssBase в табличной функции MsSQL 2008R2 64Bit

Дано: запрос MDX, который возвращает одиночную колонку с данными. Нужно получить результат выполнения этого запроса на стороне реляционной базы данных. Уже два года как существует решение для Oracle RDB. Теперь пришло время для MsSQL.

Итак, исходный MDX запрос :

SELECT NON EMPTY {( [Actual])} ON COLUMNS,

NON EMPTY NONEMPTYBLOCK CrossJoin (CrossJoin (Descendants ([Product]) , Descendants ([Market]) ), CrossJoin ({[Jan]} ,{[COGS]} ))

ON ROWS FROM Sample.Basic

Для работы нам потребуется Essbase Provider Services. Его наличие можно проверить, обратившись с http запросом по следующему адресу : http://127.0.0.1:13080/aps/XMLA

Для начала, нужно скачать и скопировать на диск CLR C# расширение для MsSQL 2008R2, которое реализует XMLA транспорт и разбор ответа в табличный вид. (Данная библиотека создана из предположения, что APS , MsSQL 2008R2 и EssBase находятся на одном сервере)

Затем, нужно настроить MsSQL 2008R2 сервер, выполнив последовательно команды :

sp_configure
‘show advanced options’, 1;

GO RECONFIGURE;

sp_configure
‘clr enabled’, 1;

GO RECONFIGURE

sp_configure
‘Ole Automation Procedures’, 1;

RECONFIGURE; GO

ALTER DATABASE ESS_XMLA SET TRUSTWORTHY ON ;

Потом, нужно зарегистрировать внешнюю функцию.

USE [ESS_XMLA]
GO
/*
drop function [dbo].[BuildXmlaRowValuesArray]
GO
drop ASSEMBLY [EssXMLALibrary]
GO
*/

CREATE ASSEMBLY [EssXMLALibrary] AUTHORIZATION [dbo] FROM  ’C:\C#Projects\TSQLEssBaseInterface.dll’
WITH PERMISSION_SET = UNSAFE
GO
CREATE FUNCTION [dbo].[BuildXmlaRowValuesArray](@vTypeq [nvarchar](4000), @vQueryBody [nvarchar](4000), @vLogin [nvarchar](4000), @vPassword [nvarchar](4000))
RETURNS  TABLE (
[Dim01] [nvarchar](80) NULL, [Dim02] [nvarchar](80) NULL, [Dim03] [nvarchar](80) NULL, [Dim04] [nvarchar](80) NULL, [Dim05] [nvarchar](80) NULL,
[Dim06] [nvarchar](80) NULL, [Dim07] [nvarchar](80) NULL, [Dim08] [nvarchar](80) NULL, [Dim09] [nvarchar](80) NULL, [Dim10] [nvarchar](80) NULL,
[Dim11] [nvarchar](80) NULL, [Dim12] [nvarchar](80) NULL, [Dim13] [nvarchar](80) NULL, [Dim14] [nvarchar](80) NULL, [Dim15] [nvarchar](80) NULL,
[Dim16] [nvarchar](80) NULL, [Dim17] [nvarchar](80) NULL, [Dim18] [nvarchar](80) NULL, [Dim19] [nvarchar](80) NULL, [Dim20] [nvarchar](80) NULL,
[Dim21] [nvarchar](80) NULL, [Dim22] [nvarchar](80) NULL, [Dim23] [nvarchar](80) NULL, [Dim24] [nvarchar](80) NULL, [Dim25] [nvarchar](80) NULL,
[Dim26] [nvarchar](80) NULL, [Dim27] [nvarchar](80) NULL, [Dim28] [nvarchar](80) NULL, [Dim29] [nvarchar](80) NULL, [Dim30] [nvarchar](80) NULL,
[StrValue] [nvarchar](80) NULL, [DblValue] [decimal](32, 9) NULL, [XmlaRowValue] [nvarchar](4000) NULL
) WITH EXECUTE AS CALLER
AS EXTERNAL NAME [EssXMLALibrary].[UserDefinedFunctions].[BuildXmlaRowValuesArray]
GO


После того как все команды успешно выполнились, настала пора выполнения запросов:

select * from dbo.BuildXmlaRowValuesArray ( ‘mdx’

,‘SELECT NON EMPTY {( [Actual])} ON COLUMNS,

NON EMPTY CrossJoin (CrossJoin (Descendants ([Product]) , Descendants ([Market]) ), CrossJoin ({[Jan]} ,{[COGS]} ))

ON ROWS

FROM Sample.Basic’

,‘hypadmin’ ,‘hyperion’ )

На данный момент этот интерфейс реализует два метода mdx и mdxLev0. Второй метод при трансформации результата в таблицу выводят в значении измерений только элементы нулевого уровня.

Categories: XMLA, essbase odbc Tags:
  • Pingback: Oracle Hyperion Performance Lab » Essbase Custom Relational Calculation()

  • u0414u043cu0438u0442u0440u0438u0439

    u0414u043eu0431u0440u044bu0439 u0434u0435u043du044c, u0415u0432u0433u0435u043du0438u0439!nnu041fu043eu043fu0440u043eu0431u043eu0432u0430u043b u0432u044bu043fu043eu043bu043du0438u0442u044c u0441u0438u0435… u0440u0443u0433u0430u0435u0442u0441u044f, u0432 u0447u0451u043c u043cu043eu0436u0435u0442 u0431u044bu0442u044c u043fu0440u043eu0431u043bu0435u043cu0430:nnA .NET Framework error occurred during execution of user-defined routine or aggregate “BuildXmlaRowValuesArray”: nSystem.ArgumentException: nError in CLR Function:nvErrorStepnParameter name: System.Net.WebExceptionnSystemnat System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)nat System.Net.HttpWebRequest.GetRequestStream()nat UserDefinedFunctions.BuildXmlaRowValuesArray(String vTypeq, String vQueryBody, String vLogin, String vPassword)nSystem.IO.Stream GetRequestStream(System.Net.TransportContext ByRef)nUnable to connect to the remote servernSystem.ArgumentException: nat UserDefinedFunctions.BuildXmlaRowValuesArray(String vTypeq, String vQueryBody, String vLogin, String vPassword)

    • http://essbase.ru Evgeniy Rasyuk

      u041fu0440u0438u0432u0435u0442 nn>> Unable to connect to the remote servernnu043fu0440u043eu0432u0435u0440u044c APS nnhttp://127.0.0.1:13080/aps/XMLA

      • u0414u043cu0438u0442u0440u0438u0439

        u0415u0432u0433u0435u043du0438u0439, u0434u043eu0431u0440u044bu0439 u0434u0435u043du044c!nnAPS u0440u0430u0431u043eu0442u0430u0435u0442, u0432u043e u0432u0441u044fu043au043eu043c u0441u043bu0443u0447u0430u0435 u0432u044bu0434u0430u0435u0442:nEssbase XML For Analysis – Release 11.1.2.2.100.2167nCopyright (c) 1991, n2012 Oracle and / or its affiliates. All rights reserved.nnu041au0441u0442u0430u0442u0438, u043fu043bu0430u043du0438u0440u0443u0435u0442u0441u044f u0434u043eu0431u0430u0432u0438u0442u044c u0432u043eu0437u043cu043eu0436u043du043eu0441u0442u044c u0437u0430u0434u0430u043du0438u044f u0430u0439u043fu0438u0448u043du0438u043au0430 u0441u0435u0440u0432u0435u0440u0430 essbase? u0422u0430u043a u043au0430u043a u0440u0435u0434u043au043e u043eu043d u0440u0430u0431u043eu0442u0430u0435u0442 u043du0430 u043eu0434u043du043eu043c u0441u0435u0440u0432u0435u0440u0435 u0441 MSSQL

        • http://essbase.ru Evgeniy Rasyuk

          1) u041eu0442u0432u0435u0442u0438u043bu0438 u043fu0438u0441u044cu043cu043eu043c n2) u041fu0440u043eu0432u0435u0440u044c u0447u0442u043e 127.0.0.1