Benutzer mit den meisten Antworten
ADOMD.NET Auslesen der Kataloge und deren Cubes klappt nicht

Frage
-
Hallo ich habe ein kleines Problem beim Auslesen der SchemaInformation von AnlysisServices.
Ich möchte alle verfügbaren Kataloge eines Servers auslesen und dann für jeden Kataloge seine Cubes. Dafür habe ich folgenden Code geschrieben. Das Auslesen aller verfügbaren Kataloge geht. Nur aber wenn ich versuche für einen Katalog seine Cubes auszulesen, werden diese nicht gefunden.
AdomdConnection conn = new AdomdConnection(); conn.ConnectionString = "DataSource=.\\RASQL;Provider=MSOLAP;"; conn.Open(); //DataSet für alle verfügbaren Kataloge DataSet catalogs = conn.GetSchemaDataSet(AdomdSchemaGuid.Catalogs, null); DataTable schemaTable = catalogs.Tables[0]; //Auslesen der Namen der Kataloge foreach (DataRow row in schemaTable.Rows) { string s = row["CATALOG_NAME"].ToString(); //erstelle eine Restriktion AdomdRestrictionCollection rest = new AdomdRestrictionCollection(); rest.Add(new AdomdRestriction("CATALOG_NAME", s)); //DataSet für alle Cubes des aktuellen Katalagos DataSet cubes = conn.GetSchemaDataSet("MDSCHEMA_CUBES", rest); DataTable smtC = cubes.Tables[0]; //Auslesen der Namen der Cubes im Katalog foreach (DataRow rc in smtC.Rows) { string b = rc["CUBE_NAME"].ToString(); } } conn.Close();
Antworten
-
Hallo,
welche Version von SSAS nutzt Du? Wenn es 2008 oder höher ist, kannst Du zum Testen direkt die DMV abfragen, um zu sehen, wann Du welches Ergebnis erhälst.
SELECT * FROM $SYSTEM.MDSCHEMA_CUBES
Ergebnis ist, das Du nur die Cubes aufgelistet, die in der Datenbank enthalten sind, ín der Du gerade angemeldet bist. Du kannst die Cubes nicht Datenbankübergreifend abfragen, das geht nicht.
Das einfachste ist, wenn Du vor dem Abfragen der Cubes die Datenbank wechselst, das geht mitt conn.ChangeDatabase(s):
AdomdConnection conn = new AdomdConnection(); conn.ConnectionString = "Data Source=.\\RASQL;"; conn.Open(); //DataSet für alle verfügbaren Kataloge DataSet catalogs = conn.GetSchemaDataSet(AdomdSchemaGuid.Catalogs, null); DataTable schemaTable = catalogs.Tables[0]; //Auslesen der Namen der Kataloge foreach (DataRow row in schemaTable.Rows) { string s = row["CATALOG_NAME"].ToString(); //erstelle eine Restriktion AdomdRestrictionCollection rest = new AdomdRestrictionCollection(); rest.Add(new AdomdRestriction("CATALOG_NAME", s)); //Datenbank wechseln, um Cubes zu lesen. conn.ChangeDatabase(s); //DataSet für alle Cubes des aktuellen Katalagos DataSet cubes = conn.GetSchemaDataSet("MDSCHEMA_CUBES", rest); DataTable smtC = cubes.Tables[0]; //Auslesen der Namen der Cubes im Katalog foreach (DataRow rc in smtC.Rows) { string b = rc["CUBE_NAME"].ToString(); } } conn.Close();
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing- Als Antwort markiert Bender86 Donnerstag, 1. März 2012 09:33
Alle Antworten
-
Hallo,
welche Version von SSAS nutzt Du? Wenn es 2008 oder höher ist, kannst Du zum Testen direkt die DMV abfragen, um zu sehen, wann Du welches Ergebnis erhälst.
SELECT * FROM $SYSTEM.MDSCHEMA_CUBES
Ergebnis ist, das Du nur die Cubes aufgelistet, die in der Datenbank enthalten sind, ín der Du gerade angemeldet bist. Du kannst die Cubes nicht Datenbankübergreifend abfragen, das geht nicht.
Das einfachste ist, wenn Du vor dem Abfragen der Cubes die Datenbank wechselst, das geht mitt conn.ChangeDatabase(s):
AdomdConnection conn = new AdomdConnection(); conn.ConnectionString = "Data Source=.\\RASQL;"; conn.Open(); //DataSet für alle verfügbaren Kataloge DataSet catalogs = conn.GetSchemaDataSet(AdomdSchemaGuid.Catalogs, null); DataTable schemaTable = catalogs.Tables[0]; //Auslesen der Namen der Kataloge foreach (DataRow row in schemaTable.Rows) { string s = row["CATALOG_NAME"].ToString(); //erstelle eine Restriktion AdomdRestrictionCollection rest = new AdomdRestrictionCollection(); rest.Add(new AdomdRestriction("CATALOG_NAME", s)); //Datenbank wechseln, um Cubes zu lesen. conn.ChangeDatabase(s); //DataSet für alle Cubes des aktuellen Katalagos DataSet cubes = conn.GetSchemaDataSet("MDSCHEMA_CUBES", rest); DataTable smtC = cubes.Tables[0]; //Auslesen der Namen der Cubes im Katalog foreach (DataRow rc in smtC.Rows) { string b = rc["CUBE_NAME"].ToString(); } } conn.Close();
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing- Als Antwort markiert Bender86 Donnerstag, 1. März 2012 09:33
-
-
Wie ich schon schrieb, es gibt keine Möglichkeit Datenbank-übergreifend Informationen abzufragen. Selbst mit AMO müsstest Du durch alle vorhandene Datenbanken durch iterrieren und jedesmal prüfen.
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing