1

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

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

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 的情况下检索成员列表?

4

1 回答 1

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
}
于 2013-08-14T17:11:12.230 回答