Zum Inhalt springen
Search the hub
Inline-Tabellen verstecken gemeinsame Wahrheit

Inline-Tabellen verstecken gemeinsame Wahrheit

Warum Qlik INLINE, SQL VALUES und hardcodierte Mappings nicht die Source of Truth für geteilte Steuerdaten sein dürfen.

Category
Data Governance
Reading time
5 min
Published
Tags
inline-tables qlik sql dbt power-query control-data data-governance
Download PDF

Drei Apps joinen sales_otc über denselben Statuscode — die Wahrheit steckt nur in einem Qlik-INLINE. Inline-Tabellen sind Implementierungsdetail, bis mehrere Consumer von derselben kodierten Wahrheit abhängen.

zweiter Consumer dieselbe Kodierung teilt, driftet sie.

Lösung: Geteilte Steuerdaten als Produkt führen, sobald mehr als ein Consumer dieselbe Kodierung braucht — Inline bleibt lokal, bis genau dieser Fall eintritt.

In einem Satz: Inline ist Detail, bis ein zweiter Consumer dieselbe Wahrheit braucht.

Problem

Steuerdaten verstecken sich in vielen Formen offen sichtbar:

  • Qlik-LOAD INLINE-Blöcke für Statusmaps, Regionsgruppen und „Fix“-Werte;
  • SQL-VALUES / UNION ALL-Literaltabellen in Views und Prozeduren;
  • dbt-Seeds, die als temporäre Fixtures starteten und ohne Stewardship zu produktiven Crosswalks wurden;
  • Python- oder Notebook-Dictionaries und -Listen als Join-Keys in geplanten Jobs;
  • Power-Query-„Enter data“-Tabellen, die in ein semantisches Modell eingefügt wurden.

Jedes Muster ist schnell für eine einzelne App. Geteilte Steuerdaten driften dann:

Beispiel (Lehrfall, keine Kundendaten): Typisches Muster aus Governance-Projekten — im eigenen Umfeld durch Catalog-/BI-/Ticket-/Prozessquellen ersetzen.

Qlik app     INLINE status 90 = Cancelled
Warehouse    VALUES status 90 = Cancelled, 95 = Void
dbt seed     status 90 = Cancelled (old label)
Power Query  Enter data: status 90 = Canceled (US spelling, different code set)

Entwickler kopieren den Block in die nächste App. Stewards können nicht an einer Stelle ändern. Kataloge sehen die Tabelle nie. Lineage-Tools melden „kein Upstream“. Auditoren finden fachliche Bedeutung in Source-Control-Kommentaren statt in einem besessenen Dataset.

Teil 1 hat Steuerdaten als Asset-Klasse gerahmt. Teil 2 isoliert das Inline-Muster, weil es der häufigste Weg ist, wie gemeinsame Wahrheit unsichtbar wird — und dabei trotzdem „in der Plattform“ aussieht.

Inline ist nicht immer falsch. Falsch ist es als System of Truth für Steuerdaten, die geteilt, sensitiv, historisch relevant oder von mehr als einem Delivery-Pfad konsumiert werden. Das deckt sich mit Fachliche Logik außerhalb der BI-Apps halten: gemeinsame Bedeutung außerhalb des Consumer-Artefakts; tool-lokales Verhalten darf lokal bleiben.

Entscheidung

Inline = Implementierungsdetail. Nie die Source of Truth für geteilte Steuerdaten.

Erlaubte Nutzungen von Inline-/Literaltabellen:

  • Wegwerf-Prototypen und Spikes mit benanntem Sunset-Datum;
  • echt app-lokale Präsentationslabels, die kein anderer Nutzer wiederverwenden muss;
  • synthetische Demo-Daten, klar als Non-Production markiert;
  • temporäre Bridges während einer Migration mit explizitem Exportdatei-Ticket;
  • Unit-Test-Fixtures, die nicht als produktive Kontrollregel-Tabellen deployt werden.

Extrahieren Sie, wenn eine der folgenden Bedingungen zutrifft:

  • zwei oder mehr Apps, Modelle oder Jobs brauchen dasselbe Mapping oder denselben Reference-Satz;
  • Finance, Risk oder regulatorisches Reporting hängt von den Codes ab;
  • Berechtigung oder personenbezogene Daten-verknüpfte Keys sind involviert (Access & Security Governance);
  • Änderungshistorie zählt (wer hat was geändert, valid_from / valid_to);
  • der Katalog oder eine Richtlinie benennt das Konzept bereits;
  • Reload- oder Publish-Fehler wurden bereits durch eine Inline-Änderung verursacht;
  • ein Steward außerhalb des Entwicklerteams muss die Werte pflegen.

Extraktionsziel ist eine governte Control-Tabelle (oder eine freigegebene API/UI über diese Tabelle). Das Skript darf die Tabelle weiterhin laden; es darf sie nicht besitzen. dbt-Seeds dürfen nur dann Packaging-Format bleiben, wenn der Seed aus dem besessenen Store generiert oder strikt dazu synchronisiert wird — nicht, wenn die CSV in Git die einzige Editor-Oberfläche für Fach-Stewards ist.

Verwechseln Sie diese Entscheidung nicht mit einem Verbot von Excel-Analyse (Excel-Schatten-BI und Kennzahlen-Drift). Inline-Extraktion betrifft kodierte geteilte Tabellen, nicht das Entfernen jeder consumerseitigen Formel.

Checkliste

Führen Sie ein Inline-Inventar durch, bevor Sie Architektur umschreiben:

  • durchsuchen Sie Repos und Skriptbibliotheken nach INLINE, LOAD * INLINE, VALUES (, Seed-Ordnern, Enter data, hardcodierten dict( / Mapping-Arrays;
  • erfassen Sie Dateipfad, Objektname, Zeilenanzahl-Band und Taxonomieklasse aus Teil 1;
  • zählen Sie Nutzer und Duplikatskopien;
  • markieren Sie Sensitivität und ob Änderungen fachliche Freigabe brauchen;
  • entscheiden Sie: keep-local, extract, deduplicate-then-extract, retire;
  • benennen Sie für jedes extract den Ziel-Store und Steward;
  • ersetzen Sie Inline-Loads durch einen einzigen Read von der besessenen Tabelle;
  • ergänzen Sie eine CI- oder Scan-Regel, damit neue geteilte Inlines nicht unbemerkt landen;
  • aktualisieren Sie Katalogeinträge und Lineage, sobald die Tabelle real ist;
  • führen Sie eine kurze Exception-Liste für freigegebene lokale Inlines mit Ownern und Review-Daten.

Bevorzugen Sie langweilige Konsistenz: ein Extract-Muster pro Plattform (Qlik Resident aus der Control-DB, dbt ref auf Control-Modell, Power Query aus zertifizierter Quelle).

Artefakt

Erstellen Sie Inline Inventory Scan Rules — ein lebendes Regelwerk plus Scan-Output, keine einmalige Spreadsheet.

Minimales Regelpaket:

Rule ID Pattern / Signal Severity Default disposition
INL-01 Qlik LOAD INLINE / INLINE [ high if >1 Consumer oder Berechtigung-Klasse extract
INL-02 SQL VALUES / literales UNION ALL-Dimension high if in geteilten Views extract
INL-03 dbt-Seed von ≥2 Modellen genutzt und als SoT editiert high extract oder sync-from-control-DB
INL-04 Power Query „Enter data“ in zertifizierten Modellen high extract
INL-05 Notebook dict/list gejoint in geplantem Job medium–high extract
INL-06 Inline mit Sunset-Datum und einzelner App low keep-local + review
INL-07 Duplizierte Inline-Hashes über Apps hinweg high deduplicate-then-extract

Scan-Output-Felder: Rule ID, Location, Hash/Fingerprint, Klasse, Consumers, Owner, Disposition, Ticket-Link.

Wiederholen Sie den Scan im Zeitplan und bei Pull Requests, die Skriptpfade berühren.

Tools

Nutzen Sie ripgrep / CI-Scanner im Secret-Stil, adaptiert für INLINE und VALUES. Nutzen Sie dbt-Projektparser für Seeds. Nutzen Sie Qlik- und Power-BI-Source-Control-Diffs. Nutzen Sie Report Inventory, um Consumers anzubinden. Nutzen Sie Katalog-Bulk-Import, sobald extrahierte Tabellen existieren. Abgleichen Sie mit dem Control Data Risk Register aus Teil 1.

Ressourcen

Skriptbibliotheken, Transformations-Repos, Semantic-Model-PBIX/PQ-Traces, Notebook-Job-Definitionen, frühere Incidents zu „falschem Code-Mapping“ und Steward-Listen.

Schwesterlektüre: Fachliche Logik außerhalb der BI-Apps halten, Warum unkontrollierte Steuerdaten Governance zum technischen Alptraum machen, Building a Modern Data Warehouse, Catalog Deep Dive.

Control & Reference Data Deep Dive

Part 2 of 11

View series

Knowledge check

Tour