我已经为包含SSIS包的数据仓库创建了ETL设置。 一切正常,直到最后一步是“Analysis Services处理任务编辑器”
每当我添加我的立方体并按下确定时,我都会收到以下错误:
“找不到方法:”'无效Microsoft.AnalysisServices.Commands.ProcessCommand.set_Type(Microsoft.AnalysisServices.ProcessType)'。
我怀疑DLL存在一些问题,但我不确定是哪个。
我在SQL Server安装下找到Microsoft.AnalysisServices.dll
(C:\ Program Files(x86)\ Microsoft SQL Server \ 120 \ SDK \ Assemblies)
我在Visual Studio安装文件夹中找不到它。
答案 0 :(得分:2)
我找到了解决方法。
我尝试使用AdventureWorks数据集重现问题,以验证问题是由于.dll而不是我的多维数据集或其他任何内容而发生的。
所以我创建了一个新的OLTP&来自AdventureWorks数据集的DWH with Cube并创建了一个新的SSIS项目,其中唯一的步骤是处理多维数据集。
通过这种设置,我没有得到与原始项目相同的错误,看起来,.dll没有任何问题?
但是我也尝试将目标服务器和多维数据集更改为原始服务器和多维数据集,令我惊讶的是它有效!
所以我保存了这个包并将其导入我的原始项目并从那里开始包装并且它有效。
编辑:请参阅Pavel的可能解决方案。奇怪的是,如果我们在项目部署模式下创建新的SSIS项目,请保留2017版本,并将其部署在我们的2016 SSIS服务上 - 一切正常。所以...我们只需要迁移到Project部署模式))) - Pavel Botygin
答案 1 :(得分:0)
This MS论坛帖子有以下建议。
如果存在,请将以下文件夹从GAC剪切并粘贴到其他位置。
C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.AnalysisServices.DeploymentEngine
然后,重建项目。
右键点击项目
点击属性
展开配置属性 - >选择部署
在目标服务器上:输入\< SSAS Instace名称> (确保SSAS服务器是多维SSAS实例)
点击“应用”
保存项目。重新启动IDE(SSDT)
启动SSDT - >选择项目 - >和重建的解决方案\重建项目。
再次测试。
答案 2 :(得分:0)
我们有同样的问题。
一件有趣的事情:您可以尝试将项目兼容性切换到SQL Server vNext,然后正常创建处理任务,成功单击“确定”和其他内容(这真是奇迹!),然后切换回所需版本并部署
但是如果你在同一个软件包中有脚本任务 - 那么你可以尝试其他的解决方法(我现在正在使用它)。使用脚本任务为“Analysis Services执行DDL任务”填充变量(在我的示例中为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);
P.S。 我们的DEV机器从头开始安装:SQL Server 2016,Visual Studio 2015,SSDT 17.1 当我们尝试在SQL Server 2016兼容性下开发一些SSIS包时 - 我们偶然发现了很多问题...所以我们只是停止计算它们。 GAC用Google搜索并来回调整,没有任何结果。 14.0 Microsoft DEV Environment看起来很麻烦......如果你尝试在13.0及更低版本下创建一些东西,它就会被破坏。
答案 3 :(得分:0)
这似乎是因为VS-2015组件不支持部署版本。