2010-10-15 17 views
5

Ho un numero di oggetti nel mio cubo SSAS, molti dei quali sono stati creati per essere invisibili. Ad esempio:Lettura dei metadati di SQL Analysis Services

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; 

quali è non visibile e:

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

che è.

Ho provato due metodi per interrogare il cubo. Innanzitutto, utilizzando lo spazio dei nomi Microsoft.AnalysisServices.AdomdClient. Per esempio:

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 

ho provato anche lo spazio dei nomi Microsoft.AnalysisServices. Ad esempio:

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 

Tutto quanto sopra è presa direttamente dal codice di lavoro (anche se ridotto al minimo indispensabile ai fini di porre la domanda). Tutto funziona perfettamente con entrambi i codici, con la sola eccezione che non riesco a "vedere" nessuno dei miei oggetti nascosti, come Measures. I potrebbe utilizzare l'MDX raw che posso recuperare dal database utilizzando la seconda tecnica. Il lato (gravemente negativo) è che dovrei analizzarlo da solo, il che sarebbe un vero e proprio buzz-kill. C'è ottenuto da per essere un modo per raggiungere gli oggetti reali senza dover passare attraverso così tanti cerchi.

Grazie!

risposta

2

Per quanto ne so, non c'è modo di ottenere misure nascoste con i modelli di oggetti ADOMD. Devi usare XML/A e gestire l'XML risultante.

Un'altra soluzione che vorrei raccomandare è usare Perspectives piuttosto che nascondere direttamente le misure. Come puoi sapere o indovinare, Perspectives viene utilizzato per creare sottoinsiemi del cubo nascondendo i membri. In questo modo è possibile accedere a tutte le misure con il modello di oggetti ADOMD e consentire agli utenti di visualizzare solo i membri del cubo inclusi nell'attuale Perspective.

Problemi correlati