Automatisierung des SSAS Builds

5. Februar 2015

Automatisierte Builds zählen schon seit langem zum Standardarsenal der Softwareentwicklung. Leider ist der Weg dorthin für BI-Entwickler nicht immer einfach. In diesem Artikel geht’s um ein seltsames Verhalten beim automatisierten Bauen und Bereitstellen der SSAS-Projekte.

Das Problem tritt mit der Verwendung von .NET Assemblies in SSAS-Projekten (z.B. die Hilfsbibliothek aus dem Analysis Services Stored Procedure Project) auf. Als Beispiel habe ich eine Solution ASSPExample mit zwei leeren Projekten (SSAS und SSIS) erstellt.

Zur besseren Übersichtlichkeit lege ich die Assemblies im Unterordner ‘External’ ab.

Screenshot1

Das Bauen und Bereitstellen des leeren SSAS-Projekts aus Visual Studio, in dem nur die ASSP Assembly verwiesen wird, funktioniert einwandfrei. Zum automatisierten Bauen des SSAS-Projekts müssen wir devenv aus der Kommandozeile aufrufen, MSBuild versteht leider das Format der .dwproj-Dateien nicht.

"C:Program Files (x86)Microsoft Visual Studio 12.0Common7IDEdevenv.exe" ExampleSolution.sln /rebuild

Die Build-Artefakte werden unter MySSASProjectin abgelegt. Schon hier sieht das Zwischenergebnis seltsam aus. Das Verzeichnis ist keine 6 Kb groß, obwohl die ASSP.dll allein 216 Kb belegt. In binMySSASProject.asassemblylocations steht, dass die Assembly im Verzeichnis binASSP erwartet wird.

<Locations>

<Location>

<ID>ASSP</ID>

</Location>

</Locations>

Logischerweise klappt auch das Bereitstellen mit der Microsoft.AnalysisServices.Deployment.exe nicht.

"C:Program Files (x86)Microsoft SQL Server120ToolsBinnManagementStudioMicrosoft.AnalysisServices.Deployment.exe" MySSASProjectinMySSASProject.asdatabase /o:Create.xmla

bricht mit der Fehlermeldung "Error loading MySSASProject.asdatabase: Value cannot be null. Parameter name: path2" ab und produziert kein XMLA-Skript.

Das Problem liegt daran, dass devenv daran scheitert, die mit dem relativen Pfad verwiesene ASSP Assembly zu finden. Diese muss nämlich sowohl von der .dwproj relativ gesehen (für Visual Studio im interaktiven Modus), als auch von der .sln relativ gesehen (für devenv aus der Kommandozeile) auffindbar sein. Nach dem Kopieren von ASSPExampleMySSASProjectExternal nach ASSPExampleExternal funktioniert auch das automatisierte Erstellen des XMLA-Skripts einwandfrei.

Screenshot2

Das XMLA-Skript kann interaktiv aus SQL Server Management Studio oder automatisiert mit Ascmd  abgesetzt werden.

Mehr zum Thema automatisiertes Bauen und Deployment von SSAS Projekten:

Automate build and deployment of SSAS Cubes using MSBUILD

How to deploy an Analysis Services database using a script