Чтение метаданных служб анализа SQL - PullRequest
5 голосов
/ 15 октября 2010

В моем кубе 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';

, который равен .

I 'Мы опробовали два метода для опроса куба.Во-первых, используя пространство имен 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

Все вышеперечисленное взято непосредственно из рабочего кода (хотя и сокращено до минимума для целей постановки вопроса).Все отлично работает с любым кодом, за единственным исключением, что я не могу «видеть» ни один из моих скрытых объектов, таких как меры.Я мог бы использовать сырой MDX, который я могу извлечь из базы данных, используя второй метод.(Серьезно) недостаток в том, что мне придется самому разбирать его, что было бы настоящим убийством. есть способ добраться до реальных объектов без необходимости прыгать через столько обручей.

Спасибо!

1 Ответ

2 голосов
/ 19 октября 2010

Насколько я знаю, нет способа получить скрытые меры с объектными моделями ADOMD.Вы должны использовать XML / A и иметь дело с полученным XML.

Другое решение, которое я бы также рекомендовал, - это использование Perspectives вместо непосредственного сокрытия мер.Как вы можете знать или догадаться, Perspectives используется для создания подмножества куба путем скрытия членов.Таким образом, вы можете получить доступ ко всем показателям с помощью объектной модели ADOMD и позволить своим пользователям видеть только элементы куба, включенного в текущий Perspective.

...