SSAS / AMO:如何获取属性的成员列表

时间:2013-08-06 21:12:52

标签: ssas xmla

我需要使用.NET 4项目中的AMO(Microsoft.AnalysisService.dll)检索特定维度/属性的成员列表。我该怎么做?

我可以连接到服务器,打开数据库并查看维度,但维度的层次结构集合通常为空,除了那些我们手动定义某些层次结构的维度。也就是说,不包括默认层次结构。

using Microsoft.AnalysisServices;

var server = new Server();
server.Connect("Data Source=myserver");

var db = server.Databases.FindByName("My Warehouse");
var instrumentDimension = db.Dimensions.FindByName("Instrument");
Console.WriteLine(instrumentDimension.Hierarchies.Count); // prints 0

转到多维数据集级别没有帮助,大多数CubeDimensions也有空的Hierarchies集合。

但是,如果在Management Studio中,我发出类似于此的XMLA查询:

<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">
  <RequestType>MDSCHEMA_MEMBERS</RequestType>
  <Restrictions>
    <RestrictionList xmlns="urn:schemas-microsoft-com:xml-analysis">
      <CATALOG_NAME>My Warehouse</CATALOG_NAME>
      <CUBE_NAME>My Cube</CUBE_NAME>
      <DIMENSION_UNIQUE_NAME>Instrument</DIMENSION_UNIQUE_NAME>
    </RestrictionList>
  </Restrictions>
  <Properties />
</Discover>

我的回答是用一个相当庞大的XML列出所有成员。 因此问题是:如何在不解析为XMLA的情况下检索成员列表?

1 个答案:

答案 0 :(得分:2)

您通过服务器连接(AMO)连接,这是用于管理或读取多维数据集结构的连接,就像您从BIDS那样。

如果要获取数据内容而不是多维数据集结构,则必须使用客户端连接(Microsoft.AnalysisServices.AdomdClient.AdomdConnection)。如果您有一个开放的客户端连接,例如clientCon,您可以访问MDSCHEMA_MEMBERS之类的架构,如下所示:

AdomdRestrictionCollection restrColl = new AdomdClient.AdomdRestrictionCollection();
restrColl.Add("CATALOG_NAME", "My Warehouse");
restrColl.Add("CUBE_NAME", "My Cube");
restrColl.Add("HIERARCHY_UNIQUE_NAME", "[MyDim].[MyHierarchyName]");
DataSet ds = clientCon.GetSchemaDataSet("MDSCHEMA_MEMBERS", restrColl);
foreach(var row in ds.Tables[0].Rows) {
    // do something with the data
}