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!