Показать сообщение отдельно
Старый 23.06.2009, 12:08   #1  
ATimTim is offline
ATimTim
Участник
 
395 / 13 (1) ++
Регистрация: 10.06.2004
Адрес: Питер
OLAP: проблема с программным процессингом измерений SSAS 2005
Коллеги, необходима ваша помощь в решении проблемы - при процессинге куба процессинг измерений не производится, если я не ошибаюсь

Исходные данные:

SSAS = 2005
DataSource = Oracle 10
Настроен reference на Microsoft.AnalysisServices.dll

Цель: для определенного куба программно запроцессить все его измерения

Ограничение:
1) по возможности, обойтись без XMLA, Command и т.д.
2) пока не предлагать пересоздание измерений

Проблема: Cтрока процессинга измерения приводит к исключению:
cubeDim.Process( Microsoft.AnalysisServices.ProcessType::ProcessUpdate ); //Эта строка приводит к исключению.
Причем, метод cubeDim.Process() пробовал использовать с различными параметрами ProcessType, так и без них - результат одинаково плачевный.




X++:
void processCubeDimensions()
{
  Microsoft.AnalysisServices.Server                    svr ;
  Microsoft.AnalysisServices.DatabaseCollection        dbc;
  Microsoft.AnalysisServices.Database                  db ;

  Microsoft.AnalysisServices.DimensionCollection       dimCollection ;
  Microsoft.AnalysisServices.Dimension                 dim ;

  Microsoft.AnalysisServices.DataSourceCollection      dsc;
  Microsoft.AnalysisServices.DataSource                ds;

  Microsoft.AnalysisServices.CubeCollection            cubeCollection;
  Microsoft.AnalysisServices.Cube                      maCube;

  Microsoft.AnalysisServices.CubeDimensionCollection   cubeDimCollection;
  Microsoft.AnalysisServices.Dimension                 cubeDim;
  System.Collections.IEnumerator                       ie;
  ;

   try
   {

     svr  = new Microsoft.AnalysisServices.Server();
     svr. Connect("Srv106");

    svr.BeginTransaction();
     if (svr !=null && svr.get_Connected())
     {
       dbc = svr.get_Databases();
       if (dbc)
       {
         db =  dbc.Find("Axapta BAS dat");
         dimCollection = db.get_Dimensions();
       }
     }

     dsc = db.get_DataSources();
     ds  = dsc.FindByName("TestOLAPFunc");

     cubeCollection =  db.get_Cubes();
     maCube = cubeCollection. FindByName("TestOLAPFunc");

     cubeDimCollection = maCube.get_Dimensions();
     ie = cubeDimCollection.GetEnumerator();
     while (ie.MoveNext())
     {
       cubeDim = ie.get_Current();
       info(cubeDim.get_Name());
       cubeDim.Process( Microsoft.AnalysisServices.ProcessType::ProcessUpdate );
       svr.CommitTransaction();
    }
  }
  catch
  {
    svr.RollbackTransaction();
  }

}
Краткое описание проблемы:

Инициализация всех объектов в коде происходит без ошибок.
Исключение возникает только при попытка запроцессить измерение.
Думал, что проблема в правах доступа, но пролистав роли

X++:
 rc = svr.get_Roles();
     ie = rc.GetEnumerator();

     while (ie.MoveNext())
     {
       r = ie.get_Current();
       info(r.get_Name());
     }

получил Administrators

Обновление измерений через интерфейс SQL BI Dev Studio производится без проблем.