AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 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 производится без проблем.
Старый 23.06.2009, 12:27   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
В цикле while() стоит svr.CommitTransaction(), но нет вызова BeginTransaction() после этого.
Может, в первый раз выполняется, а следующие итерации уже вылетаюти из-за транзакции?
__________________
Axapta v.3.0 sp5 kr2
Старый 23.06.2009, 12:33   #3  
ATimTim is offline
ATimTim
Участник
 
395 / 13 (1) ++
Регистрация: 10.06.2004
Адрес: Питер
Хм, поспешил и ошибся при форматировании кода
- в оригинале так :
X++:
 try
{   
  svr.BeginTransaction();
    // ...................
     while (ie.MoveNext())
     {
       cubeDim = ie.get_Current();
       info(cubeDim.get_Name());
       cubeDim.Process( Microsoft.AnalysisServices.ProcessType::ProcessUpdate );
     }
  svr.CommitTransaction();
}
catch
{
  svr.RollbackTransaction();
}
падает на cubeDim.Process( Microsoft.AnalysisServices.ProcessType::ProcessUpdate );
Старый 23.06.2009, 12:51   #4  
ATimTim is offline
ATimTim
Участник
 
395 / 13 (1) ++
Регистрация: 10.06.2004
Адрес: Питер
Немного переписал cacth для работы с CLR-исключениями :



X++:
System.Exception                                     ex;
  str                                                  excMsg; 
//.............................................................



atch (Exception::CLRError)
 {
  

 ex = ClrInterop::getLastException();
  if (ex)
  {
   excMsg = ex.get_Message();
   info(excMsg);
  }


  svr.RollbackTransaction();
 }
и получил ответ

Process is not a member of CubeDimension
Странно, а я ожидал объекты класса Dimension а не CubeDimension!
Старый 23.06.2009, 13:01   #5  
ATimTim is offline
ATimTim
Участник
 
395 / 13 (1) ++
Регистрация: 10.06.2004
Адрес: Питер
Вот так код заработал:

X++:
void CopyOfprocessCubeDimensions()
{
  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.CubeDimension             cubeDim;
  System.Collections.IEnumerator                       ie;
  System.Exception                                     ex;
  str                                                  excMsg;
  ;

   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();
       dim = cubeDim.get_Dimension();
       dim.Process( Microsoft.AnalysisServices.ProcessType::ProcessUpdate );
     }
     svr.CommitTransaction();
 }
 catch (Exception::CLRError)
 {
  ex = ClrInterop::getLastException();
  if (ex)
  {
   excMsg = ex.get_Message();
   info(excMsg);
  }
   
  
  svr.RollbackTransaction();
 }

}
Старый 23.06.2009, 14:44   #6  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Если нет предубеждений к использованию SSIS, можно адаптировать этот package
Я так и сделал
Но конечно гораздо кошернее будет, если заработает непосредственно из DAX
__________________
-ТСЯ или -ТЬСЯ ?
Старый 23.06.2009, 16:40   #7  
ATimTim is offline
ATimTim
Участник
 
395 / 13 (1) ++
Регистрация: 10.06.2004
Адрес: Питер
Цитата:
Сообщение от Vadik Посмотреть сообщение
Если нет предубеждений к использованию SSIS, можно адаптировать этот package
Я так и сделал
Но конечно гораздо кошернее будет, если заработает непосредственно из DAX
Сделал непосредственно из DAX, уже работает
Прикольно - пересчитывается и измерения и куб.
Теги
olap, ssas, процессинг

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблема с программным открытием форм ortin DAX: Функционал 8 16.11.2007 10:08
Почему не могут зайти пользователи Excel 2003 на OLAP 2005? mazzy DAX: Администрирование 4 30.08.2007 10:35
SQL 2005 и OLAP George Nordic DAX: Администрирование 9 21.03.2006 19:36
OLAP, проблема, ENUM в качестве аналитики z_av DAX: База знаний и проекты 1 22.07.2003 17:55
Проблема с подключением к OLAP серверу Andrew Besedin DAX: Администрирование 0 20.03.2002 12:06

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 10:54.