Posts mit dem Label SSAS werden angezeigt. Alle Posts anzeigen
Posts mit dem Label SSAS werden angezeigt. Alle Posts anzeigen

2011-04-20

MSSQL SSAS: MeasureGroups kombinieren

Ich baue zur Zeit ein Data Warehouse mit MSSQL Server 2008 auf.
Dabei bin ich aktuell beim Designen eines Cubes in den SSAS auf folgende Meldung gestoßen:
Warning 1 Cube [MyCube] : The 'M One' and 'M Two' measure groups have the same dimensionality and granularity. Consider unifying them to improve performance.
Best Practices for Data Warehousing with SQL Server 2008 auf MSDN Microsoft sagt hierzu folgendes:
Seriously consider the best practice advice offered by AMO [Analysis Management Objects] warnings

Gesagt, getan:

  1. Named Query erstellen: SELECT mOne.key, mOne.value AS value1, mTwo.value AS value2 FROM mOne JOIN mTwo ON mOne.key = mTwo.key (in meinem Fall sind die Keys in beiden Tabellen identisch)
  2. In der DataSource-View Schlüssel-Beziehungen bei der Named Query genau so wie bei den Tabellen mONE, bzw. mTWO setzen.
  3. Im Cube-Designer unter Measures per Rechtsklick die neue MeasureGroup hinzufügen.
  4. Speichern, bauen, Meldung weg, Performance optimiert!

2011-04-13

Mit Cubes und Dimensionen arbeiten 7: Cube individualisieren

Dies ist der letzte Artikel in der Serie zum Microsoft SQL Server 2008 Analysis Services.


Cube individualisieren
Ein DWH-Cube kann auf vielfältige Weise individualisiert werden:
  • Es können KPIs erstellt werden und auch als zB. Ampel-Cockpit dargestellt werden. 
  • Actions sind gespeicherte MDX-Queries, die von Clients ausgeführt werden können. Möglich sind:
    • Commandline
    • Dataset: gibt Datensatz zurück
    • Drillthrough
    • HTML: führt HTML-Script aus
    • Proprietary: führt eine Operation aus
    • Report: URL basierter Request, dessen Submit parameterisierbar ist
    • Rowset: gibt ein Rowset zurück
    • Statement: führt ein OLE DB-Kommando aus
    • URL: zeigt eine dynamische Webseite an
  • Perspektiven: CubeViews erstellen -> diese sind allerdings nicht zur Rechtevergabe verwendbar
  • Übersetzungen

2011-04-11

Mit Cubes und Dimensionen arbeiten 6: MDX-Queries

Ein weiterer Artikel in der Serie zum Microsoft SQL Server 2008 Analysis Services.


MDX-Queries

MDX (Multidimensional Expressions) ist die Query-Sprache für multidimensionalen Daten in SQL Server .


MDX dient zur
  • Berechnung von CalculatedMembers. Diese werden zur Query-Laufzeit berechnet. ZB: Nettopreise
  • Definition von NamedSets, also Set von Dimension-Member

Die MDX-Syntax wird einem in diversen Tutorials näher gebracht:

2011-04-10

Mit Cubes und Dimensionen arbeiten 5: Aggregations

Ein weiterer Artikel in der Serie zum Microsoft SQL Server 2008 Analysis Services.


Wobei dies gar kein vollständiger Artikel ist, sondern vielleicht eher eine Randnotiz:



Die Query-Zeit lässt sich drastisch durch vorberechnete Cube-Werte reduzieren. Dafür wird dann allerdings mehr Speicher benötigt und die Aufbereitung des Cubes dauert natürlich länger. 
Das Querylog kann als Parameter verwendet werden, das heißt, das automatisch häufig gestellte Anfragen vorberechnet werden und selten gestellte Anfragen erst on-the-fly beim Absetzen der Query.



2011-04-08

Mit Cubes und Dimensionen arbeiten 4: Measures und MeasureGroups

Ein weiterer Artikel in der Serie zum Microsoft SQL Server 2008 Analysis Services.


Measures

Measures sind Spalten, die quantifizierbare Daten (in der Regel numerisch) enthalten und aggregierbar sind.

  • Properties werden von der MeasureGroup geerbt, können aber angepasst werden.
  • Es gibt folgende Properties: wie aggregieren, Datentyp, Beschreibung, Display Name, Display Format, unique ID (readonly), MDX (falls erzeugt), Visibility -> Link

MeasureGroups
Im Cube werden Measures anhand der darunterliegenden Fact-Tables in MeasureGroups gruppiert.
  • Die MeasueGroups werden verwendet, um Dimensionen mit Measures in Verbindung zu bringen
  • MeasureGroups können in Partitionen zerlegt werden. 
    • Es sind horizontale und vertikale Partitionen möglich
    • Jede Partition hat eine eigene FactTable
  • Properties: Link
  • : Link

2011-04-06

Mit Cubes und Dimensionen arbeiten 3: Best Practices Dimension Design

Ein weiterer Artikel in der Serie zum Microsoft SQL Server 2008 Analysis Services.


In diesem Artikel geht es um Best Practice Empfehlungen von Microsoft bei der Entwicklung von Cubes und Dimensionen für den SSAS.
  • Wenn immer möglich: Attribut-Relationen herstellen -> Performance, Integrität, ...
  • keine Attribute erzeugen, die nicht verwendet werden
  • keine redundanten Attribut-Relationen erzeugen. Existieren zB. A -> B und B -> C, dann ist Relation A -> C redundant -> kein Benefit, könnte aber Probleme verursachen
  • Dimension- u. Attribute-Type Property korrekt setzen, für Zeit-, Account- u. geographische Dimensionen
    • Type-Property immer für Dim. u. Attr. setzen.
    • Time-Attribute richtig interpretieren: [Month] vs. [Month of Year]

2011-02-15

Mit Cubes und Dimensionen arbeiten 1: Hierarchien

Dies ist die Fortsetzung der Serie zum Microsoft SQL Server 2008 Analysis Services. Es gibt bereits einen Artikel Allgemeine Informationen für Anwender und Einen DWH Cube erzeugen mit MS SQL Server 2008.

Dimensionen organisieren Daten in Relation zu einem Interessengebiet, zB. Kunden, Filialen, Mitarbeiter, User. Dimensionen enthalten Attribute, die mit Spalten in DimensionTables korrelieren. Diese Attribute erscheinen als Attribut-Hierarchien und können auf verschiedene Arten organisiert werden. (Die Arten werden weiter unten aufgelistet.) Dies ist abhängig von dem darunterliegenden DimensionTables. Hierarchien werden verwendet, um die im Cube enthaltenen Measures zu organisieren.

Attribute Column Binding
Um die Anzeige von Attributen zu kontrollieren, kann man folgende Punkte einer Column definieren:

  • KeyColumn: Schlüssel-Connection zur FactTable (heißt Primarykey)
  • NameColumn: Wert, den User sieht, ZB. CalculatedValue (IF 1 THEN 'W' oder CustomerName statt CustmerID)
  • ValueColumn: Wert, der von der MDX Membervalue-Funktion zurückgegeben wird. (Bsp. Zeitdim: Day-KeyColmnn ist SMALLINT, Day-ValueColumn ist SMALLDATETIME <- ermöglicht Berechnung ohne String-Casting


Hierarchien

  • Balanced Hierarchy: Land -> Bundesland -> Stadt -> PLZ
  • Unbalanced Hierarchy: Familienstand -> Geschlecht (schlecht in Performance)
  • Parent-Child Hierarchy: Self-Join in DimTable, zB. Familienstammbaum (unbalanced)
  • Ragged Hierarchies: Wie Parent-Child, aber Joins über unterschiedliche Spalten, zB: Land -> Bundesland -> ..., wobei Bundesland nur in Deutschland verwendet wird, nicht in der Schweiz
    -> HideMemberIf macht aus Balanced~ eine Ragged~. Mögliche Werte:
    • Never: => Balanced
    • OnlyChildWithNoName: Verbirgt alle Childs mit null oder Leer String-Wert
    • OnlyChildWithParentName: Verbirgt alle Childs mit Wert = Patent-Wert. ZB. HH->HH, wenn Statt unterstes Level
    • NotName: alle null oder Leer-String Werte
    • ParentName: alle mit Namen wie Parent. ZB. HH->HH, auch wenn noch PLZ folgt


Hierarchien verwenden

  • isAggregatable: "ALL"-Level erzeugen?
  • AttributeHierarchyOrdered: False -> Performance-Gewinn, wenn kein Zugriff
  • AttributeHierarchyOptimizedState: Not Optimized -> keine Indizes werden erzeugt -> kürzere Processing-Zeit, längere Query-Zeit
  • Hierarchien und Attribute disablen -> Performance-Gewinn, Übersichtlichkeit User 
    • AttributeHierarchyEnabled
    • AttributeHierarchyVisible: Attribut nur in user-definierten Hierarchien sichtbar

Es folgt in Kürze 'Mit Cubes und Dimensionen arbeiten 2: Attribute'


2011-02-10

Einen DWH-Cube erzeugen mit MS SQL Server 2008

Ein vorangegangener Post beschäftigt sich mit Allgemeinen Informationen für Anwender.

Dieser Post behandelt:

  • Technische Hintergründe, die zum Erstellen eines Cubes relevant sind.
  • Best-Practice Empfehlungen von Microsoft.

Von der Datenbank zum Cube

  1. Datasource (DS): Speichert Connection zu Ursprungsdaten <- können / sollten bereits aufbereitet sein
  2. DatasourceView (DSV): Abstrakte Schicht über DS (Joins über DSen, Subsets von Daten aus DS, Aggregate, Keys)
  3. Measures: numerische Werte, Fakten, die von Usern analysiert werden
  4. MeasureGroups: Logische Gruppierung von Measures
  5. Dimensions: Bringen Measures in einen Kontext -> sind in Hierarchien organisiert (zB. Tag -> Monat -> Jahr)
  6. Cube: Kombination von Dimensionen und Measures. Formen multidimensionale Struktur, die die aggregierten Werte der Measures über alle Dimensionen (entlang deren Hierarchien) enthällt.

Tools

  • Business Intelligence Development Studio: BI Solution erzeugen
  • Microsoft SQL Server Management Studio: BI Solution managen
  • Source Control for Analysis Services integrierbar

Datasources, DataSourceViews und Cubes mit Measures, MeasuereGroups und Dimensionen können über die Wizzards in den Microsoft-Tools einfach erstellt werden.


Zeit Dimensionen: zu beachten

  • mehrere Zeitdim. vs. eine Zeitdim. mit vielen Hierarchien (letzteres vorzuziehen)
  • Zeitdim. werden immer unabhängig von anderen Dimensionen behandelt
  • Zeitdim.-Tabelle lässt sich um eigene Hierarchiestufen erweitern
  • Server-Zeitdim. bereits verfügbar (es sollte also keine eigene Zeitdim. angelegt werden)

Cube Designer
Der Cube-Designer ist Bestandteil des Development Studios. In ihm kann man:

  • Cube-Struktur bearbeiten
  • KPIs, Actions, Cube-Partitionierung, Storage, Aggregationen und Perspektiven erzeugen und ändern
  • Übersetzungen zur Lokalisierung einrichten und pflegen
  • Cube brausen (wie in Excel) (nicht vergessen: erst deployen, dann reconnecten, dann brausen). "Browsen als ..." ist eine sinnvolle Funktion, um die Rolle eines Users anzunehmen. So kann man die Rechtevergabe prüfen.

Best-Practice Data Source Design

  • Microsoft OLEDB Provider für SQL Server (nicht .NET SqlClientDataProvider) verwenden -> nativer Code = bessere Performance

Best-Practice Cube Design

  • Non-related MeasureGroups in einem Cube vermeiden -> Performance. Optional kann ein Cross-Topic-Cube über linked MeasureGroups erzeugt werden.
  • AttributeHierarchyEnabled auf false setzen, für alle Cube-Attribute die granularer als das Update-Intervall des Cubes sind. (Beispiel: Zeit-Hierarchie Jahr bis Tag. Cube wird wöchentlich aktualisiert -> false für Attribute Tag -> verhindert User-Verwirrung)
  • Kleinsten möglichen numerischen Datentyp für Measures verwenden ("ALL"-Value muss rein passen) -> Speicherplatz

In einem folgenden Post wird es darum gehen, wie man mit Cubes und Dimensionen arbeitet.