2009-06-23 9 views
11

Ich habe eine ziemlich standardisierte OLTP-normalisierte Datenbank und ich habe festgestellt, dass ich einige komplexe Abfragen, Durchschnittswerte, Standardabweichungen über verschiedene Dimensionen in den Daten machen muss.Was ist der beste Ansatz, um von der relationalen OLTP-Datenbank zum OLAP-Cube zu gelangen?

Ich habe mich also an SSAS und die Erstellung von OLAP-Cubes gewandt.

Um jedoch die Cubes zu erstellen, muss die Struktur meiner Datenquelle in einer 'Stern' oder 'Schneeflockenkonfiguration' sein (was ich glaube nicht, dass es jetzt ist).

Ist das normale Verfahren SSIS zu verwenden irgendeine Art von ETL-Prozess auf meiner primären OLTP-DB in einer anderen relationale DB zu tun, die in dem richtigen ‚Sterne‘ Konfiguration mit Fakten und Dimensionen sind, und dann diese DB als Datenquelle verwendet für die OLAP-Würfel?

Danke

Antwort

8

Ja, das ist die Grundidee. Sie nehmen Ihre hoch normalisierte OLTP-Datenbank und de-normalisieren sie in Cubes, um die Daten zu schneiden und zu würfeln und dann Berichte darüber zu präsentieren. Die logische Entwurfstechnik wird Dimensionsmodellierung genannt. Es gibt eine Menge guter Informationen über dimensional modeling über die Kimball Group. Ralph Kimballs books on the subject sind auch ausgezeichnet. Wenn Sie mehr über die BI-Tools selbst erfahren möchten, lesen Sie die Informationen zu SSIS, Analyseservices und mehr unter virtual labs.

5

Die Antwort ist: ja, aber.

Eine Dimension in SSAS hat Beziehungen zwischen Attributen, die eine Reihe von Feldern zum Filtern von Slice verwendet werden können. Diese Beziehungen können hierarchisch sein (mehr als eine Ebene tief - ein Attribut kann übergeordnete und untergeordnete Elemente haben. Sie können auch Drilldown-Pfade (in SSAS als Hierarchien bezeichnet) einrichten, die wie Attribute agieren, aber einen geführten Drilldown haben Um dies zu tun, müssen Sie Schlüssel in der Datenbank zur Verfügung haben, die in einer streng hierarchischen Beziehung leben (dh die Schlüssel können keine unscharfen Beziehungen haben, in denen ein Kind mehr als ein Elternteil haben kann.) Beachten Sie, dass dies nicht die ganze Geschichte ist

Diese Hierarchien können vom System aus einer flachen Datenstruktur erstellt oder durch eine Schneeflocke mit Beziehungen dargestellt werden, die in der zugrunde liegenden Datenquellensicht markiert sind (DSVs sind ein Teil der Cube-Metadaten) und kann sein verwendet, um Daten in einer ähnlichen Weise wie Datenbankansichten zu massieren).

Eine Schneeflocke ist ein 3NF-isch-Schema (es muss nicht unbedingt 3NF sein - Sie können Teile davon in der Praxis reduzieren), die nur 1: M-Beziehungen hat. SSAS kann einige andere Dimensionsstrukturen wie Eltern-Kind (Eltern-Kind-Beziehung mit einem rekursiven Self-Join) und M: M-Dimensionen (M: M-Beziehungen - genau wie sie klingen) unterstützen. Dimensionen dieses Typs sind findiger, aber möglicherweise nützlich für Sie.

Wenn Sie Schlüssel in Ihren Quelldaten haben, die eine äquivalente Datensemantik zu einer Schneeflocke haben, können Sie Ihren Cube möglicherweise durch eine Reihe von Datenbankansichten auf Ihrem Quellsystem füllen, die die zugrunde liegenden Daten in ausreichendem ein ähnliches Format für die Würfeldimensionierung (ich habe das schon mehrmals gemacht). Schemata, die häufig synthetische Schlüssel verwenden, sind dafür eher geeignet.

Wenn Ihr Anbieter oder andere Parteien Ihnen keine Ansichten zu Ihrer Quellendatenbank hinzufügen können, können Sie möglicherweise stattdessen eine Datenquellensicht verwenden. DSVs können virtuelle Tabellen namens "benannte Abfragen" haben, die aus einer Datenbankabfrage gefüllt werden.

Fakttabellen werden mit Dimensionen verknüpft. In SSAS2005 + können Sie verschiedene Faktentabellen bei verschiedenen Körnern innerhalb einer Dimension verknüpfen. Ich würde normalerweise nicht viel in einem Data Warehouse verwenden, aber diese Funktion könnte nützlich sein, wenn Sie versuchen, die Quelldaten zu verwenden, ohne sie zu stark massieren zu müssen.

Wenn dies nicht funktioniert, müssen Sie möglicherweise einen ETL-Prozess schreiben, um ein Stern- oder Schneeflockenschema zu füllen.

Einige Maßgaben:

  1. Würfel gemacht werden können in einem Echtzeit-Modus, in dem sie nur ausgeben, eine Abfrage zu den zugrunde liegenden Daten zu laufen. Dies birgt ein gewisses Risiko, ineffiziente Abfragen für Ihre Quelldaten zu verursachen. Es wird daher nicht empfohlen, es sei denn, Sie sind wirklich zuversichtlich, dass Sie wissen, was Sie tun.

  2. Apropos (i), wahrscheinlich können Sie die Cubes nicht als Datenquelle für Bildschirme in Ihrer Anwendung verwenden. Wenn Sie Durchschnittswerte für etwas berechnen müssen, das der Benutzer auf einem Bildschirm sehen möchte, müssen Sie wahrscheinlich in einer gespeicherten Prozedur hinter dem Bildschirm rechnen.

  3. Wenn Sie dies tun, richten Sie eine replizierte Datenbank ein und füllen Sie den Cube aus. Lassen Sie diese Datenbank regelmäßig aktualisieren, damit Ihr ETL-Prozess aus einem intern konsistenten Datensatz ausgeführt werden kann. Wenn Sie von einer Live-Datenbank aus arbeiten, riskieren Sie, dass einige der Elemente später aufgefüllt werden und von Datensätzen abhängig sind, die nach der Ausführung des entsprechenden Prozesses erstellt wurden.

    Sie können die Situation haben, in der Sie eine Dimensionslast ausführen, und dann werden neue Daten in das System eingegeben. Wenn die Faktentabellenladung ausgeführt wird, enthält sie jetzt Daten, die von Dimensionsdaten abhängig sind, die nicht geladen wurden. Dies unterbricht den Cube und führt zum Fehlschlagen des Ladeprozesses. Die Batchaktualisierung einer replizierten Datenbank zur Ausführung der ETL- oder Cube-Ladevorgänge wird dieses Problem abschwächen.

    Wenn Sie nicht die Option einer replizierten Datenbank haben, können Sie mehr Pufferrichtlinien für fehlende Daten einrichten.

  4. Wenn die zugrunde liegenden Produktionsdaten erhebliche Datenqualitätsprobleme aufweisen, werden sie in den Cubes angezeigt. GIGO.