Wer kennt nicht das Problem, dass man „wie die Jungfrau zum Kinde“ innerhalb der Firma plötzlich einen neuen Aufgabenbereich hat, oder man soll bei einem Kunden die Verwaltung eines SQL-Server Analysis Services übernehmen.
Um sich einen Überblick zu verschaffen, macht es Sinn die relevanten Informationen in einer relationalen Datenbank zu verwalten. Oftmals sind die SSAS-Datenbanken „historisch gewachsen“ und die Dokumentation der Cuberollen/Berechtigungen entweder veraltet oder gar nicht vorhanden.
Für alle die gerne eine Übersicht über Ihre Cubes und den enthaltenen Cuberollen haben möchten, stelle ich nun eine Möglichkeit dar, diese mit wenig Aufwand auszulesen und in Tabellen zu schreiben.
Als erstes erstellt man sich eine kleine Datenbank (10 MB Datenfilegröße sollten reichen). Um die Daten aus den SSAS-Datenbanken (Cubes) auslesen zu können, braucht man noch 2 Dinge:
- Linked Server (Anbieter: MSOLAP)
- ASSP-Assembly
Nun zum Linked Server:
Entweder per Script
oder über den Assistenten:
Bei den Sicherheitseinstellungen müsst kommt es darauf an, welche Rechte Ihr habt. Ich verwende hier im Beispiel meine eigenen, da ich Administratorrechte habe.
Bei den Serveroptionen ist es wichtig die 2 gelb markierten Punkte auf „True“ zu setzen, damit die Kommunikation auch funktioniert.
Nachdem der Linked Server eingerichtet ist, muss man noch ein Assembly einspielen. Das zu verwendende Assembly (ASSP – Analysis Services Stored Procedure) lässt sich am besten mittels XMLA einspielen (Siehe meinen BLOG Eintrag: http://blog.antares-is.de/sql-server/assp-analysis-services-stored-procedure-fehler-fuer-die-clr-assembly-muss-eine-hauptdatei-angegeben-sein/)
Finden könnt Ihr die XMLA-Files hier: https://asstoredprocedures.codeplex.com/releases/view/629272
Bitte achtet darauf, welche Version euer SQL-Server hat, damit Ihr das richtige *.xmla-File downloaded.
Das Assembly nicht in jede SSAS-Datenbank einspielen, sondern nur als Serverassembly:
Damit sind jetzt die Grundvoraussetzungen geschaffen, um die ersten Daten einmal auszulesen. Dies wird mittels openrowset und der Funktionalität ‚CALL ASSP.DiscoverXmlMetadataFull‘ durchgeführt.
Als erstes Beispiel lassen wir uns einmal alle Cubes anzeigen:
Aus der Ausgabe kann man sich nun die relevanten Daten in eine Tabelle in der neuen Datenbank schreiben lassen. Beispielhaft nehme ich einmal folgende Informationen:
- Parent_DatabaseID (Name der SSAS-Datenbank)
- Name (Name des Cubes)
- CreatedTimestamp (Erstellungsdatum)
- LastProcessed (letzte Aufbereitung)
- State (Status = Processed -> Aufbereitet)
- Collation
Hierzu erstelle nun eine kleine Tabelle:
Achtung: die Daten aus der Abfrage kommen alle als Datentyp „ntext“. Deshalb erstelle ich die Spalten als „nvarchar“, damit diese später einfacher gewandelt werden können.
die gesamte Abfrage zur Befüllung sieht also dann so aus:
Hier habe ich noch weitere Abfragen, mit denen entsprechende Informationen ausgelesen werden können.
Cuberollen:
Mit der where-Einschränkung bekommt man nur die Rollen aus einer bestimmten SSAS-Datenbank angezeigt. Je nach Anzahl der Datenbanken und den darin enthaltenen Cuberollen, macht es Sinn sich bei der Anzeige der Daten immer nur auf eine Datenbank zu konzentrieren. Für die Befüllung einer Tabelle würde ich diese weglassen.
Wer sich nun noch die berechtigten User innerhalb einer Cuberolle ansehen oder auch verwalten möchte, kann dies mit einer kleinen Erweiterung in der Cuberollenabfrage tun:
Oftmals sind die SSAS-Datenbanken „historisch gewachsen“ und die Dokumentation der Cuberollen/Berechtigungen entweder veraltet oder gar nicht vorhanden. Deshalb gibt noch weitere Möglichkeiten z. B. die Einschränkungen auf Dimensionen oder Attribute, Rechte auf die Datenbank oder den/die Cube/s , usw. auszulesen und in relationalen Tabellen zu schreiben.
Wenn Bedarf an dem gesamten Script besteht, bitte eine kurze Mail an info@antares-is.de oder hier einen Kommentar hinterlassen – dann lassen wir das Script zukommen.