如何通过ADOMD获取Analysis service数据库的所有的calculations成员?1)我通过元数据,如下代码,有两个问题,一是设计本身的measure和calculation混在一起无法判断哪个是哪个
二是,添加calculation的时候,设置visible为false,在数据库本身视图上看不到,代码也获取不到
foreach (Measure m in con.Cubes[7].Measures)
                {
                    string s = m.Name;
                }2)通过SELECT [Measures].ALLMEMBERS ON 0
        FROM [SupplyChain]
和第一种情况记本类似

解决方案 »

  1.   

    可以用GetSchemaDataSet方法取元数据,返回一个dataset后如果是计算列则EXPRESSION字段非空.由此可以判断是否calculations成员参考using (AdomdConnection conn = new AdomdConnection())
            {
                conn.ConnectionString = "Provider=MSOLAP;Persist Security Info=false;Initial Catalog=TestOlap;Data Source=http://localhost/olap/msmdpump.dll";
                conn.ShowHiddenObjects = true;
                conn.Open();
                string[] strRestriction = new string[] { "TestOlap", null, null };
                System.Data.DataSet ds = conn.GetSchemaDataSet(AdomdSchemaGuid.Measures, strRestriction);            return ds;
            }关于隐藏的成员,常规办法貌似都是拿不到的,包括conn.ShowHiddenObjects = true;也没有用.
    但是
    conn.GetSchemaDataSet(AdomdSchemaGuid.XmlMetadata, strRestriction);这个参数返回的metadata中可以看到计算成员的定义,这个metadata作为整个xml放入datatable的一个字段中,你有必要的话可以分析这个字段的xml对象.