Charts gebouwd voor Chat: dbt Charts

We maken dbt Charts open source. Dit is een declaratieve taal voor dashboards, waardoor zelfs dashboards die je bouwt via een chat-agent beheersbaar (governed) blijven.

AI voor data is hier, en de langbeloofde 'self-serve analytics' wordt eindelijk werkelijkheid. Iedereen met een dataverbinding kan tegenwoordig in een middag een rapport uit een chat-interface toveren, en de eerste resultaten zijn indrukwekkend.

De frictie ontstaat echter snel. Standaard zet een agent één eenvoudig rapport om in een stapel bestanden: HTML, CSS, JavaScript, een paar chart-libraries en een React- of Streamlit-app zodra het live moet. Het terugzoeken van een resultaat naar de bron betekent dat je door verschillende talen en bestanden moet navigeren. Dit is tijdrovend voor mensen om te auditen en kost de agent bij elke wijziging extra tijd en tokens.

BI-tools (Business Intelligence) kozen voor een andere route en voegden copilots toe aan hun UI-first applicaties. Dit houdt de AI binnen beheerde kaders, maar die kaders zijn nauw: de agent kan alleen doen wat de gebruikersinterface (UI) toelaat.

Je moet dus kiezen tussen de rommelige vrijheid van code of de beperkte controle van een BI-tool. Wij hebben een derde optie gebouwd.

Het ontbundelen van BI

Zoals Tristan Handy, oprichter van dbt Labs, onlangs schreef in BI’s Second Unbundling:

Wanneer ik in de data-wereld begon, waren BI-tools 'full-stack'. Alles gebeurde in één product: data-ingestie, transformatie, compute, caching, semantiek, visualisatie en identiteitsbeheer. De BI-tool was de data-stack (denk aan MicroStrategy, Cognos, etc.). Dit waren niet slechts visualisatietools, maar geïntegreerde dataplatforms.

Daarna kwam de modern data stack. Tussen 2015 en 2022 werden de infrastructuurlagen van dat BI-bundel losgekoppeld en omgezet in gespecialiseerde infrastructuur:

  • Compute ging naar de 'Big 5' cloudproviders.
  • Ingestie ging naar tools zoals Fivetran.
  • Transformatie ging naar dbt.

Wat overbleef voor de BI-tool was: visualisatie, interactieve analytische interfaces, (soms) semantische definities, identiteits- en toegangsbeheer en webhosting.

Dit is de BI-tool zoals we die nu kennen, waarbij charts het grootste onderdeel vormen. Deze bleven in de UI omdat klikken voor de meeste mensen sneller is dan het schrijven van YAML. Maar steeds meer charts worden niet meer door mensen gemaakt. Nu de front-end en de gebruiker van bijna alles een chat-agent worden, draait deze voorkeur om. Agents zijn vloeiend in code, SQL en Git, maar onhandig in de UI van iemand anders. Daarom moeten charts verhuizen naar de plek waar agents werken: in de code.

Charts verlaten de BI-tool

Vandaag zetten we de volgende stap in het ontbundelen van BI: we maken dbt Charts open source. Hiermee halen we charts uit de BI-tool en plaatsen we ze in code, specifiek in een nieuwe gestructureerde YAML-taal. Hiermee kan een volledig interactief dashboard worden gedefinieerd in één controleerbaar YAML-bestand. Door vrij te chatten met een agent, creëer je iets dat de vrijheid van code heeft, maar eenvoudig leesbaar blijft.

In dbt Charts blijft SQL de taal om te definiëren welke data je wilt zien, en we gebruiken YAML om te definiëren hoe je die wilt zien.

De taal is gedestilleerd tot een paar kernonderdelen die uitbreidbaar zijn, diepgaand in expressie, en eenvoudig te organiseren en lezen. Naast SQL wordt Markdown gebruikt voor de proza, en Jinja (net als in dbt) voor variabelen en macro's.

Voorbeeld

Hier is een klein voorbeeld met één variabele (een UI-filter), één query en één chart:

variables:
  status:
    column: main.documents.status

queries:
  doc_growth: |
    SELECT DATE_TRUNC('month', created_at) AS month,
    SUM(COUNT(*)) OVER (ORDER BY month) AS num_docs
    FROM main.documents
    WHERE {{ filter('status', status) }}
    GROUP BY 1

charts:
  growth:
    title: Documents created, all time
    type: area
    query: doc_growth
    x: month
    y: num_docs

rows:
  - growth

Dit bestand vormt het volledige dashboard. De CLI rendert elk board-bestand naar statische SVG, HTML, PNG, PDF of zelfs naar de terminal, direct op je laptop of in CI, en serveert een map met deze bestanden als een website:

dct render charts/documents.yml --format svg   # of html, png, pdf, terminal
dct serve

Deze elementen zijn zeer uitgebreid: er zijn momenteel meer dan 1.100 configuratie-opties, verdeeld over zestien chart-types en samengestelde charts. Zoals elke goede taal kan het complexe layouts en visuals uitdrukken.

Je stelt deze opties zelden handmatig in. Stijlen werken via een cascade: een chart erft van zijn board, het board van zijn thema, en een thema kan met één regel worden gewijzigd. Een board kan ook een ander board uitbreiden (extends), zodat een huisstijl of een standaardrapport één keer wordt geschreven en overal wordt overgenomen. Hierdoor blijven boards kort en is theming goedkoop.

Diepe integratie met dbt

Je hoeft dbt Charts niet te gebruiken binnen een dbt-project, maar als je dat wel doet, gaan er veel mogelijkheden open. De chart-laag rust direct op de transformatie-laag.

Met dbt Charts bevindt je charts/ directory zich naast je models/ in dezelfde Git-repo. Een wijziging in een model en de bijbehorende charts wordt dus in één branch verzonden, via één CI-run, en wordt gedetecteerd voordat het in productie terechtkomt.

Projectstructuur:

your_dbt_project/
├── .git/
├── dbt_project.yml
├── models/
└── charts/          # nieuwe map in een dbt repo voor je dashboards
    └── revenue.yml

Queries bereiken modellen via ref(), die worden opgelost vanuit je manifest. Een hernoemd model of een ontbrekende kolom zorgt dus voor een fout in de pull request voordat dbt run het warehouse opnieuw opbouwt:

dbt parse && dct validate charts/

Ondersteuning voor de dbt Semantic Layer is gepland, zodat een board een metriek kan gebruiken zoals deze in het project is gedefinieerd, in plaats van de SQL opnieuw te schrijven.

Gebouwd voor chat

Agents kunnen soms 'blind' zijn en werken het best met een strakke feedbackloop. dbt Charts biedt dit via strikte validatie van zowel de YAML als de SQL, en een uitgebreide set visualisatiecontroles die problemen signaleren voordat iemand het board ziet:

$ dct render charts/revenue.yml
WARN-BAR-BAND-WIDTH-TOO-NARROW
182 bands x 2 series across 640px
Fix: roll up to a coarser grain.

WARN-TABLE-COLUMNS-OVERFLOW
Table needs 980px but only 640px is available.
Fix: drop columns or widen the slot.

Een prachtig, samenhangend rapportagesysteem

We hopen dat dbt Charts, net als dbt, de open standaardtaal wordt voor zijn laag in de data-stack. We hebben het ontworpen voor een toekomst waarin mensen en AI samen bouwen.

Om dit te bereiken hebben we RJ Andrews (data graphic designer, auteur en historicus) gevraagd de charts te ontwerpen. Zijn kennis van de historie van het vak zorgt ervoor dat het resultaat vernieuwend voelt: het gaat terug naar de tijd dat charts met zorg met de hand werden getekend, voorbij het tijdperk van de standaard dashboards.

Veel tools maken gebruik van 'kaarten' en 'boxen' die uitlijning simuleren, wat vaak leidt tot visuele ruis en verloren ruimte. Wij hebben de spatiëring, sizing en layout van elke chart tot in detail uitgewerkt, zowel individueel als in combinatie met andere charts.

dbtCharts.com: Een BI-platform gebouwd op dbt Charts

Naast de open-source taal lanceren we vandaag dbtCharts.com in publieke bèta: een hosted platform voor de rest van BI. Nu de charts uit de tool zijn gehaald, blijft er hoofdzakelijk hosting, toegangscontrole en een UI over. Het platform beheert deze zaken bovenop de open-source taal.

De architectuur ziet er als volgt uit:

  1. Data: Je warehouse.
  2. Transformatie: dbt modellen.
  3. Chart-taal: dbt Charts (YAML en SQL, optioneel met Semantic Layer).
  4. BI-platform: dbtCharts.com (Hosting, Toegang, ChatUI).

Het platform verbindt met je warehouse en voegt conversationele analytics toe, een visuele editor voor de laatste hand, versiegeschiedenis en het delen met permissies voor gebruikers en groepen, zodat lezers geen warehouse-login nodig hebben.

En natuurlijk zijn deze charts gebouwd voor chat. Het platform heeft first-class conversationele analytics: vergelijkbaar met Claude of ChatGPT, maar met permissie-gebaseerde read-only toegang tot je warehouse en de ingebouwde vaardigheden van een expert-analist.

Eén board. Elke manier van werken.

Omdat het is gebouwd op een open taal, landt elke wijziging — of deze nu via chat, de visuele editor of code komt — in dezelfde YAML in je Git-repo. Niets zit vastgeketend (no lock-in): hetzelfde board draait op je laptop, in CI en op het platform. Teams kunnen self-serve werken met een agent in de hand, zonder een tweede, verborgen data-stack te creëren.

Probeer de bèta

De dbt Charts-taal is open source onder de Apache 2.0-licentie. Je kunt boards lokaal maken, renderen en serveren zonder een account aan te maken.

Installatie via Terminal:

uv tool install dbt-charts

Instructie voor Claude / AI: "Maak charts hiervan met dbt Charts. Begin met: uv tool install dbt-charts && dct skills intro"

  • Code: github.com/dbt-labs/dbt-charts
  • Docs: docs.dbtCharts.com
  • Hosted BI: dbtCharts.com
  • Community: #dbt-charts op de dbt Community Slack

dbt Charts is pre-1.0 en is nog in ontwikkeling. Wanneer de grammatica verandert, migreren boards tijdens het parsen, zodat de boards die je vandaag schrijft, renderen blijven doen. Probeer het uit, laat ons weten wat er ontbreekt en help ons bouwen aan de chart-laag waar open data-infrastructuur op heeft gewacht.