Local Cubes werden schon immer von den Analysis Services angeboten. Hier ist interessant, dass der Cube von der Client Komponente „Analysis Services OLE DB Provider“ erstellt wird, welche hier angeboten wird und auch mit Excel installiert wird. Es gibt also sowas wie Analysis Services Express.  Um einen Local Cube zu erstellen ist kein SSAS Server notwendig. Man braucht das XMLA von der SSAS Datenbank. Chris Webb hat das schon hier beschrieben. CubeSlice, Bi-Lite, OlapCube und weitere BI Anbieter nutzen diese Funktionalität. Der Local Cube darf keine Partitionen oder Distinct Count Measures beinhalten.

Diese Prozedur erstellt eine Kopie von einem Server Cube. Es müssen die „Analysis Management Objects“ und „ADOMD.NET“ referenziert werden.

        Dim start As DateTime = Now
        ‚Erstelle das Server Object
        Dim Svr As New Microsoft.AnalysisServices.Server
        ‚Verbindung zum Server erstellen
        Svr.Connect(„localhost“)
        ‚Verbindung zur Datenbank
        Dim Db As Microsoft.AnalysisServices.Database = Svr.Databases.FindByName(„Fussball“)
        ‚Erstelle das Scripter Object
        Dim scripter As New Microsoft.AnalysisServices.Scripter
        ‚Erstelle die Script Info
        Dim scriptInfo As New Microsoft.AnalysisServices.ScriptInfo _
        (Db, Microsoft.AnalysisServices.ScriptAction.Create _
         , Microsoft.AnalysisServices.ScriptOptions.Default, False)
        ‚Das Scripter Object erwartet ein Array
        Dim scriptInfos() As Microsoft.AnalysisServices.ScriptInfo = {scriptInfo}
        ‚Der Stream
        Dim stream As New System.IO.StringWriter
        Dim writer As New System.Xml.XmlTextWriter(stream)
        ‚Das XMLA Scipt erstellen
        scripter.Script(scriptInfos, writer)
        ‚Dem XMLA Scipt das Process hinzufügen
        Dim strLocalCubeXMLA As String
        strLocalCubeXMLA = „<Batch xmlns=““http://schemas.microsoft.com/analysisservices/2003/engine„“>“
        strLocalCubeXMLA += stream.ToString
        strLocalCubeXMLA += „<Parallel><Process>“
        strLocalCubeXMLA += „<Object><DatabaseID>“ & Db.ID & „</DatabaseID></Object>“
        strLocalCubeXMLA += „<Type>ProcessFull</Type>“
        strLocalCubeXMLA += „<WriteBackTableCreation>UseExisting</WriteBackTableCreation>“
        strLocalCubeXMLA += „</Process></Parallel></Batch>“
        ‚Mit dem Local Cube verbinden
        Dim localSvr As New Microsoft.AnalysisServices.Server
        localSvr.Connect _
        (My.Computer.FileSystem.SpecialDirectories.MyDocuments & „\DerLocalCube.cub“)
        ‚Datenbanken löschen. Falls die Datei schon besteht, wird das Create nicht ausgeführt
        For i As Integer = localSvr.Databases.Count – 1 To 0 Step -1
            localSvr.Databases(i).Drop()
        Next i
        ‚Das XMLA ausführen
        localSvr.Execute(strLocalCubeXMLA)
        ‚Aufräumen
        stream.Dispose()
        localSvr.Disconnect() : localSvr.Dispose()
        Svr.Disconnect() : Svr.Dispose()

        MsgBox(„done in “ & (Now – start).ToString)



Advertisements