通过c#代码处理SSAS多维数据集

时间:2014-07-04 13:33:30

标签: c# ssas

我想使用SSAS多维数据集从Dynamics AX获取数据并将数据传递给wpf Devexpress PivotGrid。 我在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);

但它不起作用。 任何人都可以帮忙??

2 个答案:

答案 0 :(得分:2)

我不知道你得到的错误是什么。要从C#处理多维数据集,您使用的代码似乎是正确的,但您可能错过了连接字符串中的某些内容。如需参考,您可以下载此链接中提供的示例项目。

Process Cube dynamically in c#

我用来处理我的多维数据集数据库的代码如下所示......

 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 :(得分:0)

我知道这个问题已有几年历史了,但是我最近开发了一个解决方案。尝试自己解决问题时,我偶然发现了这个问题。

首先,检查您的权限,看看是否可以通过SSMS处理它,但是我想您已经完成了。

第二个是使用正确的库。您应该使用的两个库是:

  • Microsoft.AnalysisServices和
  • Microsoft.AnalysisServices.Core

对我来说,我都使用了14.x版本,每个dll需要具有相同的版本号

您创建的Server对象实际上是Microsoft.AnalysisServices.Server,该类需要Microsoft.AnalysisServices.Core.Server,请参见https://docs.microsoft.com/en-us/dotnet/api/microsoft.analysisservices.server?view=analysisservices-dotnet

https://docs.microsoft.com/en-us/dotnet/api/microsoft.analysisservices?view=analysisservices-dotnet处的doco还强调了同时使用这两个库的必要性。

Microsoft.AnalysisServices.Core.Server是一个抽象类,因此您无法实例化它,这就是使用Microsoft.AnalysisServices.Server的原因。参见https://docs.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 ); 

}