我需要使用.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的情况下检索成员列表?
答案 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
}