我的 SSAS 多维数据集中有许多对象,其中许多对象被创建为不可见。例如:
CREATE MEMBER CURRENTCUBE.[Measures].[Latency Backcolor]
AS CASE
WHEN [Average Latency] > [Web Alert] THEN 6384849
WHEN [Average Latency] > [Web Warn] THEN 4577517
ELSE IIF ( [measures].[Query count] > NULL, 14876123, null)
END, VISIBLE = 0;
这是不可见的并且:
CREATE MEMBER CURRENTCUBE.[Measures].[Average Latency]
AS IIF ([Measures].[Query Count] > 0, [Measures].[Total Ms] / [Measures].[Query Count], null),
FORMAT_STRING = "#,##0.00000;-#,##0.00000",
BACK_COLOR = [Latency Backcolor],
VISIBLE = 1,
DISPLAY_FOLDER = 'Overall',
ASSOCIATED_MEASURE_GROUP = 'Fact Raw FD';
哪个是。
我尝试了两种询问立方体的方法。首先,使用 Microsoft.AnalysisServices.AdomdClient
命名空间。例如:
using Microsoft.AnalysisServices.AdomdClient;
var _connection = new AdomdConnection
{
ConnectionString = "Data Source=localhost;User ID=me;Password=secret;Initial Catalog=dbname",
ShowHiddenObjects = true
};
_connection.Open();
CubeDef _cube = _connection.Cubes["MyCube"];
// _cube.Measures
我还尝试了 Microsoft.AnalysisServices
命名空间。例如:
using Microsoft.AnalysisServices;
Server server = new Server();
server.Connect( "Data Source=localhost;User ID=me;Password=secret" );
Database database = server.Databases.GetByName( "dbname" );
Cube cube = database.Cubes.FindByName( "MyCube" );
// cube.Dimensions
// cube.MeasureGroups[].Measures
以上所有内容均直接取自工作代码(尽管为了提出问题而减少到最低限度)。任何代码都可以完美运行,唯一的异常(exception)是我无法“看到”任何隐藏的对象,例如“度量”。我可以使用原始MDX,我可以使用第二种技术从数据库中检索它。 (严重的)缺点是我必须自己解析它,这将是一个真正的嗡嗡声。 必须有一种方法可以到达实际的对象,而不必跳过这么多的麻烦。
谢谢!
最佳答案
据我所知,没有办法使用 ADOMD 对象模型获取隐藏度量。您必须使用 XML/A 并处理生成的 XML。
我还推荐的另一个解决方案是使用Perspectives
而不是直接隐藏度量。您可能知道或猜到,Perspectives
用于通过隐藏成员来创建多维数据集的子集。通过这种方式,您可以使用 ADOMD 对象模型访问所有度量,并让您的用户仅看到当前透视图
中包含的多维数据集的成员。
关于sql-server - 读取 SQL 分析服务元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3939462/