Xenosystems Logo
Sascha Hess

Diplom-Biologe | Senior IT-Consultant

SH

Sascha Hess

xenosystems.de - IT-Consulting & Data Management

www.xenosystems.de

 

 

NOTFALL-KIT – SQL SERVER 2026

 

SQL Server

 

Datenarchitektur

 

Master Data Management

 

MDM-Strategien, Architekturmodelle und Umsetzung für den Mittelstand

WAS SIE IN DIESEM KIT ERHALTEN:

 

1

4 MDM-Architekturmodelle

Registry, Consolidation, Coexistence, Centralized — mit Entscheidungsmatrix

 

 

2

10 MDM-Fallen

Typische Fehler bei MDM-Einführungen — mit Gegenstrategien

 

 

3

Golden Record Framework

Survivorship Rules, Matching und Merging — fertig implementiert in SQL

 

 

4

MDM ohne MDM-Tool

Pragmatische Umsetzung mit SQL Server, dbt und Power BI

 

 

5

30-Tage-MDM-Bootstrapplan

Vom konzeptlosen Datenchaos zum ersten produktiven Master Record

 


 

 

Rechtliche Hinweise und Haftungsausschluss

 

HAFTUNGSAUSSCHLUSS

 

Alle Skripte, Konzepte und Architekturempfehlungen wurden sorgfältig erarbeitet. Da jede Daten- und Systemlandschaft individuell ist, übernimmt der Autor keinerlei Haftung für Datenverlust, Systemausfälle, fehlerhafte Datenkonsolidierungen oder Compliance-Verstöße. Testen Sie alle Matching- und Merge-Operationen auf Kopien der Produktivdaten, bevor Sie sie produktiv einsetzen.

 

KEINE ERGEBNISGARANTIE

 

MDM-Projekte sind komplexe organisatorische und technische Vorhaben. Genannte Zeitrahmen und Qualitätsverbesserungen sind Erfahrungswerte aus realen KMU-Umgebungen — tatsächliche Ergebnisse hängen von Datenqualität, Systemlandschaft, Teamkompetenz und organisatorischem Commitment ab.

 

DSGVO-HINWEIS

 

Master Data Management verarbeitet regelmäßig personenbezogene Daten (Kunden, Mitarbeiter, Kontaktpersonen). Alle MDM-Prozesse müssen DSGVO-konform gestaltet sein. Klären Sie insbesondere Aufbewahrungsfristen, Löschkonzepte und die Rechtsgrundlage für die Datenzusammenführung mit Ihrem Datenschutzbeauftragten.

 

VERSIONSHINWEIS

 

Die Inhalte beziehen sich auf SQL Server 2022/2025, Azure Purview, dbt Core 1.8+ und Power BI, Stand März 2026.

 

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.

 

Eine ausführliche Version dieses Haftungsausschlusses befindet sich am Ende dieses Dokuments.

 


 

 

Inhaltsverzeichnis

 

 

01  Einleitung

Warum MDM der fehlende Baustein in fast jeder KMU-Datenarchitektur ist

 

02  Grundkonzepte

Domains, Master Records, Lineage und der MDM-Lifecycle

 

03  Die 4 Architekturmodelle

Registry, Consolidation, Coexistence und Centralized im Vergleich

 

04  Die 10 MDM-Fallen

Typische Fehler bei MDM-Einführungen — mit sofortigen Gegenstrategien

 

05  Matching & Deduplication

Algorithmen, Schwellenwerte und Matching-Pipelines in SQL

 

06  Golden Record Framework

Survivorship Rules, Konfidenz-Scoring und Merge-Strategien

 

07  MDM ohne MDM-Tool

Pragmatische Umsetzung mit SQL Server, dbt und Power BI

 

08  Governance & Stewardship

Rollen, Workflows, Änderungsprozesse und Qualitäts-KPIs

 

09  Integration & Verteilung

MDM-Hub an ERP, CRM, BI und externe Systeme anbinden

 

10  30-Tage-MDM-Bootstrapplan

Vom Datenchaos zum ersten produktiven Golden Record

 

 


 

 

01

Einleitung

 

Warum MDM der fehlende Baustein in fast jeder KMU-Datenarchitektur ist

 

Ein mittelständisches Unternehmen führt ein neues CRM ein. Zwei Jahre später hat es denselben Kunden im CRM, im ERP, im Newsletter-Tool und im Webshop — viermal angelegt, mit vier leicht verschiedenen Schreibweisen, drei verschiedenen Adressen und zwei verschiedenen Umsatzzahlen. Power BI zeigt je nach gewählter Datenquelle andere Kundenzahlen. Das Vertriebsteam vertraut den Daten nicht mehr. Der Jahresbericht wird manuell korrigiert.

 

Das ist kein Datenqualitätsproblem. Das ist ein fehlendes MDM-Fundament.

 

Master Data Management ist die Disziplin, die sicherstellt, dass ein Unternehmen zu jedem Zeitpunkt eine einzige, autoritative, konsistente Version seiner Kernentitäten hat — Kunden, Lieferanten, Artikel, Mitarbeiter, Kostenstellen. Nicht vier Versionen. Eine.

 

MDM ist im Mittelstand aus drei Gründen chronisch unterbesetzt:

 

  Der Begriff klingt nach Großkonzern und teurer Software. Gartner, Informatica, SAP MDG — alles weit jenseits des KMU-Budgets. Dabei ist das Konzept unabhängig von der Toolwahl.

 

  Der Schmerz ist diffus verteilt. Der Buchhalter wundert sich über doppelte Kundennummern. Der Controller kämpft mit inkonsistenten Umsatzzahlen. Der IT-Leiter pflegt manuelle Mappingtabellen. Niemand sieht das Gesamtbild.

 

  Die Verantwortung ist unklar. Wer ist für den Kundenstamm zuständig — Vertrieb, IT, oder "eigentlich jeder und damit niemand"?

 

Dieses Kit zeigt, dass MDM im KMU ohne dedizierte MDM-Suite umsetzbar ist — mit SQL Server, dbt und klaren Governance-Strukturen. Es liefert die konzeptionellen Grundlagen, pragmatische Architekturentscheidungen und sofort einsetzbare SQL-Implementierungen für die häufigsten MDM-Domänen.

 

 

DIE FÜNF KERN-DOMAINS IM KMU-MDM

  Kundenstamm — die umsatzrelevanteste Domain: Dubletten kosten direkt Vertriebseffizienz und Reporting-Qualität.

  Lieferantenstamm — sicherheitsrelevant: Zahlungsrisiken, Dubletten, veraltete Bankverbindungen.

  Artikelstamm — der Dreh- und Angelpunkt von Einkauf, Lager, Vertrieb und BI.

  Mitarbeiterstamm — HR-relevant, DSGVO-sensitiv, oft zwischen HR-System und ERP geteilt.

  Kostenstellenstruktur — das stille Fundament jedes Controllings, oft jahrelang unbereinigt gewachsen.

 


 

 

02

Grundkonzepte

 

Domains, Master Records, Lineage und der MDM-Lifecycle

 

2.1 Die fünf Kernbegriffe des MDM

 

Master Data Domain — eine Kategorie von Kernobjekten, die unternehmensübergreifend konsistent sein müssen. Kunden, Artikel und Lieferanten sind klassische Domains. Eine Domain hat immer eine definierende Frage: "Was ist ein Kunde für unser Unternehmen?" Die Antwort auf diese Frage muss einheitlich sein, bevor Technik sinnvoll eingesetzt werden kann.

 

Master Record (Golden Record) — die eine, autoritative Version eines Objekts. Ein Kunde mit Kundennummer M-0042 existiert genau einmal als Master Record. Alle anderen Systeme referenzieren diesen Record — sie erstellen keine eigene Version.

 

Source Record — der Datensatz in einem Quellsystem, der dem Master Record zugrunde liegt oder referenziert. CRM-Kundensatz, ERP-Kundenstamm und Webshop-Account sind Source Records. Der Master Record konsolidiert sie.

 

Lineage — die Nachverfolgbarkeit: Welches Quellsystem hat welches Feld des Master Records befüllt? Ohne Lineage ist MDM nicht auditierbar und nicht reparierbar wenn Fehler auftreten.

 

Stewardship — die menschliche Komponente des MDM: wer ist verantwortlich für die Qualität und Korrektheit einer Domain? Ohne benannte Stewards ist jede technische MDM-Implementierung zum Scheitern verurteilt.

 

2.2 Der MDM-Lifecycle

 

Jeder Master Record durchläuft denselben Lebenszyklus — unabhängig von Domain und Architekturmodell:

 

  Erfassung: Ein neuer Record entsteht in einem Quellsystem oder direkt im MDM-Hub.

 

  Matching: Ist dieser Record bereits vorhanden? Matching-Algorithmen prüfen auf Dubletten.

 

  Merge-Entscheidung: Handelt es sich um einen Duplikat? Survivorship Rules bestimmen den Golden Record.

 

  Anreicherung: Fehlende Attribute werden aus anderen Quellen ergänzt.

 

  Validierung: Pflichtfelder, Formatregeln, Konsistenz-Checks.

 

  Publikation: Der Golden Record wird an alle Zielsysteme verteilt.

 

  Überwachung: Qualitäts-KPIs werden kontinuierlich gemessen.

 

  Archivierung: Inaktive Records werden nicht gelöscht, sondern historisiert.

 

-- MDM-Lifecycle-Status für jeden Master Record

CREATE TABLE mdm.Master_Kunden (

    MasterID            INT IDENTITY PRIMARY KEY,

    GlobaleKundenID     UNIQUEIDENTIFIER DEFAULT NEWID() NOT NULL,  -- systemübergreifende ID

    -- Kerndaten (Golden Record)

    Name                NVARCHAR(200),

    Name_Normalisiert   NVARCHAR(200),   -- UPPER + TRIM für Matching

    Strasse             NVARCHAR(200),

    PLZ                 NVARCHAR(10),

    Ort                 NVARCHAR(100),

    Land                NCHAR(2),        -- ISO 3166-1 alpha-2

    Email               NVARCHAR(200),

    -- Lifecycle-Felder

    Status              NVARCHAR(20) DEFAULT 'KANDIDAT',

    --   KANDIDAT → MATCHING → AKTIV → ARCHIVIERT

    KonfidenzScore      DECIMAL(5,4),    -- 0.0000 bis 1.0000

    Vollstaendigkeit    DECIMAL(5,4),    -- Anteil gefüllter Pflichtfelder

    -- Provenienz

    HauptQuelle         NVARCHAR(50),    -- 'ERP', 'CRM', 'WEBSHOP', 'MANUELL'

    AnlageDatum         DATETIME2 DEFAULT SYSUTCDATETIME(),

    LetzteAenderung     DATETIME2 DEFAULT SYSUTCDATETIME(),

    GeaendertVon        NVARCHAR(100),

    -- Lineage

    ErpKundenNr         NVARCHAR(50),    -- Referenz zum ERP-Quellsystem

    CrmKontaktID        NVARCHAR(50),    -- Referenz zum CRM

    WebshopKundenID     NVARCHAR(50)     -- Referenz zum Webshop

);

 

-- Lineage-Tabelle: welches Feld kommt aus welcher Quelle

CREATE TABLE mdm.Lineage_Felder (

    LineageID           INT IDENTITY PRIMARY KEY,

    MasterID            INT REFERENCES mdm.Master_Kunden(MasterID),

    Feldname            NVARCHAR(100),

    Quellsystem         NVARCHAR(50),

    QuellID             NVARCHAR(100),

    QuellWert           NVARCHAR(MAX),

    UebernahmeZeitpunkt DATETIME2 DEFAULT SYSUTCDATETIME(),

    SurvivorshipRegel   NVARCHAR(200)   -- welche Regel hat diesen Wert gewählt?

);

 

 

2.3 MDM-Reifegradmodell

 

Bevor eine Architekturentscheidung getroffen wird, ist eine ehrliche Einschätzung des eigenen Reifegrads notwendig:

 

Reifegrad

Merkmale

Typische KMU-Situation

Empfohlener nächster Schritt

0 — Chaos

Keine Regeln, keine Verantwortung, keine Dokumentation

ERP-Einführung vor 5+ Jahren ohne Datenkonzept

Inventar erstellen, Steward benennen

1 — Bewusst

Problem erkannt, erste manuelle Bereinigungen

Regelmäßige Excel-Bereinigungen vor Reportings

Dubletten-Skripte automatisieren

2 — Definiert

Regeln dokumentiert, erste automatische Prüfungen

DQ-Ampel läuft, Pflichtfelder geprüft

Golden Record Modell implementieren

3 — Gesteuert

Golden Records vorhanden, KPIs gemessen, Stewards aktiv

MDM-Hub in SQL Server, wöchentliche Reports

Verteilung an alle Zielsysteme

4 — Optimiert

Automatisches Matching, proaktive Qualitätssicherung

MDM als Unternehmensstandard

Continuous Improvement, KI-gestütztes Matching

 


 

 

03

Die 4 Architekturmodelle

 

Registry, Consolidation, Coexistence und Centralized — mit Entscheidungsmatrix

 

3.1 Registry-Modell

 

Das Registry-Modell verwaltet nur Identifikatoren und Referenzen — die eigentlichen Daten bleiben in den Quellsystemen. Der MDM-Hub ist ein Index, kein Datenspeicher.

 

  Was der Hub enthält: Globale ID, Mapping auf Quellsystem-IDs, Basis-Matching-Attribute.

 

  Was in den Quellsystemen bleibt: Alle inhaltlichen Daten.

 

  Wie Abfragen funktionieren: Anwendung fragt Hub nach globaler ID, holt Daten dann direkt aus Quellsystem.

 

-- Registry-Modell: nur Identifikatoren und Mapping

CREATE TABLE mdm.Registry_Kunden (

    GlobaleID       UNIQUEIDENTIFIER DEFAULT NEWID() PRIMARY KEY,

    -- Quellsystem-Referenzen

    ERP_KundenNr    NVARCHAR(50),

    CRM_KontaktID   NVARCHAR(50),

    Webshop_ID      NVARCHAR(50),

    EDI_PartnerID   NVARCHAR(50),

    -- Minimale Matching-Felder (für Dublettenprüfung)

    Name_Key        NVARCHAR(200),   -- normalisiert für Matching

    PLZ             NVARCHAR(10),

    Land            NCHAR(2),

    -- Konfidenz dieser Zusammenführung

    Match_Score     DECIMAL(5,4),

    Match_Methode   NVARCHAR(100),

    Erstellt        DATETIME2 DEFAULT SYSUTCDATETIME()

);

 

-- Cross-Reference-Abfrage: alle Quell-IDs zu einem Kunden

SELECT

    r.GlobaleID,

    r.ERP_KundenNr,

    r.CRM_KontaktID,

    r.Webshop_ID,

    r.Match_Score

FROM mdm.Registry_Kunden r

WHERE r.GlobaleID = '3FA85F64-5717-4562-B3FC-2C963F66AFA6';

 

 

Geeignet wenn: 1–3 Quellsysteme, Daten dürfen aus Compliance-Gründen nicht dupliziert werden, minimaler Implementierungsaufwand gewünscht, Einstiegsmodell für KMU.

 

3.2 Consolidation-Modell

 

Der MDM-Hub liest periodisch aus allen Quellsystemen, bereinigt und konsolidiert die Daten zu Golden Records — schreibt aber nicht zurück. Die Quellsysteme bleiben unverändert.

 

  Idealerweise kombiniert mit: Datenbank-Schicht (SQL Server) als Hub, ETL/ELT für die Extraktion.

 

  Stärke: Quellsysteme werden nicht verändert, kein Risiko für Produktivbetrieb.

 

  Schwäche: Quellsysteme bleiben inkonsistent — nur der Hub ist sauber.

 

-- Consolidation: periodische Zusammenführung aller Quellen

CREATE OR ALTER PROCEDURE mdm.SP_Konsolidiere_Kunden AS

BEGIN

    SET NOCOUNT ON;

 

    -- Schritt 1: Alle Quell-Records in Staging laden

    TRUNCATE TABLE mdm.Staging_Kunden;

 

    INSERT INTO mdm.Staging_Kunden (Quelle, QuellID, Name, PLZ, Ort, Email, LadeDatum)

    SELECT 'ERP', CAST(KundenNr AS NVARCHAR), Name, PLZ, Ort, Email, SYSUTCDATETIME()

    FROM dbo.Kunden;

 

    INSERT INTO mdm.Staging_Kunden (Quelle, QuellID, Name, PLZ, Ort, Email, LadeDatum)

    SELECT 'CRM', KontaktID, Firma, Postleitzahl, Stadt, EMail, SYSUTCDATETIME()

    FROM crm.Kontakte WHERE Typ = 'KUNDE';

 

    -- Schritt 2: Normalisierung

    UPDATE mdm.Staging_Kunden SET

        Name_Norm = UPPER(TRIM(

            REPLACE(REPLACE(REPLACE(Name, 'GmbH', ''), 'AG', ''), '  ', ' ')

        )),

        PLZ_Norm  = TRIM(PLZ);

 

    -- Schritt 3: Matching und Golden Record Bestimmung (→ Kapitel 5 & 6)

    EXEC mdm.SP_Matching_Kunden;

    EXEC mdm.SP_Golden_Record_Bestimmen;

 

    -- Protokoll

    INSERT INTO mdm.Konsolidierungs_Log (Zeitpunkt, Zeilen_Staging, Status)

    SELECT SYSUTCDATETIME(), COUNT(*), 'ERFOLG' FROM mdm.Staging_Kunden;

END

 

 

Geeignet wenn: 3–10 Quellsysteme, BI und Reporting als primärer Anwendungsfall, Quellsysteme dürfen nicht verändert werden, KMU-Standardfall.

 

3.3 Coexistence-Modell

 

Golden Records werden im Hub gepflegt und aktiv an alle Quellsysteme zurückverteilt. Hub und Quellsysteme koexistieren mit definierten führenden Feldern je Attribut.

 

  Stärke: Quellsysteme werden sukzessive bereinigt, Konsistenz wächst über Zeit.

 

  Schwäche: Bidirektionale Synchronisation ist komplex — Konfliktlösung bei gleichzeitigen Änderungen erforderlich.

 

-- Coexistence: Änderungs-Tracking mit Konfliktbewertung

CREATE TABLE mdm.Aenderungs_Queue (

    QueueID         INT IDENTITY PRIMARY KEY,

    MasterID        INT,

    Quellsystem     NVARCHAR(50),

    Feldname        NVARCHAR(100),

    AlterWert       NVARCHAR(MAX),

    NeuerWert       NVARCHAR(MAX),

    AenderungsZeit  DATETIME2,

    -- Führendes System für dieses Feld

    FuehrendesSystem NVARCHAR(50),

    Konflikt        BIT DEFAULT 0,   -- 1 wenn zwei Systeme gleichzeitig änderten

    Status          NVARCHAR(20) DEFAULT 'OFFEN',

    -- OFFEN → AUTOMATISCH_GELOEST → MANUELL_GEPRUEFT → VERTEILT

    BearbeitetVon   NVARCHAR(100),

    BearbeitetAm    DATETIME2

);

 

-- Attribut-Führung: welches System ist für welches Feld autoritativ?

CREATE TABLE mdm.Attribut_Fuehrung (

    Domain          NVARCHAR(50),   -- 'KUNDEN'

    Feldname        NVARCHAR(100),

    FuehrendesSystem NVARCHAR(50),

    Fallback1       NVARCHAR(50),

    Fallback2       NVARCHAR(50),

    Begruendung     NVARCHAR(500)

);

 

-- Beispiel-Konfiguration: welches System führt welches Feld

INSERT INTO mdm.Attribut_Fuehrung VALUES

('KUNDEN', 'Name',              'ERP',     'CRM',     NULL,  'ERP ist Abrechnungssystem'),

('KUNDEN', 'Lieferadresse',     'ERP',     'WEBSHOP', NULL,  'ERP hat validierte Adressen'),

('KUNDEN', 'Email',             'CRM',     'WEBSHOP', 'ERP', 'CRM pflegt Kundenkontakte'),

('KUNDEN', 'Telefon',           'CRM',     'ERP',     NULL,  'CRM hat aktuellere Kontakte'),

('KUNDEN', 'Umsatzklasse',      'ERP',     NULL,      NULL,  'Nur ERP hat Umsatzdaten'),

('KUNDEN', 'Marketingpraeferenz','CRM',    NULL,      NULL,  'Nur CRM pflegt Marketing');

 

 

Geeignet wenn: Quellsysteme sollen bereinigt werden, mittlerer Implementierungsaufwand akzeptiert, 2–5 eng integrierte Systeme, wachsende MDM-Reife.

 

3.4 Centralized-Modell

 

Der MDM-Hub ist das einzige System, in dem Stammdaten angelegt und geändert werden. Alle anderen Systeme sind Konsumenten — sie schreiben nie direkt Stammdaten.

 

  Stärke: Maximale Konsistenz, keine Synchronisationskonflikte, klare Verantwortung.

 

  Schwäche: Höchste Implementierungskomplexität, Quellsysteme müssen angepasst werden, Single Point of Failure.

 

Geeignet wenn: Greenfield-Projekte, neue ERP-Einführung als Anlass, strikte Compliance-Anforderungen, ausreichend IT-Ressourcen vorhanden.

 

3.5 Entscheidungsmatrix

 

Kriterium

Registry

Consolidation

Coexistence

Centralized

Anzahl Quellsysteme

1–3

3–10

2–5

beliebig

Implementierungs-Aufwand

Niedrig

Mittel

Hoch

Sehr hoch

Quellsysteme bereinigen?

Nein

Nein

Ja, sukzessive

Nicht nötig

Bidirektionale Sync?

Nein

Nein

Ja

Nein (Hub = Quelle)

BI-Qualität

Mittel

Hoch

Sehr hoch

Maximal

Risiko bei Einführung

Niedrig

Niedrig

Mittel

Hoch

Empfehlung KMU Einstieg

✓✓

Empfehlung KMU fortgeschritten

✓✓

 

 

DIE KMU-EMPFEHLUNG

  Einstieg (Reifegrad 0–1): Registry-Modell — in zwei Wochen implementierbar, sofortiger Nutzen durch Cross-Reference.

  Standard (Reifegrad 2–3): Consolidation-Modell mit SQL Server Hub — der pragmatischste Ansatz für den deutschen Mittelstand.

  Fortgeschritten (Reifegrad 3–4): Coexistence mit definierten führenden Systemen — wenn Quellsysteme bereinigt werden sollen.

  Centralized nur bei Greenfield oder vollständiger ERP-Neueinführung.

 


 

 

04

Die 10 MDM-Fallen

 

Typische Fehler bei MDM-Einführungen — mit sofortigen Gegenstrategien

 

01 Domain-Überlastung zum Start

 

Das MDM-Projekt soll Kunden, Lieferanten, Artikel, Mitarbeiter und Kostenstellen gleichzeitig in Angriff nehmen. Nach sechs Monaten ist für keine Domain etwas produktiv. Das Team ist erschöpft, das Management verliert das Vertrauen.

 

LÖSUNG:

 

  Eine Domain zum Start — die mit dem höchsten geschäftlichen Schmerz.

  Bewertungskriterien: Anzahl Systeme, in denen die Domain vorkommt × monatliche Fehlerkosten × Strategische Relevanz.

  Erst wenn die erste Domain stabil läuft, beginnt die zweite.

 

02 Matching ohne Domänenwissen

 

Das technische Team baut einen Matching-Algorithmus auf Basis von String-Ähnlichkeit. Er findet 94 % Dubletten — und produziert 12 % falsche Treffer. "Müller GmbH Stuttgart" und "Müller GmbH Hamburg" sind zwei verschiedene Unternehmen, die der Algorithmus zusammenführt.

 

LÖSUNG:

 

  Matching-Regeln immer gemeinsam mit dem Fachbereich entwickeln — der Buchhalter weiß, welche Felder wirklich eindeutig sind.

  Kombination aus mehreren schwachen Signalen ist robuster als ein starkes Signal: Name + PLZ + Rechtsform + Branche.

  Unsichere Matches immer manuell prüfen lassen — kein automatisches Merge ohne Schwellenwert-Kalibrierung.

 

03 Golden Record ohne Survivorship Rules

 

Der Hub konsolidiert Daten aus ERP und CRM — aber niemand hat definiert, welches System für welches Feld führend ist. Im Zweifel "gewinnt" das System, das zuletzt geschrieben hat. Das Ergebnis: die Email-Adresse vom letzten Update, die Adresse aus der letzten Importdatei, der Name aus dem System mit dem jüngsten Timestamp.

 

LÖSUNG:

 

  Survivorship Rules vor der Implementierung dokumentieren — nicht als Code-Kommentar, sondern als fachliche Vereinbarung.

  Für jedes Attribut: Welches System ist führend? Welcher Fallback gilt? Was gilt bei Nullwerten?

  Survivorship-Entscheidungen in der Lineage-Tabelle protokollieren (Kapitel 6).

 

04 MDM als einmaliges Bereinigungsprojekt

 

Das Unternehmen bereinigt einmalig alle Dubletten — und nennt das "MDM-Einführung". Drei Monate später sind neue Dubletten entstanden, weil die Geschäftsprozesse und Systemintegrationen unverändert geblieben sind.

 

LÖSUNG:

 

  MDM ist kein Projekt, das endet — es ist ein dauerhafter Betriebsprozess.

  Präventive Maßnahmen gehören zum MDM: Dublettenprüfung bei Neuanlage, Validierung bei Importen, regelmäßige Monitoring-Läufe.

  MDM-KPIs werden dauerhaft gemessen und berichtet (Kapitel 8).

 

05 Technischer Hub ohne organisatorischen Steward

 

Ein perfekter MDM-Hub läuft in SQL Server. Aber wer entscheidet, wenn ein Match unsicher ist? Wer genehmigt das Zusammenführen zweier Kundenrekords? Wer pflegt die Survivorship Rules, wenn sich Geschäftsregeln ändern? Niemand ist benannt — also bleibt die Entscheidungs-Queue wochenlang unbearbeitet.

 

LÖSUNG:

 

  Für jede MDM-Domain einen Data Steward benennen — namentlich, mit Zeitbudget, mit Eskalationsweg.

  Steward-Aufgaben in die Stellenbeschreibung aufnehmen — nicht als Nebentätigkeit behandeln.

  SLA für die Bearbeitung unsicherer Matches: maximal fünf Werktage bis zur Entscheidung.

 

06 Zu enge Matching-Schwellenwerte — alles wird zusammengeführt

 

Der Matching-Score-Schwellenwert für automatisches Merge ist auf 0.75 gesetzt. 30 % der Zusammenführungen sind falsch — aber da der Prozess vollautomatisch läuft, bemerkt es niemand bis zum nächsten Kundenbesuch, bei dem ein Außendienstmitarbeiter merkt, dass sein Großkunde mit einem Kleinstunternehmen zusammengeführt wurde.

 

LÖSUNG:

 

  Drei Zonen statt einem Schwellenwert: Automatisch Zusammenführen (> 0.92), Manuelle Prüfung (0.75–0.92), Kein Match (< 0.75).

  Schwellenwerte empirisch kalibrieren: 200 manuelle Prüfungen → Precision/Recall messen → Schwellenwert anpassen.

  Regelmäßige Stichproben aus automatischen Merges prüfen (10 % monatlich).

 

07 Löschung statt Historisierung

 

Wenn Dubletten zusammengeführt werden, werden die "verlierer"-Records gelöscht. Drei Monate später fragt ein Auditor nach dem Buchungsbeleg zu Kundennummer 4711 — die gibt es nicht mehr, weil sie mit 4712 zusammengeführt wurde. GoBD-Verstoß.

 

LÖSUNG:

 

  Zusammengeführte Records werden nie gelöscht — sie werden als "ZUSAMMENGEFUEHRT" markiert und auf den Golden Record verwiesen.

  Cross-Reference-Tabelle hält alle historischen IDs dauerhaft.

  Löschkonzept separat und DSGVO-konform implementieren — das ist eine andere Dimension als Dubletten-Management.

 

-- Sicheres Merge: kein Löschen, nur Markieren und Verweisen

CREATE OR ALTER PROCEDURE mdm.SP_Merge_Kunden

    @BehaltenID     INT,   -- der Golden Record

    @AufloesenID    INT,   -- der zusammenzuführende Record

    @Steward        NVARCHAR(100),

    @Begruendung    NVARCHAR(500)

AS

BEGIN

    SET NOCOUNT ON;

    BEGIN TRANSACTION;

    BEGIN TRY

 

        -- Alle Referenzen auf aufgelösten Record umlenken

        UPDATE dbo.Auftraege    SET KundenNr = @BehaltenID WHERE KundenNr = @AufloesenID;

        UPDATE dbo.Rechnungen   SET KundenNr = @BehaltenID WHERE KundenNr = @AufloesenID;

        UPDATE dbo.Kontakte     SET KundenNr = @BehaltenID WHERE KundenNr = @AufloesenID;

 

        -- Aufgelösten Record markieren — NIE löschen

        UPDATE mdm.Master_Kunden SET

            Status           = 'ZUSAMMENGEFUEHRT',

            MergeZielID      = @BehaltenID,

            LetzteAenderung  = SYSUTCDATETIME(),

            GeaendertVon     = @Steward

        WHERE MasterID = @AufloesenID;

 

        -- Merge-Protokoll

        INSERT INTO mdm.Merge_Protokoll

            (BehaltenID, AufloesenID, Steward, Begruendung, MergeZeitpunkt)

        VALUES (@BehaltenID, @AufloesenID, @Steward, @Begruendung, SYSUTCDATETIME());

 

        COMMIT TRANSACTION;

    END TRY

    BEGIN CATCH

        IF XACT_STATE() <> 0 ROLLBACK TRANSACTION;

        THROW;

    END CATCH

END

 

 

08 MDM-Hub als Black Box für Quellsysteme

 

Der MDM-Hub läuft — aber die Quellsysteme wissen nichts davon. ERP und CRM legen weiterhin Kunden an, ohne zu prüfen, ob der Kunde bereits im Hub existiert. Neue Dubletten entstehen genauso schnell wie alte beseitigt werden.

 

LÖSUNG:

 

  MDM-Prüfung bei Neuanlage als Pflichtschritt in allen Quellsystemen (API-Call oder Trigger).

  "Existiert bereits im Hub?" als erste Frage im Neuanlage-Prozess — nicht nach der Anlage.

  Wenn direkte Integration nicht möglich: täglicher Dubletten-Alert für frisch angelegte Records.

 

09 Kein Umgang mit absichtlichen Duplikaten

 

Nicht alle Duplikate sind ungewollt. Ein Konzern mit zwei Tochtergesellschaften ist im ERP zweimal angelegt — zurecht. Ein Franchise-Nehmer hat eine eigene Kundennummer und ist gleichzeitig Endkunde. MDM-Algorithmen erkennen das als Duplikat und wollen zusammenführen.

 

LÖSUNG:

 

  "Legitimate Duplicate" als expliziter Status in der Matching-Pipeline.

  Steward kann Match-Vorschläge mit Begründung als "kein Merge" kennzeichnen — dieser Eintrag bleibt dauerhaft.

  Unternehmenshierarchie als eigenes Konzept: Konzernmutter, Tochtergesellschaften, verbundene Unternehmen.

 

-- Legitimate Duplicates explizit erfassen

CREATE TABLE mdm.Keine_Merge_Liste (

    EintragID       INT IDENTITY PRIMARY KEY,

    MasterID_A      INT,

    MasterID_B      INT,

    Begruendung     NVARCHAR(500),

    ErfasstVon      NVARCHAR(100),

    ErfasstAm       DATETIME2 DEFAULT SYSUTCDATETIME(),

    -- Verhindert dass Matching-Job diese Paare erneut vorschlägt

    CONSTRAINT UQ_NichtMerge UNIQUE (MasterID_A, MasterID_B)

);

 

 

10 Fehlende Rückwärtskompatibilität bei ID-Konsolidierung

 

Der MDM-Hub führt eine neue "Globale Kunden-ID" ein. Alle Berichte und Schnittstellen verwenden aber noch die alten ERP-Nummern. Niemand hat einen Migrationspfad für bestehende Datenbankabfragen, BI-Berichte und API-Calls definiert.

 

LÖSUNG:

 

  Cross-Reference-View als Kompatibilitätsschicht: alte IDs bleiben gültig und werden transparent auf die neue Globale ID gemappt.

  Deprecation-Timeline: alte IDs funktionieren 12 Monate nach MDM-Einführung, dann schrittweise abschalten.

  API-Versionierung: alte ID-Formate werden in einer Übergangsversion weiter unterstützt.

 


 

 

05

Matching & Deduplication

 

Algorithmen, Schwellenwerte und Matching-Pipelines in SQL

 

5.1 Die Matching-Pyramide

 

Matching wird in drei Stufen aufgebaut — von deterministisch (exakt) bis probabilistisch (ähnlich):

 

Stufe 1 — Deterministisches Matching (Exakt-Match): Identische Werte in eindeutigen Feldern. Handelregisternummer, USt-IdNr., DUNS-Nummer. Wenn diese übereinstimmen: automatisches Merge ohne menschliche Prüfung.

 

Stufe 2 — Semi-Deterministisches Matching: Normalisierte Werte in mehreren Feldern stimmen überein. Name (normalisiert) + PLZ + Land. Wenn alle drei übereinstimmen: sehr hohe Konfidenz, automatisches Merge möglich.

 

Stufe 3 — Probabilistisches Matching: Ähnlichkeitswerte über mehrere Felder kombiniert. SOUNDEX-Ähnlichkeit des Namens + PLZ-Präfix + Branche. Wahrscheinlichkeit berechnen, ab Schwellenwert manuelle Prüfung.

 

-- Vollständige Matching-Pipeline: alle drei Stufen

CREATE OR ALTER PROCEDURE mdm.SP_Matching_Kunden AS

BEGIN

    SET NOCOUNT ON;

 

    -- ── STUFE 1: Deterministisches Matching ──────────────────────────────

    -- USt-IdNr. ist global eindeutig — sofortiges Merge

    INSERT INTO mdm.Match_Kandidaten

        (MasterID_A, MasterID_B, Match_Score, Match_Methode, Auto_Merge)

    SELECT

        a.MasterID, b.MasterID,

        1.0,

        'DETERMINISTISCH_UStId',

        1   -- automatisches Merge

    FROM mdm.Master_Kunden a

    JOIN mdm.Master_Kunden b

        ON a.UStIdNr = b.UStIdNr

        AND a.UStIdNr IS NOT NULL

        AND a.MasterID < b.MasterID   -- jedes Paar nur einmal

        AND a.Status = 'AKTIV' AND b.Status = 'AKTIV';

 

    -- ── STUFE 2: Semi-Deterministisch ────────────────────────────────────

    -- Normalisierter Name + PLZ + Land

    INSERT INTO mdm.Match_Kandidaten

        (MasterID_A, MasterID_B, Match_Score, Match_Methode, Auto_Merge)

    SELECT

        a.MasterID, b.MasterID,

        0.95,

        'SEMI_Name_PLZ_Land',

        1

    FROM mdm.Master_Kunden a

    JOIN mdm.Master_Kunden b

        ON a.Name_Normalisiert = b.Name_Normalisiert

        AND a.PLZ              = b.PLZ

        AND a.Land             = b.Land

        AND a.MasterID < b.MasterID

        AND a.Status = 'AKTIV' AND b.Status = 'AKTIV'

    -- Bereits in Stufe 1 gefundene Paare ausschließen

    WHERE NOT EXISTS (

        SELECT 1 FROM mdm.Match_Kandidaten m

        WHERE m.MasterID_A = a.MasterID AND m.MasterID_B = b.MasterID

    );

 

    -- ── STUFE 3: Probabilistisches Matching ──────────────────────────────

    -- Gewichteter Score aus mehreren Teilähnlichkeiten

    INSERT INTO mdm.Match_Kandidaten

        (MasterID_A, MasterID_B, Match_Score, Match_Methode, Auto_Merge)

    SELECT

        a.MasterID,

        b.MasterID,

        -- Gewichteter Score: Name 50%, PLZ 25%, Branche 15%, Email-Domain 10%

        ROUND(

            0.50 * CASE WHEN DIFFERENCE(a.Name_Normalisiert, b.Name_Normalisiert) = 4 THEN 1.0

                        WHEN DIFFERENCE(a.Name_Normalisiert, b.Name_Normalisiert) = 3 THEN 0.7

                        ELSE 0.0 END

          + 0.25 * CASE WHEN LEFT(a.PLZ,3) = LEFT(b.PLZ,3) THEN 1.0 ELSE 0.0 END

          + 0.15 * CASE WHEN a.Branche = b.Branche AND a.Branche IS NOT NULL THEN 1.0 ELSE 0.0 END

          + 0.10 * CASE WHEN a.Email_Domain = b.Email_Domain

                         AND a.Email_Domain IS NOT NULL THEN 1.0 ELSE 0.0 END

        , 4) AS Score,

        'PROBABILISTISCH_Gewichtet',

        0   -- immer manuelle Prüfung

    FROM mdm.Master_Kunden a

    JOIN mdm.Master_Kunden b ON a.MasterID < b.MasterID

        AND a.Status = 'AKTIV' AND b.Status = 'AKTIV'

        -- Blocking: nur Kandidaten mit demselben PLZ-Präfix prüfen (Performance!)

        AND LEFT(a.PLZ, 2) = LEFT(b.PLZ, 2)

    WHERE NOT EXISTS (

        SELECT 1 FROM mdm.Match_Kandidaten m

        WHERE m.MasterID_A = a.MasterID AND m.MasterID_B = b.MasterID

    )

    HAVING ROUND(

        0.50 * CASE WHEN DIFFERENCE(a.Name_Normalisiert, b.Name_Normalisiert) = 4 THEN 1.0

                    WHEN DIFFERENCE(a.Name_Normalisiert, b.Name_Normalisiert) = 3 THEN 0.7

                    ELSE 0.0 END

      + 0.25 * CASE WHEN LEFT(a.PLZ,3) = LEFT(b.PLZ,3) THEN 1.0 ELSE 0.0 END

      + 0.15 * CASE WHEN a.Branche = b.Branche THEN 1.0 ELSE 0.0 END

      + 0.10 * CASE WHEN a.Email_Domain = b.Email_Domain THEN 1.0 ELSE 0.0 END

    , 4) >= 0.75;   -- Mindest-Score für Kandidaten-Queue

END

 

 

5.2 Blocking-Strategien für Performance

 

Matching aller Records gegen alle anderen ist O(n²) — bei 100.000 Kunden sind das 5 Milliarden Vergleiche. Blocking reduziert den Suchraum drastisch:

 

-- Blocking-Schlüssel vorbereiten: nur Records mit gleichem Key werden verglichen

ALTER TABLE mdm.Master_Kunden ADD

    Block_PLZ2      AS LEFT(ISNULL(PLZ,'00'), 2)        PERSISTED,

    Block_NameKey   AS LEFT(ISNULL(Name_Normalisiert,'X'), 3) PERSISTED,

    Block_SoundexN  AS SOUNDEX(ISNULL(Name_Normalisiert,'X')) PERSISTED,

    Email_Domain    AS CASE WHEN CHARINDEX('@', ISNULL(Email,'')) > 0

                            THEN LOWER(SUBSTRING(Email,

                                CHARINDEX('@',Email)+1, 100))

                            ELSE NULL END                PERSISTED;

 

-- Index auf Blocking-Schlüssel

CREATE INDEX IDX_MDM_Block ON mdm.Master_Kunden

    (Block_PLZ2, Block_SoundexN) INCLUDE (MasterID, Name_Normalisiert, PLZ, Land, Branche);

 

 


 

 

06

Golden Record Framework

 

Survivorship Rules, Konfidenz-Scoring und Merge-Strategien

 

6.1 Survivorship Rules — das Herzstück des MDM

 

Survivorship Rules definieren, wie aus mehreren Source Records ein Golden Record entsteht. Für jedes Attribut gibt es genau eine Regel.

 

-- Survivorship Rule Engine: konfigurierbar, nicht hardcodiert

CREATE TABLE mdm.Survivorship_Regeln (

    RegelID         INT IDENTITY PRIMARY KEY,

    Domain          NVARCHAR(50),

    Feldname        NVARCHAR(100),

    Regel           NVARCHAR(50),

    -- Regeln:

    -- FUEHRENDES_SYSTEM   → Wert aus definiertem Quellsystem

    -- AKTUELLSTER         → Wert mit jüngstem Änderungsdatum

    -- VOLLSTAENDIGSTER    → Wert der nicht NULL ist (erste Nicht-NULL)

    -- LAENGSTER           → längster nicht-leerer String

    -- HAEUFIGSTER         → häufigster Wert über alle Quellen

    -- MANUELL             → immer manuell entscheiden

    FuehrendesSystem NVARCHAR(50),   -- bei Regel = FUEHRENDES_SYSTEM

    Prioritaet      INT,

    Aktiv           BIT DEFAULT 1

);

 

-- Standardkonfiguration Kundenstamm

INSERT INTO mdm.Survivorship_Regeln (Domain, Feldname, Regel, FuehrendesSystem, Prioritaet)

VALUES

('KUNDEN', 'Name',               'FUEHRENDES_SYSTEM', 'ERP',  1),

('KUNDEN', 'Rechtsform',         'FUEHRENDES_SYSTEM', 'ERP',  1),

('KUNDEN', 'Strasse',            'AKTUELLSTER',       NULL,   2),

('KUNDEN', 'PLZ',                'AKTUELLSTER',       NULL,   2),

('KUNDEN', 'Ort',                'AKTUELLSTER',       NULL,   2),

('KUNDEN', 'Email',              'FUEHRENDES_SYSTEM', 'CRM',  1),

('KUNDEN', 'Telefon',            'AKTUELLSTER',       NULL,   2),

('KUNDEN', 'Branche',            'HAEUFIGSTER',       NULL,   3),

('KUNDEN', 'Zahlungsziel',       'FUEHRENDES_SYSTEM', 'ERP',  1),

('KUNDEN', 'Kreditlimit',        'FUEHRENDES_SYSTEM', 'ERP',  1),

('KUNDEN', 'Umsatzklasse',       'FUEHRENDES_SYSTEM', 'ERP',  1),

('KUNDEN', 'Marketingeinwilligung','FUEHRENDES_SYSTEM','CRM', 1);

 

-- Survivorship anwenden: Golden Record aus Staging-Quellen berechnen

CREATE OR ALTER PROCEDURE mdm.SP_Golden_Record_Bestimmen

    @MasterID   INT

AS

BEGIN

    SET NOCOUNT ON;

 

    -- Name: führendes System ERP

    UPDATE mdm.Master_Kunden SET

        Name = (SELECT TOP 1 Name FROM mdm.Staging_Kunden

                WHERE MasterID = @MasterID AND Quelle = 'ERP'

                ORDER BY LadeDatum DESC),

        GeaendertVon = 'SURVIVORSHIP_ENGINE',

        LetzteAenderung = SYSUTCDATETIME()

    WHERE MasterID = @MasterID;

 

    -- Email: führendes System CRM, Fallback ERP

    UPDATE mdm.Master_Kunden SET

        Email = COALESCE(

            (SELECT TOP 1 Email FROM mdm.Staging_Kunden

             WHERE MasterID = @MasterID AND Quelle = 'CRM'

               AND Email IS NOT NULL AND Email LIKE '%@%.%'

             ORDER BY LadeDatum DESC),

            (SELECT TOP 1 Email FROM mdm.Staging_Kunden

             WHERE MasterID = @MasterID AND Quelle = 'ERP'

               AND Email IS NOT NULL AND Email LIKE '%@%.%'

             ORDER BY LadeDatum DESC)

        )

    WHERE MasterID = @MasterID;

 

    -- Lineage protokollieren

    INSERT INTO mdm.Lineage_Felder (MasterID, Feldname, Quellsystem, SurvivorshipRegel)

    SELECT @MasterID, 'Name',  'ERP', 'FUEHRENDES_SYSTEM:ERP'

    UNION ALL

    SELECT @MasterID, 'Email', 'CRM', 'FUEHRENDES_SYSTEM:CRM mit ERP-Fallback';

END

 

 

6.2 Konfidenz-Score berechnen

 

-- Konfidenz-Score: wie vollständig und vertrauenswürdig ist der Golden Record?

CREATE OR ALTER FUNCTION mdm.FN_Konfidenz_Kunden (@MasterID INT)

RETURNS DECIMAL(5,4)

AS

BEGIN

    DECLARE @Score DECIMAL(5,4) = 0.0;

    DECLARE @Quellen INT;

 

    SELECT

        @Score =

            -- Vollständigkeit der Pflichtfelder (40%)

            0.40 * (

                CASE WHEN Name  IS NOT NULL AND Name  <> '' THEN 0.25 ELSE 0 END +

                CASE WHEN PLZ   IS NOT NULL AND PLZ   <> '' THEN 0.25 ELSE 0 END +

                CASE WHEN Ort   IS NOT NULL AND Ort   <> '' THEN 0.25 ELSE 0 END +

                CASE WHEN Email IS NOT NULL AND Email LIKE '%@%.%' THEN 0.25 ELSE 0 END

            )

            -- Anzahl bestätigender Quellsysteme (30%)

          + 0.30 * CASE

                WHEN (CASE WHEN ErpKundenNr   IS NOT NULL THEN 1 ELSE 0 END +

                      CASE WHEN CrmKontaktID  IS NOT NULL THEN 1 ELSE 0 END +

                      CASE WHEN WebshopKundenID IS NOT NULL THEN 1 ELSE 0 END) >= 3 THEN 1.0

                WHEN (CASE WHEN ErpKundenNr   IS NOT NULL THEN 1 ELSE 0 END +

                      CASE WHEN CrmKontaktID  IS NOT NULL THEN 1 ELSE 0 END +

                      CASE WHEN WebshopKundenID IS NOT NULL THEN 1 ELSE 0 END) = 2 THEN 0.7

                ELSE 0.3 END

            -- Aktualität: letztes Update < 1 Jahr (20%)

          + 0.20 * CASE

                WHEN DATEDIFF(DAY, LetzteAenderung, GETDATE()) < 30  THEN 1.0

                WHEN DATEDIFF(DAY, LetzteAenderung, GETDATE()) < 180 THEN 0.7

                WHEN DATEDIFF(DAY, LetzteAenderung, GETDATE()) < 365 THEN 0.4

                ELSE 0.1 END

            -- Validierungsstatus (10%)

          + 0.10 * CASE WHEN Vollstaendigkeit >= 0.9 THEN 1.0

                        WHEN Vollstaendigkeit >= 0.7 THEN 0.6

                        ELSE 0.2 END

    FROM mdm.Master_Kunden

    WHERE MasterID = @MasterID;

 

    RETURN ROUND(ISNULL(@Score, 0), 4);

END

 

 


 

 

07

MDM ohne MDM-Tool

 

Pragmatische Umsetzung mit SQL Server, dbt und Power BI

 

7.1 Der SQL-Server-MDM-Hub — vollständige Schemastruktur

 

-- Vollständiges MDM-Schema in SQL Server — kein externes Tool nötig

CREATE SCHEMA mdm;    -- MDM-Kernlogik

CREATE SCHEMA staging; -- Rohdaten aus Quellsystemen

CREATE SCHEMA xref;    -- Cross-Reference und ID-Mapping

CREATE SCHEMA steward; -- Stewardship-Queues und Entscheidungshistorie

CREATE SCHEMA monitor; -- KPIs und Qualitäts-Monitoring

 

-- Cross-Reference: alle historischen IDs dauerhaft aufbewahren

CREATE TABLE xref.Kunden_IDs (

    XRefID          INT IDENTITY PRIMARY KEY,

    GlobaleID       UNIQUEIDENTIFIER NOT NULL,

    Quellsystem     NVARCHAR(50)     NOT NULL,

    QuellID         NVARCHAR(100)    NOT NULL,

    GueltigVon      DATETIME2        NOT NULL DEFAULT SYSUTCDATETIME(),

    GueltigBis      DATETIME2,                -- NULL = aktuell gültig

    Status          NVARCHAR(20)     DEFAULT 'AKTIV',

    CONSTRAINT UQ_XRef UNIQUE (Quellsystem, QuellID, GueltigVon)

);

 

-- Stewardship-Queue: manuelle Entscheidungen

CREATE TABLE steward.Match_Queue (

    QueueID         INT IDENTITY PRIMARY KEY,

    MasterID_A      INT NOT NULL,

    MasterID_B      INT NOT NULL,

    Match_Score     DECIMAL(5,4),

    Match_Methode   NVARCHAR(100),

    Eingestellt     DATETIME2 DEFAULT SYSUTCDATETIME(),

    SLA_Bis         DATETIME2 AS DATEADD(DAY, 5, Eingestellt) PERSISTED,

    Status          NVARCHAR(20) DEFAULT 'OFFEN',

    Steward         NVARCHAR(100),

    Entscheidung    NVARCHAR(20),   -- 'MERGE', 'KEIN_MERGE', 'ZURUECKGESTELLT'

    Begruendung     NVARCHAR(500),

    EntschiedenAm   DATETIME2,

    -- SLA-Warnung

    SLA_Verletzt    AS CASE WHEN EntschiedenAm IS NULL

                            AND GETDATE() > DATEADD(DAY, 5, Eingestellt)

                            THEN 1 ELSE 0 END PERSISTED

);

 

 

7.2 MDM mit dbt — Transformations-Layer für den Hub

 

-- dbt-Modell: staging/stg_kunden_erp.sql

-- Normalisierung der ERP-Kundendaten für MDM-Matching

SELECT

    KundenNr                                        AS quell_id,

    'ERP'                                           AS quellsystem,

    TRIM(Name)                                      AS name_roh,

    -- Normalisierung für Matching

    UPPER(TRIM(

        REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(

            Name,

            ' GmbH & Co. KG', ''), ' GmbH', ''),

            ' AG', ''), ' e.K.', ''), ' KG', '')

    ))                                              AS name_norm,

    SOUNDEX(UPPER(TRIM(Name)))                      AS name_soundex,

    TRIM(PLZ)                                       AS plz,

    LEFT(TRIM(PLZ), 3)                              AS plz_prefix,

    UPPER(TRIM(Ort))                                AS ort_norm,

    LOWER(TRIM(Email))                              AS email_norm,

    CASE WHEN CHARINDEX('@', ISNULL(Email,'')) > 0

         THEN LOWER(SUBSTRING(Email,

              CHARINDEX('@',Email)+1, 100))

         ELSE NULL END                              AS email_domain,

    UStIdNr,

    Handelsregister,

    AnlageDatum,

    GeaendertAm,

    SYSUTCDATETIME()                                AS _geladen_am

FROM {{ source('erp_raw', 'Kunden') }}

WHERE Gesperrt = 0

  AND Name IS NOT NULL AND TRIM(Name) <> ''

 

-- dbt-Modell: marts/mdm_kunden_golden.sql

-- Finaler Golden Record View für alle Downstream-Konsumenten

SELECT

    gk.GlobaleKundenID,

    gk.MasterID,

    gk.Name,

    gk.PLZ,

    gk.Ort,

    gk.Land,

    gk.Email,

    gk.Branche,

    gk.Zahlungsziel,

    gk.KonfidenzScore,

    gk.Vollstaendigkeit,

    gk.Status,

    -- Cross-Reference für alle Quellsysteme

    x_erp.QuellID                                   AS ERP_KundenNr,

    x_crm.QuellID                                   AS CRM_KontaktID,

    x_web.QuellID                                   AS Webshop_ID,

    gk.HauptQuelle,

    gk.LetzteAenderung

FROM {{ ref('mdm_master_kunden') }} gk

LEFT JOIN {{ ref('xref_kunden') }} x_erp

    ON gk.GlobaleKundenID = x_erp.GlobaleID AND x_erp.Quellsystem = 'ERP'

LEFT JOIN {{ ref('xref_kunden') }} x_crm

    ON gk.GlobaleKundenID = x_crm.GlobaleID AND x_crm.Quellsystem = 'CRM'

LEFT JOIN {{ ref('xref_kunden') }} x_web

    ON gk.GlobaleKundenID = x_web.GlobaleID AND x_web.Quellsystem = 'WEBSHOP'

WHERE gk.Status = 'AKTIV'

 

 

7.3 Power BI MDM-Dashboard

 

Das MDM-Dashboard hat vier Seiten:

 

  Übersicht: Anzahl Golden Records je Domain, Konfidenz-Verteilung, Vollständigkeits-Score, Trend über 90 Tage.

 

  Stewardship-Queue: Offene Match-Kandidaten, SLA-Ampel, Entscheidungshistorie des Stewards.

 

  Qualitäts-Heatmap: Welche Attribute welcher Domain haben die schlechteste Qualität — direkt klickbar auf fehlerhafte Records.

 

  Lineage-Explorer: Für ausgewählten Golden Record: welches Feld kommt aus welchem Quellsystem — als Flussdiagramm.

 

-- Power BI Basis-View: MDM-Dashboard Übersicht

CREATE OR ALTER VIEW monitor.V_MDM_Dashboard AS

SELECT

    'KUNDEN'                                        AS Domain,

    COUNT(*)                                        AS Gesamt_Records,

    SUM(CASE WHEN Status = 'AKTIV' THEN 1 ELSE 0 END) AS Aktiv,

    SUM(CASE WHEN Status = 'KANDIDAT' THEN 1 ELSE 0 END) AS In_Prüfung,

    SUM(CASE WHEN Status = 'ZUSAMMENGEFUEHRT' THEN 1 ELSE 0 END) AS Zusammengefuehrt,

    ROUND(AVG(KonfidenzScore), 4)                   AS Avg_Konfidenz,

    ROUND(AVG(Vollstaendigkeit), 4)                 AS Avg_Vollstaendigkeit,

    SUM(CASE WHEN KonfidenzScore >= 0.9 THEN 1 ELSE 0 END) AS Konfidenz_Hoch,

    SUM(CASE WHEN KonfidenzScore BETWEEN 0.7 AND 0.9 THEN 1 ELSE 0 END) AS Konfidenz_Mittel,

    SUM(CASE WHEN KonfidenzScore < 0.7 THEN 1 ELSE 0 END) AS Konfidenz_Niedrig,

    -- Stewardship-SLA

    (SELECT COUNT(*) FROM steward.Match_Queue

     WHERE Status = 'OFFEN' AND SLA_Verletzt = 1) AS SLA_Verletzungen,

    (SELECT COUNT(*) FROM steward.Match_Queue

     WHERE Status = 'OFFEN')                        AS Offene_Matches,

    CAST(GETDATE() AS DATE)                         AS Stand

FROM mdm.Master_Kunden;

 

 


 

 

08

Governance & Stewardship

 

Rollen, Workflows, Änderungsprozesse und Qualitäts-KPIs

 

8.1 MDM-Rollenmodell

 

Rolle

Verantwortung

Zeitbudget

Entscheidungsbefugnis

MDM-Sponsor

Budget, Eskalation, strategische Richtung

1h/Monat

Architekturentscheidungen

Data Domain Owner

Qualitätsziel für die Domain verantworten, Regeln genehmigen

2h/Woche

Survivorship Rules, SLA

Data Steward

Tägliche Match-Queue bearbeiten, Ausnahmen dokumentieren

1h/Tag

Merge / Kein Merge

Data Engineer

Pipeline bauen, Monitoring einrichten, Fehler beheben

nach Bedarf

Technische Implementierung

Quellsystem-Owner

Datenqualität im Quellsystem verantworten

1h/Woche

Neuanlage-Prozesse

 

8.2 Änderungsworkflow für kritische Attribute

 

-- Vier-Augen-Prinzip für kritische MDM-Änderungen

CREATE TABLE steward.Aenderungs_Antraege (

    AntragID        INT IDENTITY PRIMARY KEY,

    MasterID        INT NOT NULL,

    Domain          NVARCHAR(50),

    Feldname        NVARCHAR(100),

    AlterWert       NVARCHAR(MAX),

    NeuerWert       NVARCHAR(MAX),

    Begruendung     NVARCHAR(500),

    Antragsteller   NVARCHAR(100),

    AntragsDatum    DATETIME2 DEFAULT SYSUTCDATETIME(),

    -- Genehmigung

    Genehmiger      NVARCHAR(100),

    GenehmigtAm     DATETIME2,

    Status          NVARCHAR(20) DEFAULT 'BEANTRAGT',

    -- BEANTRAGT → GENEHMIGT / ABGELEHNT → UMGESETZT

    Ablehnungsgrund NVARCHAR(500),

    -- Kritische Felder brauchen Genehmigung — normale nicht

    IstKritisch     BIT,  -- Bankverbindung, Steuer-ID, Kreditlimit = kritisch

    UmgesetztAm     DATETIME2

);

 

-- Prüfung ob Feld kritisch ist

CREATE OR ALTER FUNCTION steward.FN_IstFeldKritisch

    (@Domain NVARCHAR(50), @Feldname NVARCHAR(100))

RETURNS BIT

AS

BEGIN

    RETURN CASE WHEN EXISTS (

        SELECT 1 FROM steward.Kritische_Felder

        WHERE Domain = @Domain AND Feldname = @Feldname

    ) THEN 1 ELSE 0 END

END

 

 

8.3 MDM-Qualitäts-KPIs — was täglich gemessen wird

 

-- Tägliches KPI-Logging für alle MDM-Domains

INSERT INTO monitor.MDM_KPI_Log

    (Datum, Domain, KPI_Name, KPI_Wert, Einheit)

SELECT CAST(GETDATE() AS DATE), 'KUNDEN', 'Vollstaendigkeit_Avg',

    ROUND(AVG(Vollstaendigkeit)*100, 1), 'Prozent'

FROM mdm.Master_Kunden WHERE Status = 'AKTIV'

UNION ALL

SELECT CAST(GETDATE() AS DATE), 'KUNDEN', 'Konfidenz_Avg',

    ROUND(AVG(KonfidenzScore)*100, 1), 'Prozent'

FROM mdm.Master_Kunden WHERE Status = 'AKTIV'

UNION ALL

SELECT CAST(GETDATE() AS DATE), 'KUNDEN', 'Offene_Match_Queue',

    COUNT(*), 'Anzahl'

FROM steward.Match_Queue WHERE Status = 'OFFEN'

UNION ALL

SELECT CAST(GETDATE() AS DATE), 'KUNDEN', 'SLA_Verletzungen',

    SUM(SLA_Verletzt), 'Anzahl'

FROM steward.Match_Queue WHERE Status = 'OFFEN'

UNION ALL

SELECT CAST(GETDATE() AS DATE), 'KUNDEN', 'Neue_Duplikat_Kandidaten',

    COUNT(*), 'Anzahl'

FROM mdm.Match_Kandidaten

WHERE CAST(Erstellt AS DATE) = CAST(GETDATE() AS DATE)

  AND Auto_Merge = 0;

 

 


 

 

09

Integration & Verteilung

 

MDM-Hub an ERP, CRM, BI und externe Systeme anbinden

 

9.1 Publish-Subscribe-Muster für MDM-Verteilung

 

-- Änderungs-Notification: welche Golden Records haben sich geändert?

CREATE TABLE mdm.Aenderungs_Events (

    EventID         INT IDENTITY PRIMARY KEY,

    GlobaleID       UNIQUEIDENTIFIER NOT NULL,

    Domain          NVARCHAR(50),

    AenderungsTyp   NVARCHAR(20),   -- 'NEU', 'AKTUALISIERT', 'ZUSAMMENGEFUEHRT', 'ARCHIVIERT'

    GeaenderteFeldr NVARCHAR(MAX),  -- JSON: Liste der geänderten Felder

    EventZeitpunkt  DATETIME2 DEFAULT SYSUTCDATETIME(),

    -- Verarbeitungsstatus je Zielsystem

    ERP_Verarbeitet     BIT DEFAULT 0,

    CRM_Verarbeitet     BIT DEFAULT 0,

    BI_Verarbeitet      BIT DEFAULT 0,

    Newsletter_Verarbeitet BIT DEFAULT 0

);

 

-- Trigger: automatisch Event erzeugen wenn Golden Record sich ändert

CREATE OR ALTER TRIGGER mdm.TR_Master_Kunden_Aenderung

ON mdm.Master_Kunden

AFTER UPDATE

AS

BEGIN

    SET NOCOUNT ON;

    INSERT INTO mdm.Aenderungs_Events (GlobaleID, Domain, AenderungsTyp)

    SELECT i.GlobaleKundenID, 'KUNDEN', 'AKTUALISIERT'

    FROM inserted i

    JOIN deleted d ON i.MasterID = d.MasterID

    WHERE i.Name <> d.Name OR i.PLZ <> d.PLZ OR i.Email <> d.Email

       OR i.Status <> d.Status;

END

 

-- Ausstehende Events je Zielsystem abrufen (Polling-Interface)

CREATE OR ALTER VIEW mdm.V_Pending_ERP AS

SELECT e.EventID, e.GlobaleID, e.AenderungsTyp, e.EventZeitpunkt,

       k.Name, k.PLZ, k.Ort, k.Email,

       x.QuellID AS ERP_KundenNr

FROM mdm.Aenderungs_Events e

JOIN mdm.Master_Kunden k ON e.GlobaleID = k.GlobaleKundenID

LEFT JOIN xref.Kunden_IDs x ON e.GlobaleID = x.GlobaleID

    AND x.Quellsystem = 'ERP' AND x.GueltigBis IS NULL

WHERE e.ERP_Verarbeitet = 0

ORDER BY e.EventZeitpunkt;

 

 

9.2 MDM-API-Schicht als Stored Procedures

 

-- MDM-API: Kunde suchen (für Neuanlage-Prüfung in Quellsystemen)

CREATE OR ALTER PROCEDURE mdm.API_Kunden_Suchen

    @Suchbegriff    NVARCHAR(200),

    @PLZ            NVARCHAR(10)   = NULL,

    @MaxErgebnisse  INT            = 10

AS

BEGIN

    SET NOCOUNT ON;

    SELECT TOP (@MaxErgebnisse)

        k.GlobaleKundenID,

        k.MasterID,

        k.Name,

        k.PLZ, k.Ort,

        k.Email,

        k.KonfidenzScore,

        -- Matching-Score gegen Suchanfrage

        ROUND(

            0.6 * CASE WHEN DIFFERENCE(k.Name_Normalisiert,

                UPPER(TRIM(@Suchbegriff))) = 4 THEN 1.0

                        WHEN k.Name_Normalisiert LIKE '%' + UPPER(TRIM(@Suchbegriff)) + '%' THEN 0.8

                        ELSE 0.3 END

          + 0.4 * CASE WHEN @PLZ IS NULL THEN 1.0

                        WHEN k.PLZ = @PLZ THEN 1.0

                        WHEN LEFT(k.PLZ,3) = LEFT(@PLZ,3) THEN 0.6

                        ELSE 0.0 END

        , 4)            AS Such_Score,

        x_erp.QuellID   AS ERP_KundenNr,

        x_crm.QuellID   AS CRM_ID

    FROM mdm.Master_Kunden k

    LEFT JOIN xref.Kunden_IDs x_erp ON k.GlobaleKundenID = x_erp.GlobaleID

        AND x_erp.Quellsystem = 'ERP' AND x_erp.GueltigBis IS NULL

    LEFT JOIN xref.Kunden_IDs x_crm ON k.GlobaleKundenID = x_crm.GlobaleID

        AND x_crm.Quellsystem = 'CRM' AND x_crm.GueltigBis IS NULL

    WHERE k.Status = 'AKTIV'

      AND (k.Name_Normalisiert LIKE '%' + UPPER(TRIM(@Suchbegriff)) + '%'

           OR DIFFERENCE(k.Name_Normalisiert, UPPER(TRIM(@Suchbegriff))) >= 3)

    ORDER BY Such_Score DESC;

END

 

 


 

 

10

30-Tage-MDM-Bootstrapplan

 

Vom konzeptlosen Datenchaos zum ersten produktiven Golden Record

 

 

VOR DEM START

Wählen Sie eine einzige Domain für den Einstieg — fast immer ist das der Kundenstamm. Benennen Sie einen Data Steward (1 Stunde täglich) und einen Domain Owner (2 Stunden wöchentlich). Sichern Sie alle betroffenen Produktivtabellen vollständig. Führen Sie den Datenqualitäts-Check aus dem Stammdaten-Kit (Serie Band 2) als Baseline aus.

 

WOCHE 1: FUNDAMENT & INVENTAR

 

■ TAG 1-2: REIFEGRADBESTIMMUNG UND SCOPE

 

  MDM-Reifegradmodell aus Kapitel 2.3 ehrlich bewerten — mit Domain Owner gemeinsam

  Alle Quellsysteme inventarisieren: wo leben Kundendaten heute — mit Anzahl Records je System

  Überschneidungsanalyse: welche Kunden kommen in mehr als einem System vor (Schätzung)

  Architekturmodell aus Kapitel 3 entscheiden — für KMU-Einstieg fast immer Consolidation

 

■ TAG 3-4: MDM-SCHEMA ANLEGEN

 

  Schemas mdm, staging, xref, steward, monitor in der Zieldatenbank anlegen (Kapitel 7.1)

  Kerntabellen anlegen: Master_Kunden, Lineage_Felder, Aenderungs_Events, Match_Queue

  Keine_Merge_Liste anlegen — von Anfang an, nicht nachträglich

  Survivorship_Regeln befüllen — gemeinsam mit Domain Owner, nicht alleine (Kapitel 6.1)

 

■ TAG 5-7: ERSTE QUELLEXTRAKTION

 

  Staging-Extraktion für ERP-Kundenstamm implementieren und testen

  Normalisierung: Name_Norm, PLZ_Norm, Email_Domain als Computed Columns anlegen

  Blocking-Indizes anlegen (Kapitel 5.2) — Performance-Fundament für Matching

  Erste Qualitätsanalyse: wie hoch ist Vollständigkeit der Pflichtfelder im ERP-Stamm?

 

WOCHE 2: MATCHING UND ERSTE GOLDEN RECORDS

 

■ TAG 8-10: MATCHING-PIPELINE IMPLEMENTIEREN

 

  Deterministisches Matching (Stufe 1) implementieren und auf Produktivdaten testen

  Falsch-Positiv-Rate messen: 50 Ergebnisse stichprobenartig manuell prüfen

  Semi-deterministisches Matching (Stufe 2) implementieren

  Schwellenwerte kalibrieren: Precision und Recall messen, Ziel Precision > 95 %

 

■ TAG 11-13: STEWARDSHIP-QUEUE AKTIVIEREN

 

  Probabilistisches Matching (Stufe 3) implementieren — niedrigerer Schwellenwert, Queue statt Auto-Merge

  Steward-Queue in Power BI als einfache Tabelle visualisieren

  Ersten Steward einweisen: wie funktioniert die Queue, wie wird entschieden, was wird dokumentiert

  SLA von 5 Werktagen kommunizieren und im Dashboard sichtbar machen

 

■ TAG 14: ERSTE GOLDEN RECORDS PRODUKTIV

 

  Deterministisch und semi-deterministisch gematchte Records als erste Golden Records aktivieren

  Cross-Reference-Tabelle befüllen: ERP-KundenNr → GlobaleID Mapping

  Konfidenz-Score für alle aktiven Golden Records berechnen (Kapitel 6.2)

  Erstes Qualitäts-KPI-Log einrichten (Kapitel 8.3)

 

WOCHE 3: INTEGRATION UND GOVERNANCE

 

■ TAG 15-17: ZWEITES QUELLSYSTEM INTEGRIEREN

 

  CRM-Extraktion in Staging-Pipeline einbauen

  Cross-System-Matching: CRM-Kontakte gegen bestehende Golden Records matchen

  Coexistence-Attribut-Führung konfigurieren (Kapitel 3.3): welches System führt welches Feld?

  Email aus CRM als führend setzen und erste Survivorship-Anwendung testen

 

■ TAG 18-20: POWER BI DASHBOARD AUFBAUEN

 

  Monitor-Views aus Kapitel 7.3 anlegen

  MDM-Dashboard mit vier Seiten aufbauen: Übersicht, Queue, Qualitäts-Heatmap, Lineage

  Automatische tägliche Aktualisierung des Dashboards einrichten

  Domain Owner und Steward einweisen — Dashboard ist ihr tägliches Arbeitsinstrument

 

■ TAG 21: GOVERNANCE FORMALISIEREN

 

  Änderungsworkflow für kritische Attribute aktivieren (Kapitel 8.2)

  Kritische Felder definieren: Steuer-ID, Kreditlimit → Vier-Augen-Pflicht

  Onboarding-Leitfaden für neue Data Stewards schreiben

  Quartalsmäßige Rezertifizierung im Kalender eintragen: Domain Owner bestätigt Survivorship Rules

 

WOCHE 4: AUTOMATISIERUNG UND AUSBLICK

 

■ TAG 22-25: SQL AGENT JOBS EINRICHTEN

 

  Tägliche Konsolidierungs-Pipeline als SQL Agent Job (06:00 Uhr)

  Tägliches KPI-Logging (07:00 Uhr) — nach der Konsolidierung

  Wöchentlicher SLA-Bericht: offene Queue-Einträge, SLA-Verletzungen per Database Mail

  Monatlicher Qualitätsbericht: Vollständigkeit, Konfidenz, Merge-Statistik

 

■ TAG 26-28: NEUANLAGE-PRÜFUNG IN QUELLSYSTEMEN

 

  MDM-Suche API (Kapitel 9.2) für das wichtigste Quellsystem implementieren

  Prozess mit Quellsystem-Owner abstimmen: Suche im Hub vor jeder Neuanlage

  Wenn technisch möglich: Trigger oder API-Call direkt aus Quellsystem

  Wenn nicht möglich: täglicher Alert über Records im Quellsystem ohne Hub-Referenz

 

■ TAG 29-30: ABSCHLUSS UND ROADMAP

 

  Abschlussmessung: Konfidenz-Durchschnitt, Vollständigkeit, Anzahl Golden Records, offene Queue

  Vergleich mit Baseline aus Tag 1 dokumentieren

  Roadmap für zweite Domain skizzieren: Lieferantenstamm oder Artikelstamm

  MDM-Dokumentation: Architekturentscheidung, Survivorship Rules, Rollenmatrix

  Ergebnis feiern — eine funktionierende MDM-Schicht ist das Fundament jeder sauberen BI-Architektur! ■

 

 

ERGEBNIS NACH 30 TAGEN

Ihr Ergebnis nach 30 Tagen: Erste produktive Golden Records für den Kundenstamm, eine aktive Stewardship-Queue mit SLA-Monitoring, ein Power-BI-Dashboard das den Qualitätszustand täglich zeigt, eine Cross-Reference-Tabelle die alle Quellsystem-IDs verbindet — und ein Domain Owner der weiß, was MDM ist und warum es seinen Alltag verbessert.

 


 

 

Ausführlicher Haftungsausschluss und Lizenzbestimmungen

 

1. Allgemeiner Haftungsausschluss

 

Die in diesem Dokument enthaltenen Informationen, Skripte und Architekturempfehlungen wurden nach bestem Wissen und Gewissen erarbeitet. MDM-Projekte berühren Kerndaten des Unternehmens — Fehler in Matching- und Merge-Prozessen können zu fehlerhaften Zusammenführungen führen, die schwer rückgängig zu machen sind. Testen Sie alle Matching-Operationen ausschließlich auf Kopien der Produktivdaten, bevor Sie sie produktiv einsetzen.

 

Der Autor übernimmt keinerlei Haftung für Datenverlust, fehlerhafte Datenkonsolidierungen, Compliance-Verstöße oder sonstige unmittelbare oder mittelbare Schäden.

 

2. DSGVO und Datenschutz

 

MDM-Prozesse können personenbezogene Daten (Kunden, Kontaktpersonen) zusammenführen und anreichern. Stellen Sie sicher, dass eine Rechtsgrundlage für die Datenverarbeitung und -zusammenführung besteht. Klären Sie Aufbewahrungsfristen, Löschkonzepte und das Recht auf Vergessenwerden (Art. 17 DSGVO) mit Ihrem Datenschutzbeauftragten.

 

3. Keine Ergebnisgarantie

 

Genannte Matching-Genauigkeiten, Zeitrahmen und Qualitätsverbesserungen sind Erfahrungswerte. Tatsächliche Ergebnisse hängen von Datenqualität, Systemlandschaft und organisatorischem Commitment ab.

 

4. Versionsabhängigkeit

 

Die Inhalte beziehen sich auf SQL Server 2022/2025, dbt Core 1.8+, Azure Purview und Power BI, Stand März 2026.

 

5. Urheberrecht und Nutzungsrechte

 

© 2026 Sascha Hess, xenosystems.de. Alle Rechte vorbehalten. Dieses Dokument ist für den persönlichen oder betriebsinternen Gebrauch des Käufers lizenziert.

 

6. Markenrechte

 

SQL Server, Azure Purview, Power BI und Microsoft Fabric sind eingetragene Marken der Microsoft Corporation. dbt ist eine Marke von dbt Labs, Inc. SAP MDG ist eine Marke der SAP SE. Informatica ist eine Marke der Informatica LLC.

 

7. Anwendbares Recht und Gerichtsstand

 

Es gilt ausschließlich deutsches Recht. Gerichtsstand für alle Streitigkeiten ist, soweit gesetzlich zulässig, Weimar, Thüringen, Deutschland.

 


 

 

Über den Autor

 

Sascha Hess ist Diplom-Biologe und IT-Professional mit über 20 Jahren Erfahrung in der Administration von ERP-, BI- und Datenbanksystemen. Er hat mehr als 300 Oracle- und SQL-Server-Instanzen administriert und betreut — von mittelständischen KMU bis zu Universitäten und Energieversorgern.

 

Sein Ansatz verbindet naturwissenschaftliche Präzision mit hochgradiger IT-Spezialisierung. Schwerpunkte: Master Data Management, SQL Server Performance-Tuning, ERP-Einführungen, Business Intelligence (Power BI, DeltaMaster), Prozessdigitalisierung und IT-Interim-Management.

 

Web: www.xenosystems.de | E-Mail: info@xenosystems.de | Standort: Weimar, Thüringen / Remote

 

Service

Beschreibung

MDM-Readiness Assessment

Strukturierte Analyse Ihrer aktuellen Stammdatenlandschaft — Reifegradbestimmung, Domain-Priorisierung, Architekturempfehlung und Umsetzungsfahrplan. Scope: 3-5 Tage.

MDM-Hub Implementierung

Aufbau eines produktiven MDM-Hubs mit SQL Server, Matching-Pipeline, Golden Record Framework und Power-BI-Dashboard — für KMU ohne Spezialsoftware.

Stammdaten-Audit

Vollständige Analyse der Datenqualität in ERP, CRM und weiteren Quellsystemen — mit Bereinigungsplan und Quick-Win-Identifikation.

BI-Dashboard-Aufbau

Power BI / DeltaMaster Dashboards inkl. ETL-Strecken, Data-Warehouse-Aufbau und MDM-Integration — für KMU ab 1 Woche Projektumfang.

Interim IT-Management

Übernahme der IT-Steuerung auf Zeit — Budgetplanung, Dienstleister-Management, strategische IT-Ausrichtung.

 

Vollständiges Dokument

konzept kit mdm 2026

Strategische Wissens-Roadmap · Checklisten · Praxisbeispiele

49,90 €

Sichere Zahlung über PayPal · Sofort-Download nach Zahlungseingang