DQM_Seminar_2010

Werbung
<Insert Picture Here>
Datenqualität sichern
Wenn sich Controlling und Buchhaltung streiten
Praxisseminar zu Datenqualitätsanalysen mit
der Service GmbH als Fallbeispiel
Agenda
 Teurer Datensumpf" oder
"Schlechte Daten kosten einfach nur viel Geld"
 Einweisung in das Planspiel „Service GmbH“
„Wenn Controlling auf die Buchhaltung schimpft“
Eine simulierte Firma mit (einigen) Problemen.
 Hilfsmittel für die systematische Vorgehensweisen bei
Datenqualitätsanalysen
 Vorgehensmodell – Der rote Faden
 Metadaten-Dokumentation – Data Quality Plan
 Datenmodellierung – Die Grundlage
 Feldliste – Das klassische Hilfe
 Sonst.: Profiling Tool / ETL Tool / Datenbank
 Die wichtigsten Analyse-Techniken
 Die wichtigsten Analyse-Verfahren
 Fallbeispiel Service GmbH
So...
...oder so?
So...
...oder so?
Wer glaubt schon bunten Charts?
Die Kosten der schlechten Daten
Ohne Daten kein Business
Daten sind der Treibstoff der Prozesse
Information Chain
Marketing
Werbung
Adresse
KD-Daten
Bedarf
Adresse
Kreditdaten
Kunde
Angebot
Kredit OK
Kundenbetreuer
Bestelldaten
Bestand
Stammdaten
Order
Logistiksystem
Lager
Buchhaltung
Verkaufsdaten
Lieferschein
Spedition
Rechnung
Mahnung
Bezahlung
Reklamation
Kunde
Operative Prozesse
Ohne Daten kein Business
Schlechte Daten sind wie Sand im Getriebe der Geschäftsprozesse
Information Chain
Marketing
Werbung
Adresse
KD-Daten
Bedarf
Adresse
Kreditdaten
Kunde
Angebot
Kredit OK
Kundenbetreuer
Bestelldaten
Bestand
Stammdaten
Order
Logistiksystem
Lager
Buchhaltung
Verkaufsdaten
Lieferschein
Spedition
Rechnung
Mahnung
Bezahlung
Reklamation
Kunde
Operative Prozesse
Der Schnittstellen-Aspekt
Wo findet das Profiling / die
Fehlersuche statt?
Unterschiedliche
Daten und
Fehlerquellen
Einheitliche
Wandlung der Daten
Getrennte
Aufbereitung
von Daten
Einheitliche
Wandlung
der Daten
Pot. Fehler
optimal
CRM
Data Marts
SCM
Bereitstellung
Data
Warehouse
Akzeptabel
Aber nicht
optimal
Potentiell
falsch
ERP
Nicht
glaubhaft
Verlässlichkeit
Wo findet das Profiling / die
Fehlersuche statt?
Unterschiedliche
Daten und
Fehlerquellen
Einheitliche
Wandlung der Daten
Getrennte
Aufbereitung
von Daten
Einheitliche
Wandlung
der Daten
Pot. Fehler
CRM
Data Marts
SCM
Bereitstellung
BI Tool A
Data
Warehouse
BI Tool B
ERP
Konsolidierung
Konsolidierter
Datenbereich
BI Tool C
Datenqualität bezogen auf den
Warehousing – Prozess
Unterschiedliche
Daten und
Fehlerquellen
• Heterogene Datenmodelle / Konsistenz / Homonyme / Synonyme
• Kontinuität des Ladevorgangs / Vollständigkeit
• Widerspruchsfreiheit zwischen den Quellen
CRM
Data Marts
SCM
Bereitstellung
BI Tool A
Data
Warehouse
BI Tool B
ERP
Konsolidierung
Konsolidierter
Datenbereich
BI Tool C
Datenqualität bezogen auf den
Warehousing – Prozess
Unterschiedliche
Daten und
Fehlerquellen
• Heterogene Datenmodelle / Konsistenz / Homonyme / Synonyme
• Kontinuität des Ladevorgangs / Vollständigkeit
• Widerspruchsfreiheit zwischen den Quellen
++
CRM
Data Marts
SCM
ERP
Bereitstellung
Konsolidierung
Metadaten
BI Tool A
+
BI Tool B
-
Data
Warehouse
Konsolidierter
Datenbereich
•Eindeutige Datenobjekte
Beschreibungen
•Homonyme / Synonyme BI Tool C
•Anwendungsneutral
-Verlässlichkeit
Wo sollten Korrekturen stattfinden
Correction
Data Load
Data
Warehouse
Operative Anwendung
Vorsysteme bzw. Fachabteilungen sind in der Pflicht!
Wo sollten Korrekturen stattfinden
?
Operative Anwendung
Correction
Data
Warehouse
Operative Anwendung
Operative Anwendung
Data Load
Die Qualität von Data Warehouse daten
wird immer wichtiger
MIS
Controlling
Produkt
Management
Analytisches
CRM
Informationsbasis
Oracle Data Warehouse
Call
Center
Internetzugriffe
Beschwerden
Operatives
CRM
Diversifizierung
Marketing-Material
Warum wächst die Herausforderung
der Qualität der Daten
Gewachsene Bedeutung
des Faktors Information
für den Erfolg von
Unternehmen.
Fehlende Praxis in
Datenmanagement
Datenqualität
Immer häufigere
Prozessänderungen
Ausufernde
Datenmengen
Vermehrtes Inseltum
durch FertigAnwendungen
Was ist Datenqualität?
Aspekte (Dimensionen) der Datenqualität
Brauchbarkeit
der Daten!
1. Korrekt
2. Stimmig
3. Vollständig
4. Dokumentiert
5. Redundanzfrei
6. Aktuell
7. Verfügbar (Access)
8. Nützlich (TCO)
9. Handhabbar
10. Vertrauenswürdig
11. Harmonisch
Agenda
 Teurer Datensumpf" oder
"Schlechte Daten kosten einfach nur viel Geld"
 Einweisung in das Planspiel „Service GmbH“
„Wenn Controlling auf die Buchhaltung schimpft“
Eine simulierte Firma mit (einigen) Problemen.
 Hilfsmittel für die systematische Vorgehensweisen bei
Datenqualitätsanalysen
 Vorgehensmodell – Der rote Faden
 Metadaten-Dokumentation – Data Quality Plan
 Datenmodellierung – Die Grundlage
 Feldliste – Das klassische Hilfe
 Sonst.: Profiling Tool / ETL Tool / Datenbank
 Die wichtigsten Analyse-Techniken
 Die wichtigsten Analyse-Verfahren
 Fallbeispiel Service GmbH
Die
SERVICE GmbH
Fallbeispiel
Die SERVICE GmbH
• Vermittlung von Dienstleistungen
für Endkunden rund um das Handwerk
• Handwerksleistung
• Darlehen
• Großhandel für Baumärkte und
Einzelhandel
• Haushaltswaren
• Heimwerker
• Gartenbedarf
• KFZ-Zubehoer
• Elektroartikel
•Bereich Internet-/Versandhandel
• Computerteile
SERVICE GmbH
Die SERVICE GmbH
• Unterscheidung
• Privatkunden
• Firmenkunden
• Kundenkarte
• Privatkunden
• Entstand aus Zusammenschluss
mehrerer Vertriebsgesellschaften
• Integration der Stammdaten
„mit Hindernissen“
SERVICE GmbH
Erwartungen aus dem Unternehmen
Buchhaltung: Es fehlen Daten
Warum sind die Spediteursrechnungen so hoch?
Sind alle Bestellungen korrekt bezahlt worden?
Wie hoch sind die Versandkosten pro Lieferung?
Was wurde storniert?
Controlling:
Vergleichbarkeit fehlt
Marketing: Absatzzahlen
sind nicht aussagefähig
 Was kosten Produkte im
Einkauf?
 Wie teuer wurden Produkte
verkauft?
 Wie rentabel sind einzelne
Produkte?
Wie viel Kunden gibt es?
Lohnt die Kundekarte?
Welche Segmentierung gibt es?
Vertrieb: wünscht leichtere
Auswertungen
Was sind wichtige Produkte?
Was sind rentable Sparten?
Hat sich der Servicebereich
gelohnt?
SERVICE GmbH
Vertrieb
Marketing
Management
Buchhaltung
Controlling
Management:
Kennzahlen fehlen
 Wie hoch sind die
liquiden Mittel?
 Wie hoch sind die
Außenstände?
Bekannte Probleme:
• Bestimmte Lieferungen erreichen nie den Adressaten
• Adressen falsch
• Die Lieferung wird auch nicht bezahlt
• Oft Privatkunden
• Von bestimmten Artikeln werden sehr viele Stückzahlen
verkauft
• In den Statistiken laufen diese Produkte jedoch unter Verlustbringern
• (Verpackungsmengen stimmen nicht mit denen bei den Lieferanten
bezahlten Mengen überein)
• Was geschieht mit den Retouren?
• Lieferantenname in Produkte_Stamm passt nicht auf die
Lieferantennummer in der Lieferantentabelle
• Es gibt auch keine passenden Felder
Strategische Fragestellungen
• Welches sind die wirklich profitablen Produkte/Services?
•
•
•
•
Wo wird am meisten Kapital gebunden?
Welche Produkte beschaffen am meisten Kapital?
Welche Produkte verursachen den höchsten Aufwand?
Wie sind die Trends?
• Auf welche Bereiche soll man sich künftig stärker
fokussieren
• Einzelhandel?
• Servicevermittlung?
• Großkundengeschäft?
• Kann die verkaufte Menge genau festgestellt werden?
• Welcher Vertriebsmitarbeiter macht welchen Umsatz?
• Wie hoch ist die Kapitalrückflussquote
• Ausstände?
• Kreditlimits?
• Liquide Mittel für Neuinvestitionen?
Das Analysemodell zeigt oft andere
(strategische) Fragestellungen auf,
die zunächst nicht auf der operativen
Ebene offensichtlich sind.
Die Controlling-Sicht
Agenda
 Teurer Datensumpf" oder
"Schlechte Daten kosten einfach nur viel Geld"
 Einweisung in das Planspiel „Service GmbH“
„Wenn Controlling auf die Buchhaltung schimpft“
Eine simulierte Firma mit (einigen) Problemen.
 Hilfsmittel für die systematische Vorgehensweisen bei
Datenqualitätsanalysen
 Vorgehensmodell – Der rote Faden
 Metadaten-Dokumentation – Data Quality Plan
 Datenmodellierung – Die Grundlage
 Feldliste – Das klassische Hilfe
 Sonst.: Profiling Tool / ETL Tool / Datenbank
 Die wichtigsten Analyse-/Verfahrenstechniken
 Fallbeispiel Service GmbH
„Induktives und deduktives“ Vorgehen
• Wir wissen, vermuten
Dinge die nicht stimmen
• Wir können sinnvolle Analysen
aufgrund bekannter Dinge ableiten
Vermutungen
verifizieren
• Wir lassen uns überraschen,
was da noch kommt
• Wir stöbern in den Daten und
• entdecken Auffälligkeiten
• beginnen zu kombinieren
• stellen Hypothesen auf
• versuchen Zusammenhänge
zu beweisen
Neues
entdecken
Vorgehensweisen / Methoden
im Data Profiling
..
..
..
Metadaten
Data Quality Assessement
Erwartungen an die
Datenqualität
Assertion Testing
Abgleich
Metadata Verification
Neue Erkenntnisse
(Überraschungen)
Discovery
Bottom up
Unternehmensdaten
Data
Profiling
Methoden und Hilfsmittel
•
•
•
•
•
•
•
•
Datenmodellierung
Datenqualitätsprüfmethoden
Data Profiling
Data Profiling Tool
Attribut-Klassifizierung (Namen)
Kategorisierung von Qualitätsregeln
ETL-Tool
Datenbank
Agenda
 Teurer Datensumpf" oder
"Schlechte Daten kosten einfach nur viel Geld"
 Einweisung in das Planspiel „Service GmbH“
„Wenn Controlling auf die Buchhaltung schimpft“
Eine simulierte Firma mit (einigen) Problemen.
 Hilfsmittel für die systematische Vorgehensweisen bei
Datenqualitätsanalysen
 Vorgehensmodell – Der rote Faden
 Metadaten-Dokumentation – Data Quality Plan
 Datenmodellierung – Die Grundlage
 Feldliste – Das klassische Hilfe
 Sonst.: Profiling Tool / ETL Tool / Datenbank
 Die wichtigsten Analyse-Techniken
 Die wichtigsten Analyse-Verfahren
 Fallbeispiel Service GmbH
Vorgehensmodell Datenqualitätsanalyse
Zieldefinition
Geschäftsregeln
Erwartungen
Bestandsaufnahme
Owner
User
Ressourcen
Kosten
Modelle
Problemkomplexe
Priorisieren
Strukturanalysen
Felder
Objekte
Beziehungen
Hierarchien
Regelanalysen
Daten
Werte
Fach
Umsetzung Ergebnisse
Abgleich-Alt
Neudefinition
Monitoring
6 Phasen, 95 Aktivitäten, 16 Ergebnis-Templates, 1 Metamodell, Klassifizierungen
Bottom Up
Top Down
Planen
Vorgehensmodell für
Datenqualitätsprojekte
Erheben der Grunddaten
(Ist-Daten, Wahrnehmungen, Ziele)
Beschreibung der
Geschäftsprozesse
Geschäftsfelder
Data Owner / Daten-Interessenten / Konsumenten
DQ-Erwartungen
Bekannte Schwachstellen
Kosten
Prioritäten
Objektmodell
Datenflüsse und – Schnittstellen
Bekannte Geschäftsregeln
(Ist-Daten, Wahrnehmungen, Ziele)
Daten-/Modell-Prüfungen
Detailanalyse
Vollständigkeitsbetrachtung
Betrachtung der Verständlichkeit
Schlüsselanalysen / Beziehungsanalysen
Analyse von Hierarchien
Suche nach Redundanzen (z. B. Normalisierung)
Mengenanalyse / Stammdatenabgleiche
Überprüfen der Geschäftsregeln
Analyse der erkannten Schwachstellen
Verifizieren der DQ Erwartungen
Agenda
 Teurer Datensumpf" oder
"Schlechte Daten kosten einfach nur viel Geld"
 Einweisung in das Planspiel „Service GmbH“
„Wenn Controlling auf die Buchhaltung schimpft“
Eine simulierte Firma mit (einigen) Problemen.
 Hilfsmittel für die systematische Vorgehensweisen bei
Datenqualitätsanalysen
 Vorgehensmodell – Der rote Faden
 Metadaten-Dokumentation – Data Quality Plan
 Datenmodellierung – Die Grundlage
 Feldliste – Das klassische Hilfe
 Sonst.: Profiling Tool / ETL Tool / Datenbank
 Die wichtigsten Analyse-Techniken
 Die wichtigsten Analyse-Verfahren
 Fallbeispiel Service GmbH
Agenda
 Teurer Datensumpf" oder
"Schlechte Daten kosten einfach nur viel Geld"
 Einweisung in das Planspiel „Service GmbH“
„Wenn Controlling auf die Buchhaltung schimpft“
Eine simulierte Firma mit (einigen) Problemen.
 Hilfsmittel für die systematische Vorgehensweisen bei
Datenqualitätsanalysen
 Vorgehensmodell – Der rote Faden
 Metadaten-Dokumentation – Data Quality Plan
 Datenmodellierung – Die Grundlage
 Feldliste – Das klassische Hilfe
 Sonst.: Profiling Tool / ETL Tool / Datenbank
 Die wichtigsten Analyse-Techniken
 Die wichtigsten Analyse-Verfahren
 Fallbeispiel Service GmbH
Datenmodellierung
Ziel:
Aufspüren und Minimierung von Redundanzen
als eine der Hauptursachen von Datenfehlern
• Schlüssel
• Identifizierung von Dingen
• Functional Dependencies
• Versteckte Abhängigkeiten
• Beziehungen
• Existenzabhängigkeit
• Orphans
• Childless
• Normalisierung
• One Fact One Place
Normalisierung
• 1. Normalform
• Eine Entity ist in der 1. Normalform, wenn jedes seiner Attribute
genau einen Wert in sich aufnimmt. Sammlungen von Werten in
Attributen oder unterschiedliche Verwendungen sind nicht erlaubt.
Die Werte sollten nicht weiter teilbar, sondern von granularer Natur
sein.
• 2. Normalform
• Eine Entität befindet sich in der 2. Normalform, wenn alle Attribute
von dem kompletten Schlüssel abhängig sind.
• 3. Normalform
• Eine Entität befindet sich in der 3. Normalform, wenn alle Attribute
von dem Primary Key abhängen und nicht von Nicht-Schlüssel
anderen Attributen mitbestimmt werden (funktionale Abhängigkeit).
1. Normalform
2. Normalform
3. Normalform
3. Normalform
3. Normalform
Primary Key
NichtschlüsselAttribut
Nicht von einem Schlüssel
Abhängige Attribute
3. Normalform
Funktionale Abhängigkeit
Tabelle PRODUKTE_STAMM
Artikelnummer (PK) Artikelname
Zusätzliche „verborgene“
Functional Dependency
Beschreibung Artikelgruppennummer Artikelgruppe
Functional Dependency
über Primary Key (PK)
Funktionale Abhängigkeit
Tabelle ARTIKEL_GRUPPE
Artikelgruppennummer Artikelgruppe Beschreibung
Tabelle PRODUKTE_STAMM
Artikelnummer (PK) Artikelname
Zusätzliche „verborgene“
Functional Dependency
Redundante
Daten mit der Gefahr
von fehlerhaften
Einträgen
Beschreibung Artikelgruppennummer Artikelgruppe
Functional Dependency
über Primary Key (PK)
Agenda
 Teurer Datensumpf" oder
"Schlechte Daten kosten einfach nur viel Geld"
 Einweisung in das Planspiel „Service GmbH“
„Wenn Controlling auf die Buchhaltung schimpft“
Eine simulierte Firma mit (einigen) Problemen.
 Hilfsmittel für die systematische Vorgehensweisen bei
Datenqualitätsanalysen
 Vorgehensmodell – Der rote Faden
 Metadaten-Dokumentation – Data Quality Plan
 Datenmodellierung – Die Grundlage
 Feldliste – Das klassische Hilfe
 Sonst.: Profiling Tool / ETL Tool / Datenbank
 Die wichtigsten Analyse-Techniken
 Die wichtigsten Analyse-Verfahren
 Fallbeispiel Service GmbH
Wortstammanalyse hilft bei der
Klassifizierung von Column-Namen
Hauptwort
Eigenschaftsbenennung
Basistyp
Kunden_Wohnart_Nr
Information
zu einem
Kunden
wird
beschrieben
Die Art und
Weise, wie
ein Kunde
wohnt wird
beschrieben
unterschiedliche
Wohnungsarten sind
durchnummeriert
Bezugsobjekt
Beschreibende
Information
Charakter des
Attributes
Feldyp und
Art des Wertes
Rolle in
Ab-hängigkeitsbe-ziehung
Sind NULLs
erlaubt
Muss
Eindeutigkeit
vorliegen
Identifikatoren und
bezeichnende
Begriffe
meist numerisch
LHS
nein
ja
Beschreibungen,
Erzählungen, Texte
meist Text ,
beliebige Zeichen
RHS
ja
nein
Klassifikatoren
alphanumerisch,
in Bezug setzende
Begriffe,
oft wenige Werte
RHS
eher nicht, eine
Klassifizierung
sollte für alle Sätze
gelten
nein
Zustände
meist Text ,
beliebige Zeichen
RHS
nein
Zeiten
Date / Time
RHS
eher nicht, denn
Zustände sollten
für alle Sätze
gelten,
ja
Sequenzen,
Aufzählungen
Zählwerte)
meist numerisch,
oft versteckte
Schlüsselkandidaten
LHS
nein
ja
Mengen
meist numerisch,
einfache
Zahlenwerte ohne
weitere Angaben
RHS
ja
Operatoren und
abgeleitete Größen
meist Text ,
beliebige Zeichen
RHS
nein,
wenn etwas
gezählt wird, sollte
es immer gezählt
warden
nein
Werte
meist numerisch,
einfache
Zahlenwerte ohne
weitere Angaben
(brauchen i. d. R.
eine relativierende
Bezugsgröße z. B.
Preis -> Währung)
meist Text ,
beliebige Zeichen
RHS
nein
ja
RHS
nein
ja
Basistypgruppe
(brauchen i. d. R.
eine relativierende
Bezugsgröße z. B.
Preis -> Währung)
Maße,
Bezugsgrößen,
Einheiten
nein
ja
Feldliste
select
substr(table_name,1,18)
substr(column_name,1,28)
substr(data_type,1,8)
substr(data_length,1,3)
'|
'
'|
'
'|
'
'|
'
'|
'
'|
'
'|
'
'|
'
From dba_tab_columns
where table_name in
('PRODUKTE_STAMM',
'BESTELLUNG',
'LIEFERUNG',
'STORNIERUNG',
'BEST_POSITION',
'Zahlung',
'PRODUKTE_STAMM',
'ARTIKEL_GRUPPE',
'ARTIKELSPARTE',
'KUNDEN_STAMM',
'LIEFERANT',
'LAGER')
and owner = 'SG'
order by col
Tab,
Col,
Typ,
Len,
Nul,
Basis,
Bus,
Syn_zu,
Hom_zu,
Dom,
Max,
Min
• Über alle Tabellen
hinweg
• Alphabetisch sortiert nach
Spaltennamen
• Hilft beim Erkennen von
Homonymen und
Synonymen
• Hilft bei der Bewertung der
Tauglichkeit von
Spaltennamen
• Erlaubt Vorahnungen von
Schlüsselkandidaten
Feldliste
TAB
-----------------KUNDEN_STAMM
LIEFERANT
KUNDEN_STAMM
PRODUKTE_STAMM
PRODUKTE_STAMM
ARTIKEL_GRUPPE
PRODUKTE_STAMM
ARTIKEL_GRUPPE
PRODUKTE_STAMM
PRODUKTE_STAMM
BEST_POSITION
ARTIKELSPARTE
ARTIKEL_GRUPPE
ARTIKELSPARTE
KUNDEN_STAMM
KUNDEN_STAMM
PRODUKTE_STAMM
PRODUKTE_STAMM
BESTELLUNG
STORNIERUNG
LIEFERUNG
BEST_POSITION
BEST_POSITION
BESTELLUNG
BEST_POSITION
STORNIERUNG
LIEFERUNG
LIEFERUNG
BESTELLUNG
STORNIERUNG
LIEFERANT
KUNDEN_STAMM
KUNDEN_STAMM
KUNDEN_STAMM
COL
---------------------------ANREDE
ANSCHRIFT
ANZ_KINDER
ANZ_STEUCK_PRO_VERPACKUNG
ARTIKELGRUPPE
ARTIKELGRUPPENNAME
ARTIKELGRUPPENNR
ARTIKELGRUPPENNR
ARTIKELNAME
ARTIKELNR
ARTIKELNUMMER
ARTIKELSPARTENNAME
ARTIKELSPARTENNR
ARTIKELSPARTENNR
BERUFSGRUPPE
BERUFSGRUPPEN_NR
BESCHREIBUNG
BESTAND
BESTELLDATUM
BESTELLDATUM
BESTELLDATUM
BESTELLDATUM
BESTELLMENGE
BESTELLNR
BESTELLNR
BESTELLNR
BESTELLNR
BESTELL_TOTAL
BESTELL_TOTAL
BESTELL_TOTAL
BEVORZUGUNG_KLASSE
BILDUNG
BILDUNGS_NR
BRANCHE
TYP
-------VARCHAR2
VARCHAR2
NUMBER
NUMBER
VARCHAR2
VARCHAR2
NUMBER
NUMBER
VARCHAR2
NUMBER
VARCHAR2
VARCHAR2
NUMBER
NUMBER
VARCHAR2
VARCHAR2
VARCHAR2
NUMBER
DATE
DATE
DATE
DATE
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
VARCHAR2
VARCHAR2
VARCHAR2
LEN
--10
40
22
22
50
50
22
22
30
22
400
18
22
22
30
1
400
22
7
7
7
7
22
22
22
22
22
22
22
22
22
30
1
30
NUL
-----|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BASIS
-----|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BUS
-----|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SYN_ZU
-----|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HOM_ZU
-----|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DOM
-----|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MAX
-----|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MIN
----|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BEST_POSITION
POSNUMMER
NUMBER
22
|
|
|
|
|
|
|
|
Agenda
 Teurer Datensumpf" oder
"Schlechte Daten kosten einfach nur viel Geld"
 Einweisung in das Planspiel „Service GmbH“
„Wenn Controlling auf die Buchhaltung schimpft“
Eine simulierte Firma mit (einigen) Problemen.
 Hilfsmittel für die systematische Vorgehensweisen bei
Datenqualitätsanalysen
 Vorgehensmodell – Der rote Faden
 Metadaten-Dokumentation – Data Quality Plan
 Datenmodellierung – Die Grundlage
 Feldliste – Das klassische Hilfe
 Sonst.: Profiling Tool / ETL Tool / Datenbank
 Die wichtigsten Analyse-Techniken
 Die wichtigsten Analyse-Verfahren
 Fallbeispiel Service GmbH
Data Profiling Tool
• Standardanalysen
•
•
•
•
•
•
•
•
Unique Keys
Functional Dependencies
Relationships
Domains
Redundant Columns
Patterns, Types
Statistiken
Six Sigma
• Rules (Business-/ IT-Rules)
• Generierung von
Korrekturen
• Auditing
• Eingebettet in ein ETL-Tool
• hohe Flexibilität beim
Bereitstellen von Daten
• Direktes Anwenden erkannter
Regeln für eine spätere
Datenaufbereitung und
Minitoring
• Ablaufumgebung ist die
Datenbank
• Datennähe
Data Profiling Tool
Methoden
Die
operativen
Daten
Feintuning zu
den Analysemethoden
Protokollierung
laufende
Analysen
Drill Down zu den operativen Daten
ETL - Tool
• SQL-basiert
• wenig Lernaufwand
• Ablaufumgebung ist die Datenbank
• hohe Performance
• Wiederverwendung von DB-Funktionen und Infrastruktur
• Metadaten- / Modell-gesteuert
Profiling mit OWB
• Lizenz-Situation
• Arbeiten mit dem Tool
• Alternativen
Warum ist ein Tooleinsatz bei
Datenqualitätsanalysen sinnvoll?
• Das meiste geht auch ohne Tool, allerdings
mühsam
Functional Dependencies
Starten eines
GenerierungProfiling-Laufs Rule
Starten einer CorrectionMapping-Generierung
Auswahl und Ergebnisansicht Methoden
Die Tabellen,
die zu dem
Analysefukus
gehören
Tabellen-Darstellung
Chart-Darstellung
Feintuning
zu den
Analysemethoden
Drill-Werte
Operative Datensätze
AnalyseJobProtokolle
Aktivierbare Business Rules
Analyseumgebung
LDAP
DBMS_LDAP
non Oracle
DB2, SQL Server
Informix, Teradata
Meta Daten
Repository
Gateway
/ ODBC
/ FTP
Oracle 9i / 10g / 11g
SAP
Integrator
SAP R/3
Source
Stage
Siebel CRM
Oracle
eBusiness
Text / XML
Profiling
Stage
Analyse Datenbank
Direct Path
DBLink
Transportable
Modules
Eindeutigkeitsanalysen (Unique Key)
Wertebereichsanalysen (Domain)
Funktionale Abhängigkeiten
Beziehungen (Relational)
Wertmustererkennung (Pattern)
Formate (Data Type)
Statistiken (Aggregation)
Individuelle Regeln (Data Rules)
Korrekt: Zusammen 100%
(Alle Fälle erfasst)
Korrekt, muß 0 sein
Korrekt:
Es kann nur ein
Wert gepflegt sein.
Korrekt, muß 0 sein
Korrekt, muß 0 sein
Korrekt, das sind
die richtigen Werte
Korrekt, das sind
richtige Werte
Problem:
kein Schlüsselfeld
ist gepflegt
Korrekt, muß 0 sein
Korrekt:
Zusammen
100%.
(Alle Fälle erfasst)
Korrekt, muß 0 sein
Problem
Korrekt
Native PL/SQL Profiling Routinen
•
•
•
•
Können von jedem genutzt werden
Können verändert und weiterentwickelt werden
Laufen in der Datenbank
Decken die wichtigsten Profiling-Funktionen ab
• Aggregationen
• (Max/Min, Nulls, Selektivität, Numerisch, alphanumerisch, prozentual Anteile
• Domain-Analyse
• Liste der Domains, Anzahl Domain-Werte, prozentuale Anteile
• Pattern-Analyse
• Liste der Pattern, Anzahl Pattern-Werte, prozentuale Anteile
• Functional Dependency
• LHS-Key,RHS-Attribute, Anzahl DP-Treffer, prozentuale Anteile, Anzahl
Fehlerfälle, Orphan-Anzahl, Orphan-Prozent
• Data Type Analyse
• Numerisch, alphanumerisch, date, null, Anzahl Werte, prozentuale Werte
• Unique-Key-Analyse
• Anzahl Treffer, Anzahl Sätze, prozentualer Anteil
Native PL/SQL Profiling Routinen
DATA Viewer
SQL Developer
sys.dba_tab_columns
DQ_Kunde_UNIQUE
DQ_Kunde_DOMAIN
DQ_Kunde_PATTERN
Kunde
DQ_Kunde_TYPE
DQ_Kunde_AGGR
DQ_CALL_UNIQUE
DQ_CALL_DOMAIN
DQ_CALL_PATTERN
DQ_CALL_TYPE
DQ_CALL_AGGR
DQ_CALL_FD
DQ_Kunde_FD
Datenschema
SYS Schema
Hilfsscripte
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Alpha_Num_Check.txt
Domain_Analyse.txt
DQ_Datatype.txt
DQ_Datatype_Proc.txt
DQ_Domain.txt
DQ_Domain_Proc.txt
DQ_Feldliste_T300.txt
DQ_Statistik.txt
FD.txt
Feldabhaengigkeit_FD.txt
Feldabhaengigkeit_logisch.txt
Feldabhaengigkeit_logisch_Wertemengen.txt
Feldabhaengigkeit_logisch_Wertereihenfolge.txt
Feldstatistik.txt
•
•
•
•
•
•
•
•
•
•
•
•
•
isdate_2.txt
isnumber.txt
Kardinalitaet.txt
Maske.txt
Muster_Pattern.txt
Orphans_Childless.txt
Pattern.txt
Redundant.txt
Regular_Expression_Syntac.txt
strcnt.txt
Tabellenuebergreifende_Feldabgaengigkeit.txt
Unique_test.txt
WITH_Clause_Numeric-Check.txt
Agenda
 Teurer Datensumpf" oder
"Schlechte Daten kosten einfach nur viel Geld"
 Einweisung in das Planspiel „Service GmbH“
„Wenn Controlling auf die Buchhaltung schimpft“
Eine simulierte Firma mit (einigen) Problemen.
 Hilfsmittel für die systematische Vorgehensweisen bei
Datenqualitätsanalysen
 Vorgehensmodell – Der rote Faden
 Datenmodellierung – Die Grundlage
 Metadaten-Dokumentation – Data Quality Plan
 Feldliste – Das klassische Hilfe
 Sonst.: Profiling Tool / ETL Tool / Datenbank
 Die wichtigsten Analyse-Techniken
 Die wichtigsten Analyse-Verfahren
 Fallbeispiel Service GmbH
Die wichtigsten Analyse-Techniken
1.
2.
3.
4.
5.
Fragebögen / Templates
Vollständigkeitsanalyse
Schnittstellenanalyse
Wo und wie liegen Daten vor?
Synonymen / Homonymenanalyse
Verfahren
6. Prüfungen von Datenstrukturen
• Felder, Tabellen, Beziehungen
• Originaldaten oder Kopien?
• Müssen alle Daten analysiert werden?
Techniken
Prüfungen von
Datenstrukturen
Attribut – bezogen
• Not Null / Pflichtfelder
• Füllgrade
• Formatangaben
•
•
Typen, Längen
Pattern
• Check Constraint
• Wertbereiche (Domains)
•
•
Ober-/Untergrenzen / Wertelisten
Average
Satz – bezogen (Tupel)
• Abhängigkeiten von Werten in anderen
Attributen desselben Satzes
Satzübergreifend (Relationen)
• Primary Key / Eindeutigkeit
• Aggregat – Bedingungen
•
•
Ober- Untergrenzen von Summen
Anzahl Sätze pro Intervall usw.
• Rekursive Zusammenhänge
•
Verweise auf andere Sätze derselben Tabelle
(Relation)
Tabellenübergreifende (Interrelational)
• Foreign Key
• Aggregat – Bedingungen
•
•
Ober- Untergrenzen von Summen
Anzahl Sätze pro Intervall usw.
• Rekursive Zusammenhänge
•
Verweise auf Sätze einer anderen Tabelle (Relation)
Zeit – bezogen (Tupel)
• Zeitinvariante Inhalte
•
Umgang mit Ereignisse
• Zeitabhängige Veränderungen
• Über die Zeit mit anderen Daten
korrelierende Feldinhalte
Verteilungs – bezogen
• Arithmetische Mittel
• Varianz / Standardabweichungen
• Qualitätsmerkmale und Mengen
Prüfungen in der Datenbank
• Viele Prüfungen in der Datenbank
• An OLTP-Anfordertungen orientiert
• Oft nicht Massendaten-tauglich
• Prüfen großer Datenmengen mit mengenbasierter
Logik
•
•
•
•
CASE
Zwischentabellen
WITH
Sub-Select
Prüfkonzepte in der Datenbank
Statistiken
Prüfungen
z. B. mit Table Functions
Stage-Tabelle
Kopieren
Varchar2()
Geprüfte Daten
Date
Number
Varchar2()
• Programmieraufwendig
• Kann
performance-kritisch
sein
• Erlaubt auch
fachliche Prüfungen
Prüfkonzepte in der Datenbank
Stage-Tabelle
+ Geprüfte Daten
Kopieren
Statistik
Routine
Date
Number
Varchar2()
Check
Constraints
Bad
File
DML
Error Log
Fehlerhafte
Sätze
Statistiken
• Einfach
implementierbar
• Bessere Performance
• Nur bei aktivierten
Constraints
• Fachliche Prüfungen
kaum möglich
• Eventuell zusätzliche
Prüfungen nötig
Error Logging
Kunde
Insert into Kunde
Values (......)
KUNDENNR
VORNAME
NACHNAME
ORTNR
STRASSE
TELEFON
Kunde_err
KUNDENNR
VORNAME
NACHNAME
ORTNR
STRASSE
TELEFON
ORA_ERR_NUMBER$
ORA_ERR_MESG$
ORA_ERR_ROWID$
ORA_ERR_OPTYP$
ORA_ERR_TAG$
• Constraints
•
•
•
•
Unique Key / Primary Key
Foreign Key
Not Null
Check Constraint
Error Logging: Beispiel 1
Error Logging: Beispiel 2
1
4
SQL> desc T3
Name
Type
--------------------------------- -------- -------F1
NUMBER
F2
NUMBER
insert into t3 values(1,2)
LOG ERRORS INTO err$_T3
5
2
exec DBMS_ERRLOG.CREATE_ERROR_LOG ('T3')
3
SQL> desc ERR$_T3;
Name
Type
----------------------------------------- ------------ORA_ERR_NUMBER$
NUMBER
ORA_ERR_MESG$
VARCHAR2(2000)
ORA_ERR_ROWID$
ROWID
ORA_ERR_OPTYP$
VARCHAR2(2)
ORA_ERR_TAG$
VARCHAR2(2000)
F1
VARCHAR2(4000)
F2
VARCHAR2(4000)
1* select substr(ora_err_number$,1,10) Nr,substr(ora_err_mesg$,1,50) Err
from ERR$_T3
SQL> /
NR
ERR
---------- -------------------------------------------------1
ORA-00001: unique constraint (DWH4.IDX_T3) violate
Einschränkungen + Ausnahmen
• Direct Path Insert mit Unique-Constraints
• Update (Merge) mit Unique-Constraints
• Error Logging verlangsamt den Ladeprozess
Arbeiten ohne Constraints
• Constraints stören bei Massenaktionen im DWH
• Ausschalten der Constraints
• Übernahme der Aufgaben von Constraints durch
ETL-Prozess
• Mengen-basierte Vorgehensweise
Feldprüfungen:
Was kann geprüft werden
• Formatprüfungen
• Feldtypen
• Stringformate, Ausdrücke
•
•
•
•
•
Not Null
Eindeutigkeit
Wertebereiche
Spaltenübergreifende Table_Checks
Inhaltliche Regeln
Wichtiges Hilfsmittel:
CASE-Anweisung
select case 1
when 1 then 1
when 2 then 2
else 0
end ergebnis
from dual;
Beispiel 1
select
case
when isnumeric(999) = 1 then 'Numerisch‘‚
else 'nicht numerisch‘‚
end Ergebnis
from dual;
Beispiel 2
with tab as (
select '123' col1 from dual union all
select '123' col1 from dual union all
select 'x23d' col1 from dual )
select
case
when regexp_like(col1,'^[[:digit:]]') then ‘numerisch'
else ‘Nicht numerisch'
end
from tab
Abarbeitungslogik mit CASE
Beispiel mit temporärer Tabelle
Gepruefte_Daten
Temp-Tabelle
Stage-Tabelle
Varchar2()
Kopieren
Feld1
Feld2
Feld3
Varchar2()
Insert into
temp_table
Select
case ....
From
Stage_Table
Feld1
Feld2
Feld3
Feld1_is_null
Feld1_is_numeric
Feld2_is_numeric
Insert ALL
when
Feld_1_is_null =1
into
Error_Daten
when
Feld_1_is_null=0
into
Gepruefte_Daten
Date
Number
Varchar2()
Error_Daten
Date
Number
Varchar2()
• Temporäre Tabelle ist optional
• Ist aber damit wesentlich übersichtlicher
• Erlaubt Kombination von unterschiedlichen Prüfkriterien
Abarbeitungslogik mit CASE
Aufbau einer Flag-Tabelle zur besseren Dokumentation
TGT_Table
Key
SRC_Table
Key
Prueftabelle
Key
Feld1
Flag
Insert into TGT_TABLE
.....
Select ..,..,..,..
When
SRC_TABLE.key = Prueftable.key and
Prueftable.key = 0
Feld1
Feld2
Feld3
Feld2
Feld3
Feld4
...
Insert into Prueftabelle
Select
Key,
case
when (Feld1 is NULL) then 1
when (Feld2 != 100) then 2
when (Feld3 < 300) then 3
when (Feld4 = 0) then 4
Else 0
end
From
SRC_TABLE;
Insert into TGT_TABLE
.....
When
SRC_TABLE.key = Prueftable.key and
Prueftable.key != 0
From
SRC_TABLE,Prueftabelle
Feld4
...
Err_Table
Key
Feld1
Feld2
Feld3
Feld4
...
Beispiel mit graphischer Modellierung:
Einsatz von CASE und Zwischentabelle
Beispiel mit manuellem SQL:
Einsatz von CASE und Zwischentabelle
INSERT INTO EL_KUNDE_TMP
(KUNDENNR,VORNAME,NACHNAME,
KUNDENNR_IS_NUMERIC)
(SELECT NUMMER , NAME , NACHNAME ,
case when is_number ( NUMMER ) = ‘ Y‘ then 1 else 0 end
51002 Zeilen wurden erstellt.
FROM
SRC1 ) ;
Abgelaufen: 00:00:01.45
51002 Zeilen wurden erstellt.
INSERT
Abgelaufen: 00:00:02.67
ALL
WHEN KUNDENNR_IS_NUMERIC = 1 THEN
INTO
EL_KUNDE
(KUNDENNR, VORNAME,NACHNAME)
VALUES
(KUNDENNR, VORNAME, NACHNAME)
WHEN KUNDENNR_IS_NUMERIC = 0 THEN
INTO
EL_KUNDE_FEHLER
(KUNDENNR,VORNAME, NACHNAME,KUNDENNR_IS_NUMERIC)
VALUES
(KUNDENNR, VORNAME, NACHNAME, KUNDENNR_IS_NUMERIC)
(SELECT
KUNDENNR,VORNAME ,NACHNAME,ORTNR ,STRASSE ,TELEFON ,KUNDENNR_IS_NUMERIC
FROM
EL_KUNDE_TMP );
Abarbeitungslogik mit CASE / WITH
Arbeiten mit WITH-Clause ohne Zwischentabelle
create table src (
schluessel varchar2(30),
Beschreibung varchar2(30),
Rechenfeld varchar2(30))
SCHLUESSEL
---------1
1
2
3
a
BESCHREIBUNG
--------------Wert
Wert
xxxx
yyyy
www
RECHENFELD
---------8*7
8*7
888
01
55
create table tgt (
schluessel number,
Beschreibung varchar2(30),
Rechenfeld number)
SCHLUESSEL
---------2
3
BESCHREIBUNG
RECHENFELD
--------------- ---------xxxx
888
yyyy
1
Insert into tgt
select * from (
with lc as
(
select
(case when is_number(schluessel) = 'Y' then schluessel else 'BUG' end) schluessel ,
Beschreibung,
(case when is_number(Rechenfeld) = 'Y' then Rechenfeld else 'BUG' end) Rechenfeld
from src)
select schluessel , Beschreibung, Rechenfeld from lc
where schluessel != 'BUG' and Rechenfeld != 'BUG‚)
Prüfungen auf numerisch
Hilfsfunktion Is_Number bzw. regexp_like
create or replace function is_number(in_var in varchar2)
return varchar2
is
v_number number;
begin
select to_number(in_var) into v_number from dual;
return 'Y'; -- No exception, so is a number
exception
when others then
return 'N'; -- is not a number
end;
select
case
Alternative mit REGEXP_LIKE
when regexp_like(col1,'^[[:digit:]]') then ‘numerisch'
else ‘Nicht numerisch'
end
from tab
BEGIN
Hilfsfunktion:
Date_Check
inDate:= trim(str);
if dateCheck(inDate, 'mm-dd-yyyy') = 'false'
AND dateCheck(inDate, 'mm-dd-yy') = 'false'
AND dateCheck(inDate, 'yyyy-mm-dd') = 'false'
AND dateCheck(inDate, 'yy-mm-dd') = 'false'
AND dateCheck(inDate, 'yyyy-mon-dd') = 'false‚
AND dateCheck(inDate, 'yy-mon-dd') = 'false‚
AND dateCheck(inDate, 'dd-mon-yyyy') = 'false‚
AND dateCheck(inDate, 'dd-mon-yy') = 'false‚
AND dateCheck(inDate, 'mmddyy') = 'false‚
AND dateCheck(inDate, 'mmddyyyy') = 'false‚
AND dateCheck(inDate, 'yyyymmdd') = 'false'
AND dateCheck(inDate, 'yymmdd') = 'false‚
AND dateCheck(inDate, 'yymmdd') = 'false'
AND dateCheck(inDate, 'yymondd') = 'false‚
AND dateCheck(inDate, 'yyyymondd') = 'false‚
AND dateCheck(inDate, 'mm/dd/yyyy') = 'false'
AND dateCheck(inDate, 'yyyy/mm/dd') = 'false‚
AND dateCheck(inDate, 'mm/dd/yy') = 'false'
AND dateCheck(inDate, 'yy/mm/dd') = 'false‚
AND dateCheck(inDate, 'mm.dd.yyyy') = 'false'
AND dateCheck(inDate, 'mm.dd.yy') = 'false'
AND dateCheck(inDate, 'yyyy.mm.dd') = 'false'
AND dateCheck(inDate, 'yy.mm.dd') = 'false'
then
return 'false';
else
return 'true';
end if;
--exception
--when others then return 'false';
create or replace function IsDate (str varchar2)
return varchar2 is
inDate varchar2(40);
FUNCTION dateCheck (inputDate varchar2,
inputMask varchar2)
RETURN varchar2
IS dateVar date;
BEGIN
dateVar:= to_date(inputDate,inputMask);
return 'true';
exception
when others then
return 'false';
END;
• In Verbindung mit der
Case-Anweisung
END;
Prüfungen auf Feldtypen
Variante mit TRANSLATE
select schluessel,
CASE
WHEN LENGTH(TRIM(TRANSLATE(schluessel, ' +-.0123456789',' '))) is null and
schluessel is not null
THEN 'numerisch'
WHEN LENGTH(TRIM(TRANSLATE(schluessel, ' +-.0123456789',' '))) is not null
THEN 'alphanumerisch‚
WHEN schluessel is NULL then 'NULL'
ELSE 'NULL‚
END Typ
from src
SCHLUESSEL
------------1
1
2
3
a
BESCHREIBUNG
--------------Wert
Wert
xxxx
yyyy
www
www
RECHENFELD
-------------8*7
8*7
888
01
55
55
SCHLUESSEL
------------1
1
2
3
a
TYP
-------------numerisch
numerisch
numerisch
numerisch
alphanumerisch
NULL
Satzübergreifende Prüfungen
pro Feld
• Eindeutigkeit
Satzübergreifende Prüfungen
Eindeutigkeit
• Finden von Schluessel-Kandidaten
• Erfüllung der 2. und 3. Normalform
• Prüfung ergibt nicht für alle Feldtypen einen Sinn
• i. d. R. LHS-Kandidaten (siehe Feldlisten-Analyse)
• Herausfinden von potentiellen ETL-JobAbbruchgründen
• Beim Schreiben in Tabellen mit Unique-Constraints
• Beim Aufbau von Parent-Child-Beziehungen in denen
eindeutige Parents gebraucht werden
Eindeutigkeit
Anzeigen aller Feldwerte mit ihrer jeweiligen Häufigkeit
SQL> select * from unique_test;
SCHLUESSEL
---------1
1
2
32
42
FELD
---------abc
abc
abc
abc
abc
select SCHLUESSEL, count(SCHLUESSEL) cnt from unique_test
group by SCHLUESSEL
SCHLUESSEL
CNT
---------- ---------1
2
42
1
2
1
32
1
Anzeigen des prozeduralen Grades der Eindeutigkeit
select round(nr_values*100/anz,2) Prozent, nr_values,anz from
(select count(*) nr_values from
(select SCHLUESSEL, count(SCHLUESSEL) cnt from unique_test group by SCHLUESSEL)) ,
(select count(*) anz from unique_test);
PROZENT NR_VALUES
ANZ
---------- ---------- ---------80
4
5
Anzeigen der Werte, die die Eindeutigkeit verletzen
select schluessel, n from
(select count(schluessel) n, schluessel from unique_test group by SCHLUESSEL )
where n > 1
SCHLUESSEL
N
---------- ---------1
2
Prüfung auf Eindeutigkeit:
Beispiel graphisch und manuell
insert into el_kunde (kundennr,vorname,nachname,ORTNR,strasse,TELEFON)
select src2.nummer,src2.name,src2.name,src2.nummer,src2.name,src2.nummer from SRC2,
(select nummer from
(select count(nummer) n, nummer from src2 group by nummer)
where n = 1) doppelte
where src2.nummer = doppelte.nummer;
Feldstatistik
NULL, MAX/MIN, Prozent, Count, Numeric, Alpanumeric…
with lc as (
select
SCHLUESSEL ,
(CASE WHEN SCHLUESSEL is null THEN 1 ELSE 0 END)
Ist_Null,
(CASE WHEN LENGTH(TRIM(TRANSLATE(SCHLUESSEL , ' +-.0123456789',' '))) is null and
SCHLUESSEL is not null THEN 1 ELSE 0 END) Ist_Numeric
from unique_test )
Select
MAX(SCHLUESSEL )
Max_Wert,
MIN(SCHLUESSEL )
Min_Wert,
count(distinct(SCHLUESSEL ))
Anz_Werte,
round(count(distinct SCHLUESSEL )*100 / count(*),2)
Selectivitaet,
sum(ist_null)
ist_null,
sum(ist_null)*100/count(*)
ist_null_prozent,
sum(Ist_Numeric)
ist_numeric,
sum(Ist_Numeric)*100/count(*)
ist_numeric_prozent,
count(*)-(sum(ist_null)+sum(Ist_Numeric))
ist_Alphanumeric,
(count(*)-(sum(ist_null)+sum(Ist_Numeric)))*100/count(*) ist_Alphanumeric_Prozent
from lc;
MAX_WERT MIN_WERT ANZ_WERTE SELECTIVITAET IST_NULL IST_NULL_PROZENT
-------- -------- --------- ------------- --------- ---------------42
1
4
80
0
0
IST_NUMERIC IST_NUMERIC_PROZENT IST_ALPHANUMERIC IST_ALPHANUMERIC_PROZENT
----------- ------------------- ---------------- --------------------5
100
0
0
Herausfiltern und Protokollieren Not
Null Feldern mit graphischen Mitteln
case
when F2 is NULL
then 1
else 0
end
Prüfen auf Eindeutigkeit der
Eingabesätze (Graphik)
Es dürfen nur Sätze geladen werden, die einmal im Quell-bestand vorkommen.
Select F1 from
(Select count(F1) n,F1 from s group by F1)
where n > 1;
Mustererkennung
(Translate)
create table Kunde
( KUNDENNR
NUMBER(10),
KUNDENNAME
VARCHAR2(20),
BERUFSGRUPPE VARCHAR2(20),
SEGMENT
NUMBER(10));
9
A
a
B
{n}
digit
upper letter
lower letter
blank
n-time repetition
SQL> select * from kunde where rownum < 10;
KUNDENNR
-------705
706
707
708
709
710
711
712
713
KUNDENNAME
----------Meister
Schmidt
Meister
Kraemer
Schneider
Schuster
Mueller
Schneider
Hartmann
BERUFSGRUPPE
SEGMENT
-------------- ------Angestellte
4
Rentner
34
Angestellte
16
Beamte
38
Freiberufler
16
Selbstaendige
47
Unbeschaeftigt
2
Angestellte
36
Rentner
46
column Anzahl format 9999999
column Maske format a30
select sum(nr_value) Anzahl, maske from
(with lc as (
select berufsgruppe,count(NVL(berufsgruppe,'NULL')) nr_value from
KUNDE group by berufsgruppe)
select berufsgruppe, nr_value,strcnt(TRANSLATE(berufsgruppe,
' 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',
'b9999999999AAAAAAAAAAAAAAAAAAAAAAAAAAaaaaaaaaaaaaaaaaaaaaaaaaaa'))
Maske
from lc order by NR_Value DESC)
group by maske
ANZAHL MASKE
------ -------4 Aa{11}
14 Aa{13}
2 Aa{11}b
4 Aa{10}
5 Aa{5}
13 Aa{6}
7 Aa{12}
Mustererkennung
(REGEXP_LIKE)
create table Kunde
( KUNDENNR
NUMBER(10),
KUNDENNAME
VARCHAR2(20),
BERUFSGRUPPE VARCHAR2(20),
SEGMENT
NUMBER(10));
SQL> select * from kunde where rownum < 10;
KUNDENNR
-------705
706
707
708
709
710
711
712
713
KUNDENNAME
----------Meister
Schmidt
Meister
Kraemer
Schneider
Schuster
Mueller
Schneider
Hartmann
BERUFSGRUPPE
SEGMENT
-------------- ------Angestellte
4
Rentner
34
Angestellte
16
Beamte
38
Freiberufler
16
Selbstaendige
47
Unbeschaeftigt
2
Angestellte
36
Rentner
46
Finde alle Sätze, deren Segment-Wert nur 1-stellig numerisch ist
SQL> select * from kunde where REGEXP_LIKE(segment,'^[[:digit:]]{1}$');
KUNDENNR
---------705
711
724
726
728
743
KUNDENNAME
-------------------Meister
Mueller
Schuster
Kraemer
Mueller
Bauer
BERUFSGRUPPE
SEGMENT
-------------------- ---------Angestellte
4
Unbeschaeftigt
2
Student
2
Rentner
5
Unbeschaeftigt
9
Freiberufler
3
Parameter
* Match 0 or more times
? Match 0 or 1 time
+ Match 1 or more times
{m} Match exactly m times
{m,} Match at least m times
{m, n} Match at least m times but no more than n times
\n Cause the previous expression to be repeated n times
[:alnum:] Alphanumeric characters
[:alpha:] Alphabetic characters
[:blank:] Blank Space Characters
[:cntrl:] Control characters (nonprinting)
[:digit:] Numeric digits
[:graph:] Any [:punct:], [:upper:], [:lower:], and [:digit:] chars
[:lower:] Lowercase alphabetic characters
[:print:] Printable characters
[:punct:] Punctuation characters
[:space:] Space characters (nonprinting), such as carriage return, newline, vertical tab, and form feed
[:upper:] Uppercase alphabetic characters
[:xdigit:] Hexidecimal characters
 http://www.stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/ap_posix001.htm
Mustererkennung
(REGEXP_LIKE)
create table P
(PNR
number,
pruef_wert varchar2(20));
SQL> select * from p;
PNR
---------1
2
3
4
5
7
6
8
PRUEF_WERT
------------8
89
A89
D-25436
Eumel
A89
D-1000
D-10003
select count(pattern) Anzahl, pattern Muster from
(select PNR,
case
when REGEXP_LIKE(pruef_wert,'^[[:digit:]]{1}$') then 'einstellig numerisch'
when REGEXP_LIKE(pruef_wert,'^[[:digit:]]{2}$') then 'zweistellig numerisch'
when REGEXP_LIKE(pruef_wert,'^[[:upper:]]{1}[[:digit:]]{2}$')
then '1 Großbuchstabe + 2 Zahlen'
when REGEXP_LIKE(pruef_wert,'^[[:upper:]]{1}-[[:digit:]]{5}$') then 'PLZ'
else
'falscher Wert'
ANZAHL MUSTER
-------------------------------end pattern
1
zweistellig numerisch
from P)
2 1 Großbuchstabe + 2 Zahlen
group by pattern;
2 falscher Wert
1 einstellig numerisch
2 PLZ
Check Constraint mit
Regular Expressions
CREATE TABLE Check_KUNDE (
KUNDENNR
NUMBER,
GESCHLECHT
NUMBER,
VORNAME
VARCHAR2(50),
NACHNAME
VARCHAR2(50),
ANREDE
VARCHAR2(10),
GEBDAT
DATE,
ORTNR
NUMBER,
STRASSE
VARCHAR2(50),
TELEFON
VARCHAR2(30)
);
Regel:
Im Kundennamen müssen Buchstaben
vorkommen und
keine reine Zahlenkolonne
Alter table check_kunde
add constraint Ch_KD_Name
check(REGEXP_LIKE(NACHNAME, '[^[:digit:]]'));
insert into check_kunde (kundennr,Geschlecht, Vorname, Nachname, Anrede,Gebdat,Ortnr,Strasse,Telefon)
Values (9,1,'Klaus','123','Herr','01.01.60',2,'Haupstr.',08923456);
FEHLER in Zeile 1:
ORA-02290: CHECK-Constraint (DWH.CH_KD_NAME) verletzt
Domain-Analysen
create table Kunde
( KUNDENNR
NUMBER(10),
KUNDENNAME
VARCHAR2(20),
BERUFSGRUPPE VARCHAR2(20),
SEGMENT
NUMBER(10));
SQL> select * from kunde where rownum < 10;
KUNDENNR
-------705
706
707
708
709
710
711
712
713
variable Anz_Records number;
begin
select count(*) into :Anz_Records
from Kunde;
end;
/
select * from (
select
BERUFSGRUPPE
Value_name,
count(BERUFSGRUPPE) Anzahl_Werte,
case
when count(BERUFSGRUPPE) = 0 then 0
else
round((count(BERUFSGRUPPE)*100)/:Anz_records,2)
end Prozent
from KUNDE group by BERUFSGRUPPE
order by Anzahl_Werte desc)
where rownum < 10;
KUNDENNAME
----------Meister
Schmidt
Meister
Kraemer
Schneider
Schuster
Mueller
Schneider
Hartmann
BERUFSGRUPPE
SEGMENT
-------------- ------Angestellte
4
Rentner
34
Angestellte
16
Beamte
38
Freiberufler
16
Selbstaendige
47
Unbeschaeftigt
2
Angestellte
36
Rentner
46
VALUE_NAME
ANZAHL_WERTE PROZENT
--------------- ------------ ------Unbeschaeftigt
14
28.57
Rentner
8
16.33
Selbstaendige
7
14.29
Student
5
10.2
Beamte
5
10.2
Angestellte
4
8.16
Freiberufler
4
8.16
Freiberufler
2
4.08
Spaltenübergreifende
Prüfungen
• Wertabhängigkeiten
• Synchrone Wertzuordnung
• Ableitung
• 1:1
• Formeln
• Kardinalität
• Functional Dependencies
Wertabhängigkeiten
(asynchron)
create table t
(F1 varchar2(5),
F2 varchar2(5),
F3 varchar2(5));
SQL> select * from t;
F1
----a
a
b
c
a
d
d
F2
----ab
am
bx
ck
al
dt
ab
gh
F3
----b
b
x
k
b
t
t
LHS (F1)
(1:3)
a
b
c
d
RHS(F2)
(1:2)
ab
am
bx
ck
al
dt
ab
gh
select count(distinct f1)
LHS_Anzahl, f2 RHS_Wert
from t group by f2;
LHS_ANZAHL
---------1
2
1
1
1
1
1
RHS_WERT
--------dt
ab
bx
gh
am
ck
al
with lc as
(select count(distinct f1) LHS_Anzahl,f2 from t group by f2)
(select LHS_Anzahl,count(LHS_Anzahl) Vorkommen from LC group by LHS_Anzahl)
LHS_ANZAHL VORKOMMEN
---------- ---------1
6
2
1
Bei 6 RHS-Werten gibt es nur exakt 1 LHS-Wert
Bei 1 RHS-Wert gibt es zwei LHS-Werte
Wertabhängigkeiten
(synchron)
create table t
(F1 varchar2(5),
F2 varchar2(5),
F3 varchar2(5));
SQL> select * from t;
F1
----a
a
b
c
a
d
d
F2
----ab
am
bx
ck
al
dt
ab
gh
F3
----b
b
x
k
b
t
t
LHS (F1)
(1:1)
a
a
b
c
a
d
d
RHS(F3)
(1:1)
b
b
x
k
b
t
t
select count(distinct f1)
LHS_Anzahl, f3 RHS_Wert
from t group by f3;
LHS_ANZAHL
---------1
1
1
1
1
RHS_WERT
-------k
b
t
x
with lc as
(select count(distinct f1) LHS_Anzahl,f3 from t group by f3)
(select LHS_Anzahl,count(LHS_Anzahl) Vorkommen from LC group by LHS_Anzahl)
LHS_ANZAHL VORKOMMEN
---------- ---------1
5
Bei 5 RHS-Werten gibt es nur exakt 1 LHS-Wert
Wertabhängigkeiten
Inhaltliche Abhängigkeit von zwei Feldern
• Variante 1: Wertereihenfolgen
• Variante 2: Wertemengen
Identifier
Zustandsbeschreibung
Zeitabhängige
Information
AKTION
STATUS AKTIONSDATUM
------ ---------- -----------1
10 01-AUG-10
1
20 01-MAY-10
1
20 01-SEP-10
1
30 01-OCT-10
2
10 01-SEP-10
2
20 02-SEP-10
3
10 05-SEP-10
4
10 05-SEP-10
4
20 06-SEP-10
Beispielregel zu Variante 1:
Die aufsteigenden Statuswerte 10, 20, 30
pro Aktion müssen in zeitlicher Reihenfolge
stattfinden .
Beispielregel zu Variante 2:
Für jede Aktion müssen immer 3
Statusmeldungen und die dazu passenden
Aktionsdatumsangaben folgen.
Wertabhängigkeiten
Inhaltliche Abhängigkeit von zwei Feldern
Lösung zu Beispielregel 1:
Bei korrekten Angaben zu den Aktionen muss eine Sortierung nach
Aktion, Status, Aktionsdatum
genauso aussehen wie eine Sortierung nach
Aktion, Aktionsdatum, Status.
Es werden zwei entsprechende Datenmengen mit einer zusätzlichen
laufenden Nummer erzeugt.
Bei einem Join der beiden Datenmengen und einem Join-Kriterium
bestehend aus der Nummer und den Feldern müssten sich alle Sätze
„paaren“ lassen, bzw. zu Fehlern führen, wenn die Werte auf ungleich
abgefragt werden.
(Lösung in Script, hier nur graphisch)
Join-Bedingung
Wertabhängigkeiten
Inhaltliche Abhängigkeit von zwei Felder, Prüfung auf Wertmengen
AKTION
STATUS AKTIONSDATUM
------ ---------- -----------1
10 01-AUG-10
1
20 01-MAY-10
1
20 01-SEP-10
1
30 01-OCT-10
2
10 01-SEP-10
2
20 02-SEP-10
3
10 05-SEP-10
4
10 05-SEP-10
4
20 06-SEP-10
Beispielregel zu Variante 2:
Für jede Aktion müssen immer 3
Statusmeldungen und die dazu passenden
Aktionsdatumsangaben folgen.
with lc as
(select aktion,
count(status) Anz_Status,
count(aktionsdatum) Anz_Datum
from Statusmeldung
group by aktion
order by aktion)
select aktion, Anz_Status,Anz_Datum
from lc
where Anz_Status < 3 or
Anz_Datum < 3;
AKTION ANZ_STATUS ANZ_DATUM
------- ---------- ---------2
2
2
3
1
1
4
2
2
Tabellenübergreifende
Prüfungen
• Referenzen
•
•
•
•
Kardinalität
Orphans
Childless
Redundant Columns
Tabellenübergreifende
Prüfungen – Kardinalität
select artikelgruppennr L_Key,' --> ',
count(artikelgruppennr) cnt1
from artikel_gruppe group by artikelgruppennr
order by artikelgruppennr;
L_KEY '-->'
CNT1
---------- ----- ---------1 -->
1
2 -->
1
3 -->
1
4 -->
1
5 -->
1
6 -->
1
7 -->
1
8 -->
1
9 -->
1
10 -->
1
11 -->
1
Prüfung innerhalb
einer Tabelle
select artikelgruppennr R_Key,' --> ',
count(artikelgruppennr) cnt2
from produkte_stamm group by artikelgruppennr
order by artikelgruppennr;
R_KEY '-->'
CNT2
---------- ----- ---------1 -->
11
2 -->
4
3 -->
14
4 -->
9
5 -->
3
6 -->
3
7 -->
3
10 -->
1
100 -->
6
-->
0
select min(l.cnt1), max(l.cnt1), min(R.cnt2), max(R.cnt2) from
(select artikelgruppennr L_Key,count(artikelgruppennr) cnt1 from artikel_gruppe
(select artikelgruppennr R_Key,count(artikelgruppennr) cnt2 from produkte_stamm
where
L.L_Key=R.R_Key;
MIN(L.CNT1) MAX(L.CNT1) MIN(R.CNT2) MAX(R.CNT2)
----------- ----------- ----------- ----------1
1
1
14
1:n - Beziehung
Prüfung über 2
Tabellen hinweg
group by artikelgruppennr) L,
group by artikelgruppennr) R
Tabellenübergreifende
Prüfungen – Orphans
Artikel_Gruppe
Produkte_Stamm
SQL> select
distinct artikelgruppennr
from Artikel_gruppe
order by artikelgruppennr;
SQL> select
distinct artikelgruppennr
from produkte_stamm
order by artikelgruppennr;
ARTIKELGRUPPENNR
---------------1
2
3
4
5
6
7
8
9
10
11
ARTIKELGRUPPENNR
---------------1
2
3
4
5
6
7
10
100
SQL> select count(artikelgruppennr) Anz_Orphans, artikelgruppennr Wert_Orphans from produkte_stamm
2
where artikelgruppennr not in (select artikelgruppennr from Artikel_gruppe)
3 group by artikelgruppennr ;
ANZ_ORPHANS WERT_ORPHANS
----------- -----------6
100
Tabellenübergreifende
Prüfungen – Childless
Artikel_Gruppe
Produkte_Stamm
SQL> select
distinct artikelgruppennr
from Artikel_gruppe
order by artikelgruppennr;
SQL> select
distinct artikelgruppennr
from produkte_stamm
order by artikelgruppennr;
ARTIKELGRUPPENNR
---------------1
2
3
4
5
6
7
8
9
10
11
ARTIKELGRUPPENNR
---------------1
2
3
4
5
6
7
10
100
select distinct artikelgruppennr from Artikel_gruppe MINUS
select distinct g.artikelgruppennr from Artikel_gruppe g, produkte_stamm p
where g.artikelgruppennr = p.artikelgruppennr;
ARTIKELGRUPPENNR
---------------8
9
11
Redundant Columns
• Redundanzen: eine der Hauptfehlerursachen
• Redundanzen innerhalb einer Tabelle
• Feststellbar mit
Select Count(*) from Tabelle where Feld_X = Feld_Y;
• Redundanzen in unterschiedlichen Tabellen
• Parent/Child-Beziehungen
• Child-redundante Information ist meist aus Parent ableitbar
• Feststellbar mit
select Count(*) from
Select Count(*) from T1,T2 where T1.PK = T2.PK
MINUS
Select Count(*) from T1,T2 where T1.PK = T2.PK and T1.Feld_Y = T2.Feld;
Redundant Columns
Parent- Child
create table parent (Parent_Key number, Wert_X varchar2(10));
insert
insert
insert
insert
insert
into
into
into
into
into
parent
parent
parent
parent
parent
values(1,'AUDI');
values(2,'VW');
values(3,'OPEL');
values(4,'BMW');
values(5,'Daimler');
create table child (Child_key number, Parent_Key number, Wert_Y varchar2(10));
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
into
into
into
into
into
into
into
into
into
into
into
into
child
child
child
child
child
child
child
child
child
child
child
child
values(1,1,'AUDI');
values(2,1,'AUDI');
values(1,2,'VW');
values(2,2,'VW');
values(1,3,'OPEL');
values(2,3,'OPEL');
values(1,'4','BMW');
values(2,'4','BMW');
values(3,'4','BMW');
values(4,'4','BMW');
values(1,5,'Daimler');
values(2,5,'Daler');
SQL> select Count(*) from
2 ((Select
Count(*) from parent,child
3
where parent.Parent_Key = child.Parent_Key) MINUS
4
(Select
Count(*) from parent,child
5
where
parent.Parent_Key = child.Parent_Key and
6
parent.Wert_X
= child.Wert_Y)) ;
COUNT(*)
---------1
Tabellenübergreifende
Prüfungen – Werte
Bestellung
Best_position
Bestellnr (PK)
Bestell_Total
Bestellnr (FK)
Gesamt_Pos_Preis
select count(*) from
(select bestellnr,BESTELL_TOTAL from bestellung) B,
(select BESTELLNR, sum(GESAMT_POS_PREIS) ges_Pos_Wert from
where B.bestellnr = P.BESTELLNR and
B.BESTELL_TOTAL != P.ges_Pos_Wert ;
=
best_position group by
BESTELLNR) P
Zugreifbarkeit auf Daten
Quell-Umgebung
Oracle
Oracle 10g / 11g
non Oracle
DB2, SQL Server
Informix, Teradata
SAP R/3
Siebel CRM
Gateway
/ ODBC
/ FTP
/ Golden Gate
SAP
Integrator
Direct Path
DBLink
Text / XML
Stage
Schema
Sampling
Analyse Datenbank
Analyse
Schema
Arbeiten mit Datenkopien
• Entlastung der operativen System
• Sicherstellen von nicht veränderlichen Daten
• Verhindern von Seiteneffekten
• Z. B. von Spacheinstellungen etc.
• Erleichtert länger dauerndes iteratives Arbeiten
• Überwinden von technischen Barrieren
• Z. B. bei SAP-Daten
• Veränderbarkeit von Daten zu
Simulationszwecken
• Bessere Performance
Sampling von Daten
• SAMPLE – Schlüsselwort
• select Kundenname from kunde sample (2);
• In Klammern Prozentwert
• select /*+ dynamic_sampling(Kunde 4)
*/Kundenname from kunde
• Macht nicht immer Sinn
• Z. B. nicht bei Eindeutigkeitsprüfungen
• Aber bei Stichproben auf der Suche nach NULL-Werten
• Immer nur bedingt, vollständige Sicherheit bringt nur eine
Komplettsuche
Wo macht Sampling Sinn?
Verfahren
Macht Sinn?
•
•
•
•
•
•
•
•
•
•
Bedingt
Bedingt
Bedingt
Bedingt
Nein
Nein
Nein
Nein
Nein
Nein
Patternanalyse
Domainanalyse
Not Null Messung
Typfeststellung
Max/Min/Aussreisser
Eindeutigkeitsanalyse
Functional Dependency
Orphan / Childless
Redundant Column
Kardinalität
Agenda
 Teurer Datensumpf" oder
"Schlechte Daten kosten einfach nur viel Geld"
 Einweisung in das Planspiel „Service GmbH“
„Wenn Controlling auf die Buchhaltung schimpft“
Eine simulierte Firma mit (einigen) Problemen.
 Hilfsmittel für die systematische Vorgehensweisen bei
Datenqualitätsanalysen
 Vorgehensmodell – Der rote Faden
 Datenmodellierung – Die Grundlage
 Metadaten-Dokumentation – Data Quality Plan
 Feldliste – Das klassische Hilfe
 Sonst.: Profiling Tool / ETL Tool / Datenbank
 Die wichtigsten Analyse-Techniken
 Die wichtigsten Analyse-Verfahren
 Fallbeispiel Service GmbH
Fragebögen und Templates
•
•
•
•
•
Geben Struktur vor
Dokumentieren
Verhindern, dass man etwas vergisst
Arbeitsgrundlage im Projekt
Werden ständig aktualisiert und in allen Phasen verwendet
Sinnvolle Listen und Templates für die
Projektarbeit
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
T1.10
T1.15
T1.20
T1.35
T1.45
T1.50
T2.25
T2.50
T3.00
T3.25
T3.50
T3.55
T3.60
T3.70
T3.75
Liste Geschäftsfelder (zur Fokussierung)
Datenbestandsliste (für die Vollständigkeitsanalyse)
Liste Metadatenbestände
Liste bekannten Schwachstellen und Erwartungen
Bekannte Business Rules
Geschätzte Kosten der bekannten Schwachstellen
Liste Datenbestände, Geschäftsobjekte und Fehldaten
Regelliste (Bekannte + abgeleitete Regeln)
Feldliste
Liste Missverständliche Objektnamen
Schlüsselliste
Funktionale Abhängigkeiten
Beziehungen
Normalform-Analysen
Redundante Felder
Die wichtigsten
Listen
Vollständigkeitsanalyse
Analysemodell
• Erstellen von
• Analysemodell ergibt
aus der Befragung der
Prozess-Kenner
• Objektmodell ergibt sich
aus dem Analysemodell
• Rückschlüsse auf
fehlende
Informationen
• Über Vergleiche des
Objektmodells mit der
Datenbestandsliste
Objektmodell
Schnittstellenanalyse
• Erstellen von
• Prozessmodell (Analyse-Modell)
• Objektmodell
• Datenbestandsliste
• Finden von
Übergabepunkten
als die
kritischen
Stellen
Prozessmodell
Synonymen / Homonymenanalyse
• Homonyme (leichter Fall)
1. Über Feldliste Kandidaten finden
2. Kandidaten mit Aggregation-, Domain-, Pattern-Analyse auf
fachliche Gleichheit überprüfen
• Synonyme (komplexer Fall)
1.
2.
3.
4.
Wortstammanalyse
Attributklassifizierung
Finden von Kandidaten über Basistypen
Kandidaten mit Aggregation-, Domain-, Pattern-Analyse auf
fachliche Gleichheit überprüfen
Finden von Anomalien
• 1. NF
• Domainanalyse und Sichtprüfung
• 2. NF
1. Suche nach Schlüsselkandidaten
1. Feldliste
2. Unique-Key-Prüfung
3. Fokussierung auf zusammengesetzte Schlüssel
2. Functional Dependency Analyse
• 3. NF
• Suche nach Schlüsselkandidaten
1. Feldliste
2. Unique-Key-Prüfung
3. Fokussierung auf nicht als Schlüssel genutzte Felder
Finden redundanter Spalten
• Über Feldliste
•
•
•
•
Kandidaten identifizieren, um den späteren Aufwand zu minimieren
Felder finden, die nicht geprüft werden müssen
Pools von ähnlichen Feldern bilden
Stichproben mit Sampling bzw. Domain-Analysen
• Innerhalb einer Tabelle
• Feststellen des Schlüsselfeldes
• Feldinhaltsvergleiche
(alle Spalten müssen mit allen anderen Spalten verglichen werden)
• Eventuell prozentuale Gleichheit feststellen
• Bei hohem Übereinstimmungsgrad, die „Nicht-Treffer“ mit Domain- bzw.
Patternanalyse genauer betrachten.
• Tabellenübergreifend
• Finden des Referenzkriteriums (PK / FK)
• Überprüfen auf Vollständigkeit der Referenz
• Feldinhaltsvergleiche mit Hilfe eines Joins
(wie oben beschrieben)
Agenda
 Teurer Datensumpf" oder
"Schlechte Daten kosten einfach nur viel Geld"
 Einweisung in das Planspiel „Service GmbH“
„Wenn Controlling auf die Buchhaltung schimpft“
Eine simulierte Firma mit (einigen) Problemen.
 Hilfsmittel für die systematische Vorgehensweisen bei
Datenqualitätsanalysen
 Vorgehensmodell – Der rote Faden
 Datenmodellierung – Die Grundlage
 Metadaten-Dokumentation – Data Quality Plan
 Feldliste – Das klassische Hilfe
 Sonst.: Profiling Tool / ETL Tool / Datenbank
 Die wichtigsten Analyse-Techniken
 Die wichtigsten Analyse-Verfahren
 Fallbeispiel Service GmbH
Zusammenfassen zu
Problemkomplexen
• Problemkomplex 1:
Dies sind Schwierigkeiten bei Auswertungen. Diese sind zwar machbar, aber es
fehlen offenbar einzelne Produkte und Produktgruppen. Die Daten müssen
umständlich zusammengesucht werden. Ob das Ergebnis stimmt ist unklar.
Produktgruppen und einzelne Produkte sind nicht richtig messbar. Von den
Produktsparten sind offensichtlich keine Auswertungen möglich. Zu untersuchen
sind die Produkte-Stamdatenhierarchien.
• Problemkomplex 2:
Die Zusammenhänge zwischen unterschiedlichen Größen (Einkaufsdaten und
Verkaufsdaten) sind nicht stimmig. Welche Waren werden zu welchem Preis
beschafft und zu welchem Preis und mit welchem Rabatt verkauft.
• Problemkomplex 3:
Verschiedene Kundengruppen können nicht voneinander abgegrenzt werden.
Auch das Thema Kundenkarte gehört dazu.
• Problemkomplex 4:
Spediteursrechnungen und Lieferungen. Wo gehen die Waren hin und wie
werden sie bezahlt? Gelingt die Kontrolle über Lieferungen und Zahlungen?
Problemkomplex
Stammdaten
(Produkte / Artikel)
Stammdaten
Hierarchien?
Einkaufspreise
(fehlerhaft?)
Stammdaten
(Kunden /
Identifizierung )
Fragestellungen
Benannte Probleme
Auswertbarkeit
Stimmen die
Einträge
Vergleichbarkeit von
Einkaufs- und
Verkaufspreisen
Welche Produkte
lohnen sich
Rabatte?
Messbarkeit für
Controlling
Korrekte Zahlen zur
Steuerung von
Marketingkampagnen
und für den Vertrieb
Wer hat wieviel
gekauft?
Kunden-Segmentierung
Wo bleibt die
gelieferte Ware?
Lieferungen
(Bestellungen
/Stornierungen)
Artikel-,
Gruppen-,
Spartenberichte
Ergebnis
Wie korrekt wird
gezahlt?
Spediteure?
Nachvollziehbarkeit
von Zahlungen für die
Buchhaltung
Analysemodell:
Was wissen wir über den Prozess?
Produkte
Handwerker
bietet an
beauftragt
Dienstleistungen
Kunden
bietet an
verkauft
Lieferanten
Service GmbH
holt ab
Privat
Kundenkarte
bestellt
storniert
beauftragt
Firmen
liefert aus
Spediteur
beliefert
Lager
holt
stornierte
Ware ab
liefert ab
Geschäftsprozess: Bestellungen
Bestellprozess
Status
Beschaffung
offene
Posten
Kundendaten
prüfen
MAX/MIN
Menge
Kreditlimit
prüfen
Kundenstamm
Verfügbarkeit
prüfen
Spediteur
beauftragen
Bestellung
anlegen
Lieferschein
Bestellsatz
updaten
Liefersatz
anlegen
Kundenstamm
Produktestamm
Bestellung
Best_Pos
Dienstleistung beauftragen
Vertrag
Bestellung
Best_Pos
Lieferung
Objektmodell:
Welche Geschäftsobjekte sind an dem Prozess beteiligt?
Bewegungs
daten
Stornierung
Lieferung
Spediteur
Stammdaten
Zahlung
Beauftragung /
Order
Partner
Lieferanten
Retouren
Bestellung
Dienstleister
Produkte
Artikel
Service
Kunde
FirmenKunde
Lager
KundenKarte
PrivatKunde
Vollständigkeitsanalyse
Wichtige Daten fehlen!
Identifizierung nur
über Bestellnummer
Keine Untergliederung
nach Positionen
möglich.
Bewegungs
daten
Stornierung
Zahlung
Lieferung
Spediteur
Stammdaten
Retouren
Bestellung
Beauftragung /
Order
Partner
Lieferanten
Liefernummer fehlt.
Identifizierung nur über
Bestellnummer
Dienstleister
Produkte
Artikel
Service
Kunde
FirmenKunde
Lager
KundenKarte
PrivatKunde
Zusammenfassung:
Vollständigkeitsanalyse
• Fehlen wichtiger Daten für Buchhaltung und Controlling
• Stornierungen können nicht korrekt erfasst werden, damit ist der
Rückfluss von Waren nicht messbar
-> sie verschwinden im Lager
-> Tabelle Stornierungen neu strukturieren
• Wg. Fehlender Liefernummer können Teillieferungen nicht genau
gemessen werden
-> Liefernummer einführen
• Unterscheidung zwischen Dienstleister und Waren-Lieferant wäre
sinnvoll. Damit wären Einkaufbedingungen leichter messbar
-> Feld Lieferantentyp einführen
• Es fehlt die Möglichkeit die eingekauften Services bzw. Lieferungen
genau zu messen
-> Tabelle Beauftragung / Order einführen
• u. a. m.
Verständlichkeit des Datenmodells
Synonym
Synonym
Synonyme
oder nicht?
Missverständliche
Begriffe
Homonym
Homonym
Synonym
Betrachtung von Form und Inhalt
einzelner Felder
• Nummern, bzw. Key-Felder sind alphanumerisch anstatt
numerisch wie es der Feldname vermuten lässt:
• KUNDEN_STAMM ->Firmenrabatt
der Grund sind wahrscheinlich einzelnen %-Zeichen
-> mit dem Feld kann man nicht mehr rechnen, bzw. muss es zunächst
aufbereiten
• PRODUKTE_STAMM -> Stueckpreis (varchar2)
• KUNDEN_STAMM -> Bildungsnr (varchar2)
• Felder enthalten z. T. nicht lesbare Zeichen
• BEST_POSITION -> Ausfuerhrung (@@@@)
• Viele Felder sind nicht gefüllt
• KUNDEN_STAMM -> Firmenrabatt / Kontaktperson / Kundenart
Wertähnlichkeitsprüfungen
• Begriffe, die dasselbe
meinen, sollten
standardisiert werden
• Standardisierungs-Glossar
einführen
• Lookup-Tabelle mit MappingBegriffen einführen
Standardisierte Werte
• Durchgängige Nomenklatur  Patternanalyse
• Das Bemühen sprechende Werte zu
nutzen, ist erkennbar, aber bei der
Umsetzung war man nicht
konsequent
• Falsche Werte grundsätzlich
ablehnen
• Standardisierungsregeln festlegen
Wechselseitige Fehler in den Daten
• Ein bestimmer Fehler taucht in
einem anderen Attribut in
abgewandelter Form wieder auf
• Wahrscheinlich maschinelle
Ursache
1. Domainanalyse
2. Direkter Vergleich mit SQL
SQL> select BERUFSGRUPPEN_NR,BERUFSGRUPPE
from kunden_stamm group by BERUFSGRUPPEN_NR,BERUFSGRUPPE
order by BERUFSGRUPPEN_NR;
KUNDEN_STAMM
B
1
2
3
4
5
6
7
8
A
B
BERUFSGRUPPE
-----------------------------Arbeiter
Angest_Oeff_
Schueler
Studenten
Arbeitslose
Renter
Selbststaendige
NA
ngestellter
eamter
1
3
Inhaltlich falsche Werte
• Domainanalyse
• Augenscheinlich falsche Werte
• Gleichmäßige Werteverteilung bei Feld für Anzahl Kinder
• Irritierender Umgang mit NULL bzw. fehelenden
Werten
KUNDEN_STAMM
Unique Key Analyse
• PRODUKTE_STAMM : Artikelnr / Produktnummer
•
Beide Felder werden für unterschiedliche Arten verwendet
 ein einheitlicher Schlüssel muesste entwickelt werden
• KUNDEN_STAMM: Kunden_ID / Kundennr
•
Es wird nur Kunden_ID verwendet
-> Kundennr muesste gelöscht werden
Funktionale Abhängigkeiten
• Funktionale Abhängigkeiten sollten nach Möglichkeit in einer 3 NF
aufgelöst sein
•
•
•
Hier gibt es diese Struktur aber schon und dennoch ist das Feld Artikelgruppe in der Tabelle
PRDUKTE_STAMM aufgenommen -> dieses Feld muesste entfernt werden
Allerdings offenbar es auch gleichzeitig einen Fehler. „Artikelgruppe“ ist offenbar nicht ganz
funktional abhängig -> hier muss eine weitere Analyse folgen
Ähnliches gilt für die Tabelle BEST_POSITION
Beziehungsanalyse
Artikel_
Sparte
Lieferung
Bestellnr
[6, (97%)]
Order_ID
Bestellnr
[6, (97%)]
Bestrellnr
Stornierung
Bestrellnr
[0, (100%)]
Bestrellnr
Bestellung
Kundencode
[0, (100%)]
Kunden_ID
Bestrellnr
[213, (90%)]
Best_
Position
KD_Nummer
[0, (100%)]
Kunden_ID
Kundencode
[0, (100%)]
Kunden_ID
Lager
Artikelgruppennr
[6, (92%)]
Produktnummer
[0, (100%)]
Artikelnr
[0, (100%)]
KD_Nummer
[1211, (46%)]
Kundennr
Kunden_
stamm
Artikel_
Gruppe
Order_ID
[0, (100%)]
Order_ID
Bestrellnr
[0, (100%)]
Order_ID
Zahlung
Artikelspartennnr
[1, (90%)]
Produkte_
stamm
Lieferant
Legende
Kundencode
[0, (100%)]
Kunden_ID
FK-Column
[Orphans, (%-korrekte Sätze) ]
UK-Column
Kreisbeziehungen
• Die Information Kundennummer kommt in
mehreren Tabellen vor
• Gefahr falscher Dateneintragungen
• Zudem mutiert der Feldname (Synonyme)
• Kunden_ID
• Kundencode
• KD_Nummer
• Meist Ergebnis bei dem
Zusammenführen von
Anwendungen, die
unterschiedliche Spaltennamen verwendet haben.
Beziehungsanalysen graphisch
Orphans und Childless
--- Orphans --------------------------select count(artikelgruppennr) Anz_Orphans, artikelgruppennr Wert_Orphans from produkte_stamm
where artikelgruppennr not in (select artikelgruppennr from Artikel_gruppe) group by
artikelgruppennr ;
ANZ_ORPHANS WERT_ORPHANS
----------- -----------6
100
--- Childless --------------------------select distinct artikelgruppennr from Artikel_gruppe MINUS
select distinct g.artikelgruppennr from Artikel_gruppe g, produkte_stamm p where
g.artikelgruppennr = p.artikelgruppennr;
ARTIKELGRUPPENNR
---------------8
9
11
• Die Artikelstruktur ist fehlerhaft
• Es gibt Artikelgruppen , die nicht unter einer
Sparte hängen
• Es gibt Produkte, die nicht Artikel_Gruppen
zugeordnet sind
Analyse von Hierarchien
Artikelsparte
ARTIKELSPARTENNR
1 , 2 ,3
Artikel_Gruppe
ARTIKELSPARTENNR
1,4,3
ARTIKELGRUPPENNR
1,2,3,4,5,6,11,10,9,8,7
Produkte_Stamm
ARTIKELGRUPPENNR
100,1,6,2,5,4,7,3,10
• Gerade BI-Werkzeuge haben DrillPfade, die auf einem sehr groben
Aggragations-Level einsteigen.
• Bei diesem Fehler wird man
Produkte mit einer Produktgruppe
100 nicht finden.
• Im Fall der Service GmbH sind
das ausgerechnet alle ServiceLeistungen.
•
Sie sind nachträglich in das Angebot hinzu
gekommen und man hat die Pflege der
Stammdaten vernachlässigt
Umsätze können nicht festgestellt
werden
Abfrage über die Hierarchie
Artikelgruppe -> Produkte_Stamm -> Best_Position
Abfrage über die Hierarchie
Produkte_Stamm -> Best_Position
?
Korrekte Business Intelligence
Auswertungen?
Korrekte
Werte für:
Umsatz pro Sparte?
Umsatz pro Gruppe?
Umsatz pro Produkt?
Werden korrekte
Rechnungen gestellt?
Umsatz pro Kunde?
Macht die Kundenkarte
Sinn?
Sparten
Gruppen
Produkte
Fehlerhafte
Spartenkennzeichnung
von Gruppen
Orphans
Falsche
Statuskennzeichnung
von Finanzprodukten
Fehlerhafte
Verschlüsselung
von Artikel- und
Produkten
Bestellung
Position
Doppelte
Produktnummern
KundenStamm
Doppelte Wertebelegung von
Statuskennzeichnung für
Privat- und Firmenkunden.
Fehlerhafte , nicht
rechenbare
Einzelpreisbezeichnung
Wer hat Recht
Controlling oder Buchhaltung?
Zahlen: Controlling
Zahlen: Buchhaltung
Data Quality Management Process
Data Quality
Reporting
Data Quality
Auditing
Data Profiling
Datenkorrektur
Datenqualitätsreporting
Verarbeitete Sätze pro Berichtzeitraum
(Anzahl Positionen pro Bestellungen)
Füllstandsanzeige einzelner Werte
Herunterladen