none
SSAS: Default-Eigenschaften von Dimensionen führen zu Warnungen RRS feed

  • Frage

  • Vor ein paar Tagen habe ich hier schon ein paar Fragen zu den Warnungen gestellt, welche die SSAS bei der Verarbeitung von Dimensionen generiert (Link). Ich habe zu diesem Thema jetzt weiter herumprobiert und ich habe den Eindruck, dass die Standard-Eigenschaften von neu erstellten Objekten häufig dazu führen, dass Warnungen in großer Anzahl erzeugt werden, und dass man dann viele Eigenschaften dieser Objekte manuell abändern muss, um diese Warnungen zu unterbinden. Im Detail habe ich die unten aufgeführten Sachverhalte festgestellt. Meine Fragen dazu:

    • Kann jemand bestätigen, dass sich die Analysis-Services so, wie unten beschrieben verhalten, oder mache ich etwas falsch, wenn ich neue Dimensionen erstelle?
    • Lässt sich dieses Verhalten von SSAS ggf. ändern, so dass neue Objekte automatisch mit anderen Standard-Eigenschaften angelegt werden?
    • Gibt es zumindest in einem Teil der von mir geschilderten Fälle plausible Gründe, warum die Objekte im Standard so angelegt werden, dass sie direkt zu Warnungen führen?

    1. Wenn eine Hierarchie mit mehrere Ebenen erstellt wird, werden die Attributsbeziehungen der hierarchisch angeordneten Attribute automatisch „nebeneinander“ gestellt. Das führt zur Warnung „Mindestens eine Ebene in dieser Hierarchie weist keine Attributsbeziehungen auf. Dies führt möglicherweise zu einer verringerten Abfrageleistung“ (auf Englisch vermutlich: Avoid creating hierarchies where attribute relationships do not exist between one or more levels). Man muss die Attributsbeziehungen manuell in der Reihenfolge der Hierarchien anordnen, um diese Warnung zu unterdrücken.
    2. Die automatisch erstellten Attributsbeziehungen haben die Eigenschaft „Visible=true“. Das führt zur Warnung „Vermeiden Sie sichtbare Attributhierarchien für Attribute, die in benutzerdefinierten Hierarchien als Ebenen verwendet werden“ (Avoid visible attribute hierarchies for attributes used as levels in user-defined hierarchies). Man muss die Eigenschaft manuell auf „Visible=false“ setzen, um diese Warnung zu unterdrücken.
    3. Die automatisch erstellten Attributsbeziehungen haben die Eigenschaft „RelationShipType=Flexible“. Das führt zur Warnung „Definieren Sie Attributbeziehungen ggf. als 'Fest'.“ (Define attribute relationships as 'Rigid' where appropriate). Man muss die Eigenschaft manuell auf „Rigid“ setzen, um diese Warnung zu unterdrücken.
    4. Wenn man bei einer Dimension die ErrorConfiguration auf „Standard“ stellt, bedeutet das, dass der Fehler „KeyDuplicate“ auf „IgnoreError“ steht. Das führt zur Warnung „Ignorieren Sie keine Fehler aufgrund doppelter Schlüssel. Ändern Sie die KeyDuplicate-Eigenschaft der Fehlerkonfiguration so, dass sie nicht auf 'IgnoreError' festgelegt ist.“ (Do not ignore duplicate key errors. Change the KeyDuplicate property of the error configuration so that it is not set to IgnoreError). In neueren Versionen von SSAS ist deshalb die Einstellung „Standard” nicht mehr Standard, sondern die Einstellung „Benutzerdefiniert“, in der „KeyDuplicate“ auf „ReportAndStop“ steht.
    5. Wenn ein Datenbankfeld eine reservierte Bezeichnung wie „ID“ oder „NAME“ hat, so wird für den Namen der Attributsbeziehung, welche auf dieses Feld verweist, ein Unterstrich an den Namen des Feldes angehängt. Das führt dann beim Verarbeiten zu der Meldung „Der für die Attributbeziehung angegebene Name stimmt nicht mit dem Namen des verknüpften Attributs überein.“ (The names of attribute relationships should match the names of the related attributes). Entfernen darf man den automatisch angefügten Unterstrich aber nicht. Das führt dann zu der Fehlermeldung „Fehler im Metadaten-Manager. Die …-Dimension enthält eine Elementeigenschaft mit ungültigem Namen: 'NAME' ist ein reserviertes Wort.“ (… dimension contains a member property with invalid name “Name”. Name is one of the Reserved Words).
    6. In einer neu erstellten Dimension ist die Eigenschaft „KeyColumn“ für jede Attributs-Spalte die jeweilige Spalte selber und die Eigenschaft „NameColumn“ ist leer. Je nach Inhalt dieser Spalte führt das bei der Verarbeitung zu der Fehlermeldung „Fehler im OLAP-Speichermodul: Ein doppelter Attributschlüssel wurde bei der Verarbeitung gefunden: Tabelle: '…', Spalte: '…', Wert: '…' Das Attribut ist '…'.“ (Errors in the OLAP storage engine: A duplicate attribute key has been found when processing: Table: …, Column: …, Value: '…'. The attribute is '…'.). Wäre es nicht sinnvoller, wenn im Standard die „NameColumn“ mit der Attributsspalte und die „KeyColumn“ mit der „KeyColumn“ der dem Attribut zugeordneten Hierarchie-Ebene vorbelegt würde?

    • Bearbeitet uwdn Donnerstag, 9. Oktober 2014 13:52
    Donnerstag, 9. Oktober 2014 13:51

Antworten

  • Ich finde es nur schräg, dass es jetzt von vornherein auf "benutzerdefiniert" steht, obwohl der Benutzer an dieser Stelle noch gar nichts definiert hat.

    Die ganzen Objekte in einem SSAS Projekt sind XML Dateien, deren Schema (inkl. was ist Standard) über XSD definiert sind und wenn Du den "Code" ansiehst, wirst Du feststellen, das selbst für SSAS 2014 die XSD aus 2003 sind (http://schemas.microsoft.com/analysisservices/2003/engine) und es ist verständlich einfacher ist, im Designer einen Workaround einzubauen und vom "Standard" auf "costum" zu ändern, als ein neues Schema zu definieren und überall Programmanpassungen vornehmen zu müssen.

    Wie gesagt, die BPA stammen aus dem Project REAL, wo Microsoft für eine Großkunden ein SSAS Projekt aufgesetzt hat und ein "kleines bisschen" Performanzprobleme hatte. Deswegen wurden die SSAS Entwickler hinzugezogen und aus der Zusammenarbeit sind dann die Project REAL: Business Intelligence ETL Design Practices entstanden. Rigid hat Performanzvorteil, die sich bei solchen Großprojekten auswirken, bei kleineren eher nicht. Es gibt Dimensionen, wo man Rigid problemlos verwenden kann, z.B. Datumsdimensionen, es wird nie vorkommen, das der 10.10.2014 aus Hierachieebene 2014 nach 2013 wandert. Bei Orten kann man es nicht ausschließen, das sie z.B. einer anderen Gemeinde zugeordnet, auch wenn so was selten vorkommt.

    Siehe auch Project REAL: Technical Overview  und Project REAL: Analysis Services Technical Drilldown

    Ja, es ist ein Übersetzungsfehler, deswegen verwende ich bevorzugt die englischen Versionen von Programmen:


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    • Als Antwort vorgeschlagen Aleksander Chalabashiev Montag, 13. Oktober 2014 06:32
    • Als Antwort markiert uwdn Montag, 13. Oktober 2014 11:35
    Freitag, 10. Oktober 2014 07:35

Alle Antworten

  • Hallo,

    welche Version von BIDS oder SSDT nutzt Du? Ich verwende SSDT 2012 und da wird Punkt 4. richtig gemacht, also nicht "Standard" sondern "(custom)" mit KeyDuplicate = ReportAndStop.

    Über Punkt 3. kann man streiten, ob der Default sinnig ist. Grundsätzlich würde ich sagen ja, "Flexible" ist als Standard besser, denn bei Attributbeziehungen mit "Rigid" ist kein "Process Update" möglich, um einfach und schnell Änderungen verarbeiten zu lassen, da ist nur ein "Process Full" möglich und das bedeutet anschließend auch den kompletten Cube verarbeiten zu müssen.

    Bei Punkt 6. sollte der Standard nie zu einem Fehler führen, solange man die Dimension unverändert lässt.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Donnerstag, 9. Oktober 2014 14:38
  • Ich würde Punkt 3 sogar unterstreichen mit: als Standard ist das richtig. Denn funktionieren tut es so auch. Andersrum jedoch würden plötzlich bei vielen Dimensionen Fehler auftreten, wenn Elemente "umgezogen" sind. Es hängt eben auch an den Daten.

    Es obliegt dem Entwickler mit dem entsprechendem Know-How diese Beziehungen in allen Dimensionen zu optimieren.


    Andreas Wolter (Blog | Twitter)
    MCM - Microsoft Certified Master SQL Server 2008
    MCSM - Microsoft Certified Solutions Master Data Platform, SQL Server 2012
    www.andreas-wolter.com | www.SarpedonQualityLab.com

    Donnerstag, 9. Oktober 2014 16:27
  • Zu Punkt 4: Ich habe auch die Version 2012 und wie ich bereits schrieb, werden mit den Voreinstellungen (Standard-Einstellungen darf man hier ja nicht schreiben) keine Warnungen generiert. Ich finde es nur schräg, dass es jetzt von vornherein auf "benutzerdefiniert" steht, obwohl der Benutzer an dieser Stelle noch gar nichts definiert hat. Wäre es nicht richtiger unter "Standard" auf "ReportAndStop" zu stehen? So widerspricht es irgendwie der Definition von "Standard" und "Benutzerdefiniert".

    Zu Punkt 3: Dann ist es aber meines Erachtens falsch, an dieser Stelle eine "Warnung" zu generieren. "Warnungen" sind für diesen Umstand zu heftig. Es müsste dafür noch etwas drittes wie "Hinweis" geben. Nach meiner Vorstellung sind Warnungen etwas, was man, wenn man sich viel Mühe gibt, in einem Projekt vollständig eliminieren können sollte. Und wenn man sie doch stehen lässt, ist man nur zu faul und man sollte sich dann bewusst sein, dass man etwas macht, was nicht der Norm entspricht.

    Bei Punkt 6 bin ich mir auch noch nicht im klaren, wann der Fehler auftritt und wann nicht. Bei meinem geerbten SSAS-Projekt, den ich in meinem vorherigen Posting beschrieben habe, tritt er, wir mir bisher scheint, etwas chaotisch auf.

    Vielleicht habe ich aber noch Wissenslücken, wie ich eine Dimension richtig aufbaue. Ich habe mir nur zum Testen eine kleine Dimension gebastelt. Die zugrunde liegende Tabelle sieht wie folgt aus:

    Dimensionstabelle

    Bei der Erstellung der Dimension bin ich wie folgt vorgegangen:

    Wenn ich dann die Dimension verarbeite, erhalte ich erst zwei Warnungen ("Definieren Sie Attributbeziehungen ggf. als 'Fest'." und "Vermeiden Sie sichtbare Attributhierarchien für Attribute, die in benutzerdefinierten Hierarchien als Ebenen verwendet werden.") und dann und die Fehlermeldung "Fehler im OLAP-Speichermodul: Ein doppelter Attributschlüssel wurde bei der Verarbeitung gefunden: Tabelle: CITY_DIM, Spalte: CITY, Wert: Berlin. Das Attribut ist 'CITY'."

    Das kann ich verhindern, indem ich der CITY-Spalte als KeyColumn die ID-Spalte zuordne und die CITY-Spalte als Name-Column verwende. Hätte ich beim Design der Dimension anders vorgehen müssen, um diesen Fehler zu verhindern?

    Noch zwei Fragen:

    Wenn ich im Dimension-Assistenten den Attributen einen Attributstypen aus der Gruppe "Geografie" zuordne, wird mit zwei mal der Typ "Bundesland/Kanton" angeboten (siehe rote Pfeile). Handelt es sich dabei um einen Übersetzungsfehler?

    Wenn ich, wie in meinem Beispiel, den Attributen derartige Attributstypen zuordne, gibt es dann einen Möglichkeit, sich automatisch einen Vorschlag für eine Hierarchie erstellen zu lassen? So etwas wäre doch theoretisch möglich, oder?

    Freitag, 10. Oktober 2014 07:10
  • Ich finde es nur schräg, dass es jetzt von vornherein auf "benutzerdefiniert" steht, obwohl der Benutzer an dieser Stelle noch gar nichts definiert hat.

    Die ganzen Objekte in einem SSAS Projekt sind XML Dateien, deren Schema (inkl. was ist Standard) über XSD definiert sind und wenn Du den "Code" ansiehst, wirst Du feststellen, das selbst für SSAS 2014 die XSD aus 2003 sind (http://schemas.microsoft.com/analysisservices/2003/engine) und es ist verständlich einfacher ist, im Designer einen Workaround einzubauen und vom "Standard" auf "costum" zu ändern, als ein neues Schema zu definieren und überall Programmanpassungen vornehmen zu müssen.

    Wie gesagt, die BPA stammen aus dem Project REAL, wo Microsoft für eine Großkunden ein SSAS Projekt aufgesetzt hat und ein "kleines bisschen" Performanzprobleme hatte. Deswegen wurden die SSAS Entwickler hinzugezogen und aus der Zusammenarbeit sind dann die Project REAL: Business Intelligence ETL Design Practices entstanden. Rigid hat Performanzvorteil, die sich bei solchen Großprojekten auswirken, bei kleineren eher nicht. Es gibt Dimensionen, wo man Rigid problemlos verwenden kann, z.B. Datumsdimensionen, es wird nie vorkommen, das der 10.10.2014 aus Hierachieebene 2014 nach 2013 wandert. Bei Orten kann man es nicht ausschließen, das sie z.B. einer anderen Gemeinde zugeordnet, auch wenn so was selten vorkommt.

    Siehe auch Project REAL: Technical Overview  und Project REAL: Analysis Services Technical Drilldown

    Ja, es ist ein Übersetzungsfehler, deswegen verwende ich bevorzugt die englischen Versionen von Programmen:


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    • Als Antwort vorgeschlagen Aleksander Chalabashiev Montag, 13. Oktober 2014 06:32
    • Als Antwort markiert uwdn Montag, 13. Oktober 2014 11:35
    Freitag, 10. Oktober 2014 07:35
  • Und was Deine Geo Dimension betrifft: Ortsnamen sind nicht eindeutig, Frankfurt z.B. gibt es in DE 2 mal und noch ein paar mehr im Ausland. Hier musst Du in der Tat die KeyColumn ändern, entweder auf die ID oder Du erweiterst die KeyColumn um ein weiteres Feld. Im AdventureWorks Cube wurde es so gemacht, das StateProvince hinzu genommen wurde, weil man davon ausgehen kann, das es je Province ein Ortsname eindeutig ist.

    Den AdventureWorks kann man gut als Vorlage nehmen, um zu sehen, wie dort was umgesetzt wurde; gibt es hier: http://msftdbprodsamples.codeplex.com/


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Freitag, 10. Oktober 2014 07:55
  • Ortsnamen sind nicht eindeutig, Frankfurt z.B. gibt es in DE 2 mal und noch ein paar mehr im Ausland.

    Ja, genau deshalb hatte ich in meiner Beispieldimension ja noch den Ort "Berlin" in Connecticut, USA mit hinzugenommen. Inzwischen habe ich zu der Fehlermeldung "A duplicate attribute key has been found" zwei recht informative Blog-Einträge gefunden:  

    http://ms-olap.blogspot.de/2009/11/duplicate-attribute-key-has-been-found.html und

    http://ms-olap.blogspot.de/2013/08/a-duplicate-attribute-key-has-been.html

    Mal sehen, ob ich in den alten OLAP-Würfeln mit diesen Informationen die Fehler beseitigen kann. Hat jemand zu den übrigen von mir gestellten Fragen, die bisher noch nicht angesprochen wurden und den darin geschilderten Warnungen noch weiterführende Informationen?

     

    Freitag, 10. Oktober 2014 11:47
  • Eine Option ist es, die Ortsnamen eindeutig zu gestalten und aus 2x Frankfurt => "Frankfurt (Main)" und "Frankfurt (Oder)" zu machen. Dadurch, das Du die ID als Key verwendest, wird man in einem BI Tool wie Excel 2x Frankfurt untereinander stehen sehen, und man weiß nicht was welcher ist.

    Zu Punkt 2 hatte ich in Deinem ersten Post schon geschrieben und das kannst Du zur Bestätigung hier nachlesen: "Vermeiden Sie sichtbare Attributshierarchien für Attribute, die in benutzerdefinierten Hierarchien als Ebenen verwendet werden.":  "... kann für die Benutzer verwirrend sein, wenn Attributelemente in verschiedenen Zusammenhängen sichtbar sind ..."

    Und die ganze Auflistung der Hinweise gibt es hier: Entwurfswarnungsregeln (Analysis Services – Mehrdimensionale Daten)


    Olaf Helper

    [ Blog] [ Xing] [ MVP]


    Freitag, 10. Oktober 2014 12:10
  • Dadurch, das Du die ID als Key verwendest, wird man in einem BI Tool wie Excel 2x Frankfurt untereinander stehen sehen, und man weiß was welcher ist.

    Das sollte wohl heißen, "... man weiß nicht, was welcher ist." oder? In manchen Fällen mag es gehen, die Attribute so zu unterscheiden, aber da wo sich die Attribute aus den Eingaben der Anwender generieren ist das sicher nicht immer möglich. Ich habe inzwischen herausgefunden, warum meine alten OLAP-Cubes so oft "A duplicate attribute key has been found" melden. Vielleicht interessiert es jemand, der beim "googeln" (oder muss man hier sagen beim "bingen") nach dieser Meldung auf diese Seite stößt. Es gibt zwei Ursachen:

    Die wesentliche. In unserer Analysis-Services-Installation war das Häkchen bei "Unterscheidung nach Groß-/Kleinschreibung" nicht gesetzt:

    EigenschaftenAnalysisServerund in der Datenbank hatten wir in vielen Feldern Fälle, wo sich zwei Inhalte nur in der Groß-/Kleinschreibung unterscheiden, z.B.: "68, rue de Lille" und "68, Rue de Lille". Ein SELECT DISTINCT bringt da natürlich zwei unterschiedliche Datensätze aber für Analysis Services waren es doppelte Datensätze.

    Ich kann mich nicht entsinnen, dass wir den Haken "Groß-/Kleinschreibung" bei der Installation bewusst rausgenommen haben. Ist das bei der Installation "Default" oder haben wir das versehentlich gemacht?

    Und dann hatten wir noch Fälle, wo in einer numerischen Spalte sowohl NULL also auch 0-Werte waren, die von den Analysis Services offensichtlich ebenfalls als identisch angesehen werden

    Freitag, 10. Oktober 2014 14:13
  • Ein SELECT DISTINCT bringt da natürlich zwei unterschiedliche Datensätze aber für Analysis Services waren es doppelte Datensätze.

    Ja,das "nicht" fehlte, ist korrigiert.

    Wenn die Datenquelle hier 2 Datensätze liefert, dann nur weil die bereits Case Sensitive ist, für Insensitive ist auch dort das nur ein Datensatz.

    Ja, Case Insensitive ist bei der Installation der Standard, aber wenn man alle Optionen durchsieht, kann man schon im Klartext lesen, wie die Collation definiert ist. 


    Olaf Helper

    [ Blog] [ Xing] [ MVP]


    Freitag, 10. Oktober 2014 16:29
  • ...Die wesentliche. In unserer Analysis-Services-Installation war das Häkchen bei "Unterscheidung nach Groß-/Kleinschreibung" nicht gesetzt:


    und in der Datenbank hatten wir in vielen Feldern Fälle, wo sich zwei Inhalte nur in der Groß-/Kleinschreibung unterscheiden, z.B.: "68, rue de Lille" und "68, Rue de Lille". Ein SELECT DISTINCT bringt da natürlich zwei unterschiedliche Datensätze aber für Analysis Services waren es doppelte Datensätze.

    Ich kann mich nicht entsinnen, dass wir den Haken "Groß-/Kleinschreibung" bei der Installation bewusst rausgenommen haben. Ist das bei der Installation "Default" oder haben wir das versehentlich gemacht?

    Und dann hatten wir noch Fälle, wo in einer numerischen Spalte sowohl NULL also auch 0-Werte waren, die von den Analysis Services offensichtlich ebenfalls als identisch angesehen werden

    Hallo uwdn

    ich meine, dass ich genau auf mögliche Probleme mit Null und Collation in dem anderen Thread: https://social.msdn.microsoft.com/Forums/de-DE/316cf74b-4aab-469a-80c1-192a931f4a0c/warnungen-zu-attributen-und-hierarchien-in-analysis-services?forum=sqlserverde schon hingewiesen hatte.

    Die Nicht-Unterscheidung von Groß- und Kleinschreibung ist in der Regel die bessere Wahl. Case-Sensitive Server sind ein Graus..

    Das eigentliche Problem hier ist die Datenqualität und diese hängt stark mit dem DW-Schema zusammen. - NULLs haben in einem DW schlicht Nichts zu suchen - es sei denn man weiß genau, was man da tut. Also bei Kennzahlen kann es Sinn machen. Bei Dimensionsattributen nicht.

    Im Endeffekt empfehle ich hier also das Problem an der Wurzel zu packen.. in den Daten


    Andreas Wolter (Blog | Twitter)
    MCM - Microsoft Certified Master SQL Server 2008
    MCSM - Microsoft Certified Solutions Master Data Platform, SQL Server 2012
    www.andreas-wolter.com | www.SarpedonQualityLab.com

    Freitag, 10. Oktober 2014 16:29
  • Hallo Olaf, hallo Andreas,

    wie ich im Vorgängerthread bereits schrieb, ist die Quelldatenbank für unsere OLAP-Cubes eine Oracle-DB. Da ist die Denkweise bzgl. Groß-/Kleinschreibung und NULL nach meinem Eindruck eine andere. Ich selber komme auch aus der Oracle-Welt und finde diese Denkweise vertrauter. Die Bedeutung von Collations kann ich noch nicht richtig einschätzen. Auf der Oracle-Seite finde ich es ziemlich egal, in welchen Characterset und mit welchen NLS-Einstellungen eine Datenbank läuft. Und wenn beim Kunden im Feld Name3 nichts eingetragen ist, dann ist es halt NULL, was sonst?

    Freitag, 10. Oktober 2014 17:14
  • ...Und wenn beim Kunden im Feld Name3 nichts eingetragen ist, dann ist es halt NULL, was sonst?
    ...

    Und wenn beim Kunden bei City "Ber lin" eingetragen ist? Was ist es dann?

    - Nach dieser Logik würde man alles akzeptieren und in das DW durchreichen. ;-)

    Ein Datawarehouse sollte aber "bereinigte" Daten enthalten.

    Ist Euren Endbenutzern bewusst, wo Sie NULL-Werte finden in einer Hierarchie? - Aus Erfahrung kann ich der Antwort vorgreifen: Nein, denn diese landen je nach Tool meist "irgendwo hunten" unter "(Unknown)". Letztlich möchte man ja konsolidierte und konforme Dimensionen erreichen, die möglichst effiziente Analysen ermöglichen.

    Die umfangreiche Thematik von Datawarehouse-Design allen durch ein Buch zu erlernen ist sicher unrealistisch, aber als Einstieg empfehle ich "The Data Warehouse Toolkit: The Complete Guide to Dimensional Modeling" von Ralph Kimball.

    Später würde ich mich auch noch mit der Inmon-Methodik auseinandersetzen. Gerade für Einsteiger ist Kimball jedoch mehr geeignet und leicht nachvollziehbar.


    Andreas Wolter (Blog | Twitter)
    MCM - Microsoft Certified Master SQL Server 2008
    MCSM - Microsoft Certified Solutions Master Data Platform, SQL Server 2012
    www.andreas-wolter.com | www.SarpedonQualityLab.com

    Freitag, 10. Oktober 2014 17:26
  • Also, das SSAS 0 und NULL gleich behandelt, wäre mir neu; NULL wird, wie Andreas schon schrieb, zum UnkownMember: Defining the Unknown Member and Null Processing Properties

    Olaf Helper

    [ Blog] [ Xing] [ MVP]


    Freitag, 10. Oktober 2014 17:34
  • Und wenn beim Kunden bei City "Ber lin" eingetragen ist? Was ist es dann?

    - Nach dieser Logik würde man alles akzeptieren und in das DW durchreichen. ;-)

    Wenn mir auffällt, dass dort "Ber lin" steht, dann würde ich dem Vertrieb vorschlagen, dass in den Stammdaten des Kunden zu korrigieren, sonst gehen ja auch die Schreiben aus der Vertriebssoftware mit einer falschen Adresse raus. Aber wenn bei einem Kunden in der Türkei oder in Finnland der Städtename falsch geschrieben ist, dann würde das vermutlich niemand merken, solange der Kunde sich nicht beschwert. Solche Fehler beim Cleansing im DWH automatisiert zu bereinigen ist sicher nicht ganz einfach und zum Glück beginnt unsere Geographie-Dimension erst auf Länderebene. Das mit den Städten weiter oben war ja nur ein Beispiel von mir zum rumprobieren. Trotzdem mag die eventuell falsch geschriebene Stadt als Attribut beim Kunden im DWH sinnvoll sein, welches in irgendwelchen Auswertungen mit ausgegeben wird. Sortiert oder gruppiert wird nach den Städten oder nach vielen anderen Attributen aber nicht.

    "Name3" ist ja kein Hierarchie-Feld. Es ist einfach das dritte Feld für den Kundennamen, falls ich mit "Name1" und "Name2" nicht hinkommen. Aber in den meisten Fällen sind die ersten beiden Felder ausreichend und dann ist "Name3" halt NULL. Sollten wir dieses NULL beim Cleansing nach Deiner Meinung besser durch einen anderen Wert ersetzten? Bei den Attributen, aus denen wir die Hierarchien für unsere Dimensionen bilden, haben wir natürlich schon darauf geachtet, dass dort keine NULL-Werte auftauchen.

    Freitag, 10. Oktober 2014 17:48
  • Case-Sensitive Server sind ein Graus..

    Andreas, mir im Prinzip auch, aber manchmal nötig (nicht der ganze Server, aber Tabelle). Die Nachname "Mcdonald" und "McDonald" sind zwei unterschiedliche Nachnamen.

    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Freitag, 10. Oktober 2014 17:49
  • Case-Sensitive Server sind ein Graus..


    Andreas, mir im Prinzip auch, aber manchmal nötig (nicht der ganze Server, aber Tabelle). Die Nachname "Mcdonald" und "McDonald" sind zwei unterschiedliche Nachnamen.
    ...

    Hallo Olaf,

    ich meine schon wirklich "Server".

    Bestimmte Spalten Case-Sensitive ist kein Thema.
    Aber Serverweit, denn dann greift das auch bei Objeknamen.

    Gruß,

    Andreas


    Andreas Wolter (Blog | Twitter)
    MCSM: Microsoft Certified Solutions Master Data Platform, MCM, MVP
    www.SarpedonQualityLab.com | www.SQL-Server-Master-Class.com

    Freitag, 10. Oktober 2014 18:01
  • "Name3" ... falls ich mit "Name1" und "Name2" nicht hinkommen.

    In ERP Software sehr gängig, einfach nur Adresszeile 1-3 zu verwenden, so werden GoB sicher die zum Zeitpunkt richtige postalische Anschrift im Verkaufsbeleg abgelegt. In ERP benötigt man auch keine detailiertere Daten, auch nicht zum auswerten.

    In unserer eigenen CRM Lösung ist alles komplett normalisiert. Bei einem Namen wie "Dr. Mustermann GmbH" landet "Dr." im Feld "Akademischer Titel", "Mustermann" im Namen und "GmbH" in der Rechtsform.

    Aber um zum Thema zurück zu kommen, im DWH würde ich Name 1-3 zu einem Namen zusammenführen; willst ja über OLAP keine Serienbriefe erstellen lassen.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Freitag, 10. Oktober 2014 18:04
  • ...

    "Name3" ist ja kein Hierarchie-Feld. Es ist einfach das dritte Feld für den Kundennamen, falls ich mit "Name1" und "Name2" nicht hinkommen. Aber in den meisten Fällen sind die ersten beiden Felder ausreichend und dann ist "Name3" halt NULL. Sollten wir dieses NULL beim Cleansing nach Deiner Meinung besser durch einen anderen Wert ersetzten? Bei den Attributen, aus denen wir die Hierarchien für unsere Dimensionen bilden, haben wir natürlich schon darauf geachtet, dass dort keine NULL-Werte auftauchen.

    In dem Screenshot in dem alten thread war "Name 3", oder "Name_", wenn ich mich nicht täusche durchaus in einer Hierarchie, und zwar der Attributshierarchie selber umgesetzt.
    - aber egal

    Ja, meiner Philosophe nach (denn hierüber lässt sich sicherlich streiten), hat NULL im DW wirklich nichts zu suchen, es sei denn ich benötige es expliziet. Ansonsten erschwert es nur die Suchen und führt zu verwirrenden Resultaten, mal mit und mal ohne diese Werte.

    Und das Abfangen ist eine der leichtesten Übungen.

    Prinzipiell würde ich so auch schon im OLTP-Umfeld herangehen, nur nicht ganz so restriktiv.

    So die Kurzform. Über die Vor- und sicher auch Nachteile kann man gut einen umfangreichen Artikel Kapitel schreiben, aber für hier muss es mal genügen. ;-)


    Andreas Wolter (Blog | Twitter)
    MCSM: Microsoft Certified Solutions Master Data Platform, MCM, MVP
    www.SarpedonQualityLab.com | www.SQL-Server-Master-Class.com

    Freitag, 10. Oktober 2014 18:08
  • Ja, meiner Philosophe nach (denn hierüber lässt sich sicherlich streiten), hat NULL im DW wirklich nichts zu suchen

    Ja, es ist wirklich besser NULL durch einen Pseudo-Dimensionswert wie einen eigenen "Undefiniert" Wert zu ersetzt; vergisst man den UnkownMember auf Visible=True (Default: False) zu setzen, fehlen Werte und das ist etwas, was gerade im Bereich ERP/Buchhaltung nicht passieren darf.

    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Freitag, 10. Oktober 2014 18:24
  • Also, das SSAS 0 und NULL gleich behandelt, wäre mir neu

    Per Default ja offensichtlich schon, denn auf der von Dir verlinkten Seite steht "If Analysis Services encounters a null value during processing, by default, it converts this null to a zero for numeric columns ...". Aber dank dieser Seite weiß ich jetzt, wie ich dieses Default-Verhalten ändern kann.

    Montag, 13. Oktober 2014 07:39
  • Ich markiere diesen Thread jetzt mal als beantwortet. Die Diskussion hat sich ja von der ursprünglichen Fragestellung ein Stück fortbewegt. Aber sie war auf jeden fall hilfreich und hat mich wieder ein Stück weitergebracht. Danke für Eure Vorschläge zum DWH-Design.
    Montag, 13. Oktober 2014 11:35
  • 6. In einer neu erstellten Dimension ist die Eigenschaft „KeyColumn“ für jede Attributs-Spalte die jeweilige Spalte selber und die Eigenschaft „NameColumn“ ist leer. Je nach Inhalt dieser Spalte führt das bei der Verarbeitung zu der Fehlermeldung „Fehler im OLAP-Speichermodul: Ein doppelter Attributschlüssel wurde bei der Verarbeitung gefunden: Tabelle: '…', Spalte: '…', Wert: '…' Das Attribut ist '…'.“ (Errors in the OLAP storage engine: A duplicate attribute key has been found when processing: Table: …, Column: …, Value: '…'. The attribute is '…'.). Wäre es nicht sinnvoller, wenn im Standard die „NameColumn“ mit der Attributsspalte und die „KeyColumn“ mit der „KeyColumn“ der dem Attribut zugeordneten Hierarchie-Ebene vorbelegt würde?


    Ich weiß, dass dieser Thread schon etwas älter ist und auch schon als beantwortet markiert wurde. 

    Jedoch habe ich mich diese Woche mit genau diesem Problem beschäftigt/gekämpft und dieser Thread hat mir geholfen.

    Deshalb füge ich meine Erfahrung hinzu, um andere, die ähnliche Fälle haben eine der Lösung zu teilen.

    >----<

    Im Züge einer neuen Entwicklungsversion wurden die neue Cubes über die alten Cubes deployed. 

    Dann kam das Problem mit dem doppelten Attributschlüssel. 

    Ich habe jede einzelne Dimension, Measures, usw überprüft und prozessiert, alles hat geklappt. 

    Aber beim prozessieren über den Daily-Job ist die Prozessierung wegen dem Problem abgebrochen. 

    >----<

    Nach weiteren Überprüfungen habe ich nun die Ursache gefunden.

    Das Problem lag in diesem Fall bei einem Schiefstand von Collation

    Einige Cubes haben durch das Deployment "Latin1_General_CI_AS" als Collation erhalten. Diese ist Case-Insensitive.

    Warum die Cubes "Latin1_General_CI_AS" bekommen haben, konnte ich (noch) nicht eklären.

    Ich habe dann alle Cubes nach unserem bisherigen Konfig mit  "Latin1_General_100_CS_AS_KS_WS" geändert und das Problem ist somit gelöst. 




    Freitag, 23. November 2018 12:36