Announcement

Collapse
No announcement yet.

CLR mit Analysisverweis auf SQL 2008

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • CLR mit Analysisverweis auf SQL 2008

    Hi,
    folgendes Fehlermeldung tritt auf, wenn ich im relationalen Teil des SQL Servers ein Assembly mit Verweis auf die Microsoft.AnalysisServices.dll einbinden will:

    Die 'microsoft.analysisservices, version=10.0.0.0, culture=neutral, publickeytoken=89845dcd8080cc91.'-Assembly wurde im SQL-Katalog nicht gefunden. (.Net SqlClient Data Provider)

    das ist auch nachvollziehbar, da ich den SP1 installiert habe und die Version der Microsoft.AnalysisServices.dll eigentlich lautet 10.0.2531.0.

    Das Problem ist allerdings, dass ich im Visual Studio 2008 (SP1) als Verweis die DLL aus dem SQL Serververzeichnis hole (mit neuerer Version). Dennoch zeigt das VS in den Eigenschaften die Version 10.0.0.0 an, und auch das Setzen des Parameters "Spezifische Version" auf FALSE hilft nicht weiter.

    Wer kann mir weiterhelfen?

  • #2
    Hallo Chris,

    siehe MSDN: Supported .NET Framework Libraries
    AMO gehört nicht zu den supported Libraryies und befindet sich nicht einmal im GAC; wo sollte der SQL Server die finden?

    Wie Du in dem Artikel lesen kannst, musst Du AMO erst mal als Assembly importieren, dann könnte es gehen.
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Hallo Olaf,

      danke für den Hinweis. Allerdings lässt sich die AMO nicht als Assemby einbinden, da er mit folgender Meldung abbricht:


      Fehler bei CREATE ASSEMBLY, weil der 'Microsoft.AnalysisServices.DataItem'-Typ in der safe-Assembly 'Microsoft.AnalysisServices' das statische Feld 'NullProcessingPropertyName' aufweist. Attribute von statischen Feldern in safe-Assemblys müssen in Visual C# als 'readonly', in Visual Basic als ReadOnly oder in Visual C++ und Intermediate Language als 'initonly' gekennzeichnet werden.
      Warnung: Die SQL Server-Clientassembly 'microsoft.analysisservices, version=10.0.0.0, culture=neutral, publickeytoken=89845dcd8080cc91, processorarchitecture=msil.', die Sie registrieren, wurde nicht vollständig in einer Umgebung mit SQL Server als Host getestet. (Microsoft SQL Server, Fehler: 6211)

      Von daher bringt es mich leider nicht weiter.
      Wie kann ich sonst noch aus einem Frontend (arcplan), das lesen und schreibend auf den MSSQL Server und Analysis zugreifen kann, sonst aber keine weiteren Befehle (=Cubeaufbereitung) mitbringt, einen Cube oder dessen Dimensionen aufbereiten?


      Für einen Tipp, Gedankenanstoß bin ich Dir oder Euch sehr dankbar!

      Gruß Christian

      Comment


      • #4
        Hallo Christian,
        in der safe-Assembly
        Die Assembly sollte als unsafe eingebunden werden.

        einen Cube oder dessen Dimensionen aufbereiten?
        Wenn Du ein wenig googelst wirst Du ein paar Artikel zum Thema AMO + Clr Assembly im SQL Server finden und der allgemeine Konsens ist: War ein Experiment, es geht, aber für den praktischen Einsatz nicht zu gebrauchen.

        Ich kenne Deinen Cube nicht, aber je nach Größe kann es zwischen ein paar Minuten bishin zu ein paar Stunden dauern, bis ein Cube aufbereitet ist. Wenn man das über eine Clr in der relationalen DB aus anstarten, müsste man die ganze Zeit über die Connection offen halten, etc. Aus meiner Sicht nicht gerade der beste Weg.

        Auch kenne ich Dein restliches Szenario nicht. Ich erzählt dir einfach mal, wie es beim mir läuft.
        Ich habe ein (mehrere) Datawarehouse, bekomme regelmäßig Daten als Flatfiles geliefert, die dann geladen werden müssen.
        Dazu habe ich ein SSIS Paket erstellt, das zunächst die Flatfiles lädt, aufbereitet und ins Datawarehouse wegschreibt, halt ein klassischer ETL Prozess.
        Im gleichen SSIS Paket wird anschließend die Cube Aufbereitung angestoßen, zunächst nur mein Test-Cube (habe den Luxus genügend Speicherplatz zu haben), wenn der durch inkonsistente Daten (was ich eigentlich durchs ETL abfangen) fehl schlägt, wird abgebrochen und der produktive Cube bleibt unberührt; sonst wird der auch verarbeitet.
        Das alles läuft zeitgesteuert über einen SQL Server Agent Job vollautomatisch in der Nacht ab, wenn keiner auf den Cube zugreift.

        Wenn es nur darum geht, den Cube aufzubereiten, empfehle ich Dir ebenfalls ein SSIS Paket anzulegen.
        Dazu reicht es aus, ein Paket nur mit einem Task zur Cube Aufbereitung anzulegen, das in die MSDB zu laden, Job anzulegen und alles weitere läuft dann automatisch ab.

        Siehe z.B. auch:
        Process Analysis Services Objects with Integration Services
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          Hallo Olaf,
          da ich im Urlaub war, komme ich erst jetzt dazu, zu schreiben.
          Danke für Deine Hinweise. Das von Dir beschriebene Szenario wende ich bisher bei meinen Projekten auch an.

          In diesem speziellen Fall sollen allerdings Planwerte erfasst werden und dabei auch neue Dimensionselemente in den Cube kommen. Nach Erfassung der Planwerte im Frontend, werden sie auf Knopfdruck gespeichert und sollen dann in sämtlichen Auswertungen verfügbar sein.
          D.h. der Cube, genauer die Analysis Datenbank muss direkt wieder verarbeitet werden. Dies muss vom Frontend aus angestoßen werden (geht nicht periodisch).
          Da der Cube mit den Daten der letzten zwei Jahre befüllt, nur ca. 20 Sekunden zur vollständigen Aufbereitung benötigt, ist diese Nichtverfügbarzeit des Cubes für den Kunden (Aussage des Kunden) absolut nicht relevant.

          Daher benötige ich einen Weg, vom FE aus (welches eben nicht auf .NET Plattform basiert) einen Cube aufzubereiten. Unter Umständen lässt sich auch ein SSIS Paket mit der Cubeaufbereitung erstellen, dann müsste ich allerdings dem Kunden irgendwie begreiflich machen, dass im FE eine .exe (dtexec.exe) oder ggf. ein C# Programm aufgerufen wird. Das könnte der Knackpunkt sein, da es sich ein Kunde im Bankenumfeld handelt, mit entsprechend hohen Sicherheitsrestriktionen.

          Gruß Christian

          Comment


          • #6
            Hallo Christian,

            bei dem Szenario fallen mir einige Lösungsmöglichkeiten ein.

            a)
            Wenn die Cube Aufbereitung nur 20 sec. dauert, dann dürfte die Datenbasis nun wirklich nicht allzu groß sein.
            Warum greifst Du für Auswertungen nicht gleich auf die relationale Datenbank zu, das wird nicht länger dauern.
            Oder unterstützt das Frontend nur OLAP/MDX?

            b)
            Das Verarbeiten des Cube ist nur ein XMLA Kommando, um das Auszuführen wird nicht zwingend .NET und erst recht nicht AMO benötigt. Es gibt für die COM Welt auch noch den "Analysis Services 9.0 OLE DB Provider (SSAS)", der verwendet werden kann, um XMLA zu senden.
            Siehe: Analysis Services Data Access Interfaces (SSAS)

            Du könnest auch z.B. einen Linked Server auf die SSAS Datenbank anlegen und das XMLA über OpenQuery auf den LinkedServer absetzen.
            Siehe: Passing Queries from SQL Server to a Linked Analysis Server

            c)
            Das ganze ist ja ein klassisches WriteBack, mit dem ich zugegeben noch keine Erfahrungswerte habe.
            Wäre das nicht eine Lösung, die es quasi mit Board-Mitteln umgesetzt werden kann, sofern das FE es unterstützt?
            Siehe: Write-Enabled Dimensions

            d)
            Alternative zu c), wenn die Enterprise Edition verwendet wird (was ich bei einer Bank vermuten würde), dann hättest Du die Möglichkeit, den Speichertyp (StorageType) von MOLAP auf ROLAP (bzw. HOLAP) zu ändern und so nicht auf die Plandaten im Cube sondern direkt aus der Quelle zuzugreifen.
            Habe ich allerdings auch noch nicht versucht, wir haben nur die Standard Edition.
            Storage Modes in SSAS (MOLAP, ROLAP and HOLAP)
            Olaf Helper

            <Blog> <Xing>
            * cogito ergo sum * errare humanum est * quote erat demonstrandum *
            Wenn ich denke, ist das ein Fehler und das beweise ich täglich

            Comment


            • #7
              Hallo Olaf,

              danke für deine Tipps. Mit einem Linked Server auf den Analysis kann ich in der Procedur ein XMLA Statement an den Analysis senden. So kann ich den Cube aufbereiten. Die relationale Stored Procedure wird vom FrontEnd angestoßen. In dem Zuge konnte ich auch gleich eine weitere Prozedur erstellen, die mir im Analysis Datenbankrollen / bzw. Cuberollen anlegt. So kann das ganze vom Administrator der Anwendung gesteuert werden, ohne dass die IT wieder mit ins Boot muss und die Rollen anpassen muss.

              Für Dich noch als Info :
              Dein Punkt a) -> Arcplan kann auf nahezu alle Datenbanksysteme mit nativen Schnittstellen zugreifen (multidimensional und relational). Eine Konzernweite Konsolidierungslogik mit Innenumsatzeliminierung auf mehreren Hierarchiestufen ist aber mit einem Cube weniger aufwendig zu entwickeln als relational.

              Punkt c) -> Der Scharm an Arcplan ist die rückschreibefähigkeit in diese Datenbanksysteme. Allerdings steht das neue Element dann nur im Cube zur Verfügung und nicht im relationalen Stammdatenteil der Applikation, in dem User auf Gesellschaften berechtigt werden, ein Freigabeprozess implementiert ist etc...

              Punkt d) -> Mit Rolap haben wir kurzzeitig experimentiert, allerdings wurde es vom Handling aus dem FrontEnd heraus nicht besonders entwicklerfreundlich angesprochen und daher verworfen.

              Gruß Christian

              Comment


              • #8
                Hallo Christian,

                wir haben diese Woche den Team Foundation Server 2010 bekommen.
                Der baut auf Basis des OLTP regelmäßig ein Datawarehouse auf und für die Auswertungen wird dann ein Cube auf Basis des DWH aufbereitet.

                Das scheint zeitgesteuert abzulaufen, der Cube wird dabei immer nur als Update verarbeitet.
                Ein SSIS Paket gibt es nicht, das scheint alles der TFS Dienst zu erledigen.
                Das werde ich mir bei Gelegenheit genauer ansehen, wie das abläuft.

                Wäre auch eine Option, alle halbe Stunde nur ein Update laufen zu lassen und nur nachts einmal eine vollständige Verarbeitung.
                Olaf Helper

                <Blog> <Xing>
                * cogito ergo sum * errare humanum est * quote erat demonstrandum *
                Wenn ich denke, ist das ein Fehler und das beweise ich täglich

                Comment

                Working...
                X