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

 

Data Lineage & Datenherkunft

 

Woher kommen Ihre Daten — und welchen können Sie vertrauen?

WAS SIE IN DIESEM KIT ERHALTEN:

 

1

10 Lineage-Fallen

Die häufigsten Fehler bei der Datenherkunftsdokumentation — mit Sofort-Lösungen

 

 

2

Lineage-Dokumentation

Vorlage und Schichtenmodell für jede Datenpipeline im KMU

 

 

3

SQL-Diagnose-Toolkit

7 Skripte zur automatischen Abhängigkeitsanalyse in SQL Server

 

 

4

Tool-Vergleich 2026

Purview, OpenMetadata, dbt — was passt zu welcher Umgebung?

 

 

5

30-Tage-Lineage-Plan

Von Null zu einer vollständig dokumentierten Datenpipeline

 


 

 

Rechtliche Hinweise und Haftungsausschluss

 

HAFTUNGSAUSSCHLUSS

 

Alle Methoden, Skripte und Empfehlungen wurden sorgfältig auf Basis langjähriger praktischer Erfahrung in der Datenarchitektur und BI-Entwicklung erstellt. Da jede Systemlandschaft individuell ist, übernimmt der Autor keinerlei Haftung für Folgen aus der Anwendung der beschriebenen Methoden. Testen Sie alle Skripte zunächst in einer Nicht-Produktionsumgebung.

 

KEINE ERGEBNISGARANTIE

 

Genannte Aufwandsschätzungen und Verbesserungserwartungen sind Erfahrungswerte aus realen Projekten und keine verbindliche Zusicherung. Tatsächliche Ergebnisse hängen von Systemkomplexität, Teamgröße und vorhandener Dokumentationsbasis ab.

 

VERSIONSHINWEIS

 

Die Inhalte beziehen sich auf SQL Server 2022/2025, Microsoft Purview (Q1 2026), OpenMetadata 1.4 und dbt Core 1.8, Stand März 2026. Alle genannten Plattformen werden regelmäßig aktualisiert — Funktionsumfang und Preise können abweichen.

 

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.

 

MARKENRECHTE

 

Microsoft Purview, Power BI, Azure Data Factory und SQL Server sind eingetragene Marken der Microsoft Corporation. dbt ist ein Produkt von dbt Labs, Inc. OpenMetadata steht unter der Apache-2.0-Lizenz. Alle anderen genannten Produkt- und Unternehmensnamen sind Eigentum ihrer jeweiligen Inhaber.

 

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

 


 

 

Inhaltsverzeichnis

 

 

01  Einleitung

Warum "Woher kommt diese Zahl?" die wichtigste Datenfrage ist

 

02  Die 10 Lineage-Fallen

Häufigste Fehler — und wie man sie strukturell vermeidet

 

03  Das Lineage-Schichtenmodell

Quellen, Staging, DWH, Semantic Layer, Report — vollständig dokumentiert

 

04  SQL-Diagnose-Toolkit

7 Skripte zur automatischen Abhängigkeitsanalyse in SQL Server

 

05  Lineage in Power BI

Dataset-Lineage, Purview-Integration und eingebaute Herkunftsansicht

 

06  dbt als Lineage-Standard

Automatische Dokumentation, Tests und Lineage-Graph mit dbt Core

 

07  Tool-Vergleich 2026

Purview, OpenMetadata, dbt, Atlan — was passt zu welcher Umgebung?

 

08  Impact Analysis

Wer bricht, wenn ich das hier ändere? Downstream-Analyse praktisch

 

09  Lineage-Governance

Wer pflegt was — und wie bleibt Lineage dauerhaft aktuell?

 

10  30-Tage-Lineage-Plan

Von Null zu einer vollständig dokumentierten Datenpipeline

 

 


 

 

01

Einleitung

 

Warum "Woher kommt diese Zahl?" die wichtigste Datenfrage ist

 

Es ist Montagmorgen. Der CFO öffnet das Power-BI-Dashboard. Der Umsatz zeigt 1,43 Mio. Euro. Der Controlling-Report, den der Sachbearbeiter parallel per Excel gepflegt hat, zeigt 1,41 Mio. Euro. Die ERP-Auswertung zeigt 1,44 Mio. Euro. Welche Zahl ist richtig?

 

Niemand weiß es sofort. Die Antwort erfordert eine Stunde Detektivarbeit: Welche Tabelle zieht das Dashboard? Welcher ETL-Job versorgt die Tabelle? Zieht der ETL nach Buchungsdatum oder Lieferdatum? Sind Stornos enthalten? Welche Währungsumrechnung gilt?

 

Das ist kein Datenqualitätsproblem. Das ist ein Lineage-Problem.

 

Data Lineage — die vollständige Dokumentation der Herkunft, des Transformationswegs und der Abhängigkeiten von Daten — ist in mittelständischen Unternehmen fast immer das schwächste Glied in der Datenkette. Nicht weil die Systeme es nicht erlauben, sondern weil niemand es explizit dokumentiert hat.

 

Die Konsequenzen sind in der Praxis täglich spürbar:

 

  Fehlerdiagnose dauert Stunden statt Minuten, weil niemand den genauen Weg einer Zahl vom Quelldatensatz bis zum Dashboard kennt.

 

  Änderungen an Quelltabellen brechen unbemerkt Downstream-Reports — weil die Abhängigkeiten nicht dokumentiert sind.

 

  Datenqualitätsprobleme werden an der falschen Stelle behoben — im Report statt in der Quelle.

 

  DSGVO-Auskunftspflichten können nicht erfüllt werden, weil niemand weiß, welche Systeme personenbezogene Daten aus welcher Quelle enthalten.

 

  ERP-Upgrades oder Schemaänderungen werden zum Blindflug, weil unklar ist, welche nachgelagerten Systeme betroffen sind.

 

Dieses Kit liefert den vollständigen, praxistauglichen Werkzeugkasten für Data Lineage im mittelständischen Umfeld — von der manuellen Dokumentationsvorlage bis zur automatisierten Lineage mit dbt und Microsoft Purview.

 

 

WAS SIE IN DIESEM BUCH ERWARTEN DÜRFEN

  10 Lineage-Fallen — Die häufigsten Fehler bei der Datenherkunftsdokumentation mit konkreten Gegenmaßnahmen.

  Schichtenmodell — Vollständige Lineage-Dokumentationsvorlage für jede Datenpipeline vom Quellsystem bis zum Report.

  SQL-Diagnose-Toolkit — 7 DMV- und Systemkatalog-Skripte zur automatischen Abhängigkeitsanalyse in SQL Server.

  Tool-Vergleich — Purview, OpenMetadata, dbt und Atlan im ehrlichen Vergleich für KMU.

  30-Tage-Lineage-Plan — Von der ersten Bestandsaufnahme zur vollständig dokumentierten Datenpipeline.

 

 

DEFINITION: WAS IST DATA LINEAGE?

Data Lineage dokumentiert für jeden Datenpunkt: Woher stammt er (Quelle)? Welche Transformationen hat er durchlaufen (Herkunftspfad)? Wer oder was verwendet ihn heute (Abhängigkeiten)? Und: Was passiert downstream, wenn er sich ändert (Impact)? Vollständige Lineage macht Daten nachvollziehbar, vertrauenswürdig und änderungssicher.

 


 

 

02

Die 10 Lineage-Fallen

 

Häufigste Fehler bei der Datenherkunftsdokumentation — mit Sofort-Lösungen

 

01 Lineage existiert nur im Kopf einer Person

 

Die SQL-Entwicklerin, die die ETL-Prozesse gebaut hat, kennt den Weg jeder Kennzahl auswendig. Aber wenn sie krank ist, im Urlaub oder das Unternehmen verlassen hat, ist dieses Wissen weg. Die gesamte Datenpipeline liegt als implizites Wissen in einer Person — nicht in der Dokumentation.

 

LÖSUNG:

 

  Lineage-Dokumentation als Pflichtbestandteil jeder ETL-Entwicklung — kein Deployment ohne Lineage-Dokument.

  Vier-Augen-Prinzip: Jede Lineage-Dokumentation wird von einer zweiten Person gegengelesen und bestätigt.

  Wissenstransfer-Sessions einplanen: einmal pro Quartal, 60 Minuten, eine Datenpipeline gemeinsam durchgehen.

 

02 Lineage dokumentiert nur die Happy Path

 

Die Dokumentation zeigt den Normalfall: Daten fließen von Tabelle A über ETL-Job B nach Tabelle C. Nicht dokumentiert: Was passiert bei Fehlern? Welche Fehlbehandlungslogik läuft? In welcher Tabelle landen fehlerhafte Datensätze? Welcher Monitoring-Job überwacht den Ablauf?

 

LÖSUNG:

 

  Lineage-Vorlage (Kapitel 3) enthält Pflichtfelder für Fehlerbehandlung, Fehler-Log-Tabellen und Alerting.

  Error-Handling-Pfade im Lineage-Diagramm explizit einzeichnen — mit andersfarbiger Linie oder separater Notiz.

  "Was passiert, wenn dieser Job fehlschlägt?" als Standardfrage in jedem Lineage-Review.

 

03 Transformationslogik ist im ETL-Tool vergraben — nirgendwo sonst lesbar

 

Die Berechnungslogik lebt ausschließlich im SSIS-Paket, im ADF-Pipeline-JSON oder im Power Query M-Skript. Wer die Logik verstehen will, muss das Tool öffnen und durch verschachtelte Transformationsschritte navigieren — kein Mensch liest das ohne Einarbeitung.

 

LÖSUNG:

 

  Transformationslogik in menschenlesbarer Form neben dem Code dokumentieren: Was tut dieser Schritt, warum, und welche Geschäftsregel liegt dahinter?

  Kritische Berechnungen (Umsatz, Deckungsbeitrag, KPI-Definitionen) zusätzlich im Business Glossar verankern.

  dbt (Kapitel 6) als Lösung: Dokumentation lebt direkt neben dem SQL-Code — immer synchron.

 

04 Keine Versionierung von Lineage-Dokumenten

 

Das Lineage-Dokument wird einmal erstellt und nie aktualisiert. Nach einem Jahr hat die tatsächliche Pipeline sechs Änderungen durchlaufen — die Dokumentation zeigt den Stand vom ersten Tag. Schlimmer: niemand weiß, ob die Dokumentation noch stimmt.

 

LÖSUNG:

 

  Lineage-Dokumente in Git oder Wiki mit Versionsverlauf pflegen — jede Änderung an der Pipeline erzwingt eine Dokumentationsaktualisierung.

  Review-Termin direkt im Lineage-Dokument: mindestens alle 6 Monate oder bei jeder Pipeline-Änderung.

  Automatische Benachrichtigung: Wenn eine Quelltabelle geändert wird, erhält der Lineage-Owner automatisch eine Benachrichtigung (über DDL-Trigger oder Purview-Alert).

 

05 Lineage endet an der Systemgrenze

 

Die ETL-Lineage ist dokumentiert: von SQL Server bis ins Data Warehouse. Aber niemand hat dokumentiert, welche Power-BI-Datasets auf welche DWH-Tabellen zugreifen, welche Reports auf welche Datasets, und welche Dashboard-Elemente auf welche Measures basieren. Die Lineage endet an der Systemgrenze — genau dort, wo die meisten Fragen entstehen.

 

LÖSUNG:

 

  Lineage muss End-to-End sein: vom Quelldatensatz im ERP bis zum Pixel im Dashboard.

  Power BI Lineage-Ansicht im Service aktivieren und pflegen (Kapitel 5).

  Für jedes kritische Dashboard: vollständige Lineage-Kette als Dokument oder Diagram im Wiki hinterlegen.

 

06 Zirkuläre Abhängigkeiten unbemerkt eingebaut

 

Tabelle A wird aus Tabelle B berechnet. Tabelle B wird — irgendwo tief in der Transformationskette — aus einer aggregierten Sicht berechnet, die wiederum Tabelle A referenziert. Das Ergebnis: falsche Zahlen, die schwer reproduzierbar sind, weil die Berechnungsreihenfolge von der Ausführungszeit abhängt.

 

LÖSUNG:

 

  Abhängigkeitsanalyse-Skript (Kapitel 4, DMV 3) regelmäßig ausführen: identifiziert zirkuläre Referenzen in SQL-Server-Objekten.

  DAG (Directed Acyclic Graph) als Designprinzip: Jede Datenpipeline muss azyklisch sein — keine Kreisabhängigkeiten.

  dbt erzwingt automatisch eine azyklische Struktur — Circular Dependencies werden beim Build erkannt und blockiert.

 

07 Manuelle Zwischenstufen ohne Dokumentation

 

Zwischen ETL-Job und BI-Tool liegt ein manueller Schritt: jemand exportiert eine CSV, bearbeitet sie in Excel, und importiert sie zurück. Dieser manuelle Schritt ist nirgendwo dokumentiert — er ist unsichtbar in der Lineage und damit eine unbekannte Fehlerquelle.

 

LÖSUNG:

 

  Manuelle Zwischenschritte explizit in der Lineage-Dokumentation markieren — mit Symbol oder Farbe.

  Manuelle Schritte sind Risiko: für jeden manuellen Schritt eine Automatisierungsoption evaluieren.

  Wenn manuelle Schritte unvermeidbar sind: Checkliste, Protokollpflicht und Vier-Augen-Prinzip.

 

08 Lineage deckt keine personenbezogenen Daten ab

 

Wo genau liegen in Ihrer Systemlandschaft Kundennamen, E-Mail-Adressen, Geburtsdaten? In welcher Tabelle im Data Warehouse? In welchem Power-BI-Dataset? In welchem Report? Ohne vollständige Lineage kann diese DSGVO-Pflichtfrage nicht beantwortet werden.

 

LÖSUNG:

 

  Personenbezogene Daten als eigene Lineage-Kategorie behandeln — separat dokumentiert, mit Datenschutzbeauftragtem abgestimmt.

  Microsoft Purview: automatisches Tagging von PII-Daten über Data Classification (Kapitel 7).

  Für jedes System, das personenbezogene Daten enthält: expliziten Lineage-Pfad dokumentieren — Basis für DSGVO-Auskunftsanfragen.

 

09 Keine Impact-Analyse vor Schemaänderungen

 

Das ERP-Team ändert das Schema einer Quelltabelle: eine Spalte wird umbenannt, ein Datentyp geändert, eine Tabelle aufgeteilt. Niemand hat vorher geprüft, welche ETL-Jobs, Views, Stored Procedures, Power-BI-Datasets und Reports von dieser Tabelle abhängen. Das Ergebnis: Cascading Failures in der Produktionsumgebung.

 

LÖSUNG:

 

  Impact-Analyse als Pflichtschritt vor jeder Schemaänderung (Kapitel 8).

  SQL-Abhängigkeitsanalyse-Skript (Kapitel 4) vor jeder DDL-Änderung ausführen.

  Change-Management-Prozess: keine Schemaänderung ohne dokumentierte Impact-Analyse und Abnahme durch alle betroffenen Systemverantwortlichen.

 

10 Automatische Lineage-Tools als Ersatz für Denken

 

Ein Lineage-Tool wie Purview oder OpenMetadata scannt die Umgebung und erzeugt automatisch eine Lineage-Ansicht. Das wird als "fertige Lineage" betrachtet — ohne zu prüfen, ob die automatisch erkannten Abhängigkeiten vollständig und korrekt sind. Automatische Lineage ist ein Startpunkt, kein Endpunkt.

 

LÖSUNG:

 

  Automatisch erkannte Lineage muss von einem Menschen validiert werden: Stimmt das? Fehlt etwas?

  Manuelle Schritte, externe Datenlieferungen und Excel-Importe werden von keinem Tool automatisch erkannt — diese müssen manuell ergänzt werden.

  Lineage-Tools sind Werkzeuge zur Effizienzsteigerung — die Verantwortung für Vollständigkeit liegt beim Menschen.

 


 

 

03

Das Lineage-Schichtenmodell

 

Quellen, Staging, DWH, Semantic Layer, Report — vollständig dokumentiert

 

Die fünf Lineage-Schichten

 

Jede Datenpipeline durchläuft typischerweise fünf logische Schichten. Vollständige Lineage dokumentiert alle fünf — inklusive der Übergänge zwischen ihnen.

 

DAS 5-SCHICHTEN-LINEAGE-MODELL:

══════════════════════════════════════════════════════════════

SCHICHT 1 — QUELLSYSTEM (Source)

  Was:    Produktive Anwendungsdatenbank, ERP, CRM, API, Datei

  Wer:    System-Owner (ERP-Team, IT)

  Risiko: Schemaänderungen, Verfügbarkeit, Zugriffsrechte

 

        [Extraktion: CDC, Full Load, API-Pull, File Drop]

 

SCHICHT 2 — STAGING / LANDING ZONE

  Was:    Rohdaten, unverändert aus der Quelle

  Wer:    Data Engineer / DBA

  Risiko: Vollständigkeit, Latenzen, Fehlerbehandlung

 

        [Transformation: Bereinigung, Typisierung, Anreicherung]

 

SCHICHT 3 — DATA WAREHOUSE / DATA MART

  Was:    Bereinigt, modelliert, historisiert (Fakten + Dimensionen)

  Wer:    Data Architect / BI-Entwickler

  Risiko: Modellierungsfehler, fehlerhafte KPI-Logik

 

        [Semantic Layer: Views, Measures, Berechnungen]

 

SCHICHT 4 — SEMANTIC LAYER

  Was:    Power BI Dataset, Analysis Services Cube, SQL Views

  Wer:    BI-Entwickler / Controlling

  Risiko: DAX-Fehler, falsche RLS, veraltete Measures

 

        [Visualisierung: Reports, Dashboards, Exports]

 

SCHICHT 5 — REPORT / DASHBOARD / EXPORT

  Was:    Power BI Report, Excel, PDF, API-Endpunkt

  Wer:    BI-Entwickler / Fachbereich

  Risiko: Falsche Filterung, Missverständnisse beim Leser

══════════════════════════════════════════════════════════════

 

 

Die vollständige Lineage-Dokumentationsvorlage

 

LINEAGE-DOKUMENT — VOLLSTÄNDIGE VORLAGE:

══════════════════════════════════════════════════════════════

KPI / DATENPUNKT:    Umsatz Netto (monatlich, je Kunde)

Fachlicher Owner:    CFO / Controlling-Leitung

Technischer Owner:   BI-Entwickler / DBA

Dokument-Version:    1.3 — 2026-02-15

Review-Termin:       2026-08-15

──────────────────────────────────────────────────────────────

SCHICHT 1 — QUELLSYSTEM:

  System:      ERP (MACH MBS), SQL Server: srv-erp01

  Datenbank:   ERP_Prod

  Tabelle:     dbo.Belege

  Schlüsselfelder: BelegNr, BelegDatum, KundenID, Betrag_Netto

  Filter:      Belegart IN ('RE','GS','ST')

               AND Storniert = 0

  Aktualisierung: Real-time OLTP

  Owner:       ERP-Adminteam, IT-Abteilung

──────────────────────────────────────────────────────────────

SCHICHT 2 — STAGING:

  Prozess:     SQL Agent Job: ETL_Umsatz_Daily

  Zeitplan:    Täglich 03:00 Uhr

  Methode:     CDC (Changed Data Capture) auf Belege

  Zieldatenbank: DWH_Staging, Tabelle: stg.Belege_Delta

  Fehler-Log:  DWH_Staging.dbo.ETL_Fehler_Log

  Alert:       E-Mail an dba@firma.de bei Job-Fehler

──────────────────────────────────────────────────────────────

SCHICHT 3 — DATA WAREHOUSE:

  Datenbank:   DWH_Prod

  Faktentabelle: dbo.Fact_Umsatz

  Dimensionen: Dim_Zeit, Dim_Kunde, Dim_Artikel, Dim_Region

  Transformationslogik:

    - Währung: Fremdwährung → EUR (Tageskurs aus Dim_Kurs)

    - Stornos: negative Einträge, reduzieren Perioden-Umsatz

    - Datum:   Buchungsdatum (nicht Zahlungsdatum, nicht Lieferdatum)

  Historisierung: SCD Typ 2 auf Dim_Kunde (Adressänderungen)

──────────────────────────────────────────────────────────────

SCHICHT 4 — SEMANTIC LAYER:

  Tool:        Power BI (Dataset: "Umsatz KMU v4")

  Workspace:   Produktion / Controlling

  Measure:     [Umsatz Netto] = SUM(Fact_Umsatz[Betrag_Netto])

  RLS:         Aktiv — Vertriebsregion = USERPRINCIPALNAME()

  Refresh:     Täglich 06:00 (nach ETL-Abschluss)

──────────────────────────────────────────────────────────────

SCHICHT 5 — REPORTS / DASHBOARDS:

  Report 1:    "Monats-Cockpit Vertrieb" → Seite 1, KPI-Card

  Report 2:    "Jahresabschluss-Report" → Seite 3, Tabelle

  Report 3:    "CFO-Dashboard" → Seite 1, Trend-Chart

  Export:      Monatlicher Excel-Export via Power Automate

──────────────────────────────────────────────────────────────

MANUELLE SCHRITTE:   Keine

BEKANNTE ABWEICHUNGEN:

  - ERP-Umsatz weicht von Faktura-Umsatz um ~0,3 % ab (Rundung)

  - Konzernumsatz (konsolidiert) liegt in separatem Prozess

──────────────────────────────────────────────────────────────

ABHÄNGIGE SYSTEME:   Power BI Service, Power Automate, Excel

LETZTE ÄNDERUNG:     2026-02-15 — Währungsumrechnung ergänzt

══════════════════════════════════════════════════════════════

 

 

Lineage-Diagramm als Ergänzung zur Vorlage

 

Für komplexe Pipelines mit Verzweigungen, mehreren Quellen oder Merge-Logiken ist ein visuelles Diagramm unverzichtbar. Empfohlene Tools: draw.io (kostenlos, browserbasiert), Mermaid (Code-basiert, ideal für Git), oder die native Lineage-Ansicht in Power BI / Purview.

 

LINEAGE ALS MERMAID-DIAGRAMM (für Git/Wiki):

──────────────────────────────────────────────────────────────

graph LR

  ERP[(ERP: dbo.Belege)] -->|CDC täglich 03:00| STG

  STG[(Staging: stg.Belege_Delta)] -->|ETL Transform| DWH

  DWH[(DWH: Fact_Umsatz)] -->|Power BI Import 06:00| DS

  DS[Dataset: Umsatz KMU v4] -->|RLS aktiv| R1

  DS --> R2

  DS --> R3

  R1[Monats-Cockpit Vertrieb]

  R2[Jahresabschluss-Report]

  R3[CFO-Dashboard]

──────────────────────────────────────────────────────────────

 

 


 

 

04

SQL-Diagnose-Toolkit

 

7 Skripte zur automatischen Abhängigkeitsanalyse in SQL Server

 

SQL Server speichert alle Objektabhängigkeiten im Systemkatalog. Diese sieben Skripte machen unsichtbare Abhängigkeiten sichtbar — ohne externes Tool, direkt in SSMS.

 

DMV 1 — Alle Abhängigkeiten eines Objekts (woher kommt es?)

 

-- Was referenziert Tabelle / View / Procedure X?

-- Gibt alle Objekte zurück, die von einem bestimmten Objekt abhängen

SELECT

    OBJECT_SCHEMA_NAME(d.referencing_id)    AS Referenzierendes_Schema,

    OBJECT_NAME(d.referencing_id)            AS Referenzierendes_Objekt,

    o.type_desc                              AS Objekttyp,

    COALESCE(d.referenced_schema_name, 'dbo') AS Ref_Schema,

    d.referenced_entity_name                 AS Referenziertes_Objekt,

    d.is_caller_dependent

FROM sys.sql_expression_dependencies d

JOIN sys.objects o ON d.referencing_id = o.object_id

WHERE d.referenced_entity_name = 'Fact_Umsatz'  -- Hier Objektname eintragen

  AND OBJECTPROPERTY(d.referencing_id, 'IsMsShipped') = 0

ORDER BY o.type_desc, OBJECT_NAME(d.referencing_id);

 

 

DMV 2 — Vollständiger Abhängigkeitsgraph (upstream und downstream)

 

-- Rekursive Abhängigkeitskette: vollständige Upstream/Downstream-Ansicht

WITH DepChain AS (

    -- Startknoten

    SELECT

        OBJECT_NAME(d.referencing_id)    AS Quelle,

        d.referenced_entity_name          AS Ziel,

        1                                 AS Tiefe,

        CAST(OBJECT_NAME(d.referencing_id)

             + ' → ' + d.referenced_entity_name

             AS NVARCHAR(MAX))            AS Pfad

    FROM sys.sql_expression_dependencies d

    WHERE d.referenced_entity_name = 'Belege'  -- Startobjekt

 

    UNION ALL

 

    SELECT

        OBJECT_NAME(d.referencing_id),

        d.referenced_entity_name,

        dc.Tiefe + 1,

        dc.Pfad + ' → ' + d.referenced_entity_name

    FROM sys.sql_expression_dependencies d

    JOIN DepChain dc

        ON OBJECT_NAME(d.referencing_id) = dc.Ziel

    WHERE dc.Tiefe < 10   -- Maximaltiefe, verhindert Endlosrekursion

)

SELECT DISTINCT Quelle, Ziel, Tiefe, Pfad

FROM DepChain

ORDER BY Tiefe, Quelle;

 

 

DMV 3 — Zirkuläre Abhängigkeiten finden

 

-- Zirkuläre Referenzen zwischen Datenbankobjekten aufdecken

SELECT

    OBJECT_NAME(d1.referencing_id)   AS Objekt_A,

    d1.referenced_entity_name         AS Objekt_B,

    OBJECT_NAME(d2.referencing_id)   AS Objekt_B_Verify,

    d2.referenced_entity_name         AS Rueck_zu_A

FROM sys.sql_expression_dependencies d1

JOIN sys.sql_expression_dependencies d2

    ON  d1.referenced_entity_name

        = OBJECT_NAME(d2.referencing_id)

   AND  d2.referenced_entity_name

        = OBJECT_NAME(d1.referencing_id)

WHERE OBJECT_NAME(d1.referencing_id) IS NOT NULL

  AND OBJECTPROPERTY(d1.referencing_id,  'IsMsShipped') = 0

  AND OBJECTPROPERTY(d2.referencing_id,  'IsMsShipped') = 0;

 

 

DMV 4 — Impact-Analyse: Was bricht bei Schemaänderung?

 

-- Alle Objekte die DIREKT von einer Tabelle/Spalte abhängen

-- Ausführen BEVOR eine DDL-Änderung an der Quelltabelle

SELECT

    ref.name                              AS Betroffenes_Objekt,

    ref.type_desc                         AS Objekttyp,

    ref.create_date                       AS Erstellt_am,

    ref.modify_date                       AS Zuletzt_geaendert,

    SCHEMA_NAME(ref.schema_id)            AS Schema_Name,

    -- Letzter Aufruf aus Query-Stats (falls vorhanden):

    qs.last_execution_time                AS Zuletzt_ausgefuehrt

FROM sys.sql_expression_dependencies dep

JOIN sys.objects ref

    ON dep.referencing_id = ref.object_id

LEFT JOIN sys.dm_exec_procedure_stats qs

    ON ref.object_id = qs.object_id

WHERE dep.referenced_entity_name = 'Belege'  -- Zu ändernde Tabelle

  AND OBJECTPROPERTY(dep.referencing_id, 'IsMsShipped') = 0

ORDER BY ref.type_desc, ref.name;

 

 

DMV 5 — Views und ihre Quelltabellen vollständig auflisten

 

-- Alle Views mit ihrer vollständigen Spalten-Herkunft

SELECT

    v.name                                  AS View_Name,

    SCHEMA_NAME(v.schema_id)                AS Schema_Name,

    c.name                                  AS Spalten_Name,

    c.column_id,

    TYPE_NAME(c.user_type_id)               AS Datentyp,

    c.max_length,

    c.is_nullable,

    -- Herkunft der Spalte:

    COALESCE(

        COL_NAME(dep.referenced_major_id,

                 dep.referenced_minor_id), '—') AS Quell_Spalte,

    OBJECT_NAME(dep.referenced_major_id)    AS Quell_Tabelle

FROM sys.views v

JOIN sys.columns c

    ON v.object_id = c.object_id

LEFT JOIN sys.sql_dependencies dep

    ON  v.object_id = dep.object_id

   AND  c.column_id = dep.column_id

WHERE SCHEMA_NAME(v.schema_id) <> 'sys'

ORDER BY v.name, c.column_id;

 

 

DMV 6 — Stored Procedures: Tabellen-Zugriffsmuster

 

-- Welche Tabellen liest/schreibt welche Stored Procedure?

SELECT

    OBJECT_NAME(d.referencing_id)           AS Prozedur,

    d.referenced_entity_name                 AS Tabelle_oder_View,

    o_ref.type_desc                          AS Ref_Objekttyp,

    -- Zugriffsmuster aus Query-Plänen (approximativ):

    SUM(qs.total_logical_reads)              AS Reads_Gesamt,

    SUM(qs.total_logical_writes)             AS Writes_Gesamt,

    MAX(qs.last_execution_time)              AS Zuletzt_ausgefuehrt

FROM sys.sql_expression_dependencies d

JOIN sys.objects o

    ON d.referencing_id = o.object_id

   AND o.type = 'P'  -- Nur Stored Procedures

LEFT JOIN sys.objects o_ref

    ON d.referenced_entity_name = o_ref.name

LEFT JOIN sys.dm_exec_procedure_stats qs

    ON o.object_id = qs.object_id

WHERE OBJECTPROPERTY(d.referencing_id, 'IsMsShipped') = 0

GROUP BY OBJECT_NAME(d.referencing_id),

         d.referenced_entity_name,

         o_ref.type_desc

ORDER BY Prozedur, Tabelle_oder_View;

 

 

DMV 7 — Verwaiste Objekte ohne Referenzierer

 

-- Objekte, auf die kein anderes Objekt mehr verweist

-- (Kandidaten für Bereinigung oder fehlende Dokumentation)

SELECT

    SCHEMA_NAME(o.schema_id)    AS Schema_Name,

    o.name                       AS Objekt_Name,

    o.type_desc                  AS Objekttyp,

    o.create_date                AS Erstellt_am,

    o.modify_date                AS Zuletzt_geaendert

FROM sys.objects o

WHERE o.type IN ('V','P','FN','IF','TF')  -- Views, Procs, Functions

  AND OBJECTPROPERTY(o.object_id, 'IsMsShipped') = 0

  AND NOT EXISTS (

      SELECT 1

      FROM sys.sql_expression_dependencies d

      WHERE d.referenced_entity_name = o.name

  )

  AND NOT EXISTS (

      SELECT 1

      FROM sys.sql_expression_dependencies d2

      WHERE d2.referencing_id = o.object_id

  )

ORDER BY o.type_desc, o.name;

 

 


 

 

05

Lineage in Power BI

 

Dataset-Lineage, Purview-Integration und die eingebaute Herkunftsansicht

 

Die eingebaute Lineage-Ansicht im Power BI Service

 

Power BI Service hat seit 2021 eine native Lineage-Ansicht — die in den meisten KMU-Umgebungen nicht genutzt wird.

 

  Wo: Power BI Service → Workspace → oben rechts "Lineage" auswählen.

 

  Was sie zeigt: Datenquellen → Datasets → Dataflows → Reports → Dashboards — als interaktiver Graph. Klick auf ein Element zeigt alle Upstream- und Downstream-Verbindungen.

 

  Limitation: Zeigt nur Power BI-interne Objekte. Die Lineage von SQL Server / DWH bis zum Power BI Dataset muss manuell oder über Purview ergänzt werden.

 

Power BI Dataset-Dokumentation mit XMLA Endpoint

 

# Python: Power BI Dataset-Abhängigkeiten über XMLA auslesen

# Bibliothek: msal + requests (pip install msal requests)

import requests, msal

 

TENANT_ID    = "your-tenant-id"

CLIENT_ID    = "your-app-id"       # Azure AD App mit Power BI Leserechten

CLIENT_SECRET = "your-secret"

WORKSPACE_ID  = "your-workspace-id"

 

# Token holen

app = msal.ConfidentialClientApplication(

    CLIENT_ID,

    authority=f"https://login.microsoftonline.com/{TENANT_ID}",

    client_credential=CLIENT_SECRET

)

token = app.acquire_token_for_client(

    scopes=["https://analysis.windows.net/powerbi/api/.default"]

)

 

# Alle Datasets im Workspace mit Datenquellen abrufen

headers = {"Authorization": f"Bearer {token['access_token']}"}

 

# Datasets auflesen

datasets_url = (

    f"https://api.powerbi.com/v1.0/myorg/groups/"

    f"{WORKSPACE_ID}/datasets"

)

datasets = requests.get(datasets_url, headers=headers).json()

 

# Je Dataset: Datenquellen (Lineage Upstream) ermitteln

for ds in datasets.get("value", []):

    ds_id = ds["id"]

    src_url = (

        f"https://api.powerbi.com/v1.0/myorg/groups/"

        f"{WORKSPACE_ID}/datasets/{ds_id}/datasources"

    )

    sources = requests.get(src_url, headers=headers).json()

    print(f"\nDataset: {ds['name']}")

    for src in sources.get("value", []):

        print(f"  Quelle: {src.get('datasourceType')} — "

              f"{src.get('connectionDetails', {})}")

 

 

Power BI Endorsement als Lineage-Qualitätssignal

 

Power BI bietet zwei Qualitätssiegel für Datasets und Reports:

 

  Promoted (Beworben): Dataset-Eigentümer kennzeichnet sein Dataset als empfohlen — für Nutzer sichtbar.

 

  Certified (Zertifiziert): Nur von Administratoren vergebbar — höchste Vertrauensstufe, strenge Anforderungen.

 

ZERTIFIZIERUNGSANFORDERUNGEN (Best Practice für KMU):

──────────────────────────────────────────────────────────────

Voraussetzungen für "Certified":

■ Vollständige Lineage-Dokumentation vorhanden (Kapitel 3 Vorlage)

■ Datenquelle und Refresh-Zeitplan dokumentiert

■ Data Owner und technischer Owner benannt

■ KPI-Definitionen im Business Glossar verankert

■ Row-Level Security geprüft und dokumentiert

■ Letzter vollständiger Test nicht älter als 3 Monate

──────────────────────────────────────────────────────────────

 

 


 

 

06

dbt als Lineage-Standard

 

Automatische Dokumentation, Tests und Lineage-Graph mit dbt Core

 

dbt (data build tool) hat sich als De-facto-Standard für SQL-basierte Datentransformationen in analytischen Umgebungen etabliert. Der entscheidende Vorteil für Lineage: Dokumentation, Tests und Lineage-Graph entstehen automatisch aus dem Code — sie sind immer synchron.

 

Was dbt für Lineage leistet

 

  Automatischer DAG: dbt analysiert alle ref()-Referenzen zwischen Modellen und erzeugt daraus automatisch einen Directed Acyclic Graph — visuell und als Metadaten.

 

  Inline-Dokumentation: Beschreibungen für jedes Modell und jede Spalte leben direkt im Code (schema.yml) — immer synchron mit der Transformation.

 

  Automatische Tests: Nicht-Null, Eindeutigkeit, referenzielle Integrität — als Code definiert, bei jedem Build ausgeführt.

 

  dbt docs: Automatisch generierte, durchsuchbare Dokumentationsseite mit vollständigem Lineage-Graph.

 

dbt-Projektstruktur für KMU

 

EMPFOHLENE dbt-VERZEICHNISSTRUKTUR:

──────────────────────────────────────────────────────────────

models/

├── staging/          ← Schicht 2: Rohdaten bereinigt

   ├── stg_erp__belege.sql

   ├── stg_crm__kunden.sql

   └── schema.yml    ← Dokumentation + Tests

├── intermediate/     ← Schicht 3a: Zwischenberechnungen

   ├── int_umsatz_bereinigt.sql

   └── schema.yml

├── marts/            ← Schicht 3b: Business-ready

   ├── finance/

      ├── fact_umsatz.sql

      ├── dim_kunde.sql

      └── schema.yml

   └── sales/

       └── ...

tests/                ← Eigene Datentests

seeds/                ← Referenzdaten (CSV → DB-Tabelle)

macros/               ← Wiederverwendbare SQL-Makros

──────────────────────────────────────────────────────────────

 

 

dbt-Modell mit vollständiger Dokumentation

 

-- models/marts/finance/fact_umsatz.sql

{{

  config(

    materialized = 'incremental',

    unique_key   = 'umsatz_id',

    on_schema_change = 'fail'   -- Schemaänderung erfordert explizite Migration

  )

}}

 

WITH belege AS (

    SELECT * FROM {{ ref('stg_erp__belege') }}

    WHERE belegart IN ('RE', 'GS', 'ST')

      AND storniert = FALSE

),

 

kunden AS (

    SELECT * FROM {{ ref('dim_kunde') }}

),

 

final AS (

    SELECT

        {{ dbt_utils.surrogate_key(['b.beleg_nr', 'b.beleg_datum']) }}

                                   AS umsatz_id,

        b.beleg_datum              AS buchungsdatum,

        b.kunden_id,

        k.kunde_name,

        k.region,

        b.betrag_netto             AS umsatz_eur,

        b.waehrung,

        CURRENT_TIMESTAMP          AS dbt_updated_at

    FROM belege b

    LEFT JOIN kunden k USING (kunden_id)

)

 

SELECT * FROM final

{% if is_incremental() %}

WHERE buchungsdatum > (SELECT MAX(buchungsdatum) FROM {{ this }})

{% endif %}

 

 

# models/marts/finance/schema.yml — Inline-Dokumentation

models:

  - name: fact_umsatz

    description: >

      Faktentabelle: alle fakturierten Umsätze, netto, in EUR.

      Stornos sind als negative Einträge enthalten.

      Buchungsdatum = Rechnungsdatum (nicht Zahlungs- oder Lieferdatum).

    meta:

      owner: controlling@firma.de

      data_source: ERP (MACH MBS)

      refresh: täglich 03:00 Uhr

    tests:

      - dbt_utils.equal_rowcount:

          compare_model: ref('stg_erp__belege')

    columns:

      - name: umsatz_id

        description: Surrogate Key (Beleg-Nr + Datum)

        tests: [unique, not_null]

      - name: umsatz_eur

        description: Nettobetrag in EUR nach Währungsumrechnung

        tests: [not_null]

      - name: kunden_id

        description: Fremdschlüssel auf dim_kunde

        tests:

          - not_null

          - relationships:

              to: ref('dim_kunde')

              field: kunden_id

 

 

dbt-Lineage-Graph erzeugen und teilen

 

# Lineage-Graph und Dokumentation generieren:

dbt docs generate

 

# Lokale Dokumentationsseite starten (Port 8080):

dbt docs serve

 

# Im Browser: vollständiger Lineage-Graph, Modell-Beschreibungen,

# Spalten-Dokumentation, Testergebnisse — alles auf einer Seite.

 

# Für den dauerhaften Betrieb: dbt-Docs auf internem Webserver

# oder in dbt Cloud hosten (ab 50 $/Monat für Teams).

 

 


 

 

07

Tool-Vergleich 2026

 

Purview, OpenMetadata, dbt, Atlan — was passt zu welcher Umgebung?

 

Entscheidungsmatrix

 

Kriterium

Microsoft Purview

OpenMetadata

dbt Core

Atlan

Automatische Lineage

★★★★★ (Azure-Stack)

★★★★ (SQL, dbt, Airflow)

★★★★★ (SQL-Modelle)

★★★★

Power BI Integration

★★★★★ nativ

★★★

★★★ (Metadaten)

★★★★

SQL Server Integration

★★★★★

★★★★★

★★★★★

★★★★

Manuelle Lineage ergänzen

★★★

★★★★

★★

★★★★★

Business Glossar

★★★★★

★★★★

★★ (via docs)

★★★★★

DSGVO / PII-Tagging

★★★★★

★★★

★★

★★★★

Einstiegskosten (KMU)

~50–200 €/Monat

Infrastruktur

Kostenlos

Ab 500 $/Monat

Betriebsaufwand

Niedrig (SaaS)

Mittel (Self-hosted)

Niedrig

Niedrig (SaaS)

Empfehlung für KMU

Microsoft-Stack

IT-affine Teams

Alle mit SQL/dbt

Budget vorhanden

 

Wann welches Tool?

 

  Microsoft Purview: Erste Wahl für alle Unternehmen mit Azure, Power BI und SQL Server. Native Integration ohne Connector-Aufwand. Lineage aus ADF, Synapse und Power BI wird automatisch erkannt. Kostenmodell prüfen: Data Map wird pro Capacity Unit abgerechnet.

 

  OpenMetadata: Beste Open-Source-Option für IT-affine Teams, die volle Kontrolle über ihre Metadaten-Infrastruktur wollen. Vollständiger Datenkatalog, automatische Lineage für SQL Server, dbt und Apache Airflow. Self-hosted auf Docker oder Kubernetes.

 

  dbt Core: Nicht primär ein Lineage-Tool — aber für alle Teams, die SQL-Transformationen mit dbt entwickeln, die mit Abstand beste Lösung für Transformations-Lineage. Kostenlos, code-first, Git-integriert.

 

  Atlan: Beste SaaS-Option für kollaboratives Arbeiten mit Lineage, wenn Budget vorhanden ist. Stärkstes UI für manuelle Lineage-Ergänzung und Business-User-Kollaboration.

 

Der pragmatische KMU-Stack

 

Für die meisten KMU mit Power BI und SQL Server empfiehlt sich folgender minimaler Stack:

 

EMPFOHLENER LINEAGE-STACK FÜR KMU (2026):

══════════════════════════════════════════════════════════════

STUFE 1 — Minimal (0 € Zusatzkosten):

  ■ Manuelle Lineage-Dokumentation nach Vorlage (Kapitel 3)

  ■ SQL-Diagnose-Toolkit aus Kapitel 4 (ad hoc)

  ■ Power BI eingebaute Lineage-Ansicht (im Service kostenlos)

 

STUFE 2 — Automatisiert (SQL Server + Power BI):

  ■ Power BI Lineage-Ansicht + Endorsement

  ■ Microsoft Purview (ab ~50 €/Monat für kleinen Scan-Scope)

  ■ dbt Core für Transformations-Layer (kostenlos)

 

STUFE 3 — Enterprise-grade:

  ■ Purview als zentrales Lineage-Hub (alle Systeme gescannt)

  ■ dbt Cloud für Team-Kollaboration und CI/CD

  ■ OpenMetadata als Datenkatalog-Frontend (optional)

══════════════════════════════════════════════════════════════

 

 


 

 

08

Impact Analysis

 

Wer bricht, wenn ich das hier ändere? Downstream-Analyse praktisch

 

Impact Analysis ist die Kehrseite von Lineage: Während Lineage fragt "Woher kommen meine Daten?", fragt Impact Analysis "Was passiert downstream, wenn ich hier etwas ändere?" Sie ist der wichtigste Anwendungsfall von Lineage in der täglichen Praxis.

 

Die fünf Auslöser für Impact Analysis

 

  Schemaänderung an Quelltabelle: Spalte umbenennen, Datentyp ändern, Tabelle aufteilen, neue NOT-NULL-Constraint.

 

  ETL-Logik-Änderung: KPI-Berechnungsregel anpassen, Filter ändern, Datumsbasis wechseln.

 

  ERP-Upgrade: Neue ERP-Version kann Tabellennamen, Feldbezeichnungen oder Datenstrukturen verändern.

 

  Berechtigungsänderung: Ein Service Account verliert Leserechte auf eine Quelltabelle.

 

  Infrastrukturwechsel: Quelldatenbank wird auf einen neuen Server umgezogen — Verbindungsstrings in allen Downstream-Systemen müssen aktualisiert werden.

 

Der Impact-Analysis-Workflow

 

IMPACT-ANALYSIS-CHECKLISTE VOR JEDER ÄNDERUNG:

══════════════════════════════════════════════════════════════

SCHRITT 1: Betroffenes Objekt identifizieren

  → Tabelle / View / Spalte / ETL-Job / Dataset

 

SCHRITT 2: SQL-Diagnose-Toolkit ausführen (Kapitel 4)

  → DMV 4: Direkte Abhängigkeiten

  → DMV 2: Vollständige rekursive Abhängigkeitskette

  → Ergebnis: Liste aller betroffenen Objekte je Schicht

 

SCHRITT 3: Power BI Lineage-Ansicht prüfen (Kapitel 5)

  → Welche Datasets nutzen die betroffene Datenquelle?

  → Welche Reports nutzen diese Datasets?

 

SCHRITT 4: Lineage-Dokumentation abgleichen (Kapitel 3)

  → Stimmen die automatisch gefundenen Abhängigkeiten mit

    der Dokumentation überein? Abweichungen dokumentieren.

 

SCHRITT 5: Betroffene Owner benachrichtigen

  → Je Schicht: Owner der abhängigen Objekte informieren

  → Abnahmeplan: Wer testet nach der Änderung was?

 

SCHRITT 6: Test-Deployment auf Nicht-Produktionsumgebung

  → Änderung auf Test einspielen

  → Alle dokumentierten Testfälle der Abhängigkeiten prüfen

 

SCHRITT 7: Produktions-Deployment + sofortiger Smoke-Test

  → Alle kritischen Downstream-Reports nach Änderung prüfen

══════════════════════════════════════════════════════════════

 

 

Impact-Analysis-Report automatisieren

 

-- Automatisierter Impact-Report: alle Objekte downstream einer Tabelle

-- Mit Kontaktinformationen aus einer Owner-Mapping-Tabelle

SELECT

    dep_chain.Tiefe,

    dep_chain.Ziel                          AS Betroffenes_Objekt,

    o.type_desc                              AS Objekttyp,

    own.owner_email                          AS Owner_Email,

    own.owner_name                           AS Owner_Name,

    o.modify_date                            AS Zuletzt_geaendert,

    qs.last_execution_time                   AS Zuletzt_ausgefuehrt

FROM (

    -- Rekursive Kette aus DMV 2 (vereinfacht):

    SELECT referenced_entity_name AS Ziel, 1 AS Tiefe

    FROM sys.sql_expression_dependencies

    WHERE referenced_entity_name = 'Belege'  -- Zu ändernde Tabelle

) dep_chain

JOIN sys.objects o

    ON dep_chain.Ziel = o.name

LEFT JOIN dbo.Lineage_Owner_Mapping own  -- Eigene Mapping-Tabelle

    ON dep_chain.Ziel = own.object_name

LEFT JOIN sys.dm_exec_procedure_stats qs

    ON o.object_id = qs.object_id

ORDER BY dep_chain.Tiefe, dep_chain.Ziel;

 

 


 

 

09

Lineage-Governance

 

Wer pflegt was — und wie bleibt Lineage dauerhaft aktuell?

 

Lineage-Dokumentation hat denselben Feind wie jede andere Dokumentation: Sie veraltet, wenn niemand sie aktiv pflegt. Die Lösung liegt nicht in besserer Disziplin — sie liegt in besseren Prozessen.

 

Die drei Rollen im Lineage-Modell

 

Rolle

Aufgabe

Zeitaufwand

**Lineage Owner**

Fachliche Verantwortung für eine Datenpipeline — stellt sicher, dass das Lineage-Dokument aktuell ist

1–2 Std./Quartal je Pipeline

**Lineage Steward**

Technische Pflege — aktualisiert Dokumente bei Pipeline-Änderungen, führt SQL-Diagnose-Skripte aus

Bei jeder Pipeline-Änderung

**Lineage Admin**

Verwaltet Tool-Konfiguration (Purview/OpenMetadata), koordiniert Scan-Zyklen, moderiert Quarterly Review

2–4 Std./Monat

 

Trigger-basierte Dokumentationspflege

 

Statt regelmäßiger manueller Reviews ist trigger-basierte Pflege effizienter: Die Dokumentation wird aktualisiert, wenn ein konkretes Ereignis eingetreten ist.

 

PFLEGE-TRIGGER FÜR LINEAGE-DOKUMENTE:

──────────────────────────────────────────────────────────────

TRIGGER: DDL-Änderung an Quelltabelle

  → Sofortige Benachrichtigung des Lineage Steward

  → Lineage-Dokument innerhalb von 5 Arbeitstagen aktualisieren

  → Impact-Analyse ausführen und dokumentieren

 

TRIGGER: ETL-Job-Änderung (Deployment)

  → Deployment-Pipeline triggert Lineage-Dokument-Review

  → In dbt: automatisch durch schema.yml-Änderung

 

TRIGGER: Neues Power BI Dataset / Report

  → Vor Veröffentlichung: Lineage-Dokument als Pflichtbedingung

  → Endorsement (Promoted) nur mit vollständiger Lineage

 

TRIGGER: ERP-Versionsupdate

  → Vor Update: Impact-Analyse für alle ERP-nahen Lineage-Dokumente

  → Nach Update: Regressionstest aller Downstream-Objekte

 

TRIGGER: Jährlicher Audit (Data Council)

  → Alle Lineage-Dokumente auf Aktualität prüfen

  → Verwaiste Objekte aus DMV 7 bereinigen

──────────────────────────────────────────────────────────────

 

 

DDL-Trigger für automatische Benachrichtigung bei Schemaänderungen

 

-- DDL-Trigger: Benachrichtigung bei Schemaänderungen an überwachten Tabellen

CREATE OR ALTER TRIGGER trg_Schema_Change_Alert

ON DATABASE

FOR ALTER_TABLE, DROP_TABLE, RENAME

AS

BEGIN

    SET NOCOUNT ON;

 

    DECLARE @EventData XML = EVENTDATA();

    DECLARE @ObjName  NVARCHAR(256) =

        @EventData.value('(/EVENT_INSTANCE/ObjectName)[1]', 'NVARCHAR(256)');

    DECLARE @EventType NVARCHAR(100) =

        @EventData.value('(/EVENT_INSTANCE/EventType)[1]', 'NVARCHAR(100)');

    DECLARE @LoginName NVARCHAR(256) =

        @EventData.value('(/EVENT_INSTANCE/LoginName)[1]', 'NVARCHAR(256)');

 

    -- Nur überwachte Tabellen auslösen:

    IF @ObjName IN ('Belege', 'Kunden', 'Artikel', 'Bestellungen')

    BEGIN

        -- Ereignis in Audit-Log schreiben:

        INSERT INTO dbo.Schema_Change_Log

            (ChangeDate, ObjectName, EventType, LoginName, EventData)

        VALUES

            (GETDATE(), @ObjName, @EventType, @LoginName, @EventData);

 

        -- E-Mail-Benachrichtigung (erfordert Database Mail):

        EXEC msdb.dbo.sp_send_dbmail

            @profile_name = 'DBA-Alerts',

            @recipients   = 'lineage-owner@firma.de',

            @subject      = 'LINEAGE ALERT: Schemaänderung an ' + @ObjName,

            @body         = 'Tabelle ' + @ObjName

                          + ' wurde durch ' + @LoginName

                          + ' geändert (' + @EventType + ').'

                          + CHAR(13) + 'Bitte Lineage-Dokument prüfen.';

    END

END;

 

 


 

 

10

30-Tage-Lineage-Plan

 

Von Null zu einer vollständig dokumentierten Datenpipeline

 

Dieser Plan führt ein Team mit 2–5 Personen in 30 Tagen von einer undokumentierten Systemlandschaft zu einer vollständig dokumentierten, aktiv gepflegten Lineage-Struktur für alle kritischen Datenpipelines.

 

 

VOR DEM START

Identifizieren Sie die drei kritischsten Datenpipelines Ihres Unternehmens — diejenigen, bei denen falsche oder unvollständige Daten die größten Geschäftsauswirkungen hätten. Diese drei Pipelines werden im 30-Tage-Plan vollständig dokumentiert. Alle anderen folgen danach nach demselben Muster.

 

WOCHE 1: BESTANDSAUFNAHME & SYSTEMKARTIERUNG

 

■ TAG 1–2: SYSTEMLANDKARTE ERSTELLEN

 

  Alle Systeme inventarisieren, die Daten erzeugen, transformieren oder verbrauchen: ERP, CRM, BI-Tools, ETL-Jobs, APIs, manuelle Excel-Prozesse

  Für jedes System: Wer ist Owner? Welche Daten fließen rein, welche raus?

  Erste grobe Lineage-Karte als Whiteboard-Skizze: Systeme als Knoten, Datenflüsse als Pfeile

  Kritischste drei Pipelines benennen — diese werden in Wochen 2 und 3 vollständig dokumentiert

 

■ TAG 3–4: SQL-DIAGNOSE AUSFÜHREN

 

  Alle 7 SQL-Skripte aus Kapitel 4 auf der Produktionsdatenbank ausführen — Ergebnisse exportieren

  DMV 3 (Zirkuläre Abhängigkeiten): Ergebnis sofort prüfen — Zirkel sind kritische Risiken

  DMV 7 (Verwaiste Objekte): Liste aller Objekte ohne Referenzierer — erste Bereinigungskandidaten

  Abhängigkeitsgraph aus DMV 2 für die kritischsten Quelltabellen exportieren

 

■ TAG 5–7: TOOL-ENTSCHEIDUNG & SETUP

 

  Tool-Entscheidung treffen (Kapitel 7): Purview / OpenMetadata / dbt / Nur-Manuell?

  Gewähltes Tool installieren oder Trial aktivieren — ersten automatischen Scan starten

  Automatisch erkannte Lineage mit der manuellen Systemkarte abgleichen: Was fehlt? Was ist falsch?

  Lineage-Dokumentationsvorlage (Kapitel 3) im Wiki einrichten — bereit für Woche 2

 

WOCHE 2: ERSTE PIPELINE VOLLSTÄNDIG DOKUMENTIEREN

 

■ TAG 8–10: PIPELINE 1 — SCHICHT FÜR SCHICHT

 

  Vollständige Lineage-Vorlage (Kapitel 3) für Pipeline 1 ausfüllen — alle 5 Schichten

  Interview mit ETL-Entwickler und Key-User: Stimmt die Dokumentation? Was fehlt?

  Transformationslogik in menschenlesbarer Form dokumentieren — nicht nur "ETL-Job läuft täglich"

  Manuelle Zwischenschritte explizit markieren — diese sind Risikopunkte

 

■ TAG 11–13: IMPACT-ANALYSE & ABHÄNGIGKEITEN

 

  Impact-Analyse-Workflow (Kapitel 8) für Pipeline 1 durchführen: Alle Downstream-Objekte identifizieren

  Owner-Mapping-Tabelle anlegen: Welches Objekt hat welchen technischen und fachlichen Owner?

  DDL-Trigger (Kapitel 9) für alle Quelltabellen von Pipeline 1 einrichten

  Test-Szenario: "Was passiert, wenn Quelltabelle XY morgen eine Spalte verliert?" — Impact dokumentieren

 

■ TAG 14: PIPELINE 1 ABNAHME

 

  Fertige Lineage-Dokumentation durch zweite Person auf Vollständigkeit prüfen

  Fachlichen Owner (Data Owner laut Governance-Kit) zur Abnahme einladen

  Offene Punkte schließen — Dokument als "Freigegeben v1.0" markieren

  Pipeline-1-Lineage im Power BI Endorsement verankern (Kapitel 5)

 

WOCHE 3: PIPELINE 2 & 3 + POWER BI LINEAGE

 

■ TAG 15–18: PIPELINE 2 UND 3 DOKUMENTIEREN

 

  Lineage-Vorlagen für Pipeline 2 und 3 ausfüllen — parallel, je ein Team-Mitglied pro Pipeline

  dbt einführen (falls entschieden): Erste Modelle mit schema.yml-Dokumentation versehen

  Cross-Pipeline-Abhängigkeiten identifizieren: Wo fließen Daten aus Pipeline 1 in Pipeline 2?

  Gemeinsamen Lineage-Graphen aller drei Pipelines als Mermaid-Diagramm erstellen

 

■ TAG 19–21: POWER BI LINEAGE VERVOLLSTÄNDIGEN

 

  Power BI Service Lineage-Ansicht öffnen: Alle Datasets, Reports und Dashboards sichtbar machen

  Für jedes Dataset: Datenquellen-Verbindung mit der SQL-Lineage-Dokumentation verknüpfen

  Python-Skript aus Kapitel 5 ausführen: Alle Dataset-Datenquellen automatisch exportieren

  Datasets mit vollständiger Lineage als "Promoted" endorsen — Datasets ohne Lineage markieren

 

WOCHE 4: GOVERNANCE & DAUERBETRIEB

 

■ TAG 22–25: GOVERNANCE-STRUKTUREN EINRICHTEN

 

  Lineage-Rollen benennen (Kapitel 9): Lineage Owner, Steward, Admin je Pipeline

  Alle Pflege-Trigger in Kalender und Prozessen verankern: DDL-Alert, Deployment-Trigger, Audit

  Change-Management-Prozess erweitern: Schemaänderungen erfordern ab sofort Impact-Analyse

  Quarterly Lineage Review als Termin in Data Council (aus Governance-Kit) integrieren

 

■ TAG 26–28: VERWAISTE OBJEKTE BEREINIGEN

 

  DMV 7 erneut ausführen: Verwaiste Objekte nach Kenn-Owner-Analyse bereinigen oder archivieren

  Undokumentierte ETL-Jobs und SQL-Jobs inventarisieren und priorisiert nachdokumentieren

  Manuelle Zwischenschritte (Excel-Importe etc.) automatisieren oder zumindest protokollieren

  Bekannte Lineage-Lücken in den Backlog aufnehmen — priorisiert nach Geschäftsrisiko

 

■ TAG 29–30: ABSCHLUSS & ÜBERGABE

 

  Alle drei Lineage-Dokumente finalisieren und im Wiki veröffentlichen

  Team-Session: Alle Beteiligten kennen die Dokumentation und wissen, wie sie sie pflegen

  KPIs festhalten: Anzahl dokumentierter Pipelines, Anzahl identifizierter Abhängigkeiten, DDL-Trigger aktiv

  Roadmap für die nächsten 90 Tage: Welche weiteren Pipelines werden als nächstes dokumentiert? ■

 

 

ERGEBNIS NACH 30 TAGEN

Ihr Ergebnis nach 30 Tagen: Drei vollständig dokumentierte, End-to-End-Datenpipelines mit Lineage-Vorlagen, automatischer Schemaänderungs-Benachrichtigung, validiertem Power-BI-Lineage-Graph, Impact-Analyse-Workflow und einem Governance-Modell, das Lineage dauerhaft aktuell hält — als Basis für alle weiteren Pipelines.

 


 

 

Ausführlicher Haftungsausschluss und Lizenzbestimmungen

 

1. Allgemeiner Haftungsausschluss

 

Die in diesem Dokument enthaltenen SQL-Skripte, Methoden, Architekturempfehlungen und Tool-Vergleiche wurden nach bestem Wissen und Gewissen auf Basis langjähriger praktischer Erfahrung in der Datenarchitektur und BI-Entwicklung erstellt. Dennoch kann keine Gewähr für Vollständigkeit, Richtigkeit oder universelle Anwendbarkeit übernommen werden.

 

Der Autor übernimmt ausdrücklich keinerlei Haftung für Schäden, die aus der Anwendung der beschriebenen Methoden und Skripte entstehen, einschließlich, aber nicht beschränkt auf: Datenverlust, Systemausfälle, fehlerhafte Impact-Analysen oder Compliance-Verstöße.

 

2. SQL-Skripte und DDL-Trigger

 

Alle SQL-Skripte in diesem Dokument wurden für Microsoft SQL Server entwickelt. DDL-Trigger (Kapitel 9) greifen in Datenbank-Ereignisse ein und müssen vor dem Produktionseinsatz gründlich in einer Testumgebung erprobt werden. Fehlkonfigurierte DDL-Trigger können die Datenbankperformance beeinträchtigen oder DDL-Operationen blockieren.

 

3. Tool-spezifische Angaben

 

Alle Angaben zu Microsoft Purview, OpenMetadata, dbt und Atlan beziehen sich auf öffentlich verfügbare Informationen zum Stand März 2026. Funktionsumfang, Preise und Integrationsmöglichkeiten ändern sich regelmäßig. Holen Sie vor Investitionsentscheidungen aktuelle Herstellerinformationen ein.

 

4. Urheberrecht und Nutzungsrechte

 

Dieses Dokument und alle Inhalte sind urheberrechtlich geschützt. © 2026 Sascha Hess, xenosystems.de. Alle Rechte vorbehalten.

 

5. Markenrechte

 

Microsoft Purview, Power BI, Azure Data Factory und SQL Server sind eingetragene Marken der Microsoft Corporation. dbt ist ein Produkt von dbt Labs, Inc. OpenMetadata steht unter der Apache-2.0-Lizenz und ist ein Produkt der OpenMetadata Foundation. Atlan ist ein Produkt der Atlan Technologies Pte. Ltd. Alle anderen genannten Produkt- und Unternehmensnamen sind Eigentum ihrer jeweiligen Inhaber.

 

6. 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 sowie in der Datenarchitektur mittelständischer Unternehmen. Er hat mehr als 30 Data-Lineage- und Data-Governance-Projekte begleitet — von der ersten Systemkartierung bis zur vollautomatisierten Lineage-Überwachung mit Microsoft Purview und dbt.

 

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

 

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

 

Service

Beschreibung

Lineage-Quickstart

Strukturierter 2-Tages-Workshop: Systemkartierung, SQL-Abhängigkeitsanalyse, vollständige Lineage-Dokumentation Ihrer kritischsten Datenpipeline und Einrichtung des Governance-Modells.

Data Architecture Review

Vollständige Analyse Ihrer Datenpipelines: Lineage-Lücken, Impact-Risiken, manuelle Zwischenschritte, Tool-Empfehlung und priorisierter Dokumentationsplan. Scope: 2–3 Tage.

dbt-Einführung

Einführung von dbt Core in Ihre SQL-Transformationsumgebung — Projektstruktur, Modellierung, Dokumentation, Tests und Lineage-Graph. Scope: 3–5 Tage.

Data Governance Quickstart

Governance-Rollen, KPI-Glossar, DSGVO-Check und Data-Council-Prozess — in 3 Tagen einsatzbereit.

SQL Server DB Health Check

Professioneller Audit Ihres SQL Servers — Managementreport, Risikobewertung und Maßnahmenplan. Scope: 3–5 Tage.

 

Vollständiges Dokument

lineage kit data lineage datenherkunft 2026

Strategische Wissens-Roadmap · Checklisten · Praxisbeispiele

49,90 €

Sichere Zahlung über PayPal · Sofort-Download nach Zahlungseingang