om{code}

// case

Een SaaS-portaal dat Microsoft-data bevraagbaar maakt

Klanten stellen in gewone taal een vraag over hun Power BI- of Dataverse-data en krijgen een antwoord met grafiek. Daarnaast draaien er governance-scans, automatische documentatie en bewaking van verversingen, elk als losse module met eigen abonnement.

opdrachtgever
omData
sector
Microsoft 365-dienstverlening
resultaat
8 losse modules, 22 tabellen, één platform

// beginsituatie

Waar het begon

omData helpt MKB-bedrijven met Microsoft 365, Power BI en Dataverse. Klanten hadden hun data op orde, maar het beantwoorden van een simpele vraag betekende nog steeds: een consultant bellen, een rapport laten aanpassen en dagen wachten.

De data zat in Power BI en Dataverse, maar wie geen DAX kon schrijven, kwam er niet bij. Elke vraag die niet in een bestaand rapport stond, werd een verzoek aan een adviseur.

Daarnaast liepen governance en documentatie achter de feiten aan. Wie welke rapporten mocht zien en of een verversing was gelukt, ontdekte je meestal pas als er iets misging.

// de rol van AI

AI vertaalt de vraag van een mens naar een query. Het rekent niet en het beslist niet.

Dit is de kern van het portaal. Een medewerker typt 'hoeveel omzet deden we vorig kwartaal in het noorden' en krijgt een antwoord met grafiek. Daartussen zit precies één AI-stap, en die is bewust zo klein mogelijk gehouden.

waar AI het werk doet

  1. 1

    Vraag omzetten naar een query

    Het model vertaalt de vraag in gewone taal naar een DAX- of OData-opdracht. Het krijgt daarbij de structuur van de dataset mee, niet de data zelf. Wat eruit komt is een voorstel, geen uitvoering.

    Mistral of Claude, afhankelijk van de gekozen regio

  2. 2

    Antwoord teruggeven in gewone taal

    De uitkomst van de query wordt teruggeschreven als leesbare zin, met een suggestie voor het meest passende type grafiek. Het model ziet daarbij alleen het resultaat, niet de onderliggende rijen.

    Mistral of Claude

  3. 3

    Documentatie schrijven

    Voor de documentatiemodule beschrijft het model datasets, tabellen en rapporten in gewone taal, zodat een nieuwe collega snapt wat er staat zonder de techniek in te duiken.

    Claude

wat bewust geen AI is

De validator
Gewone code, geen model. Die controleert of de voorgestelde query alleen leest en weigert alles wat schrijft of verwijdert. Een model laten bewaken of een ander model zich gedraagt, is geen beveiliging.
Alle statistiek
Trends, uitschieters en voorspellingen berekenen we in eigen code met testdekking. Taalmodellen zijn goed in taal en onbetrouwbaar in rekenen; het verschil tussen 12 en 1,2 procent zie je in een vloeiende zin niet terug.
Het maskeren van gevoelige kolommen
Dat gebeurt vóór het model, in de code. Het model vragen om gevoelige gegevens te negeren is hopen, geen garantie.
De keuze voor Europese of wereldwijde AI
Technisch afgedwongen in de database, niet als vinkje in een scherm. Zo kan een verkeerde instelling niet leiden tot data die alsnog de verkeerde kant op gaat.

en de mens dan?

De gebruiker stelt de vraag en ziet de query die eruit rolt. Wie wil, kan die controleren voordat hij op het antwoord vertrouwt. Bij twijfel over een cijfer klik je door naar de onderliggende gegevens.

// aanpak

Hoe we het aanpakten

1

Eén module eerst

We begonnen met alleen de chat op Power BI-data. Pas toen die betrouwbaar bleek, kwamen de governance-scan, de documentatiegenerator en de bewaking van verversingen erbij.

2

De vraag vertalen, niet raden

De AI zet een vraag om naar DAX of OData. Een validator laat daarna alleen leesopdrachten door. Zo kan een verkeerd begrepen vraag nooit iets wijzigen.

3

Rekenwerk zelf doen

Trends, afwijkingen en voorspellingen berekenen we in eigen geteste code. Een taalmodel is goed in taal, niet in rekenen, en dat verschil bepaalt of je de uitkomst kunt vertrouwen.

4

Losse abonnementen

Elke module heeft een eigen abonnement via Stripe, zodat een klant klein kan beginnen en alleen betaalt voor wat hij gebruikt.

// resultaat

Wat het opleverde

8

modules met een eigen abonnement

22

tabellen onder één platform

0

schrijfopdrachten die het model kan uitvoeren

  • Chat die een vraag omzet naar DAX of OData, met een validator die alleen leesopdrachten doorlaat
  • Gevoelige kolommen worden gemaskeerd voordat er iets naar een AI-model gaat
  • Statistiek (trend, afwijkingen, voorspelling) in eigen geteste code, niet overgelaten aan het model
  • Microsoft-koppeling op drie niveaus, met versleutelde tokens en toestemming per stap
  • Keuze tussen Europese of wereldwijde AI, technisch afgedwongen in de database

// architectuur

De technische keuzes

Microsoft-koppeling
Drie niveaus van toegang, met versleutelde tokens en toestemming per stap. De klant ziet precies waarvoor hij toestemming geeft, in plaats van één brede machtiging aan het begin.
Vraag naar query
Het model stelt een DAX- of OData-opdracht voor; een validator controleert die op leesbaarheid en weigert alles wat schrijft of verwijdert.
Statistiek
Trendlijnen, uitschieters en voorspellingen draaien in eigen code met testdekking, niet in het taalmodel.
Modulaire opbouw
Acht modules over 22 tabellen, elk met eigen rechten en abonnement, maar op één gedeelde basis.

// veiligheid en privacy

Wat we hebben dichtgezet

  • Gevoelige kolommen worden gemaskeerd voordat er iets naar een AI-model gaat
  • Keuze tussen Europese of wereldwijde AI, technisch afgedwongen in de database in plaats van als instelling in een scherm
  • Alleen leesopdrachten komen langs de validator, dus een model kan niets muteren
  • Tokens versleuteld opgeslagen, toestemming per koppelingsniveau

// wat we leerden

Eerlijk achteraf

01

Gemeten met Lighthouse op een productiebouw, drie paginasoorten: 96 tot 100 op prestaties, 100 op toegankelijkheid, best practices en SEO. Op desktop blijft toegankelijkheid op 96 staan door het decoratieve codevenster, waarin de nog niet getypte regels expres nauwelijks zichtbaar zijn.

02

De verleiding is groot om het model ook te laten rekenen. Dat scheelt code en kost betrouwbaarheid; wij hebben die keuze bewust andersom gemaakt.

03

Toestemming per stap vragen voelt omslachtiger dan één brede machtiging, maar het is precies wat klanten over de streep trok.

04

Beginnen met één module hield het project overzichtelijk. Alle acht tegelijk ontwerpen had maanden gekost voordat er iets bruikbaars stond.

// dit is wat we doen

Diensten die hier samenkwamen

// meer werk

Andere cases

Zoiets bouwen voor jouw bedrijf?

Vertel in een half uur wat er bij jullie speelt. Je hoort of een vergelijkbare aanpak past en wat die ongeveer kost.