2010-10-15 5 views
5

Ich habe eine Reihe von Objekten in meinem SSAS-Cube, von denen viele erstellt wurden, um unsichtbar zu sein. Zum Beispiel:SQL Analysis Services-Metadaten lesen

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; 

das ist nicht sichtbar und:

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'; 

die ist.

Ich habe zwei Methoden zur Abfrage des Cubes ausprobiert. Zuerst den Namespace Microsoft.AnalysisServices.AdomdClient verwenden. Zum Beispiel:

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 

Ich habe auch versucht, den Microsoft.AnalysisServices Namespace. Zum Beispiel:

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 

Alle oben genannten wird direkt vom Arbeits Code genommen (obwohl die Frage zu stellen für die Zwecke auf das absolute Minimum reduziert). Alles funktioniert perfekt mit jedem Code, mit der einzigen Ausnahme, dass ich keines meiner versteckten Objekte, wie "Measures", "sehen" kann. I könnte die rohe MDX verwenden, die ich aus der Datenbank mit der zweiten Technik abrufen kann. Die (ernste) schlechte Seite ist, dass ich es selbst analysieren muss, was ein echter Buzz-Kill wäre. Es gibt bekommen zu einem Weg, um die tatsächlichen Objekte zu bekommen, ohne durch so viele Reifen springen müssen.

Danke!

Antwort

2

Soweit ich weiß, gibt es keine Möglichkeit, versteckte Maßnahmen mit ADOMD-Objektmodellen zu bekommen. Sie müssen XML/A verwenden und sich mit dem resultierenden XML befassen.

Eine andere Lösung, die ich auch empfehlen würde, ist die Verwendung von Perspectives anstatt Maßnahmen direkt zu verstecken. Wie Sie vielleicht wissen oder schätzen, wird Perspectives zum Erstellen einer Teilmenge des Cubes verwendet, indem Elemente ausgeblendet werden. Auf diese Weise können Sie auf alle Kennzahlen mit dem ADOMD-Objektmodell zugreifen und Ihre Benutzer nur Mitglieder des Cubes anzeigen lassen, die in der aktuellen Perspective enthalten sind.