在 SSIS 中创建 Analysis Services 连接管理器。然后在 SSIS 中创建一个新的 C# 脚本任务并添加对 AMO (Microsoft.AnalysisServices) 的引用。我通常通过选择添加引用...浏览...然后粘贴“C:\Windows\assembly\GAC_MSIL\Microsoft.AnalysisServices\”然后查找将安装在我将部署此 SSIS 的服务器上的版本包裹。然后添加“使用 Microsoft.AnalysisServices;” 到代码的顶部。这是 Main() 函数:
public void Main()
{
// Get Server and Database name from DTS connection object
string sServer = "";
string sDatabase = "";
foreach (ConnectionManager oConn in this.Dts.Connections)
{
if (oConn.CreationName.StartsWith("MSOLAP"))
{
sServer = (string)oConn.Properties["ServerName"].GetValue(oConn);
sDatabase = (string)oConn.Properties["InitialCatalog"].GetValue(oConn);
break;
}
}
if (string.IsNullOrEmpty(sServer) || string.IsNullOrEmpty(sDatabase))
{
Dts.TaskResult = (int)ScriptResults.Failure;
throw new Exception("Could not find or parse the SSAS connection string");
}
Server oServer = new Server();
oServer.Connect(sServer);
Database oDB = oServer.Databases.FindByName(sDatabase);
if (oDB == null)
{
oServer.Disconnect();
Dts.TaskResult = (int)ScriptResults.Failure;
throw new Exception("Did not find expected SSAS database: " + sDatabase);
}
Dimension dim = oDB.Dimensions.GetByName("Employee");
string sDimensionID = dim.ID;
string sDatabaseID = oDB.ID;
MessageBox.Show(sDatabaseID + " - " + sDimensionID);
oServer.Disconnect();
Dts.TaskResult = (int)ScriptResults.Success;
}
顺便说一句,我建议不要乱建 XMLA。只需使用 AMO 进行处理:
dim.Process(ProcessType.ProcessFull);
除了粉碎一堆 XML 之外,我不知道如何使用针对 SSAS 表格的 DMV 干净地获取数据库 ID。所以我不推荐链接服务器。