我的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(或类似的)可以返回这些信息?
答案 0 :(得分:0)
在SSIS中创建Analysis Services连接管理器。然后在SSIS中创建一个新的C#脚本任务,并添加对AMO(Microsoft.AnalysisServices)的引用。我通常选择Add Reference ...浏览...然后粘贴&#34; C:\ Windows \ assembly \ GAC_MSIL \ Microsoft.AnalysisServices \&#34;然后查找将在我将部署此SSIS包的服务器上安装的版本。然后使用Microsoft.AnalysisServices添加&#34;&#34;到你的代码顶部。这是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);
我不知道如何使用DMV针对SSAS Tabular干净地获取数据库ID,而不是通过粉碎一堆XML。所以我不推荐链接服务器。