Bouw je Enterprise IQ
Eén gedeelde taal voor je bedrijf die mensen, apps en AI-agents begrijpen.
Een agent kan je tabellen lezen en je bedrijf toch verkeerd begrijpen. In dit salesmodel betekenen 542 rijen niet 542 orders. Het zijn 542 orderregels verdeeld over 32 orders. Precies dat onderscheid moet een ontologie helder maken.
Ik gebruikte de nieuwe Fabric-ontologie-ervaring en de Ontology Agent om een bestaand Power BI-semantisch model om te zetten in expliciete bedrijfsconcepten, metrics met een bronverwijzing en een gedeelde salesregel. Geen nieuwe omzetformule. Geen tweede dataplatform. En geen aanname dat een mooi relatiediagram de cijfers bewijst.
Wat verandert er, en wat niet?
Een Fabric IQ-ontologie legt de bedrijfstaal vast: entiteiten, eigenschappen, relaties, metrics, regels en hun bronverwijzingen. De vernieuwde ontologie-ervaring breidt die taal uit met functies als namespaces, overerving, gedeelde eigenschappen en measures die eigendom blijven van het semantische bronmodel.
Ik gebruik “ontology v2” als informele naam voor die nieuwe ervaring, niet als API-versie. Deze walkthrough behandelt één salesdomein. Het is een bruikbaar begin voor Enterprise IQ, geen bewijs dat elke applicatie of agent in een organisatie de ontologie automatisch begrijpt.
De ontologie vervangt geen warehouse en is geen algemene query-engine. De salesdata blijft in de bestaande bron. Het semantische bronmodel blijft eigenaar van de DAX. Een graaf materialiseren is optioneel; het schemadiagram hieronder bewijst niet dat er een instance graph is geladen.
Bron en machtigingen voorbereiden
Ik hergebruikte de workspace SalesAnalytics en het bestaande model SalesAnalytics_Model. Alle data in dit voorbeeld is synthetisch en gebaseerd op AdventureWorks of vergelijkbare demodata. Voor deze bedrijfscontextlaag is geen real-time stream nodig.
- Gebruik een workspace op Fabric-capaciteit.
- Vraag je beheerder om Users can create Fabric items en Users can create ontology (preview) items in te schakelen.
- Gebruik Contributor of hoger om te schrijven, plus Read and Build op het semantische bronmodel.
- Om de oorspronkelijke DAX van een metric te bekijken is ook Write op het semantische bronmodel nodig. Geef niet iedere gebruiker beheerdersrechten.
De agent handelt namens jou. Toegang tot de ontologie geeft geen toegang tot de gekoppelde bronnen en omzeilt hun beveiliging niet. Ik gebruikte mijn demo-beheerdersaccount voor de configuratie, niet als aanbevolen patroon voor productie.
Ken de korrel voordat je een prompt schrijft. Mijn bron heeft zeven tabellen, 69 kolommen en 17 measures. De facttabel heeft de korrel orderregel; de orderdimensie bevat de orderheader.
| Brontabel | Bedrijfsconcept | Sleutel |
|---|---|---|
fact_salesorder | Sales Order Line | SalesOrderDetailID |
dim_order | Sales Order Header | SalesOrderID |
dim_customer | Customer | CustomerID |
dim_product | Product | ProductID |
dim_salesperson | Salesperson | SalesPersonKey |
dim_orderdate | Order Date | date_key |
dim_shipdate | Ship Date | date_key |
Jouw AdventureWorks-transformatie kan andere namen, aantallen of sleutels gebruiken. Vervang het model door je eigen model en controleer de relaties. De resultaten in dit artikel zijn een referentie voor deze demo, geen universele AdventureWorks-totalen.
De nieuwe ontologie maken
Kies in de workspace New item, zoek naar Ontology (preview) en open het item. Vul EnterpriseIQ_Sales in, controleer de workspace en kies Create.
Het inrichten duurde in mijn uitvoering ongeveer twee minuten. Ik wachtte tot het item klaar was in plaats van een tweede item te maken. Daarna toonde de portal You are in the new experience.
Gebruik voor deze walkthrough de portal. Volgens Microsoft gebruiken nieuwe items die via de Fabric-UX zijn gemaakt de nieuwe ervaring, terwijl oudere API- en CI/CD-routes nog items in de oude ervaring kunnen opleveren. Een ouder JSON-voorbeeld voor ontologieën hergebruiken is niet hetzelfde experiment.
Kies “Start with Ontology agent”
Kies in het lege item Start with Ontology agent. Dit is de route die ik gebruikte, in plaats van zeven entiteiten handmatig te tekenen.
Laat de agent in de modus Plan. De agent kan ontdekken, concepten opstellen, valideren, uitleg geven en query's uitvoeren, maar geen wijzigingen toepassen. Daarvoor is Act nodig.
Dit was mijn prompt om de bron te verkennen. Hij noemt de bron, stelt grenzen en legt het bedrijfsbegrip uit dat de agent niet zelf moet invullen:
Build a sales ontology for the AdventureWorks demo using only SalesAnalytics_Model in this workspace. Stay in Plan mode: discover, draft and validate, but do not apply yet.
Reuse the model's seven tables and six existing relationships, calculated columns and all DAX measures as metrics. Preserve the source model and data unchanged.
Make the business meaning explicit: fact_salesorder is an order LINE, not one row per order; dim_order is the order header; dim_customer and dim_product describe the customer and product. Keep dim_orderdate and dim_shipdate distinct.
Use friendly names where possible, with clear source mappings and original stable identifiers. For sales questions reuse Total Sales, Total Orders and Avg Order Value; do not sum repeated header amounts or invent a new revenue formula.
Show the proposed entities, keys, relationships, metrics and validation warnings, and provide a canvas preview before applying.
Een gerichte prompt is nuttiger dan een poëtische. Deze workspace bevat ook lakehouses, een warehouse en andere experimenten. “Gebruik alles” zou een heel andere opdracht zijn geweest.
Controleer de betekenis, niet alleen de vinkjes
De agent ontdekte het volledige model en vond zeven entiteitstypen, zes relaties en alle 17 metrics. De validatie meldde geen waarschuwingen.
De gedocumenteerde agentflow kan ook een alleen-lezen canvas-preview tonen. Open die als de optie verschijnt en controleer daar eigenschappen, bronkoppelingen en relaties. De suggesties en preview kunnen per uitvoering verschillen.
Ik controleerde vier dingen: de sleutel van de orderregel was SalesOrderDetailID, niet het herhaalde ordernummer; alle zes bronrelaties waren aanwezig; Order Date en Ship Date bleven aparte rollen; en salesberekeningen verwezen naar bestaande measures.
Structurele validatie is geen financiële goedkeuring. Deze bron bevat ook measures met de namen Total SubTotal, Total Tax, Total Freight en Total Due die kolommen uit de facttabel met orderregels optellen. Bedragen op headerniveau kunnen op meerdere orderregels terugkomen. Een measure importeren bewijst niet dat de aggregatie klopt.
Lees ook de gegenereerde beschrijvingen. Een aannemelijke term als “toegerekende vrachtkosten” bewijst niet dat die kosten upstream werkelijk zijn toegerekend. Markeer onduidelijke betekenissen als onzeker totdat de broneigenaar ze bevestigt.
Het gecontroleerde concept toepassen
Zet de schakelaar op Act en vraag de agent vervolgens expliciet om het afgebakende concept toe te passen:
Apply the validated AdventureWorks sales ontology draft now. Only update this EnterpriseIQ_Sales ontology.
Preserve all seven source table bindings, six source relationships and 17 source-owned metrics, friendly names and the distinct date roles as reviewed.
Do not modify any source model or data. Confirm the applied entity/relationship/metric counts and whether the definition was persisted.
De agent bevestigde dat de definitie was opgeslagen. De lege Get started-pagina veranderde in het ontologiecanvas. Ik las de opgeslagen definitie ook terug via de Fabric API: die bevatte zeven entiteitsdefinities, zes relaties en metrics met bronkoppelingen. Dit was niet langer alleen een voorstel in de chat.
“Publish” betekent in deze agentflow dat de ontologiedefinitie in Fabric wordt opgeslagen. Je data of dit artikel wordt daarmee niet op internet gepubliceerd.
Inspecteer een metric, verzin geen omzetberekening
Selecteer Sales Order Line, open View Entity Type details en zoek op Configure naar de sectie Metrics. Deze entiteit heeft er 17 omdat de measures uit de bron op fact_salesorder staan.
Zoek naar Total Sales, open de metric en kies Resolve underlying DAX in het gedeelte Expression. De eerste resolutie duurde in mijn uitvoering langer. De teruggegeven expressie was de bestaande measure uit de bron:
Total Sales = SUM(fact_salesorder[LineTotal])
Total Orders = DISTINCTCOUNT(fact_salesorder[SalesOrderID])
Avg Order Value = DIVIDE([Total Sales], [Total Orders])
Ontologiemetrics verwijzen naar measures uit de bron. Het bronmodel beheert de berekening; de ontologie voegt context en een bronkoppeling toe. Wijzigingen in de bron zijn niet overal automatisch zichtbaar: vernieuw de ontologie wanneer je gewijzigde measures controleert.
Stel een bedrijfsvraag en bekijk daarna de query
Open vanuit Home opnieuw Ontology agent en ga terug naar Plan. Query's uitvoeren vereist geen Act-modus. Vraag om bewijs, niet alleen om een antwoord:
Run a read-only post-create validation against the saved ontology and its bound SalesAnalytics_Model.
Across all available data, with no current-date filter, what are Total Sales, Total Orders and Avg Order Value? Reuse exactly those source measures.
Also report the sales order line row count, distinct SalesOrderDetailID count, first and last OrderDate. Show the DAX query actually executed and the returned values.
Explain why sales order line count is not order count, and why Order Date and Ship Date stay separate. Do not change the ontology or source. Do not infer currency.
De agent voerde DAX uit en gaf voor de drie bedrijfsmetrics dezelfde waarden terug als mijn onafhankelijke query op het bronmodel.
| Controle | Waargenomen resultaat | Wat dit aantoont |
|---|---|---|
| Total Sales | 708,690.153 | Komt overeen met de bronmeasure |
| Total Orders | 32 | Het aantal orders is niet het aantal orderregels |
| Avg Order Value | 22,146.5673 | Komt overeen met de bestaande berekening in de bron |
| Rijen / unieke orderregelsleutels | 542 / 542 | De gekozen sleutel is in deze steekproef uniek |
| Periode van Order Date | Alleen 1 juni 2025 | Een actueel filter voor “de laatste 30 dagen” zou deze steekproef missen |
Ik heb de waarden in de eenheden van de bron gelaten en geen zakelijke valuta afgeleid uit de opmaak. Dit is bovendien een kleine demo van één dag. De resultaten zeggen niets over prestaties, seizoenspatronen of gedrag in een productieomgeving.
De DAX die de agent daadwerkelijk uitvoerde
EVALUATE
ROW(
"Total Sales", CALCULATE([Total Sales], REMOVEFILTERS()),
"Total Orders", CALCULATE([Total Orders], REMOVEFILTERS()),
"Avg Order Value", CALCULATE([Avg Order Value], REMOVEFILTERS()),
"Sales Order Line Row Count", COUNTROWS('fact_salesorder'),
"Distinct SalesOrderDetailID Count",
DISTINCTCOUNT('fact_salesorder'[SalesOrderDetailID]),
"First OrderDate", MIN('fact_salesorder'[OrderDate]),
"Last OrderDate", MAX('fact_salesorder'[OrderDate])
)
De drie metrics verwijderen expliciet de filtercontext van de query. Dat verwijdert geen bronbeveiliging, zoals beveiliging op rijniveau. De overige controles staan in de zelfstandige query hierboven en bevatten geen filters.
Drie praktische vragen aan Copilot
Daarna schakelde ik over naar Act en stelde ik de Ontology Agent drie gewone salesvragen. Copilot voerde DAX uit op SalesAnalytics_Model en gebruikte daarbij de ontologieconcepten Order Date, Customer en Product. Als onafhankelijke controle voerde ik vergelijkbare DAX rechtstreeks uit op het bronmodel. De rijen en waarden kwamen overeen.
| Vraag | Resultaat van Copilot | Onafhankelijke DAX |
|---|---|---|
| Total Sales, Total Orders en Avg Order Value per jaar van Order Date | 2025: $708,690.15; 32 orders; gemiddelde orderwaarde $22,146.57. Alleen 2025 kwam terug. | Exact gelijk |
| Welke vijf klanten genereerden de hoogste Total Sales? | Action Bicycle Specialists ($89,869.28); Metropolitan Bicycle Supply ($79,589.62); Bulk Discount Store ($74,160.23); Eastside Department Store ($65,683.37); Riding Cycles ($65,123.46). | Dezelfde vijf klanten, waarden en volgorde |
| Welke productcategorieën genereerden de meeste Total Sales? | Bikes ($574,611.56); Components ($111,075.73); Clothing ($16,087.72); Accessories ($6,915.14). Het model bevat vier categorieën, geen vijf. | Dezelfde vier categorieën, waarden en volgorde |
Dit zijn de prompts die ik daadwerkelijk in Act-modus heb verstuurd. Ze zijn in het Engels, net als in de uitgevoerde tests. Je kunt ze naar je eigen Ontology Agent-gesprek kopiëren:
Using the source-bound metrics in this ontology, show Total Sales, Total Orders, and Avg Order Value by Order Date year. Identify the year with the highest Total Sales. Use the canonical measures, not a line-row count or repeated order-header amount.
Which five customers generated the highest Total Sales? Return each customer's CompanyName and Total Sales, sorted from highest to lowest. Use the Customer relationship and the canonical Total Sales measure.
Which product categories generated the most Total Sales? Show CategoryName and Total Sales, sorted from highest to lowest, and return the top five categories. Use the Product relationship and the canonical Total Sales measure.
De onafhankelijke DAX-controles
Deze query's gebruiken dezelfde measures en dimensies uit de bron. Het dollarteken komt uit de opmaak van het semantische model en bewijst niets over de zakelijke valuta van een klant.
EVALUATE
SUMMARIZECOLUMNS(
'dim_orderdate'[year],
"Total Sales", [Total Sales],
"Total Orders", [Total Orders],
"Avg Order Value", [Avg Order Value]
)
ORDER BY 'dim_orderdate'[year]
EVALUATE
TOPN(
5,
SUMMARIZECOLUMNS(
'dim_customer'[CompanyName],
"Total Sales", [Total Sales]
),
[Total Sales], DESC
)
ORDER BY [Total Sales] DESC
EVALUATE
SUMMARIZECOLUMNS(
'dim_product'[CategoryName],
"Total Sales", [Total Sales]
)
ORDER BY [Total Sales] DESC
Vraag de ontologie aan vanuit Microsoft 365 Copilot
Dezelfde ontologie kan nu worden gebruikt vanuit de native Microsoft 365 Copilot-ervaring. Dit is niet Copilot Studio: ik publiceerde de Fabric Data Agent, liet Work IQ aanstaan en selecteerde EnterpriseIQ_Sales_Copilot uit de Microsoft 365 Copilot Agent Store. De agent is gebaseerd op EnterpriseIQ_Sales, niet op een losse prompt over het semantische model.
- Open Microsoft 365 Copilot met het account dat toegang heeft tot de Fabric-werkruimte.
- Open Agents, kies EnterpriseIQ_Sales_Copilot en laat Work IQ ingeschakeld.
- Stel een gewone zakelijke vraag in het Engels of Nederlands.
Ik vroeg bijvoorbeeld: What were total sales by year? Copilot gaf 2025: $35.854.355,90. Daarna vroeg ik welke klanten de meeste omzet genereerden; het antwoord rangschikte de klanten via de Customer-relatie en de canonieke TotalDue-maatstaf.
De Nederlandstalige route werkt ook. Dezelfde agent beantwoordde Welke klanten genereerden de meeste omzet? in het Nederlands en gaf dezelfde rangschikking terug, met gelokaliseerde getalnotatie.
Haal de salesregel uit de chat
Een goede prompt is nuttig. Een bedrijfsdefinitie die verdwijnt zodra het gesprek eindigt, is dat minder. Ik voegde een regel toe aan de ontologie zodat de bedoelde interpretatie bij de concepten wordt opgeslagen.
- Klap in Explorer Overview open en selecteer Rules.
- Kies Create rule en vul
Sales grain and canonical metricsin. - Plak de definitie hieronder.
- Kies Add concept en selecteer op het tabblad Entity types de concepten Sales Order Line, Sales Order Header, Order Date en Ship Date. Sla de selectie op.
- Kies Save op de regelpagina. Open de regel opnieuw en controleer of de definitie en koppelingen zijn opgeslagen.
Sales Order Line represents one order line, not an entire Sales Order Header. Sales reporting must use the source measures Total Sales, Total Orders and Avg Order Value. Do not use line row count as order count or sum repeated header amounts across lines. Order Date and Ship Date represent different business events and must remain distinct.
Een regel geeft context, maar voert niets uit. Ontology dwingt deze regel niet af, blokkeert geen onjuiste DAX-query en verstuurt geen waarschuwing. Gebruikers en agents moeten de regel ophalen en toepassen. De nieuwe ervaring biedt momenteel geen directe integratie met Activator. De metrictest hierboven vond plaats voordat deze regel werd toegevoegd en bewijst dus niet dat de regel het gedrag van de agent heeft veranderd.
Grenzen van de preview die ertoe doen
Ontology Agent is niet hetzelfde als Fabric Data Agent. Ik testte de agent in het ontology-item zelf. De actuele probleemoplossingsdocumentatie noemt een bekend probleem waarbij een afzonderlijke Data Agent een ontologie met semantische-modelkoppelingen gebruikt. Ik heb de bestaande salesagent niet gekoppeld en beweer dus niet dat die route werkt.
Het gesprek is tijdelijk. Tijdens de preview beëindigt het vernieuwen van de pagina of sluiten van het tabblad het agentgesprek. Een gesprek kan ook niet langer dan 24 uur doorgaan. Bewaar bruikbare prompts en sla gecontroleerde definities op. Gebruik de chatgeschiedenis niet als versiebeheer.
Controleer je eigen uitrol. Dit is getest op 17 oktober 2026. Het item, de agent en de documentatie zijn previewfuncties. Labels, suggesties en beschikbaarheid kunnen veranderen. Ontbreekt de nieuwe ervaring of agent, controleer dan tenantinstellingen, machtigingen en bekende problemen voordat je terugvalt op oudere instructies.
Voor een ander Fabric IQ-scenario beschrijft mijn praktische gids voor Plan in Microsoft Fabric hoe je input en writeback voor planning aanpakt. Dat is iets anders: een ontologie biedt bedrijfscontext, geen bewerkbare planningstabel.
Reproduceren en opruimen
Wil je deze werkwijze reproduceren? Gebruik dan je eigen salesmodel met zeven tabellen, de koppelingen hierboven, de drie setup-prompts en de drie Copilot-queryprompts. Voer de getoonde DAX uit op je bronmodel en vergelijk je eigen totalen, unieke sleutels, relaties en datumbereik. Alle screenshots komen uit de uitgevoerde demo en zijn bijgesneden tot de relevante bediening of uitkomst.
Verwijder voor het opruimen alleen de nieuwe ontologie EnterpriseIQ_Sales, en controleer eerst welke gebruikers ervan afhankelijk zijn. Behoud SalesAnalytics_Model en de onderliggende data. Deze walkthrough vereist geen aanpassing of herstel van de bron. Schakel geen tenantinstellingen uit en verwijder geen gedeelde workspace om deze demo op te ruimen.
Mijn kijk erop
Het interessante is niet dat een agent een stervormig diagram kan tekenen. Dat konden we al langer.
De winst is dat we een bestaande investering in semantiek kunnen meenemen in een herbruikbare bedrijfstaal, duidelijk houden wie eigenaar is van berekeningen en lastige onderscheidingen vastleggen waar gebruikers ze kunnen vinden. Een orderregel is geen order. Ship Date is niet Order Date. Geïmporteerd betekent niet gecontroleerd.
Begin met één domein, behoud de betrouwbare berekeningen en laat de agent zijn query tonen. Een gedeelde taal is pas nuttig als de cijfers blijven kloppen.
Bronnen en verder lezen
Microsoft-documentatie geraadpleegd op 17 oktober 2026. Als oudere probleemoplossingsdocumentatie afwijkt van het vernieuwde overzicht, controleer dan de actuele ervaring en het gedrag in je eigen omgeving. Haal de twee versies niet door elkaar.
- Overzicht van Ontology: de nieuwe ervaring, de virtuele contextlaag en optionele graafuitvoering.
- De Ontology Agent gebruiken: verkennen, Plan/Act, previews, query's en de levensduur van een gesprek.
- Genereren vanuit semantische modellen: machtigingen, bronkoppelingen en controles.
- Metrics definiëren: eigenaarschap van de bron, DAX-resolutie en vernieuwingsgedrag.
- Bedrijfsregels definiëren: conceptkoppelingen en het verschil tussen context en afdwingen.
- Probleemoplossing en actuele beperkingen: machtigingen, query's en het Data Agent-probleem met semantische-modelkoppelingen.
- Vereiste tenantinstellingen.
Tags: Fabric IQ · Ontology · Power BI · Copilot · Semantisch model