Lead Consultant für BI & Analytics Engineering

Ich mache komplexe Daten nutzbar.

Ich entwickle moderne Analytics-Plattformen und BI-Produkte, die Daten im Unternehmensmaßstab in klare, verlässliche Entscheidungen übersetzen.

Rafael Figueiredo

In der Nähe von Frankfurt · Deutschland

8+Jahre Erfahrung mit
Enterprise Analytics
3 Mrd.+Datensätze in
großskaligen BI-Modellen
400+Führungskräfte mit
einer Lösung erreicht
5gesprochene Sprachen
in globalen Teams

Erfahrung

Arbeit in komplexen Unternehmen.

Wählen Sie ein Unternehmen aus, um Rollen, Technologien und konkrete Beiträge im Detail zu sehen.

Deutsche BahnDeutsche LeasingSamsungWIRTGEN GROUPINNIO GroupMercedes-Benz Tech InnovationDeutsche BankRoche Diagnostics

Fallstudien

Die gesamte Kette — und was Vertrauen darin gekostet hat.

Öffentliche Projekte, durchgängig dokumentiert — samt der Fehler, die dabei auffielen, und der Grenzen dessen, was die fertigen Zahlen belegen können.

EU-Vergabedaten: ein BI-Produkt von Anfang bis Ende

Echte öffentliche Ausschreibungsdaten, konsequent zu Ende gedacht: uneinheitliche Quellsysteme, ein Data Vault für die Entitätsauflösung, dimensionale Marts und ein Semantikmodell, das seine Abdeckung und Datenintegrität gemeinsam mit den Kennzahlen veröffentlicht. Jede Kennzahl wird schriftlich definiert, bevor eine Zeile DAX entsteht, und Regressionstests fixieren jede auf einen bekannten Filterkontext.

PostgreSQLdbtData VaultPower BIAirflow
Fallstudie lesen

Drei Zahlen sahen einwandfrei aus und waren falsch. Sie zu finden ist die eigentliche Arbeit; die Pipeline dahinter ist Standardware. Hier steht, worin jeder Fehler bestand, wie er ans Licht kam und was die fertigen Zahlen trotzdem nicht aussagen können.

351Zuschläge in der aktuellen Stichprobe
61,8 %der Auftragswerte bestehen die Qualitätsregeln
29Regressionstests fixieren jede Kennzahl
0,3 %der Zuschläge einem Bundesressort zuordenbar

Ein Anteil, der nur null sein konnte

Der Rahmenvertragsanteil wurde zunächst am zertifizierten Wert gemessen — also an der Summe, die alle Zuschläge ausschließt, die an den Qualitätsregeln der Datenschicht scheitern. Jeder Rahmenvertragszuschlag scheitert an genau diesen Regeln, denn die uneindeutige Behandlung von Rahmenverträgen ist der Grund, weshalb sich ein Wert nicht zertifizieren lässt. Die Kennzahl lieferte deshalb in jedem Filterkontext dauerhaft 0 % — als saubere, selbstbewusste Null.

Gemessen an der Summe einschließlich nicht verifizierter Werte, in der Rahmenvertragszuschläge tatsächlich enthalten sind, liegt sie bei 45,7 %. Der Fehler steckte nicht im DAX, sondern in der Wahl der Bezugsgröße — die Art von Fehler, die keine Syntaxprüfung sieht.

Eine Haushaltssumme, die Einnahmen zu Ausgaben addierte

Die Datei zum Bundeshaushalt enthält beide Hälften des Haushalts. Ein Haushalt ist ausgeglichen, also ergibt die Summe aller Zeilen etwa das Doppelte: 993 Mrd. € gegenüber einem tatsächlichen Bundeshaushalt 2022 von 495,8 Mrd. € — eine Zahl, die auf einer Kachel völlig plausibel aussähe.

Die erste Ziffer des Gruppierungsplans trennt beide: Gruppen 0–3 sind Einnahmen und Finanzierung, Gruppen 4–9 sind Ausgaben. Jede Hälfte stimmt für das Haushaltsjahr 2022 nun mit 495,79 Mrd. € gegen den veröffentlichten Haushalt ab. Die Klassifikation begann als berechnete Spalte im Semantikmodell und liegt inzwischen im Warehouse, wo sie aus der Quelle abgeleitet ist und jeder Verbraucher sie erbt, statt sie erneut herzuleiten.

Eine Quote, die einen Ausschnitt durch einen anderen teilte

Der Rahmenvertragsanteil filtert dieselbe Spalte, nach der Lesende ebenfalls filtern können. Ohne KEEPFILTERS ersetzt der innere Filter der Kennzahl den Filter der Lesenden, statt ihn einzugrenzen. Auf Nicht-Rahmenverträge gefiltert lieferte sie 84 % — Rahmenvertragswert geteilt durch Nicht-Rahmenvertragswert. Kein Fehler und kein Leerwert: ein plausibler Prozentsatz ohne jede Bedeutung.

Jede Quote im Modell umschließt ihren Zählerfilter inzwischen mit KEEPFILTERS, und zu jeder gehört ein Test, der das korrekte Verhalten beim Filtern nach der gefilterten Spalte prüft. Die meisten DAX-Fehler sind Filterkontextfehler, deshalb fixiert die Testsuite die Kennzahlen an mehreren Kontexten und nicht nur an der Gesamtsumme.

Definitionen vor DAX — auch die strittigen

Jede Kennzahl wurde schriftlich definiert, bevor eine Zeile DAX entstand. Wird eine Zahl nur durch den Code definiert, der sie berechnet, wird der Code zur Definition, und niemand kann mehr sagen, ob sie richtig ist — nur noch, ob sie durchläuft.

Der Kennzahlenvertrag hält auch fest, wo mehr als eine vertretbare Definition existiert. Die Einzelbieterquote ist der klare Fall: Bei 55 von 351 Zuschlägen ist die Zahl der Bieter nicht erfasst. Zählt man nur Zuschläge mit bekannter Bieterzahl, ergibt das 19,9 %; zählt man alle, 16,8 %. Ein Abstand von 3,1 Punkten ist keine Rundung und verändert die Lesart des Befundes. Die erste Variante ist zertifiziert, die zweite steht daneben, und keine erscheint je ohne die Abdeckung der Bieterdaten von 84,3 %, die beide begrenzt.

Die gescheiterte Verknüpfung, als Befund veröffentlicht

Der ursprüngliche Entwurf verglich das Vergabevolumen mit den Ressorthaushalten. Nur 1 von 104 Auftraggebern ließ sich einem Bundesressort zuordnen. Die Ursache ist struktureller Natur und nicht durch Nachjustieren behebbar: Die deutschen Auftraggeber in TED sind überwiegend Kommunen, Länder, Krankenhäuser und Versorger, während der Bundeshaushalt nur Bundesministerien abdeckt. Beide Mengen überschneiden sich kaum, also kann auch besseres Matching sie nicht verbinden.

Der Vergleich wurde aus dem Bericht entfernt. An seiner Stelle steht die gescheiterte Verknüpfung als Befund — zwei amtliche Datenbestände über verwandte staatliche Tätigkeit, die sich in diesem Zuschnitt nicht verbinden lassen. Sauber gelöst bräuchte es Landes- und Kommunalhaushaltsdaten, und das ist eine spätere Phase.

Repository ansehen
Warehouse, Semantikmodell und Bericht gebaut · 29 Modelltests grünÖffentliches Repository

Brasiliens größte Banken: eine governte BI-Schicht auf amtlichen Daten

Fünfzehn Monate COSIF-Meldungen der brasilianischen Zentralbank und fünf Makro-Zeitreihen, von den Rohdateien bis zu einem versionierten Power-BI-Modell. Vier Berichtszeilen werden aus Konten der obersten Ebene abgeleitet und stimmen auf den Cent mit der Quelle ab; jede Kennzahl wird schriftlich definiert, bevor eine Zeile DAX entsteht, und der Bericht veröffentlicht seine Herkunft und Abstimmung gemeinsam mit den Zahlen.

PostgreSQLdbtDagsterPower BIdlt
Fallstudie lesen

Die Pipeline ist Standardware; den Zahlen zu vertrauen ist die eigentliche Arbeit. Eine Bilanz, die sich über Monate selbst summierte, eine Wachstumskennzahl, die zu nichts kompilierte, vier Zeilen, die man nie addieren darf — hier steht, worin jede bestand, wie sie ans Licht kam und was die fertigen Zahlen trotzdem nicht aussagen können.

13,67 Bio. R$Bilanzsumme der 15 größten Banken, März 2026
900geprüfte Berichtszeilen-Salden je Bank und Monat
0,00 R$Differenz bei der Abstimmung der Marts mit den Quellkonten
214/214dbt-Modell- und Testknoten grün

Eine Bilanz, die sich über fünfzehn Monate selbst summierte

Die erste Kachel zeigte 190 Billionen R$ Bilanzsumme. Ein Saldo ist ein Bestand, kein Fluss: die März-Bilanz zur Februar-Bilanz zu addieren ist sinnlos, doch eine Kachel ohne Monatsfilter summiert alle fünfzehn Monate und zeigt eine selbstbewusste, falsche Zahl.

Jede Saldo-Kennzahl ist nun halbadditiv — sie liefert den jüngsten Monat im Kontext, sodass eine Kachel die März-Momentaufnahme von 13,67 Bio. R$ zeigt, während die monatliche Trendlinie unberührt bleibt. Der Fehler lag nicht in der Arithmetik, sondern darin, einen Bestand wie einen Fluss zu behandeln.

Eine Wachstumskennzahl, die zu nichts kompilierte

Das Monatswachstum nutzte zunächst DATEADD. Die Datumstabelle ist monatsgranular — fünfzehn Zeilen, eine je Berichtsmonat — und DATEADD braucht einen tagesgenau lückenlosen Kalender, also scheiterte es, während alle anderen Visuals rendern. Mit EDATE und einem expliziten Filter über die Datumstabelle neu geschrieben, funktioniert es auf Monatsgranularität.

Darunter verbarg sich ein noch seltsamerer Fehler: dieselbe Kennzahl kompilierte stillschweigend zu einem Fehler-Stub, weil eine Variable Current hieß — ein Token, das dieser DAX-Parser reserviert und ohne sichtbaren Fehler ablehnt. In CurVal umbenannt, kompiliert sie. Beides sind Fehler, die keine Syntaxprüfung sieht; sie zu fassen hieß, das laufende Modell abzufragen, statt darauf zu vertrauen, dass es geladen hatte.

Vier Zeilen, die man nie addieren darf

Bilanzsumme, Kreditportfolio, Einlagen und Eigenkapital liegen auf verschiedenen Seiten der Bilanz: zwei sind Aktiva, eines ist eine Verbindlichkeit, eines ist Eigenkapital. Summiert ergeben sie Unsinn. Deshalb bildet das Modell nie ihre Summe, und jede Quote teilt durch die Bilanzsumme — den einzigen zertifizierten Nenner.

Eine generische Kennzahl zur 'Mapping-Abdeckung' wurde aus demselben Grund verworfen: COSIF-Konten sind hierarchisch, ein übergeordnetes Konto enthält also bereits seine untergeordneten, und über verschiedene Bilanzseiten hinweg gibt es keinen einzelnen sinnvollen Nenner. Abdeckung wird, wo sie etwas bedeutet, je Seite ausgedrückt — Kredit als Anteil der Aktiva ist genau das.

Definitionen vor DAX — und ein Vertrag, der sagt, was nicht zertifiziert ist

Jede Kennzahl wurde schriftlich definiert, bevor eine Zeile DAX entstand, jeweils mit einem Status. Die Bilanzsumme ist gegen das reproduzierte Quellranking zertifiziert; Kredit, Einlagen und Eigenkapital sind governte Entwürfe, weil das Kontenmapping vertretbar, aber noch nicht förmlich freigegeben ist. Wird eine Zahl nur durch ihren Code definiert, wird der Code zur Definition, und niemand kann sagen, ob sie richtig ist.

Die Datenschicht berechnet bewusst keine der Geschäftskennzahlen. Sie liefert die zertifizierten Marts und garantiert deren Form; die Quoten und ihre strittigen Nenner leben in einem Kennzahlenvertrag, wo sie sichtbar und diskutierbar sind, statt in einer Kennzahl vergraben.

Vertrauen als Seite, Abstimmung ehrlich benannt

Der Bericht enthält eine Vertrauensseite: den jüngsten Quellzeitraum, die Prüfsumme der aktiven Datei, die Abrufdaten getrennt von den Berichtsdaten, das Mapping von sieben Konten auf vier Zeilen und eine schlichte Umfangsangabe. Sie liest nur die zertifizierten Marts — die BI-Schicht rührt Roh-, Staging- und Kernschicht nie an.

Die Abstimmung ist als Tatsache zum Zeitpunkt der Zertifizierung benannt — die Berichtszeilen-Salden geben die Summen der gemappten Quellkonten auf den Cent wieder — und nicht als Live-Wert, denn das Warehouse stimmt bei jeder Aktualisierung nicht neu ab. Etwas anderes zu behaupten wäre eine selbstbewusstere Zahl, die weniger bedeutet.

Repository ansehen
Datenschicht zertifiziert · Power-BI-Modell und dreiseitiger Bericht gebaut und live verifiziertÖffentliches Repository

Aktuell in Entwicklung

Werkzeuge für Probleme, die man nur einmal lösen sollte.

Nebenprojekte aus der Beratungspraxis, die beim nächsten Auftreten eines Problems den manuellen Schritt überflüssig machen.

Metadatengesteuertes Medallion Framework für Fabric

Ein Config-over-Code-Framework für die Datenaufnahme. Metadaten-Kontrolltabellen steuern die Bronze-, Silver- und Bridge-Schichten, die ein Direct-Lake-Semantikmodell versorgen. Eine neue Tabelle wird durch Metadatenzeilen statt durch neuen Code eingebunden. Die Abstimmung bricht bei Abweichungen deutlich ab, und das gesamte Framework lässt sich aus dem Browser installieren.

Microsoft FabricPySparkPythonMedallion
Bereitgestellt und in BetriebPrivates Repository

Toolkit für Fabric-Semantikmodelle

Notebook-Treiber für Modelloperationen, die sonst über eine Benutzeroberfläche geklickt werden: der Lebenszyklus inkrementeller Aktualisierung, schreibgeschützte Diagnosen bis zum VertiPaq-Speicherbedarf einzelner Spalten, präzise TOM-Metadatenänderungen und das Klonen von Modellen zwischen Workspaces inklusive Berichtsneubindung.

Microsoft FabricTOMXMLAPython
Im Einsatz · v0.6.0Privates Repository

Power-BI-Design-Ökosystem

Drei wiederverwendbare Schichten, damit Power-BI-Design nicht in jedem Projekt dieselben Probleme neu löst: ein markenbewusstes Theme-System, eine typisierte Registry für Berichtskomponenten und ein Builder, der Berichte aus einer Spezifikation unter einem Theme zusammensetzt.

Power BIPBIRThemingPython
Theme-Schicht fertig · Komponenten und Builder in ArbeitPrivates Repository

Mein Beitrag

Von Rohdaten zu fundierten Entscheidungen.

Ich arbeite entlang der gesamten Analytics-Wertschöpfung — mit besonderer Tiefe dort, wo Engineering, BI-Design und Adoption zusammenkommen.

BI-Produkte

Power-BI- und Tableau-Erlebnisse, ausgerichtet auf die Entscheidungen, die Menschen tatsächlich treffen müssen.

Power BI · Tableau · DAX · UX

Analytics Engineering

Wiederverwendbare Semantikmodelle, getestete Transformationen und Pipelines, die auch bei wachsender Skalierung verständlich bleiben.

SQL · Python · dbt · PySpark

Moderne Datenplattformen

Pragmatische Architekturen von Ingestion und Lakehouse-Schichten bis zu Modellierung und kontrollierter Nutzung.

Fabric · Azure · Databricks · AWS

Technische Führung

Kooperative Leitung für Migrationen, Standards, Mentoring, Stakeholder-Abstimmung und die Befähigung von Teams.

Strategie · Training · CI/CD · SAFe
Das beste Analytics-Produkt ist nicht das vollste Dashboard. Es ist das, dem Menschen genug vertrauen, um danach zu handeln.

Ich verbinde praxisnahes Engineering mit dem Blick eines Beraters auf das Gesamtsystem: die Geschäftsfrage, das Datenmodell, die Oberfläche und die Menschen, die es anschließend verantworten.

01

Die Entscheidung eingrenzen

Mit der Geschäftsfrage, der Zielgruppe und einem klaren Bild der besseren Entscheidung beginnen.

02

Das Fundament entwickeln

Modelle, Pipelines und Delivery-Praktiken schaffen, die verlässliche Analysen wiederholbar machen.

03

Das Team stärken

Muster teilen, Kollegen coachen und das fertige System leichter übernehmbar und weiterentwickelbar machen.

Verfügbar für ausgewählte hybride und Remote-Projekte

Eine komplexe BI-Herausforderung?

Machen wir daraus einen klaren nächsten Schritt.

Gespräch beginnen
Aschaffenburg · Raum FrankfurtEnglisch · Deutsch · Portugiesisch