Im Zuge der Ent­wick­lung von Cloud Tech­no­lo­gien und deren Vor­tei­len ist auch die Welt der Busi­ness Intel­li­gence (BI) im Wan­del. Tech­no­lo­gien wie Azure Syn­apse oder Azure Data Lake machen das Ver­ar­bei­ten und Spei­chern gro­ßer Daten­men­gen immer ein­fa­cher und schnel­ler. Auch die BI Welt ist nicht aus­ge­nom­men von die­ser Ent­wick­lung. Um den moder­nen Not­wen­dig­kei­ten von Schnel­lig­keit und Fle­xi­bi­li­tät zu ent­spre­chen müs­sen kon­kur­renz­fä­hige BI Lösun­gen ebenso fle­xi­bel und per­for­mant sein.

Beson­ders für Unter­neh­men, wel­che Mil­lio­nen von Daten­sät­zen ver­wal­ten und ver­ar­bei­ten müs­sen bie­tet sich eine BI Tech­no­lo­gie beson­ders an, Azure Ana­ly­sis Services.

Micro­soft hat als Welt­markt­füh­rer mit Power BI ein mäch­ti­ges Tool geschaf­fen, das den moder­nen Her­aus­for­de­run­gen trotzt und schnelle per­for­mante Erstel­lung von Reports und Berech­nun­gen mög­lich macht. Als Cloud­kom­po­nente zu Power BI ist Azure Ana­ly­sis Ser­vices eine ideale Ergän­zung zu Power BI und Power­Pi­vot in Excel.

Nach­dem Power BI aus einem Excel Plugin erwach­sen und die Ähn­lich­kei­ten erkenn­bar sind, ist es für viele Busi­ness Intel­li­gence Vete­ra­nen ein Leich­tes sich in Power BI zurecht zu fin­den. Jedoch kann es schwie­rig sein, ein ein­heit­li­ches Daten­mo­dell für das gesamte Unter­neh­men bereit­zu­stel­len, falls man nur mit Power BI arbei­tet. Auf­grund der gefor­der­ten Fle­xi­bi­li­tät kann jeder Mit­ar­bei­ter ein eige­nes Modell aus den für ihn zugäng­li­chen Daten erzeu­gen. Dies kann von Vor­teil sein und man kann neue inter­es­sante Wahr­hei­ten in den Unter­neh­mens­da­ten fin­den, für die monat­li­che Buch­hal­tungs­ab­rech­nung sollte dann aber doch eine rich­tige und nach­voll­zieh­bare Daten­grund­lage bestehen.

Dies ist ein Punkt, der durch Azure Ana­ly­sis Ser­vices weit­ge­hend ver­hin­dert wer­den kann. Das Modell wird dabei nicht lokal im RAM und Ver­ti­Paq Engine gespei­chert, son­dern in der Azure Cloud.  Damit erge­ben sich einige Vor­teile. Zuerst löst man das Pro­blem der will­kür­lich wach­sen­den Daten­mo­delle. Jeder Teil des Unter­neh­mens bekommt die Daten aus der glei­chen Quelle, wel­che leich­ter zu war­ten und zu bewirt­schaf­ten ist. Frü­her musste man, um dies zu errei­chen eine eigene On Pre­mise Lösung über SSIS errich­ten und ver­wal­ten. In der moder­nen Welt ist dies nicht mehr nötig, dank den Clou­d­an­ge­bo­ten von Micro­soft. Ein wei­te­rer Vor­teil von Azure Ana­ly­sis Ser­vices ist, die Fle­xi­bi­li­tät mit gleich­zei­ti­ger Gewähr­leis­tung der Dienste. Azure Ana­ly­sis Ser­vices bie­tet sowohl Ska­lier­bar­keit in die Höhe als auch in die Breite. Das heißt man kann den Arbeits­spei­cher, in Echt­zeit, nach oben ska­lie­ren (auf bis zu 400GB) und die Anzahl an Repli­ka­tio­nen erhö­hen. Damit kann man auch unter extre­men Las­ten eine flüs­sige Prä­sen­ta­tion und Berech­nung der Reports gewähr­leis­ten. Genauso wie man unter Last die Rechen­leis­tung erhö­hen kann, lässt sich Azure Ana­ly­sis Ser­vices auch bei gerin­gen Las­ten oder in der Nacht, wenn keine Abfra­gen an das Modell gestellt wer­den, run­ter­ska­lie­ren oder ganz pau­sie­ren. Getreu nach dem Motto „Only pay for what you use“.

Mit der Aus­la­ge­rung der Hard­ware in die Cloud spart man sich zusätz­lich, die Anschaf­fung von spe­zi­el­ler Hard­ware, wel­che unty­pisch für Daten­bank­ser­ver, viel RAM und eine schnelle CPU benö­ti­gen. Dafür aber von schnel­lem Lesen und Schrei­ben auf die Fest­platte nicht viel profitieren.

Ein wich­ti­ger Vor­teil von Azure Ana­ly­sis Ser­vices ist die Ver­wal­tung per Skript­spra­che. Es gibt für Modelle in Ana­ly­sis Ser­vices zwei Skript­spra­chen basie­rend auf XMLA (XML for Ana­ly­sis). Als ers­tes wäre Tabu­lar Object Model (TOM) zu nen­nen. Eine Erwei­te­rung der Ana­ly­sis Model Objects (AMO) Biblio­thek des .NET frame­works. Die Zweite ist TMSL, Tabu­lar Model Skrip­ting Lan­guage, eine auf JSON basie­rende Skript­spra­che. Beson­ders TMSL eig­net sich her­vor­ra­gend zu dem auto­ma­ti­schen Bereit­stel­len von Model­len und Ände­run­gen in Azure Ana­ly­sis Services.

Ver­knüpft man TMSL mit den Mög­lich­kei­ten von Power­Shell kann man die Azure Ana­ly­sis Ser­vices Instanz per ser­vice prin­ci­pal auto­ma­tisch mana­gen und auto­ma­ti­sches Deploy­ment der Modelle konfigurieren.

Das Modell für Azure Ana­ly­sis Ser­vices in liegt im JSON For­mat vor.

{
    "name": "adventureworks",
    "compatibilityLevel": 1200,
    "model": {
	"culture": "en-US",
	"dataSources": [
	{
            "name": "Adventure Works DB from SQL",
	    "connectionString": "Provider=SQLNCLI11.1;Data Source =localhost;
            Integrated Security=SSPI;Initial Catalog=AdventureWorksDW2014",
            "impersonationMode": "impersonateServiceAccount",
	    "annotations": [
	    {
		"name": "ConnectionEditUISource",
		"value" "SqlServer"
	    }
	    ]
	}
	],
        "tables": [
	{
	    "name": "Customer",
	    "columns" : [
	    {
		"name": "Customer Id",
		"dataType": "int64",
		"sourceColumn": "CustomerKey",
		"sourceProviderType": "Integer"
	    },
	.
	.
	.

Wenn man das Modell dahin­ge­hend bear­bei­tet hat, dass es bereit zum Release ist kann man es via TMSL Befehl bereitstellen.

$model = gc  ‘Pfad\zum\Modell’ -raw | ConvertFrom-Json
$tmsl ='{“createOrReplace”:{“object”:{“database”:””},”database”:{}}}’ | ConvertFrom-Json
$($tmsl.createOrReplace.object).database = “<Neuer Modellname>”
$($tmsl.createOrReplace).database = $model

Um TMSL Skripte auf Modelle im Azure Ana­ly­sis Ser­vices anzu­wen­den benö­tigt man nur den Ser­ver­na­men, wel­chen man im Azure Por­tal fin­det und das Invoke-ASCmd Cmdlet.

Um per ser­vice prin­ci­pal Ände­run­gen auf Azure Ana­ly­sis Ser­vices durch­füh­ren zu kön­nen muss man ihn gege­ben falls noch als Admin registrieren.

# Angaben zum Service Principal
$servicePrincipalApplicationId = "<Service Principal Applikations ID>"
$servicePrincipalApplicationTenantId = "<Tenant ID>"
$admin = "app:$($servicePrincipalApplicationId)@
              $($servicePrincipalApplicationTenantId)"

# Service Principal als Administrator des Azure Analysis Services festlegen
Set-AzAnalsisServiceServer -Name "<AAS Server Name"> `
    -ResourceGroupName "<Ressourcengruppe von AAS>" `
    -Administrator $admin

Danach kann man per Invoke-ASCmd TMSL Skripte an die Azure Ana­ly­sis Ser­vices Instanz abschicken.

Invoke-ASCmd -Server “asazure://<Region>.asazure.windows.net/<AAS Name>” -Query ($tmsl | ConvertTo-Json -Depth 25)
Analysis-Service-and-Power-BI-–-Lets-create-Reports-Bild3
Abbil­dung 1 Skript imple­men­tiert als Taks in Release Pipe­line in Azure DevOps

Für einen auto­ma­ti­sier­ten Release kann man das damit erstellte Power­Shell Skript als Task an eine Release Pipe­line in Azure DevOps einbinden.

Hat das Modell fer­tig­ge­stellt und bereit­ge­stellt lässt sich AAS ein­fach per Power BI abfragen.

Analysis-Service-and-Power-BI-–-Lets-create-Reports-Bild4
Abbil­dung 2 Power BI Abfrage