0

我有带有分析表格模型的 SSAS 服务器。它有几个维度和事实表。

我想为处理维度/事实表创建动态 XMLA 代码。使用 SSMS,我可以编写示例 XMLA,如下所示:

<Process xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
  <Type>ProcessFull</Type>
  <Object>
    <DatabaseID>DB1</DatabaseID>
    <DimensionID>FactTable1_cd8ad531-34f1-42df-b34e-a535eed297c1</DimensionID>
  </Object>
</Process>

我在哪里可以找到 SSAS 上模型的 DatabaseID / DimensionID 信息,以便我可以将其用于动态脚本?是否有任何 DMV(或类似的)可以向我返回此类信息?

4

1 回答 1

0

在 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。所以我不推荐链接服务器。

于 2015-11-25T16:01:25.167 回答