Diplom-Biologe | Senior IT-Consultant
|
SH |
Sascha Hess xenosystems.de - IT-Consulting & Data Management |
www.xenosystems.de |
|
|
Strategische Wissens-Roadmap 2026 |
|
|
|
|
|
Datenqualität messen & steuern |
|
|
Schlechte Daten kosten Geld — gute Daten machen Entscheidungen sicher |
WAS SIE IN DIESEM KIT ERHALTEN:
|
|
1 |
6 Qualitätsdimensionen Vollständigkeit, Konsistenz, Aktualität — messbar gemacht |
|
|
2 |
DQ-Score-System Gesamtqualität je Objekt als automatisierter Tageswert |
|
|
3 |
Fertige SQL-Checks 40+ sofort einsetzbare Prüfabfragen für ERP-Stammdaten |
|
|
4 |
Data-Governance-Grundlagen Rollen, Prozesse und Regeln für dauerhaft gute Daten |
|
|
5 |
30-Tage-DQ-Plan Erstes Datenqualitäts-Dashboard in einem Monat |
HAFTUNGSAUSSCHLUSS
Alle SQL-Skripte, Prüfregeln und Empfehlungen wurden sorgfältig erarbeitet. Da jede ERP-Umgebung individuelle Datenstrukturen verwendet, übernimmt der Autor keinerlei Haftung für fehlerhafte Prüfergebnisse, Datenverlust oder sonstige Schäden. Alle Abfragen vor dem produktiven Einsatz gegen die eigene Datenbankstruktur validieren.
KEINE ERGEBNISGARANTIE
DQ-Scores und Qualitätswerte sind Indikatoren — keine rechtlich belastbaren Aussagen über Datenkorrektheit. Fachliche Validierung durch die zuständigen Stammdatenpfleger ist zwingend erforderlich.
VERSIONSHINWEIS
Die Inhalte beziehen sich auf SQL Server 2022/2025, Power BI und gängige ERP-Systeme, Stand März 2026. Tabellen- und Feldbezeichnungen sind systemspezifisch anzupassen.
URHEBERRECHT
Dieses Dokument ist für den persönlichen oder betriebsinternen Gebrauch des Käufers lizenziert. Weiterverkauf, Weitergabe an Dritte und öffentliche Veröffentlichung sind ohne schriftliche Genehmigung nicht gestattet.
KEINE VERBINDUNG ZU HERSTELLERN
Dieses Kit ist ein unabhängiges Werk und steht in keinerlei Verbindung zu Microsoft oder anderen genannten Herstellern. Alle Produktnamen sind eingetragene Marken ihrer jeweiligen Inhaber.
Eine ausführliche Version dieses Haftungsausschlusses befindet sich am Ende dieses Dokuments.
01 Einleitung
Warum Datenqualität der blinde Fleck des Mittelstands ist
02 Die 6 Qualitätsdimensionen
Was Datenqualität wirklich bedeutet — messbar definiert
03 DQ-Score-System
Gesamtqualität automatisch berechnen und verfolgen
04 Stammdaten-Checks
40+ SQL-Prüfabfragen für Kunden, Artikel, Lieferanten
05 Transaktionsdaten-Checks
Belege, Buchungen, Bewegungsdaten prüfen
06 Data Lineage & Herkunft
Woher kommen die Daten — und wer ist verantwortlich?
07 Data Governance Grundlagen
Rollen, Prozesse und Regeln für dauerhaft gute Daten
08 DQ-Dashboard in Power BI
Qualität sichtbar machen für alle Beteiligten
09 Typische DQ-Probleme
Die häufigsten Datenfehler aus der ERP-Praxis
10 30-Tage-DQ-Plan
Erstes DQ-Dashboard und Governance-Struktur produktiv
01
Schlechte Daten sind teuer — nur merkt es meist niemand direkt. Der Vertriebsmitarbeiter findet den Kunden nicht, weil er dreifach im System angelegt ist. Das BI-Dashboard zeigt den falschen Umsatz, weil Artikel ohne Warengruppe nicht aufsummiert werden. Die Mahnung geht an die falsche Adresse, weil niemand die Umzugsmeldung ins ERP übertragen hat.
Der Schaden entsteht still und systematisch.
→ Laut Gartner kostet schlechte Datenqualität Unternehmen durchschnittlich 12,9 Mio. USD pro Jahr — skaliert auf den Mittelstand: 100.000 bis 500.000 € an verschwendetem Aufwand, Fehlinvestitionen und Fehlerkosten.
→ Vor jeder ERP-Einführung, jeder BI-Initiative und jeder KI-Anwendung steht dieselbe Frage: Sind unsere Daten gut genug? Die ehrliche Antwort ist fast immer: Nein — aber niemand weiß wie schlecht.
→ Der erste Schritt ist Messen — nicht Bereinigen. Wer nicht weiß, wo die Qualität schlecht ist, bereinigt an der falschen Stelle.
Dieses Kit liefert das Handwerkszeug, um Datenqualität systematisch zu messen, transparent darzustellen und dauerhaft zu verbessern — mit SQL, Power BI und einem einfachen Governance-Rahmen, der im Mittelstand funktioniert.
|
|
WAS SIE IN DIESEM KIT ERWARTEN DÜRFEN ■ 6 Qualitätsdimensionen — Vollständigkeit, Korrektheit, Konsistenz, Aktualität, Eindeutigkeit, Gültigkeit — operationalisiert. ■ 40+ SQL-Prüfabfragen — Sofort einsetzbar für Kunden-, Artikel- und Lieferantenstamm. ■ DQ-Score-System — Automatisch berechneter Gesamtqualitätswert je Datenobjekt. ■ Data Governance Starter-Kit — Rollen, Prozesse und Regeln, die im Mittelstand umsetzbar sind. ■ 30-Tage-Plan — DQ-Dashboard und erste Governance-Strukturen in einem Monat. |
|
|
ZIEL DIESES KITS Nach dem Lesen und Umsetzen dieses Kits wissen Sie genau, wo Ihre Datenqualität steht — mit Zahlen, nicht Gefühlen. Sie haben ein automatisiertes Meßsystem, das täglich aktuell ist, und erste Governance-Strukturen, die Qualitätsprobleme verhindern statt nur reparieren. |
02
"Datenqualität" ist kein einheitliches Konzept — es umfasst mindestens sechs unterschiedliche Dimensionen, die jeweils separate Prüfmethoden erfordern. Wer alle sechs kennt und misst, hat ein vollständiges Bild.
|
DIMENSION 1 — VOLLSTÄNDIGKEIT (Completeness) Definition: Sind alle Pflichtfelder befüllt? Messung: Anzahl NULL/leere Pflichtfelder / Gesamtfelder × 100 Beispiel: Kunden ohne PLZ, Artikel ohne Warengruppe Zielwert: 100 % bei Pflichtfeldern
DIMENSION 2 — KORREKTHEIT (Accuracy) Definition: Entsprechen die Werte der Realität? Messung: Stichproben-Abgleich mit Originalquellen Beispiel: Falsche Bankverbindung, falscher Steuersatz Zielwert: > 99 % bei kritischen Feldern
DIMENSION 3 — KONSISTENZ (Consistency) Definition: Sind dieselben Daten in verschiedenen Systemen gleich? Messung: Abgleich ERP ↔ CRM ↔ Webshop ↔ BI Beispiel: Anderer Kundenname in ERP und CRM Zielwert: > 98 % Übereinstimmung
DIMENSION 4 — AKTUALITÄT (Timeliness) Definition: Sind die Daten aktuell genug für ihren Verwendungszweck? Messung: Letzte Änderung / Prüfung vs. definierter Maximalzeitraum Beispiel: Bankverbindung seit 5 Jahren nicht geprüft Zielwert: Je Datenobjekt definieren (z.B. Bankdaten jährlich)
DIMENSION 5 — EINDEUTIGKEIT (Uniqueness) Definition: Existiert jedes Objekt nur einmal im System? Messung: Dublettensuche nach Schlüsselfeldern Beispiel: Kunde "Müller GmbH" dreifach angelegt Zielwert: 0 bestätigte Dubletten
DIMENSION 6 — GÜLTIGKEIT (Validity) Definition: Entsprechen Werte dem definierten Format und Wertebereich? Messung: Regex-Prüfung, Wertelistenabgleich, Formatvalidierung Beispiel: Ungültige IBAN, PLZ mit 4 Stellen, E-Mail ohne @ Zielwert: > 99 % valide Formate bei kritischen Feldern |
|
Datenobjekt |
Vollst. |
Korrekt. |
Konsis. |
Aktualität |
Eindeutig. |
Gültigkeit |
|
Kundenstamm |
Kritisch |
Kritisch |
Hoch |
Hoch |
Kritisch |
Hoch |
|
Lieferantenstamm |
Kritisch |
Kritisch |
Mittel |
Kritisch |
Hoch |
Kritisch |
|
Artikelstamm |
Kritisch |
Hoch |
Hoch |
Mittel |
Kritisch |
Hoch |
|
Kontenplan |
Kritisch |
Kritisch |
Hoch |
Niedrig |
Kritisch |
Kritisch |
|
Kostenstellen |
Hoch |
Hoch |
Mittel |
Mittel |
Hoch |
Hoch |
03
Ein einzelner Prozentwert pro Datenobjekt — der DQ-Score — macht Datenqualität kommunizierbar: für Führungskräfte, für Fachabteilungen und für das Dashboard. Dieser Abschnitt zeigt, wie er berechnet wird.
|
DQ-SCORE-BERECHNUNG (Gewichtetes Mittel):
DQ-Score = Σ (Dimension_i × Gewicht_i) / Σ Gewichte_i
Beispiel Kundenstamm: Vollständigkeit (Gewicht 30): 94 % → 30 × 0,94 = 28,2 Eindeutigkeit (Gewicht 25): 99 % → 25 × 0,99 = 24,8 Gültigkeit (Gewicht 20): 97 % → 20 × 0,97 = 19,4 Aktualität (Gewicht 15): 88 % → 15 × 0,88 = 13,2 Konsistenz (Gewicht 10): 95 % → 10 × 0,95 = 9,5
DQ-Score = (28,2 + 24,8 + 19,4 + 13,2 + 9,5) / 100 = 95,1 %
AMPELSKALA: ≥ 95 % Grün — Gut 85-95 % Gelb — Verbesserungsbedarf < 85 % Rot — Handlungsbedarf |
|
-- DQ-Infrastruktur: Tabellen für automatisches Scoring CREATE TABLE dbo.DQ_Dimensionen ( DimID INT IDENTITY PRIMARY KEY, DimCode NVARCHAR(30) UNIQUE, -- z.B. 'VOLLSTAENDIGKEIT' DimName NVARCHAR(100), Beschreibung NVARCHAR(500) );
CREATE TABLE dbo.DQ_Objekte ( ObjektID INT IDENTITY PRIMARY KEY, ObjektCode NVARCHAR(50) UNIQUE, -- z.B. 'KUNDEN' ObjektName NVARCHAR(100), Tabelle NVARCHAR(200), -- Quelltabelle im ERP Owner NVARCHAR(100), -- Verantwortlicher Aktiv BIT DEFAULT 1 );
CREATE TABLE dbo.DQ_Gewichte ( ObjektID INT REFERENCES dbo.DQ_Objekte(ObjektID), DimID INT REFERENCES dbo.DQ_Dimensionen(DimID), Gewicht DECIMAL(5,2), -- Summe je Objekt = 100 PRIMARY KEY (ObjektID, DimID) );
CREATE TABLE dbo.DQ_Tagesmessung ( MessungID INT IDENTITY PRIMARY KEY, ObjektID INT REFERENCES dbo.DQ_Objekte(ObjektID), DimID INT REFERENCES dbo.DQ_Dimensionen(DimID), MessDatum DATE NOT NULL, Gesamt_Saetze INT, Fehler_Saetze INT, Score_Pct DECIMAL(5,2), Gemessen_Am DATETIME2 DEFAULT GETDATE() );
CREATE TABLE dbo.DQ_Score_Gesamt ( ScoreID INT IDENTITY PRIMARY KEY, ObjektID INT REFERENCES dbo.DQ_Objekte(ObjektID), ScoreDatum DATE NOT NULL, DQ_Score DECIMAL(5,2), Ampel NVARCHAR(5), -- Grün / Gelb / Rot CONSTRAINT UQ_Score UNIQUE (ObjektID, ScoreDatum) ); |
|
-- Täglicher Job: DQ-Score je Objekt aus Dimensionsmessungen berechnen INSERT INTO dbo.DQ_Score_Gesamt (ObjektID, ScoreDatum, DQ_Score, Ampel) SELECT t.ObjektID, CAST(GETDATE() AS DATE), ROUND(SUM(t.Score_Pct * g.Gewicht) / SUM(g.Gewicht), 1) AS DQ_Score, CASE WHEN SUM(t.Score_Pct * g.Gewicht) / SUM(g.Gewicht) >= 95 THEN 'Grün' WHEN SUM(t.Score_Pct * g.Gewicht) / SUM(g.Gewicht) >= 85 THEN 'Gelb' ELSE 'Rot' END AS Ampel FROM dbo.DQ_Tagesmessung t JOIN dbo.DQ_Gewichte g ON t.ObjektID = g.ObjektID AND t.DimID = g.DimID WHERE t.MessDatum = CAST(GETDATE() AS DATE) GROUP BY t.ObjektID ON CONFLICT (ObjektID, ScoreDatum) DO UPDATE SET DQ_Score = EXCLUDED.DQ_Score, Ampel = EXCLUDED.Ampel; |
04
Diese Abfragen sind sofort einsetzbar — Tabellen- und Feldnamen sind an die eigene ERP-Struktur anzupassen. Jede Abfrage liefert Fehler-Datensätze, die direkt bereinigt werden können.
|
-- CHECK K01: Vollständigkeit Pflichtfelder Kundenstamm SELECT KundenNr, Name, CASE WHEN Name IS NULL OR LTRIM(RTRIM(Name)) = '' THEN 'Kein Name' ELSE '' END AS Fehler_Name, CASE WHEN Strasse IS NULL OR LTRIM(RTRIM(Strasse)) = '' THEN 'Keine Straße' ELSE '' END AS Fehler_Strasse, CASE WHEN PLZ IS NULL OR LTRIM(RTRIM(PLZ)) = '' THEN 'Keine PLZ' ELSE '' END AS Fehler_PLZ, CASE WHEN Ort IS NULL OR LTRIM(RTRIM(Ort)) = '' THEN 'Kein Ort' ELSE '' END AS Fehler_Ort, CASE WHEN Land IS NULL OR LTRIM(RTRIM(Land)) = '' THEN 'Kein Land' ELSE '' END AS Fehler_Land FROM dbo.Kunden WHERE Aktiv = 1 AND (Name IS NULL OR LTRIM(RTRIM(Name)) = '' OR Strasse IS NULL OR LTRIM(RTRIM(Strasse)) = '' OR PLZ IS NULL OR LTRIM(RTRIM(PLZ)) = '' OR Ort IS NULL OR LTRIM(RTRIM(Ort)) = '');
-- CHECK K02: Ungültige PLZ (Deutschland: 5 Ziffern) SELECT KundenNr, Name, PLZ, Land FROM dbo.Kunden WHERE Land = 'DE' AND Aktiv = 1 AND (LEN(PLZ) <> 5 OR PLZ NOT LIKE '[0-9][0-9][0-9][0-9][0-9]');
-- CHECK K03: Ungültige E-Mail-Adressen SELECT KundenNr, Name, Email FROM dbo.Kunden WHERE Email IS NOT NULL AND Email <> '' AND (Email NOT LIKE '%@%.%' OR Email LIKE '% %' OR Email LIKE '@%' OR Email LIKE '%@');
-- CHECK K04: Dubletten nach Name + PLZ SELECT Name, PLZ, COUNT(*) AS Anzahl, STRING_AGG(CAST(KundenNr AS NVARCHAR), ', ') AS KundenNummern FROM dbo.Kunden WHERE Aktiv = 1 GROUP BY LTRIM(RTRIM(UPPER(Name))), PLZ HAVING COUNT(*) > 1 ORDER BY COUNT(*) DESC;
-- CHECK K05: Kunden ohne Umsatz — Karteileichen prüfen SELECT k.KundenNr, k.Name, k.Angelegt_Am, MAX(v.Belegdatum) AS Letzter_Umsatz, DATEDIFF(DAY, MAX(v.Belegdatum), GETDATE()) AS Tage_Seit_Umsatz FROM dbo.Kunden k LEFT JOIN dbo.Verkaufsbelege v ON k.KundenNr = v.KundenNr AND v.Belegart = 'Rechnung' WHERE k.Aktiv = 1 GROUP BY k.KundenNr, k.Name, k.Angelegt_Am HAVING MAX(v.Belegdatum) IS NULL OR MAX(v.Belegdatum) < DATEADD(YEAR, -2, GETDATE()) ORDER BY Tage_Seit_Umsatz DESC; |
|
-- CHECK A01: Artikel ohne Einstandspreis oder Verkaufspreis SELECT ArtikelNr, Bezeichnung, Warengruppe, StandardEinstandspreis, Verkaufspreis, CASE WHEN StandardEinstandspreis = 0 OR StandardEinstandspreis IS NULL THEN 'Kein Einstandspreis' ELSE '' END AS Fehler_EK, CASE WHEN Verkaufspreis = 0 OR Verkaufspreis IS NULL THEN 'Kein VK-Preis' ELSE '' END AS Fehler_VK FROM dbo.Artikel WHERE Aktiv = 1 AND (StandardEinstandspreis = 0 OR StandardEinstandspreis IS NULL OR Verkaufspreis = 0 OR Verkaufspreis IS NULL);
-- CHECK A02: Negativer Deckungsbeitrag (VK < EK) SELECT ArtikelNr, Bezeichnung, Warengruppe, StandardEinstandspreis AS EK, Verkaufspreis AS VK, ROUND(Verkaufspreis - StandardEinstandspreis, 2) AS DB_EUR, ROUND(100.0 * (Verkaufspreis - StandardEinstandspreis) / NULLIF(Verkaufspreis, 0), 1) AS DB_Pct FROM dbo.Artikel WHERE Aktiv = 1 AND Verkaufspreis > 0 AND StandardEinstandspreis > Verkaufspreis ORDER BY DB_EUR ASC;
-- CHECK A03: Artikel ohne Warengruppe SELECT ArtikelNr, Bezeichnung, Angelegt_Am FROM dbo.Artikel WHERE (Warengruppe IS NULL OR LTRIM(RTRIM(Warengruppe)) = '') AND Aktiv = 1 ORDER BY Angelegt_Am DESC;
-- CHECK A04: Duplikate im Artikelstamm nach Bezeichnung SELECT LTRIM(RTRIM(UPPER(Bezeichnung))) AS Bezeichnung_Norm, COUNT(*) AS Anzahl, STRING_AGG(ArtikelNr, ', ') AS ArtikelNummern FROM dbo.Artikel WHERE Aktiv = 1 GROUP BY LTRIM(RTRIM(UPPER(Bezeichnung))) HAVING COUNT(*) > 1 ORDER BY COUNT(*) DESC;
-- CHECK A05: Artikel mit Lagerbestand aber ohne Bewegung (180 Tage) SELECT a.ArtikelNr, a.Bezeichnung, lb.Bestand, lb.Bestandswert, MAX(bew.Buchungsdatum) AS Letzte_Bewegung FROM dbo.Artikel a JOIN dbo.Lagerbestaende lb ON a.ArtikelNr = lb.ArtikelNr LEFT JOIN dbo.Lagerbewegungen bew ON a.ArtikelNr = bew.ArtikelNr WHERE a.Aktiv = 1 AND lb.Bestand > 0 GROUP BY a.ArtikelNr, a.Bezeichnung, lb.Bestand, lb.Bestandswert HAVING MAX(bew.Buchungsdatum) IS NULL OR MAX(bew.Buchungsdatum) < DATEADD(DAY, -180, GETDATE()) ORDER BY lb.Bestandswert DESC; |
|
-- CHECK L01: Lieferanten ohne Bankverbindung SELECT LieferantNr, Name, Zahlungsbedingung FROM dbo.Lieferanten WHERE Aktiv = 1 AND LieferantNr NOT IN ( SELECT DISTINCT LieferantNr FROM dbo.Bankverbindungen WHERE Aktiv = 1 ) ORDER BY Name;
-- CHECK L02: IBAN-Validierung (strukturelle Prüfung) SELECT l.LieferantNr, l.Name, b.IBAN, LEN(b.IBAN) AS IBAN_Laenge FROM dbo.Lieferanten l JOIN dbo.Bankverbindungen b ON l.LieferantNr = b.LieferantNr WHERE b.Aktiv = 1 AND (b.IBAN NOT LIKE '[A-Z][A-Z][0-9][0-9]%' OR (LEFT(b.IBAN, 2) = 'DE' AND LEN(REPLACE(b.IBAN,' ','')) <> 22) OR b.IBAN LIKE '% %'); -- Leerzeichen in IBAN
-- CHECK L03: Lieferanten ohne Einkaufsvolumen (letzte 24 Monate) SELECT l.LieferantNr, l.Name, l.Angelegt_Am, MAX(b.Bestelldatum) AS Letzte_Bestellung, DATEDIFF(MONTH, MAX(b.Bestelldatum), GETDATE()) AS Monate_Inaktiv FROM dbo.Lieferanten l LEFT JOIN dbo.Bestellungen b ON l.LieferantNr = b.LieferantNr WHERE l.Aktiv = 1 GROUP BY l.LieferantNr, l.Name, l.Angelegt_Am HAVING MAX(b.Bestelldatum) IS NULL OR MAX(b.Bestelldatum) < DATEADD(MONTH, -24, GETDATE()) ORDER BY Monate_Inaktiv DESC; |
05
Stammdaten sind das Fundament — aber Transaktionsdaten können eigenständige Qualitätsprobleme entwickeln: inkonsistente Buchungskreise, verwaiste Belege, ungültige Zuordnungen.
|
-- CHECK B01: Offene Belege ohne Aktivität (hängend) SELECT BelegNr, Belegart, Belegdatum, KundenNr, Nettobetrag, Status, DATEDIFF(DAY, Belegdatum, GETDATE()) AS Tage_Offen FROM dbo.Verkaufsbelege WHERE Status = 'Offen' AND Belegdatum < DATEADD(MONTH, -3, GETDATE()) ORDER BY Tage_Offen DESC;
-- CHECK B02: Buchungen ohne gültige Kostenstelle SELECT bj.BuchungsID, bj.Buchungsdatum, bj.KostenstelleNr, bj.Betrag, bj.Buchungstext FROM dbo.KostenbuchungsJournal bj LEFT JOIN dbo.Kostenstellen ks ON bj.KostenstelleNr = ks.KostenstelleNr WHERE ks.KostenstelleNr IS NULL OR ks.Aktiv = 0 ORDER BY bj.Buchungsdatum DESC;
-- CHECK B03: Ausreißer-Erkennung (statistische Prüfung) -- Beträge die mehr als 3 Standardabweichungen vom Mittelwert abweichen WITH Stats AS ( SELECT Belegart, AVG(Nettobetrag) AS Mittelwert, STDEV(Nettobetrag) AS Stdabw FROM dbo.Verkaufsbelege WHERE Belegdatum >= DATEADD(MONTH, -12, GETDATE()) GROUP BY Belegart ) SELECT vb.BelegNr, vb.Belegart, vb.Belegdatum, vb.KundenNr, vb.Nettobetrag, ROUND(s.Mittelwert, 2) AS Mittelwert, ROUND((vb.Nettobetrag - s.Mittelwert) / NULLIF(s.Stdabw, 0), 1) AS Sigma_Abweichung FROM dbo.Verkaufsbelege vb JOIN Stats s ON vb.Belegart = s.Belegart WHERE vb.Belegdatum >= DATEADD(MONTH, -1, GETDATE()) AND ABS(vb.Nettobetrag - s.Mittelwert) > 3 * s.Stdabw ORDER BY ABS((vb.Nettobetrag - s.Mittelwert) / NULLIF(s.Stdabw, 0)) DESC;
-- CHECK B04: Referentielle Integrität — Verkaufsbelege ohne Kundenstammsatz SELECT vb.BelegNr, vb.Belegdatum, vb.KundenNr, vb.Nettobetrag FROM dbo.Verkaufsbelege vb LEFT JOIN dbo.Kunden k ON vb.KundenNr = k.KundenNr WHERE k.KundenNr IS NULL ORDER BY vb.Belegdatum DESC; |
|
-- Abgleich: Umsatz ERP-Auswertung vs. BI-Staging-Tabelle -- Zeigt Inkonsistenzen zwischen Quellsystem und BI SELECT YEAR(e.Belegdatum) AS Jahr, MONTH(e.Belegdatum) AS Monat, SUM(e.Nettobetrag) AS Umsatz_ERP, SUM(b.Umsatz_EUR) AS Umsatz_BI, SUM(e.Nettobetrag) - SUM(b.Umsatz_EUR) AS Differenz, ROUND(100.0 * (SUM(e.Nettobetrag) - SUM(b.Umsatz_EUR)) / NULLIF(SUM(e.Nettobetrag), 0), 2) AS Differenz_Pct FROM dbo.Verkaufsbelege e LEFT JOIN KPI_DWH.dbo.vw_PBI_Umsatz b ON YEAR(e.Belegdatum) = b.Jahr AND MONTH(e.Belegdatum) = b.Monat WHERE e.Belegart = 'Rechnung' AND e.Belegdatum >= DATEADD(MONTH, -6, GETDATE()) GROUP BY YEAR(e.Belegdatum), MONTH(e.Belegdatum) HAVING ABS(SUM(e.Nettobetrag) - SUM(b.Umsatz_EUR)) > 100 ORDER BY Jahr DESC, Monat DESC; |
06
Data Lineage — die Herkunft und der Fluss von Daten durch Systeme — ist die Voraussetzung für jede ernsthafte Datenqualitätsarbeit. Wer nicht weiß, woher ein Datensatz stammt, kann Fehler nicht an der Wurzel beheben.
|
DATENFLUSS-DOKUMENTATION — MINDESTANFORDERUNGEN:
Je Datenobjekt dokumentieren: Quelle: Wo entstehen die Daten? (ERP, Webshop, Import, manuell) Erfasser: Wer legt an? (Sachbearbeiter, System, Schnittstelle) Prüfer: Wer prüft auf Vollständigkeit und Korrektheit? Freigebender: Wer gibt frei? (bei kritischen Stammdaten) Konsumenten: Wer nutzt die Daten? (BI, Mahnung, Versand, Steuer) Archivierung: Wie lange werden die Daten aufbewahrt?
BEISPIEL — LIEFERANTENSTAMM: Quelle: Manuell durch Einkauf Erfasser: Einkaufssachbearbeiter Prüfer: Einkaufsleiter (Bonität, Kontodaten) Freigebender: Einkaufsleiter Konsumenten: Buchhaltung (Zahlung), Einkauf (Bestellung), BI Archivierung: 10 Jahre nach letzter Transaktion (HGB) |
|
Datenobjekt |
ERP |
CRM |
Webshop |
BI |
Verantwortlich |
|
Kundenstamm |
Master |
Replika |
Replika |
Replika |
Vertriebsleiter |
|
Artikelstamm |
Master |
— |
Replika |
Replika |
Produktmanager |
|
Preise |
Master |
Lesen |
Replika |
Lesen |
Vertriebsleiter |
|
Lagerbestand |
Master |
— |
Replika |
Replika |
Lagerleiter |
|
Umsatzdaten |
Master |
— |
— |
Replika |
Controller |
|
|
GOLDEN RECORD PRINZIP Für jedes Datenobjekt gibt es genau ein führendes System — den "Golden Record Master". Alle anderen Systeme sind Replikate und dürfen das Master-System nicht überschreiben. Änderungen gehen immer durch den Master. Dieses Prinzip ist einfach, aber in der Praxis systematisch verletzt — mit kostspieligen Folgen. |
|
-- Häufige Stammdatenänderungen als DQ-Frühwarnsignal -- Viele Änderungen = instabile Daten oder falsche Ersterfassung SELECT Tabelle, Feldname, COUNT(*) AS Anzahl_Aenderungen_30Tage, COUNT(DISTINCT GeaendertVon) AS Anzahl_Benutzer, MAX(GeaendertAm) AS Letzte_Aenderung FROM dbo.Stammdaten_Aenderungslog WHERE GeaendertAm >= DATEADD(DAY, -30, GETDATE()) GROUP BY Tabelle, Feldname HAVING COUNT(*) > 10 -- Mehr als 10 Änderungen in 30 Tagen ORDER BY Anzahl_Aenderungen_30Tage DESC; |
07
Datenbereinigung ohne Governance ist Sisyphusarbeit — morgen sind die Daten wieder schlecht. Governance schafft die Strukturen, die verhindern dass Qualitätsprobleme neu entstehen.
|
GOVERNANCE-MODELL (schlank, umsetzbar im KMU):
DATA OWNER (je Datenobjekt, aus Fachbereich) Verantwortung: Qualitätsstandards definieren, Bereinigung priorisieren Beispiel: Einkaufsleiter = Data Owner Lieferantenstamm Zeitaufwand: 2-4 Stunden/Monat
DATA STEWARD (operativer Datenpfleger, je Abteilung) Verantwortung: Tägliche Pflege, Fehler bereinigen, Regeln einhalten Beispiel: Erfahrener Einkaufssachbearbeiter Zeitaufwand: 20-30 % der Arbeitszeit
DATA CUSTODIAN (technische Verantwortung, IT) Verantwortung: Systemzugriffe, Backups, DQ-Messinfrastruktur Beispiel: Datenbankadministrator / IT-Leiter Zeitaufwand: 10-20 % der Arbeitszeit
DQ-KOORDINATOR (optional, ab 200 MA) Verantwortung: Übergreifende Koordination, Reporting, Eskalation Zeitaufwand: Vollzeit bei großen Organisationen, Teilzeit im KMU |
|
STRUKTUR EINER DQ-REGEL:
Regel-ID: K-PLZ-DE-001 Objekt: Kundenstamm Feld: PLZ (für Land = DE) Regel: PLZ muss genau 5 Ziffern enthalten [0-9]{5} Schwere: Kritisch (Pflichtfeld für Mahnung / Versand) Aktion: Datensatz sperren bis PLZ korrekt Owner: Vertriebsleiter Gültig ab: 01.01.2026 Geprüft durch: IT + Controlling
REGELKATEGORIEN: Formatregeln: Gültige Formate (IBAN, PLZ, E-Mail, EAN) Pflichtregeln: Felder die nie leer sein dürfen Werteregeln: Erlaubte Wertebereiche und Listen Beziehungsregeln: Referentielle Integrität zwischen Tabellen Geschäftsregeln: Fachliche Konsistenz (VK > EK, Bestand ≥ 0) |
|
Häufigkeit |
Tätigkeit |
Teilnehmer |
Dauer |
|
Täglich |
DQ-Score prüfen, Alarme bearbeiten |
Data Steward |
15 Min. |
|
Wöchentlich |
Fehler-Liste abarbeiten (Priorität 1) |
Data Steward |
1-2 Std. |
|
Monatlich |
DQ-Bericht, Trendanalyse |
Data Owner + IT |
1 Std. |
|
Quartalsweise |
Regelwerk prüfen, neue Regeln aufnehmen |
DQ-Koordinator |
2 Std. |
|
Jährlich |
Governance-Modell überprüfen, Ziele setzen |
Management |
2 Std. |
08
Ein DQ-Dashboard schafft Transparenz und Verantwortlichkeit — vorausgesetzt es ist verständlich, aktuell und für verschiedene Zielgruppen aufbereitet.
|
SEITE 1 — MANAGEMENT OVERVIEW (monatlich) DQ-Score je Datenobjekt als Ampelkarte Trend DQ-Score letzte 12 Monate Top-5 offene Qualitätsprobleme nach Businessimpact Fortschritt laufender Bereinigungsmaßnahmen
SEITE 2 — DATA STEWARD COCKPIT (täglich) Alle Fehler-Datensätze nach Priorität Neue Fehler seit gestern (Delta-Anzeige) Bearbeitungsfortschritt offener Fehler Fehler nach Kategorie (Vollständigkeit / Dublett / Format)
SEITE 3 — OBJEKTDETAIL — KUNDENSTAMM (täglich) Score je Qualitätsdimension als Balken Fehler-Datensätze zum Direktzugriff (Drilldown) Historischer Score-Verlauf Vergleich: Mein Bereich vs. Gesamtunternehmen
SEITE 4 — DATA LINEAGE MAP (monatlich) Systemübergreifende Konsistenz-Übersicht Offene Diskrepanzen ERP ↔ BI ↔ Webshop Letzte Sync-Zeitpunkte je Schnittstelle |
|
// DQ-Score aktueller Tag DQ_Score_Heute = CALCULATE( AVERAGE(DQ_Score_Gesamt[DQ_Score]), DQ_Score_Gesamt[ScoreDatum] = MAX(DQ_Score_Gesamt[ScoreDatum]) )
// Trendpfeil (besser/schlechter als Vormonat) DQ_Trend = VAR ScoreHeute = [DQ_Score_Heute] VAR ScoreVormonat = CALCULATE( AVERAGE(DQ_Score_Gesamt[DQ_Score]), DATEADD(DQ_Score_Gesamt[ScoreDatum], -30, DAY) ) RETURN IF(ScoreHeute > ScoreVormonat, "▲", IF(ScoreHeute < ScoreVormonat, "▼", "→"))
// Ampelfarbe als Text für Conditional Formatting DQ_Ampel_Farbe = SWITCH( TRUE(), [DQ_Score_Heute] >= 95, "#22c55e", -- Grün [DQ_Score_Heute] >= 85, "#f59e0b", -- Gelb "#ef4444" -- Rot ) |
|
-- Wöchentlicher DQ-Statusbericht an Data Owners DECLARE @Bericht NVARCHAR(MAX) = 'DQ-WOCHENBERICHT ' + CONVERT(VARCHAR, GETDATE(), 104) + CHAR(13) + CHAR(10) + STRING(130, '─') + CHAR(13) + CHAR(10);
SELECT @Bericht = @Bericht + o.ObjektName + ': ' + CAST(s.DQ_Score AS VARCHAR) + ' % (' + s.Ampel + ')' + ' — ' + CAST(f.Fehler_Gesamt AS VARCHAR) + ' offene Fehler' + CHAR(13) + CHAR(10) FROM dbo.DQ_Score_Gesamt s JOIN dbo.DQ_Objekte o ON s.ObjektID = o.ObjektID LEFT JOIN ( SELECT ObjektID, COUNT(*) AS Fehler_Gesamt FROM dbo.DQ_Fehler_Offen GROUP BY ObjektID ) f ON s.ObjektID = f.ObjektID WHERE s.ScoreDatum = CAST(GETDATE() AS DATE) ORDER BY s.DQ_Score ASC;
EXEC msdb.dbo.sp_send_dbmail @profile_name = 'DQ-Reporting', @recipients = 'dq-team@firma.de', @subject = 'DQ-Wochenbericht KW' + CAST(DATEPART(WEEK, GETDATE()) AS VARCHAR), @body = @Bericht; |
09
Diese Probleme tauchen in fast jedem mittelständischen ERP-System auf — identisch, vorhersehbar und behebbar.
01 Massendubletten im Kundenstamm
Neue Kunden werden angelegt ohne vorherige Dublettenprüfung. Nach 5 Jahren hat ein typisches ERP 15-25 % Dubletten im Kundenstamm. Umsatzkennzahlen sind falsch, Mahnungen gehen doppelt raus.
✓ Gegenmaßnahme: Dublettencheck bei Neuanlage erzwingen. Quartalsweiser Dubletten-Report mit automatischer Zusammenführungsvorschlagsliste.
02 Artikel ohne vollständige Stammdaten
Artikel werden "schnell mal angelegt" — ohne Warengruppe, ohne Einstandspreis, ohne Einheit. Monatelang wird damit gearbeitet, BI-Auswertungen sind lückenhaft.
✓ Gegenmaßnahme: Pflichtfelder im ERP erzwingen. Wöchentlicher Report "Artikel mit unvollständigen Stammdaten" an Produktmanager.
03 Tote Bankverbindungen
Lieferanten wechseln ihre Bankverbindung — aber niemand aktualisiert das ERP. Überweisungen schlagen fehl oder gehen auf falsche Konten. IBAN-Betrug nutzt genau diese Schwachstelle.
✓ Gegenmaßnahme: Jährliche Bankverbindungs-Bestätigung bei allen aktiven Lieferanten. Automatischer Alert wenn Bankdaten > 24 Monate nicht bestätigt.
04 Inkonsistente Kostenstellenzuordnungen
Dieselbe Kostenart wird je nach Buchender auf verschiedene Kostenstellen gebucht — mal auf 2010, mal auf 2020, mal auf 9999 (Sammelkostenstelle). Auswertungen sind wertlos.
✓ Gegenmaßnahme: Buchungsregeln schriftlich dokumentieren, Data Steward pro Kostenbereich benennen, monatlicher Konsistenz-Check.
05 Veraltete E-Mail-Adressen und Ansprechpartner
Kontaktpersonen beim Kunden wechseln — niemand aktualisiert das ERP. Angebote und Auftragsbestätigungen gehen ins Leere, Eskalationen scheitern.
✓ Gegenmaßnahme: Vertrieb erhält monatlichen Report "Kunden ohne Kontakt > 12 Monate" zur Validierung. Automatischer Reminder an Kundenbetreuer.
06 Mengeneinheihen-Chaos
Artikel haben verschiedene Einheiten in Einkauf, Lager und Verkauf — und die Umrechnungsfaktoren fehlen oder sind falsch. Bestände sind falsch, Kalkulationen stimmen nicht.
✓ Gegenmaßnahme: Einheiten-Check bei Artikelanlage. Automatischer Alert wenn Umrechnungsfaktor = 0 oder fehlt.
07 Negative Lagerbestände
Buchungen in falscher Reihenfolge oder fehlende Wareneingänge führen zu negativen Beständen. BI zeigt unrealistische Kennzahlen, Inventurplanung ist unmöglich.
✓ Gegenmaßnahme: Täglicher Check auf negative Bestände. Buchungsregeln, die Lagerbestand < 0 verhindern (Systemkonfiguration).
08 Importierte Datenmüll-Altbestände
Bei früheren ERP-Migrationen wurden Altdaten "wie sie sind" migriert — inklusive aller Fehler aus dem Vorgängersystem. Niemand hat je bereinigt.
✓ Gegenmaßnahme: Alle Datensätze vor einem Stichtag mit Alter-Flag kennzeichnen. Separaten Bereinigungsplan aufstellen, priorisiert nach Aktivität der Datensätze.
10
Dieser Plan führt von der ersten Messung bis zu einem laufenden DQ-System — ohne großes Projekt, ohne externe Berater.
|
|
VOR DEM START Read-only-Datenbankzugang für DQ-Messungen einrichten. DQ-Staging-Datenbank anlegen (Skripte aus Kapitel 3.2). Data Owner für mindestens drei Datenobjekte benennen und committen lassen. |
■ TAG 1-2: ERSTE BESTANDSAUFNAHME
■ DQ-Checks Kapitel 4 und 5 manuell ausführen — Ergebnisse in Excel festhalten
■ Anzahl Fehler je Objekt und Dimension zählen
■ Schwere priorisieren: Was kostet Geld oder erzeugt direkte Fehler?
■ Top-3-Probleme identifizieren — diese als erstes angehen
■ Data Owner für Kundenstamm, Artikelstamm, Lieferantenstamm benennen
■ TAG 3-5: DQ-INFRASTRUKTUR AUFBAUEN
■ Staging-Tabellen anlegen (Skripte Kapitel 3.2)
■ DQ-Dimensionen und Gewichte für drei Datenobjekte eintragen
■ Erste Checks als SQL Agent Jobs einrichten (täglich 06:00)
■ Score-Berechnungsjob implementieren und testen
■ Erstes manuelles Score-Ergebnis mit Data Owner besprechen
■ TAG 6-10: FEHLERANALYSE UND URSACHEN
■ Top-Fehler je Datenobjekt analysieren: Ursache, nicht nur Symptom
■ Wo entstehen die Fehler? (Neuanlage, Import, Schnittstelle, manuell)
■ Erste Bereinigungsmaßnahmen starten — priorisiert nach Businessimpact
■ Buchungsregeln und Governance-Regeln für Top-3-Probleme dokumentieren
■ Data Stewards benennen — je Datenobjekt einen Verantwortlichen
■ TAG 11-14: GOVERNANCE-GRUNDSTRUKTUR
■ Regelkatalog anlegen: Erste 10 DQ-Regeln schreiben und abstimmen
■ Datenfluss-Inventar (Kapitel 6.1) für Top-3-Objekte ausfüllen
■ Golden Record Master je Objekt definieren und kommunizieren
■ Review-Prozess festlegen (Kapitel 7.3) und ersten Termin einplanen
■ TAG 15-17: POWER BI VERBINDUNG
■ Power BI Desktop: Verbindung zu DQ-Staging-Datenbank
■ Score-Tabelle, Dimensionsmessungen und Fehler-Tabellen laden
■ DAX-Measures anlegen (Kapitel 8.2)
■ Ampellogik und Conditional Formatting konfigurieren
■ TAG 18-21: DASHBOARD-SEITEN AUFBAUEN
■ Management Overview: DQ-Score-Karten, Trend, Top-Probleme
■ Data Steward Cockpit: Fehler-Liste nach Priorität, Delta-Anzeige
■ Detailseite je Datenobjekt: Score je Dimension, Drilldown auf Fehler
■ Review mit Data Owners: Verständlich? Vollständig? Richtig?
■ TAG 22-25: ALERTS UND AUTOMATISIERUNG
■ DQ-Alert-Job einrichten: Mail bei Score < 85 % (Skript Kapitel 8.3)
■ Wöchentlichen Zusammenfassungs-Report automatisieren
■ Power BI-Dataset täglich aktualisieren (nach DQ-Job)
■ Dashboard in Power BI Service veröffentlichen — Link an Data Owner
■ TAG 26-28: PROZESSE VERANKERN
■ Ersten monatlichen DQ-Review durchführen
■ Bereinigungsfortschritt dokumentieren: Vorher/Nachher Score
■ Neue DQ-Regeln aus den ersten Erkenntnissen ableiten
■ Schulung Data Stewards: Dashboard lesen, Fehler bearbeiten, Regeln anwenden
■ TAG 29-30: ABSCHLUSS UND ROADMAP
■ Bericht an Management: Ausgangslage, aktueller Score, Maßnahmen
■ Roadmap: Weitere Datenobjekte, tiefere Prüfregeln, BI-Integration
■ Governance-Dokument final — von Data Owners unterschreiben lassen
■ Review-Kalender für nächste 12 Monate festlegen ■
|
|
ERGEBNIS NACH 30 TAGEN Nach 30 Tagen haben Sie einen täglichen DQ-Score für drei Datenobjekte, ein Power BI Dashboard das Qualität sichtbar macht, erste Governance-Strukturen mit klaren Verantwortlichkeiten und einen automatisierten Alert wenn Qualität unter den Zielwert fällt. Datenbereinigung wird von Feuerlöschen zu gesteuertem Prozess. |
Die in diesem Dokument enthaltenen Informationen, DQ-Frameworks, SQL-Skripte und Governance-Empfehlungen wurden nach bestem Wissen und Gewissen auf der Grundlage langjähriger praktischer Erfahrung erstellt. Dennoch kann keine Gewähr für die Vollständigkeit, Richtigkeit oder Aktualität übernommen werden.
Der Autor übernimmt ausdrücklich keinerlei Haftung für fehlerhafte Qualitätsmessungen, Fehlentscheidungen auf Basis von DQ-Scores, Datenverlust oder sonstige Schäden. DQ-Scores sind Indikatoren, keine rechtsverbindlichen Aussagen. Alle Prüfregeln und Abfragen müssen fachlich validiert werden.
Hinweise zu Datenhaltung, Archivierung und Stammdatenpflege berühren datenschutzrechtliche Themen. Für rechtsverbindliche Aussagen zur DSGVO-Konformität ist ein Datenschutzbeauftragter oder Fachanwalt hinzuzuziehen.
SQL-Abfragen beziehen sich auf SQL Server 2022/2025 und gängige ERP-Systeme, Stand März 2026. Tabellen- und Feldbezeichnungen sind systemspezifisch und müssen angepasst werden.
Dieses Dokument und alle Inhalte sind urheberrechtlich geschützt. © 2026 Sascha Hess, xenosystems.de. Alle Rechte vorbehalten.
Microsoft, SQL Server, Power BI sind eingetragene Marken der Microsoft Corporation. Alle anderen Produktnamen sind Eigentum ihrer jeweiligen Inhaber.
Es gilt ausschließlich deutsches Recht. Gerichtsstand ist, soweit gesetzlich zulässig, Weimar, Thüringen, Deutschland.
Sascha Hess ist Diplom-Biologe und IT-Professional mit über 20 Jahren Erfahrung in der Administration von ERP-, BI- und Datenbanksystemen. Er hat Datenqualitätsprojekte und Data-Governance-Strukturen für mittelständische Unternehmen, Energieversorger und die Bauhaus-Universität Weimar aufgebaut — von der ersten SQL-Prüfabfrage bis zum automatisierten DQ-Dashboard.
Sein Ansatz verbindet naturwissenschaftliche Präzision mit pragmatischer IT-Erfahrung. Schwerpunkte: Datenqualitätsmanagement, Data Governance, Business Intelligence (Power BI, DeltaMaster), SQL Server und IT-Interim-Management.
Web: www.xenosystems.de | E-Mail: info@xenosystems.de | Standort: Weimar, Thüringen / Remote
|
Service |
Beschreibung |
|
Datenqualitäts-Assessment |
Analyse und Messung der Datenqualität in ERP und BI — mit DQ-Score, Fehlerpriorisierung und konkretem Bereinigungsplan. |
|
Data Governance Beratung |
Aufbau eines schlanken Governance-Rahmens mit Rollen, Regeln und Review-Prozessen — passend für den Mittelstand. |
|
BI-Dashboard-Aufbau |
Power BI / DeltaMaster Dashboards inkl. DQ-Monitoring, KPI-System und automatisierten Reports. |
|
SQL Server DB Health Check |
Professioneller Audit Ihres SQL Servers — Managementreport, Risikobewertung und Maßnahmenplan. Scope: 3-5 Tage. |
|
Interim IT-Management |
Übernahme der IT-Steuerung auf Zeit — Budgetplanung, Dienstleister-Management, strategische IT-Ausrichtung. |
Vollständiges Dokument
Strategische Wissens-Roadmap · Checklisten · Praxisbeispiele
49,90 €
Sichere Zahlung über PayPal · Sofort-Download nach Zahlungseingang