【问题标题】:Process SSAS cube through c# code通过c#代码处理SSAS多维数据集
【发布时间】:2014-07-04 13:33:30
【问题描述】:

我想使用 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);

但它不起作用。 谁能帮忙??

【问题讨论】:

  • 我建议你也可以在 devexpress 支持论坛上开一个帖子
  • 你写“但它不工作”。很难猜出答案。你这句话是什么意思?你的代码不能编译吗?执行时会出错吗?错误信息是什么?您是否没有收到任何错误和警告但没有数据?还是多维数据集中有错误或缺失的数据?

标签: c# ssas


【解决方案1】:

我不知道您遇到了什么错误。要从 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);

【讨论】:

    【解决方案2】:

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

    首先,检查您的权限,看看您是否可以通过 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 的文档还强调了使用这两个库的必要性。

    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 ); 
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多