我已经创建了一个带有SSIS包的数据仓库的ETL设置。在最后一步,即"Analysis处理任务编辑器“之前,一切都很正常。
每当我添加多维数据集并按ok键时,就会得到以下错误:
“方法未找到:"'Void Microsoft.AnalysisServices.Commands.ProcessCommand.set_Type(Microsoft.AnalysisServices.ProcessType)'.‘
我怀疑DLL存在一些问题,但我不确定是哪个问题。我在我的Server安装(C:\程序文件(x86)\Microsoft \120\SDK\Assemblies)下找到了一个x86,我在Visual安装文件夹中没有找到它。
发布于 2017-07-21 11:10:59
我找到了一个解决办法。
我试图用AdventureWorks数据集重现问题,以验证问题是否是由于.dll而不是我的多维数据集或其他任何东西造成的。
因此,我从AdventureWorks数据集创建了一个新的OLTP & DWH和cube,并创建了一个新的SSIS项目,其中唯一的步骤就是处理多维数据集。
通过这个设置,我没有得到与我在原始项目上相同的错误,看起来,.dll没有什么问题吗?
不过,我也尝试将目标服务器和多维数据集更改为原来的服务器和多维数据集,令我感到惊讶的是,它成功了!
因此,我保存了这个包,并将它导入到我原来的项目中,并从那里删除了这个包,它就可以工作了。
编辑:也请参阅Pavel的所有者解决方案。
奇怪的是,如果我们在项目部署模式下创建新的SSIS项目,退出2017年版本,并将其部署到我们2016年的SSIS服务上--所有这些都运行得非常好。所以..。我们只需要迁移到项目部署模式))-- Pavel
发布于 2017-07-19 09:31:48
我们也有同样的问题。
有趣的是:您可以尝试将您的项目兼容性切换到Server,然后正常创建处理任务,成功地单击OK和其他内容(这真是奇迹!),然后切换回所需的版本并进行部署。
但是,如果您在同一个包中有脚本任务,那么您可以尝试其他解决方法(我现在实际上正在使用)。使用脚本任务来填充"Analysis“的变量(在我的示例中是User::维度DimensionsProcessingCommand)。它虽然不太复杂,但在未来非常有用。
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);在我们的DEV机器上是从头开始安装的: SQL Server 2016,Visual Studio 2015,SSDT 17.1,当我们试图在Server 2016兼容性下开发一些SSIS包时,我们遇到了很多问题.所以我们就停止计算了。GAC被谷歌搜索并来回调整,没有任何结果。微软的DEV环境看起来很有问题.如果你试图创建一个13.0以下的版本或者更低的版本,你就会崩溃。
发布于 2017-07-17 11:44:26
这 MS论坛帖子有以下建议。
如果存在,请将以下文件夹从GAC剪切并粘贴到其他地方。
C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.AnalysisServices.DeploymentEngine
然后,重建这个项目。
https://stackoverflow.com/questions/45138292
复制相似问题