阅读SQL Analysis Services元数据

Bil*_*3rd 5 sql-server ssas mdx adomd.net

我的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;
Run Code Online (Sandbox Code Playgroud)

这是可见的:

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';
Run Code Online (Sandbox Code Playgroud)

.

我试过两种方法来询问立方体.首先,使用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
Run Code Online (Sandbox Code Playgroud)

我也尝试过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
Run Code Online (Sandbox Code Playgroud)

以上所有内容都直接来自工作代码(尽管为了提出问题而减少到最低限度).一切都适用于任何代码,唯一的例外是我无法"看到"任何隐藏的对象,例如Measures.我可以使用原始MDX,我可以使用第二种技术从数据库中检索.(严重)失败的一面是我必须自己解析它,这将是一个真正的嗡嗡声.还有的是一种方式来获得实际的对象,而无需经历了这么多跳火圈.

谢谢!

小智 2

据我所知,没有办法使用 ADOMD 对象模型获取隐藏度量。您必须使用 XML/A 并处理生成的 XML。

我还推荐的另一个解决方案是使用Perspectives而不是直接隐藏措施。您可能知道或猜测,Perspectives用于通过隐藏成员来创建多维数据集的子集。通过这种方式,您可以使用 ADOMD 对象模型访问所有度量,并让您的用户仅看到当前Perspective.