Обработать SSAS-куб с помощью c #-кода

#c# #ssas

#c# #ssas

Вопрос:

Я хочу использовать SSAS cube для получения данных из Dynamics AX и передачи данных в сводную сетку wpf Devexpress. Я использую следующий порядок в AX для создания куба: Перспектива -> Просмотр->Запрос(с аргументами) Теперь, когда я каждый раз меняю аргументы запроса, мне приходится обрабатывать куб вручную и отображать данные. Я хочу, чтобы этот процесс выполнялся с помощью кода на c # автоматически. я попробовал приведенный ниже код

 Server server = new Server();
server.Connect(cubeConnectionString);

Database database = server.Databases.FindByName(databaseName);
Cube cube = database.Cubes.FindByName(cubeName);

cube.Process(ProcessType.ProcessFull);
  

но это не работает.
Кто-нибудь может помочь??

Комментарии:

1. Я предлагаю вам также открыть тему на форуме поддержки devexpress

2. Вы пишете «но это не работает». Трудно угадать ответ. Что вы подразумеваете под этим предложением? Ваш код не компилируется? Вы получаете ошибки при его выполнении? Какие сообщения об ошибках? Вы не получаете никаких ошибок и предупреждений, но данных нет? Или в кубе есть неправильные или отсутствующие данные?

Ответ №1:

Я не знаю, что за ошибку вы получаете. Для обработки cube с C # используемый вами код кажется правильным, но, возможно, вы что-то пропустили в строке подключения. Для справки вы можете загрузить образец проекта, представленный по этой ссылке на мой блог:

Динамически обрабатывать куб на C#

Код, который я использовал для обработки моей базы данных cube, похож на приведенный ниже…

  Server server = new Server();

 server.Connect("Data source=YourSSASServerName;Timeout=7200000;Integrated Security=SSPI");

 Database database = server.Databases.FindByName("YourCubeDBName");

 database.Process(ProcessType.ProcessFull);
  

Комментарии:

1. Я внедрил упомянутый код, и он работает, но в случае возникновения ошибки на уровне базы данных, в моем случае источник данных был недоступен, функция не выдает никакой ошибки или исключения. Не могли бы вы, пожалуйста, предложить по этому поводу.

Ответ №2:

Я знаю, что этому вопросу несколько лет, но недавно я разработал решение для этого. Я наткнулся на этот вопрос, когда пытался решить проблему самостоятельно.

Сначала проверьте свои разрешения, посмотрите, можете ли вы обработать его через SSMS, но я предполагаю, что вы это уже сделали.

Второй способ заключается в использовании правильных библиотек. Вам следует использовать две библиотеки:

  • Майкрософт.Службы анализа и
  • Майкрософт.AnalysisServices.Core

Что касается меня, я использовал версию 14.x обоих, и каждая библиотека dll должна иметь одинаковый номер версии

Серверный объект, который вы создаете, на самом деле является Microsoft.Услуги анализа.Серверу и этому классу нужна Microsoft.AnalysisServices.Core.Server см. https://learn.microsoft.com/en-us/dotnet/api/microsoft.analysisservices.server?view=analysisservices-dotnet

Документ в https://learn.microsoft.com/en-us/dotnet/api/microsoft.analysisservices?view=analysisservices-dotnet также подчеркивается необходимость использования обеих библиотек.

Майкрософт.AnalysisServices.Core.Server — это абстрактный класс, поэтому вы не сможете создать его экземпляр, вот почему вы используете Microsoft.Службы анализа.Сервер. Смотрите https://learn.microsoft.com/en-us/dotnet/api/microsoft.analysisservices.core.server?view=analysisservices-dotnet

Сегодня вам нужно будет использовать dotnet 4.x, я не думаю, что .Net Core позволит вам использовать эти библиотеки (я могу ошибаться). У меня не получилось использовать .Net Core, жаловался на ‘WindowsImpersonationContext’

В итоге у меня сработал следующий код…

 using Microsoft.AnalysisServices;
using Microsoft.AnalysisServices.Core;

void Main()
{

Microsoft.AnalysisServices.Server server = new Microsoft.AnalysisServices.Server();

server.Connect("servername") ;

Microsoft.AnalysisServices.Database db = server.Databases.FindByName("SSAS_DBName");

Microsoft.AnalysisServices.Cube cube = db.Cubes.FindByName("CubeName");

cube.Process( ProcessType.ProcessFull ); 

}