Metrika

18 марта 2011 г.

Взаимодействие с OLAP кубами (SSAS 2008) на C#

Работу с данными рассматривать не буду, потому что сам еще не пробовал.
Для того, что бы работать с кубами из кода необходимо скачать библиотеку ADOMD.NET. Забирать надо ADOMD.NET.msi. Установить ее. Далее, в VS добавить ее в проект (на иконке проекта тыкаем правой кнопкой и выбираем Add Reference...). Я работал на VS 2010 и после установки библиотеки я ее не нашел на вкладке .NET окна Add Reference, поэтому пошел на вкладку Browse и добавил ее руками. Выбирать надо вот этот файл C:\Program Files\Microsoft.NET\Adomd.NET\80\Microsoft.AnalysisServices.AdomdClient.dll.
Классы, необходимые для соединения к кубам и отправки им команд, находятся в пространстве имен Microsoft.AnalysisServices.AdomdClient.
Соединиться с БД (имеется в виду БД кубов) и выполнить команду можно следующим образом:

            AdomdConnection cnn = null;
            try
            {
                cnn = new AdomdConnection("Provider=MSOLAP;  DataSource=server_ip_or_name;Initial Catalog=db_name");
                cnn.Open();

                AdomdCommand cmd = cnn.CreateCommand();
                cmd.CommandType = System.Data.CommandType.Text;
                cmd.CommandText = command;

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                 // Обработка ошибки
            }
            finally
            {
                cnn.Close();
            }
Как я писал выше, я не пробовал еще работать с данными кубов из кода, но таким кодом точно можно отпроцессить куб, разбить меру на партиции и т.п. Соответствующая команда в формате XMLA подставляется вместо переменной command. Опять же, я пока не разбирался можно ли туда передать MDX и как работать с ответом.
Небольшой хинт: для того, что б написать команду к кубу для какой-либо операции, не обязательно напрягать голову, т.к. в Management Studio можно сгенерить скрипт команды. Например, что бы сгенерить команду для процессинга куба необходимо на кубе тыкнуть правой кнопкой, далее Porcess и в открывшемся окне нажать кнопку Script, она будет вверху. Скрипт сгенериться в новое окно запроса. Так же можно сгенерить скрипт для команды Merge для партиций меры. Так же, для элементов куба можно сгенерить команды CREATE, ALTER и DELETE. У кубов, партиций и измерений есть пункт в меню Script cube as, Script partition as, Script dimension as.

2 комментария :

  1. А почему не использовать AMO?

    ОтветитьУдалить
  2. Я не вижу особой разницы, в AMO надо использовать специальные объекты, а я пошел по пути формирования кода в XMLA. Так что думаю кому, что удобнее. Если есть примеры разбиения на партиции с помощью AMO, с удовольствием бы посмотрел.

    ОтветитьУдалить