Sådan gjorde jeg det muligt for ikke-tekniske kolleger at trække data direkte fra vores database
Læs om hvordan chat applikationer, som CoPilot, nemt kan bruges til at lave SQL forespørgsler, der normalt kræver specialiseret forretningsviden
Ét problem, mange varianter
“Jeg skal bruge en liste over alle ulykkesforsikringer med stillingskoden Studerende. Kan du ikke lige trække den for mig?“
Den type henvendelse er velkendt i udviklings- og BI-teams. Det tager ikke alverden at lave, men det afbryder og tager fokus fra andre opgaver. Samtidig er det frustrerende for kolleger, at vente på en anden får tid til at løse opgaven – især når det, de mangler, kun er detaljerne: hvordan tabellerne hænger sammen, hvad felterne betyder, og hvordan er det nu lige man skriver korrekt SQL til en linked DB2-server?
Jeg besluttede mig for at finde en smartere løsning. Svaret blev: Microsoft 365 CoPilot – kombineret med en simpel, struktureret dokumentation. Valget faldt på CoPilot, fordi virksomheden allerede har valgt det som sin chatplatform for medarbejderne, og det kører på virksomhedens egen Microsoft 365-tenant. Det betyder, at information om vores databasemodel og forretningslogik bliver behandlet sikkert og fortroligt, uden at forlade virksomhedens domæne.
Vi tager altså en teknologi der er let tilgængelig, men sikker, og udvider den med vores specifikke dokumentation. At tilføje relevant kontekst er en vigtig kompetence at kunne, når vi anvender AI-assistenter. Uden den rette viden, opfører AI’en sig som en junior-medarbejder uden viden om vores forretning. Bruger vi ofte den samme viden, som her er viden om vores database og hvordan data er struktureret deri, kan vi skrive dette i et dokument sammen med instruktioner i hvordan vi ønsker at AI’en skal opføre sig. Jeg tilføjede eksempelvis hvordan vi opsætter Excels Data-import imod vores database, og instruerer den i altid at foreslå brugeren, at hjælpe med opsætningen af Excel.
Det viser sig at det er hurtigt at skrive en vejledning og vedlægge den i en chat for at prøve den af. Jeg kunne så blive ved med at forbedre på den, indtil den blev god til at løse forskellige opgaver. Og ja, det tog en lille dag at gennemføre denne del, men til gengæld kan både jeg og andre nu etablere et nyt udtræk på få minutter ved hjælp af min egen AI-assistent. Og dette uden viden om hvordan man udvikler AI-værktøjer eller behov for at udvikle eller indkøbe en IT-løsning.
Lidt kontekst, og CoPilot kan meget mere
Chatbaserede AI-værktøjer som CoPilot og ChatGPT er blevet dygtige til at løse specifikke opgaver, men de mangler den lokale forretningsviden, der gør svaret rigtig brugbart. Hvad nu hvis vi leverede den viden til modellen, som et slags “AI-kompendium”?
Ved at lave et dokument, som kan vedlægges i en CoPilot-chat, kan vi levere denne viden.
I vores situation har vi beskrevet:
- Hvordan man forbinder til vores server
- Hvilke tabeller og produkter der findes
- Hvordan tabellerne flettes sammen med et join, og hvad kolonnenavne som “første lange felt” dækker over
- Eksempler på gode (og dårlige) SQL-kald via OPENQUERY
- Tips, tricks og forretningsregler
Dokumentet indeholder ikke hemmeligheder eller loginoplysninger og kan bruges af enhver, der allerede har adgang til BI-databasen – dokumentet har vi delt på serveren så alle kan tage fat i den og bruge den i en chat.
Fordi GPT-4o, som er sprogmodellen bag ved CoPilot, er vild med tekniske dokument-formater, har jeg lavet guiden i markdown. Det gør den nem at læse både for AI og for mennesker. Du kan folde den ud her, hvis du vil se eksempel på, hvordan jeg byggede det op.
# Guide til at finde data i vores forsikringsdatabase
Dette dokument hjælper dig med at forstå, hvordan du kan hente data fra vores forsikringsdatabase via SQL-forespørgsler. Formålet er, at du i klar tekst kan bede en AI-assistent om at lave SQL, som virker på vores system.
---
## 1. Forbindelse til databasen
- Database-server: **SQLSERVER_BI01**
- Linked database: **DB2SERVER**
- Database: **InsuranceDB**
- Testdatabase: **TestInsuranceDB**
- Forbindelsen sker via vores BI-værktøj med navnet **BI_Connect_Prod**
- Brug "Advanced SQL" i Excel til at indsætte dine SQL-forespørgsler.
---
## 2. Vigtige tabeller
| Tabelnavn | Beskrivelse |
|-----------|---------------------------------|
| CUST01 | Kundetabel med persondata |
| PRDPO1 | Policetabel med grunddata |
| PFPOBJ | Objekter tilknyttet policer |
| BSNBND | Dækninger (bundles) til policer |
### 2.1 Produkter
| Produktkode | Produktnavn |
|-------------|---------------------|
| ULY | Ulykkesforsikring |
| HUS | Husforsikring |
| BIL | Bilforsikring |
| INDBO | Indboforsikring |
---
## 3. Centrale felter i tabellerne
### 3.1 PRDPO1 (Policer)
| Felt | Beskrivelse | Datatype |
|---------|----------------------------|-----------|
| POPONR | Policenummer (unik) | VARCHAR |
| POPOVS | Versionsnummer | INT |
| POPROD | Produktkode (fx 'ULY') | VARCHAR |
| PODESC | Produktbeskrivelse | VARCHAR |
---
### 3.2 PFPOBJ (Objekter)
| Felt | Beskrivelse | Datatype |
|---------|-----------------------------|----------|
| OBPONR | Policenummer (foreign key) | VARCHAR |
| OBPOVS | Versionsnummer (foreign key)| INT |
| OBJTYPE | Objekt-type (fx 'Bil') | VARCHAR |
| OBREGNR | Registreringsnummer (fx bil)| VARCHAR |
---
### 3.3 BSNBND (Dækninger)
| Felt | Beskrivelse | Datatype |
|---------|----------------------------|-----------|
| BNBONR | Policenummer | VARCHAR |
| BNBTYPE | Dækningstype | VARCHAR |
---
**Performance-tip:**
For at sikre god performance på forespørgsler mod vores DB2-server, skal du som udgangspunkt bruge `OPENQUERY` når du henter data via linked server. Det hjælper med at køre SQL direkte på DB2-serveren og minimerer datatransport.
Eksempel:
```sql
SELECT * FROM OPENQUERY(DB2_LINKED_SERVER, 'SELECT ... FROM PRDPO1 WHERE ...')
```
---
## 4. Hvordan tabellerne hænger sammen (Joins)
- PRDPO1 (policer) forbindes med PFPOBJ (objekter) på `PRDPO1.POPONR = PFPOBJ.OBPONR` og `PRDPO1.POPOVS = PFPOBJ.OBPOVS`
- BSNBND kan kobles til PRDPO1 på `BSNBND.BNBONR = PRDPO1.POPONR`
- Joins skal altid inkludere versionsnummeret (`POPOVS` og `OBPOVS`) for at sikre korrekt version af data.
---
## 5. SQL-funktioner, der skal undgås
- Undgå brug af `INSERT`, `UPDATE`, og `DELETE` – vi har kun SELECT adgang.
- Undgå komplekse funktioner som `CURSOR`, `TEMP TABLES` og visse DB2-specifikke funktioner, da de ikke understøttes via OpenQuery.
---
## 6. Tips og tricks
- Brug altid `JOIN` med både policenummer og versionsnummer.
- Hvis du vil filtrere på et bestemt produkt, kig efter `PRDPO1.POPROD` (produktkode).
- Begræns resultatet med `TOP 100` for hurtigere svar, især under udvikling.
- Hvis du vil hente data til Excel, brug BI-værktøjets mulighed for “Advanced SQL” og indsæt din forespørgsel der.
---
## 7. Eksempler på SQL-forespørgsler
### 7.1 Find alle policer med et bestemt produkt
```sql
SELECT TOP 100 POPONR, POPOVS, POPROD, PODESC
FROM PRDPO1
WHERE POPROD = 'ULY' -- Ulykkesforsikring
```
### 7.2 Find objekter til en given police, hvor objektetype er 'Bil'
```sql
SELECT OBPONR, OBPOVS, OBJTYPE, OBREGNR
FROM PFPOBJ
WHERE OBPONR = '123456789' AND OBPOVS = 1 AND OBJTYPE = 'Bil'
```
---
## 8. Opsummering
Med denne guide kan du formulere klare forespørgsler, som AI-assistenten kan forstå og bygge SQL for dig. Guiden hjælper dig til hurtigt at finde præcis de data, du har brug for i vores forsikringsdatabase, uden at skulle være ekspert i SQL eller kendskab til den komplekse datamodel.
---
*Bemærk:* Login og adgang styres via vores Active Directory og er ikke del af denne guide.
Hvad brugeren gør
Brugeren kan nu bruge CoPilot til at lave SQL forespørgsler. I stedet for at ringe til udviklingsteamet, åbner vedkommende CoPilot, vedlægger dokumentet i chatten og skriver:
“Lav en SQL der giver mig alle ulykke policer, som har stillingen Studerende i første lange felt.”
Det, der sker derefter, er næsten magisk:
- CoPilot identificerer at “ULY” er produktkoden for ulykkesforsikringer
- Finder i dokumentet at “første lange felt” refererer til kolonnen
STILLINGSKODEi KUNDER-tabellen - Ved hvordan tabellerne joines korrekt, og hvordan en
OPENQUERYskal struktureres
Resultatet er en køreklar SQL-forespørgsel, som kan indsættes direkte i Excel og returnerer det ønskede datasæt. Dokumentet har også den viden der skal til, for at kunne instruere brugeren i at sætte forespørgslen ind i Excel som en data-forbindelse.
SELECT *
FROM OPENQUERY(DB2SERVER, '
SELECT p.POPONR AS Policenr, k.T0CUNO AS Kundenr, k.T0NAMN AS Navn, k.T0JBC1 AS Stillingskode, p.POPROD AS Produktkode
FROM PRDPO1 p
JOIN CUST01 k ON p.POCUNO = k.T0CUNO
WHERE p.POPROD = ''ULY''
AND k.T0JBC1 = ''UDD1''
')
Vi kan stille AI’en opfølgende spørgsmål, eller give den mere konkret viden, hvis den ikke løser opgaven helt som ønsket i første omgang. Naturligvis kan vi stille den spørgsmål der kræver at den forstår sammenhænge i databasen der er svære at beskrive, men den kan klare en lang række opgaver til UG.
Det er endnu en fordel, at vi kan forklare fejl vi oplevere i chatten og få CoPilot til at rette forespørgslen eller forklare den i detaljer. På den måde kan vi blive ved indtil det virker, og så siden opdatere dokumentationen med det nye fungerende eksempel, så CoPilot kan lære af det til næste gang.
Hvorfor det virker
Det virker, fordi vi kombinerer to typer viden:
- Generel teknisk forståelse i CoPilot (Excel, SQL, DB2, joins, OpenQuery, etc.)
- Specifik forretningsviden via vores dokument (navngivning, regler, praksis, databaseadgang)
Jeg giver CoPilot den kontekst, den skal bruge for at være virkelig brugbar i vores virkelighed. Det giver én umiddelbar effekt:
Kolleger, der før skulle bruge en dag på at finde de rette felter og spørge om hjælp, kan nu selv lave spørgsmål i klartekst og få svar på få minutter.
Det åbner for mere
Løsningen er i brug som en del af et migreringsprojekt, hvor vi har brug for mange mindre dataudtræk. Men metoden kan overføres til mange andre situationer:
- Udviklere kan hurtigt lave prototyper på dataudtræk
- Controllere der selv vil lave datasøgninger i Excel
- Projektledere der vil validere data uden at belaste BI
- Almindelige brugere, kan hurtigt bygge deres egen AI-assistent,
blot ved at samle deres viden i et dokument og benytte det i chats.
Det kræver kun, at vi stiller vores viden til rådighed i en form, som AI’en kan forstå og bruge. Det begrænser sig ikke kun til CoPilot SQL forespørgsler, men kan også anvendes på mange andre typer af arbejdsgange eller guidelines, der skal indgå i indhold vi producerer jævnligt.
Konklusion
Teknologi med omtanke
Det handler ikke om at erstatte mennesker eller specialister. Det handler om at frigive tid, og gøre vores viden tilgængelig for andre.
Ved at tænke lidt ud af boksen, har jeg skabt en løsning der virker nu – uden at skulle bygge vores egen chat-agent eller etablere et større BI-projekt. Bare ved at kombinere det vi allerede har: vores viden, vores data og en AI-assistent med adgang til begge dele.