Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssis 找不到方法:Microsoft.AnalysisServices_Ssis - Fatal编程技术网

Ssis 找不到方法:Microsoft.AnalysisServices

Ssis 找不到方法:Microsoft.AnalysisServices,ssis,Ssis,我已经为带有SSIS包的数据仓库创建了一个ETL设置。 在最后一步“AnalysisServices处理任务编辑器”之前,一切正常 每当我添加多维数据集并按“确定”时,都会出现以下错误: 未找到方法:“'Void Microsoft.AnalysisServices.Commands.ProcessCommand.set_Type(Microsoft.AnalysisServices.ProcessType)'” 我怀疑DLL有问题,但我不确定是哪个。 我在SQL Server安装(C:\Pro

我已经为带有SSIS包的数据仓库创建了一个ETL设置。 在最后一步“AnalysisServices处理任务编辑器”之前,一切正常

每当我添加多维数据集并按“确定”时,都会出现以下错误:

未找到方法:“'Void Microsoft.AnalysisServices.Commands.ProcessCommand.set_Type(Microsoft.AnalysisServices.ProcessType)'”

我怀疑DLL有问题,但我不确定是哪个。 我在SQL Server安装(C:\Program Files(x86)\Microsoft SQL Server\120\SDK\Assembly)下找到了一个
Microsoft.AnalysisServices.dll
我在我的Visual Studio安装文件夹中没有找到它。

MS论坛帖子有以下建议

如果存在,请将以下文件夹从GAC剪切并粘贴到其他位置

C:\Windows\Microsoft.NET\assembly\GAC\U MSIL\Microsoft.AnalysisServices.DeploymentEngine

然后,重建项目

  • 右键单击项目

  • 单击属性

  • 展开配置属性->选择部署

  • 在目标服务器上:输入\(确保SSAS服务器是多维SSAS实例)

  • 单击应用

  • 保存项目。重新启动IDE(SSDT)

  • 启动SSDT->选择项目->并重建解决方案\重建项目

  • 再次测试

  • 我们也有同样的问题

    有一件有趣的事情:您可以尝试将项目兼容性切换到SQL Server vNext,然后正常创建处理任务,成功地单击“确定”和其他内容(这真是一个奇迹!),然后切换回所需的版本并部署

    但是如果您在同一个包中有脚本任务,那么您可以尝试其他解决方法(我现在实际上正在使用)。使用脚本任务为“AnalysisServices执行DDL任务”填充变量(在我的示例中为User::DimensionsProcessingCommand)。这有点复杂,但在未来非常有用。

    public void Main()
    {
    布尔tstFire=false;
    Microsoft.AnalysisServices.Server myServer=新的Microsoft.AnalysisServices.Server();
    //从包中获取到SSAS数据库的连接
    ConnectionManager myConn=Dts.Connections[“SSAS”];
    //供将来使用的模板
    字符串ProcessingCommandTemplate=“XXXXXXX”;
    字符串myProcessingCommand=“”;
    //用于收集维度(不含重复项)的数组
    Dictionary AmodDictionary=新字典();
    字符串myServerName=myConn.ConnectionString;
    字符串myDatabaseName=myConn.Properties[“InitialCatalog”].GetValue(myConn.ToString();
    //连接到SSAS服务器实例
    Connect(myServer名称);
    Database amoDb=myServer.Databases.FindByName(myDatabaseName);
    //获取多维数据集中使用的所有维度
    foreach(amoDb.Cubes中的立方体amoCube)
    {
    foreach(立方体尺寸amoCube中的amoDimension.Dimensions)
    {
    如果(!amoDimDictionary.ContainsKey(amodiment.Dimension))
    {
    amoDimDictionary.Add(amodiment.Dimension,amoCube);
    }
    }
    }
    //启动XML捕获维度
    myServer.CaptureXml=true;
    foreach(维度amodDictionary.Keys中的维度amodedimension)
    {
    if(amodedimension.State==AnalysisState.Unprocessed)
    {
    amodimmension.Process(ProcessType.ProcessFull);
    }
    其他的
    {
    进程(ProcessType.ProcessUpdate);
    }
    }
    myServer.CaptureXml=false;
    //生成命令
    foreach(myServer.CaptureLog中的字符串strXML)
    {
    myProcessingCommand=myProcessingCommand+strXML.ToString();
    }
    myProcessingCommand=ProcessingCommandTemplate.Replace(“XXXXXXX”,myProcessingCommand);
    变量[“User::DimensionsProcessingCommand”]。值=myProcessingCommand.ToString();
    //要在VS 2015运行时查看的命令输出
    Dts.Events.FireInformation(1,“,Dts.Variables[“User::DimensionsProcessingCommand”].Value.ToString(),”,0,ref-tstFire);
    
    附言。 在我们的开发机器上从头开始安装:SQL Server 2016、Visual Studio 2015、SSDT 17.1 当我们试图在SQL Server 2016兼容性下开发一些SSIS包时,我们偶然发现了这么多问题……所以我们停止了计算。GAC被谷歌搜索并反复调整,没有任何结果。
    14.0 Microsoft DEV环境似乎有很多问题,如果您试图在13.0及更低版本下创建一些东西,就会出现问题。

    我找到了解决方法

    我试图用AdventureWorks数据集重现问题,以验证问题是由于.dll而不是我的多维数据集或任何其他原因造成的

    因此,我从AdventureWorks数据集中使用多维数据集创建了一个新的OLTP&DWH,并创建了一个新的SSIS项目,其中唯一的步骤就是处理多维数据集

    在这个设置中,我没有得到与我在原始项目中得到的相同的错误,似乎.dll没有任何问题

    然而,我也尝试将目标服务器和多维数据集更改为我原来的服务器和多维数据集,令我惊讶的是,它居然成功了

    所以我保存了这个包,并将它导入到我的原始项目中,然后从那里删除了这个包,它就可以工作了

    编辑:请参阅Pavel的Possibile解决方案


    奇怪的是,如果我们在项目部署模式下创建新的SSIS项目,请保留2017版,并将其部署到2016年的SSIS服务上-一切都很好。因此…我们只需要迁移到项目部署模式即可)-Pavel Botygin


    这似乎是因为VS-2015组件不支持部署版本

    • 转到项目->属性
    • 在配置中
          public void Main()
          {
              Boolean tstFire = false;
              Microsoft.AnalysisServices.Server myServer = new Microsoft.AnalysisServices.Server();
              //Get connection to SSAS database from package
              ConnectionManager myConn = Dts.Connections["SSAS"];
              //Template for future use
              String ProcessingCommandTemplate = "<Batch xmlns=\"http://schemas.microsoft.com/analysisservices/2003/engine\"><Parallel>XXXXXXX</Parallel></Batch>";
              String myProcessingCommand = "";
              //Array for gathering dimensions w/o duplicates
              Dictionary<Dimension, Cube> amoDimDictionary = new Dictionary<Dimension, Cube>();
      
              String myServerName = myConn.ConnectionString;
              String myDatabaseName = myConn.Properties["InitialCatalog"].GetValue(myConn).ToString();
              //Connect to SSAS server instance
              myServer.Connect(myServerName);
      
              Database amoDb = myServer.Databases.FindByName(myDatabaseName);
      
              //Get all dimensions used in cubes
              foreach (Cube amoCube in amoDb.Cubes)
              {
                      foreach (CubeDimension amoDimension in amoCube.Dimensions)
                  {
                      if (!amoDimDictionary.ContainsKey(amoDimension.Dimension))
                      {
                          amoDimDictionary.Add(amoDimension.Dimension, amoCube);
                      }
                  }
              }
      
              //Start XML capture Dimensions
              myServer.CaptureXml = true;
              foreach (Dimension amoDimension in amoDimDictionary.Keys)
              {
                  if (amoDimension.State == AnalysisState.Unprocessed)
                  {
                      amoDimension.Process(ProcessType.ProcessFull);
                  }
                  else
                  {
                      amoDimension.Process(ProcessType.ProcessUpdate);
                  }
              }
              myServer.CaptureXml = false;
      
              //Build command
              foreach (String strXML in myServer.CaptureLog)
              {
                  myProcessingCommand = myProcessingCommand + strXML.ToString();
              }
      
              myProcessingCommand = ProcessingCommandTemplate.Replace("XXXXXXX", myProcessingCommand);
              Dts.Variables["User::DimensionsProcessingCommand"].Value = myProcessingCommand.ToString();
              //Command output to see at runtime from VS 2015
              Dts.Events.FireInformation(1, "", Dts.Variables["User::DimensionsProcessingCommand"].Value.ToString(), "", 0, ref tstFire);