Agentic BI Development
Prathy Kamasani · Data Nova · Data Alchemy
01 / 55
Prathy Kamasani
About me
Prathy Kamasani
Solopreneur @ Data Nova, specialising in Microsoft Fabric and Power BI
Microsoft MVP
London Microsoft Fabric User Group organiser
Blogger, speaker and budding YouTuber
Remote first, lives in the UK and the Netherlands
data-nova.io
linkedin.com/in/prathy
Prathy Kamasani · Data Nova · Data Alchemy
02 / 55
This session
Agentic BI Development
Letting AI agents build your Fabric semantic models and reports
An AI agent can build a real semantic model and report from a written spec, if you know how to brief it and how to check its work.
The interesting part is not the prompt. It is a spec it can act on without guessing, a quality bar set before it starts, and a proper review of what it built.
Prathy Kamasani · Data Nova · Data Alchemy
03 / 55
Hands up
Who uses AI for anything: recipes, holiday plans, emails?
Prathy Kamasani · Data Nova · Data Alchemy
04 / 55
Hands up
Who uses AI for anything: recipes, holiday plans, emails?
Who uses it for BI work?
Prathy Kamasani · Data Nova · Data Alchemy
05 / 55
Agenda
01
What is BI development?
Six steps from a question to a trusted report
02
Working with AI
Context, skills, rules, algorithms, loops, hooks, gates, MCP
03
Agent roles
Operator, builder, orchestrator, and you
04
Building the trade balance report
Chat, Fabric skills, MCP, my setup, full delegation
05
How I built the tool
Specs, engine, tests, prompts, deliverables
06
Cost and limits
Time, tokens, and what still needs a person
Prathy Kamasani · Data Nova · Data Alchemy
06 / 55
What is BI development?
Six steps, and most of the time is not in the visuals.
Prathy Kamasani · Data Nova · Data Alchemy
07 / 55
01 · BI development
From a question to a trusted report
01
Discovery
Users, questions, acceptance criteria
02
Design
Layout, sketch, mockup
03
Build
Model changes, pages, visuals, theme
04
Test
Numbers, render, interaction
05
Deploy
Workspace, binding, refresh
06
Govern
Sign-off, audit trail, changes
Prathy Kamasani · Data Nova · Data Alchemy
08 / 55
Working with AI
A capable graduate on day one
Prathy Kamasani · Data Nova · Data Alchemy
09 / 55
02 · Working with AI
Treat it like a new graduate
Knows a lot
DAX, Power BI, Fabric, public documentation
Not how you work
Your model, your names, your rules, your sign-offs
So you give it
Context, recipes, limits, and someone who checks
Prathy Kamasani · Data Nova · Data Alchemy
10 / 55
02 · Example 1
Plain chat
Setup
Claude Code, no skills, no access to the model
Pro
Zero setup, fast for DAX
Con
Guesses table and column names
Prathy Kamasani · Data Nova · Data Alchemy
11 / 55
02 · Example 1
Without the schema, then with it
Prompt 1: no model
Trade Balance =
SUM('Trade'[Exports]) - SUM('Trade'[Imports])
Prompt 2: real names pasted in
Trade Balance =
VAR Exports =
  CALCULATE(
    SUM('Trade Total Monthly'[Value GBP Millions]),
    Flow[Direction] = "Export"
  )
VAR Imports =
  CALCULATE(
    SUM('Trade Total Monthly'[Value GBP Millions]),
    Flow[Direction] = "Import"
  )
RETURN
  Exports - Imports
Prathy Kamasani · Data Nova · Data Alchemy
12 / 55
02 · Example 1: Plain chat
What it changed
What you get: text to paste
Trade Balance =
VAR Exports =
  CALCULATE(SUM('Trade Total Monthly'[Value GBP Millions]),
    Flow[Direction] = "Export")
VAR Imports =
  CALCULATE(SUM('Trade Total Monthly'[Value GBP Millions]),
    Flow[Direction] = "Import")
RETURN Exports - Imports

Balance Card Colour =
IF([Trade Balance] >= 0, "#2E7D32", "#C62828")
The model
0
changes
It cannot reach the model
The report
None. Two measures as text, to paste in by hand.
Prathy Kamasani · Data Nova · Data Alchemy
13 / 55
02 · Working with AI
How chat differs from an agent
Chat: once through
You ask
A measure for the balance
It answers
From what it has seen before
You paste it in
And find out if it works
Agent: a loop
Plan
Which table holds exports?
Act with tools
Reads the model, runs a DAX query
Observe the result
Compares the figure with the source
Try again, or stop
Fixes and reruns, or hands back
You approve before it ships
Chat answers once. An agent checks its own work, and you check the agent.
Prathy Kamasani · Data Nova · Data Alchemy
14 / 55
02 · Working with AI
The building blocks
Context
Skills
Rules
Algorithms
Loops
Hooks
Gates
MCP
Prathy Kamasani · Data Nova · Data Alchemy
15 / 55
02 · Working with AI
What kind each one is
BlockKindWhat it does
ContextAdvisoryStanding rules for every session
SkillsAdvisoryA repeatable recipe for one job
RulesAdvisoryWhat good looks like, in words
AlgorithmsStructureThe steps of each phase
LoopsBlockingRepeat until a check passes
HooksBlockingBlock one action, on an event
GatesBlockingNo sign-off, no next phase
MCPReachLive access to tools and data
Prathy Kamasani · Data Nova · Data Alchemy
16 / 55
02 · Working with AI
What each one does
BlockKindWhat it does
ContextAdvisoryStanding rules for every session
SkillsAdvisoryA repeatable recipe for one job
RulesAdvisoryWhat good looks like, in words
AlgorithmsStructureThe steps of each phase
LoopsBlockingRepeat until a check passes
HooksBlockingBlock one action, on an event
GatesBlockingNo sign-off, no next phase
MCPReachLive access to tools and data
Prathy Kamasani · Data Nova · Data Alchemy
17 / 55
02 · Working with AI
Advisory, hook or gate?
Advisory
Context, skills, rules
The agent decides whether to follow them. Nothing fails if it does not.
Example
A line in CLAUDE.md: never name a client
Hook
Fires on an event
A commit or an edit. It blocks that one action.
Example
An edit to the engine from a report branch
Gate
A checkpoint in the flow
No evidence or signature, no next phase.
Example
No signed design, no build
An agent edited the engine from a report branch. Now a hook blocks the edit.
Prathy Kamasani · Data Nova · Data Alchemy
18 / 55
02 · Working with AI
An algorithm for each phase
01 · Discovery
Discovery
13
steps
Requirements, stories, feasibility, profile, proof points
Discovery gate
02 · Design
Design
15
steps
Contract, layout, sketch, visuals, mockup
Design gate
03 · Build
Develop
2
steps
Build, offline gates
04 · Test
Verify and QA
6
steps
Canary, live render, render review, QA
QA passes
05 · Deploy
Ship
5
steps
Ship approval, client deploy, deliverable pack
Ship approval
06 · Govern
Govern
3
steps
Audit trail, tidy, owner acceptance
Owner acceptance
Prathy Kamasani · Data Nova · Data Alchemy
19 / 55
Agent roles
Operator, builder, orchestrator, and you
Prathy Kamasani · Data Nova · Data Alchemy
20 / 55
03 · Agent roles
Four roles
Operator
Runs the tool on a brief
Writes only the deliverables. Logs what the tool cannot do.
Builder
Changes the tool
On its own branch, with tests. You review each change.
Orchestrator
Plans and hands out work
Sends each decision to a delegate and a checker, in order.
You
Signs the gates
Decides what may be delegated. Keeps the client deploy unless you grant it.
Prathy Kamasani · Data Nova · Data Alchemy
21 / 55
03 · Agent roles
Who does what, step by step
Step The agent You
DiscoveryDrafts user stories from the requirementsSign off the requirements
DesignProfiles the model, drafts the layout and mockupSign the design before it builds
BuildWrites the model changes and the report filesReview the model changes
TestRuns data, render and layout checksClick what automated QA cannot
DeployDeploys through a gated pipelineApprove the release
GovernRecords who approved what, and whenAccept the result
Prathy Kamasani · Data Nova · Data Alchemy
22 / 55
03 · Agent roles
How a report gets made
Requirement
You
Drafts and improves it
Operator
Approve or question
Gate
Builds and checks
Operator
Test deploy (canary)
Operator
Client deploy
You
A question sends it back to the operator
Alongside
Tool cannot do it
Operator
Gap logged
Operator
Fix on a branch
Builder
Review the change
You
Prathy Kamasani · Data Nova · Data Alchemy
23 / 55
03 · Agent roles
Who signs the gates?
Human gate
You sign four gates
Discovery, design, ship and acceptance. QA is a check that runs. Slow, and you are always in the loop.
Prathy Kamasani · Data Nova · Data Alchemy
24 / 55
03 · Agent roles
Who signs the gates?
Human gate
You sign four gates
Discovery, design, ship and acceptance. QA is a check that runs. Slow, and you are always in the loop.
Full delegation
A second model decides. At a gate, a third model checks.
The client deploy stays yours unless you grant it. You read the decisions afterwards.
Prathy Kamasani · Data Nova · Data Alchemy
25 / 55
Building the trade balance report
One brief through different tools. Where a tool did not get it, the slide says so.
Prathy Kamasani · Data Nova · Data Alchemy
26 / 55
04 · Examples
UK trade, the balance
The brief given to Fabric skills and MCP
What to build
Balance card
Changes colour from surplus to deficit
Monthly trend
Exports, imports and the balance
Breakdown
By partner country or commodity
Slicer
Switches the trend between measures
Also in the brief
Who it is forThe model, its tables and its rulesOne page, theme colours, native visualsWhat is out of scopeWhat to hand back, with evidenceAsk before guessing
Done means
£937.0bn
exports
£980.4bn
imports
12 months to March 2026, published figures
Card colour from a measure, not a fixed colour
The slicer changes the plotted measure
Every field it uses exists in the model
Prathy Kamasani · Data Nova · Data Alchemy
27 / 55
04 · Example 2
Fabric skills
Setup
Microsoft's Fabric skills, same brief
Pro
Real file formats, a draft in minutes
Con
Advice the agent can skip, and no record of who approved
Prathy Kamasani · Data Nova · Data Alchemy
28 / 55
04 · Example 2: Fabric skills
What it changed
The Fabric skills report as rendered by the Power BI Service
The model
0
changes
It read the model with DAX queries and wrote nothing
The report
UK Trade Balance, published to folder 02. Brief: £937.0bn exports. Built: 30.3K, all years. One of four done checks.
Prathy Kamasani · Data Nova · Data Alchemy
29 / 55
04 · Example 3
MCP
Setup
GitHub Copilot in VS Code, with Microsoft's Power BI authoring MCP
Pro
Reads the real model
Con
Can change the model with your sign-in, and nothing records it. This run was read only.
Prathy Kamasani · Data Nova · Data Alchemy
30 / 55
04 · Example 3: MCP
What it changed
No report
PBIP files on the laptop. Copilot could not publish them.
The model
0
changes
Read only: it could not add the field parameter the slicer needs
The report
None by Copilot. It wrote PBIP files on the laptop. I published them myself: next slide.
Prathy Kamasani · Data Nova · Data Alchemy
31 / 55
04 · Example 3: MCP
Publishing the MCP report
The MCP-built report in the Power BI Service, every visual empty
As built
The Service refused it
Microsoft's validator, 5 errors:
No .platform file
No schema line in the .pbip
Card colours set as theme colours, not hex (2)
A setting report.json does not allow
After one fix
I removed the setting by hand and it published. Every visual is empty, with or without filters.
Prathy Kamasani · Data Nova · Data Alchemy
32 / 55
04 · Example 4
My setup
Live demo
Two steps in the terminal. A check stops a report whose design was not approved. Then one command builds the report and runs all the checks.
Setup
My skills, scripts, gates, and sign-offs
Pro
Tested, gated, with an audit trail
Con
Upfront cost, covers only what I encoded
Prathy Kamasani · Data Nova · Data Alchemy
33 / 55
04 · Example 4
Mission Control
Mission Control: 07 Trade Stripes, every phase done, go for launch
What it shows
Every page
Its phase, and green or red
The rail
44 steps over six phases, with the evidence for each
Every gate
Who decided it, and which model
Go or no-go
One call per station before a release
Prathy Kamasani · Data Nova · Data Alchemy
34 / 55
04 · Example 4: My setup
What it changed
The Balance report as rendered by the Power BI Service
The model
19
measures added
Plus 3 calculated columns, each verified on the live model
_Verdict_Colour Balance_Thesis Sentence+16 more
The report
The Balance, built earlier on the same model. Against this brief: no slicer, no breakdown.
Prathy Kamasani · Data Nova · Data Alchemy
35 / 55
04 · Example 5
Full delegation
Setup
A new brief on the same model, every decision delegated
Pro
Brief to client deploy, no questions
Con
5 hours, 10 engine gaps
Prathy Kamasani · Data Nova · Data Alchemy
36 / 55
04 · Example 5: Full delegation
What it changed
The Trade stripes report as rendered by the Power BI Service
The model
16
measures added
Plus 2 calculated columns, each verified on the live model
_Stripe Colour_Stripes Headline_Stripes Month Count+13 more
The report
Trade stripes, deployed to the client workspace. QA 34 of 34.
Prathy Kamasani · Data Nova · Data Alchemy
37 / 55
04 · Examples
The five, compared
ApproachSees the modelCan be stoppedRecords decisionsReport against the brief
ChatNoNoNoNo, DAX as text
Fabric skillsYes, it queries the modelNoNoPublished, 1 of 4 checks
MCPYes, liveNoNoNo, visuals empty
My setupYes, checked against liveYes, hooks and gatesYes, every decisionEarlier build, same model
Full delegationYes, checked against liveYes, hooks and gatesYes, every decisionYes, its own brief, QA 34 of 34
Prathy Kamasani · Data Nova · Data Alchemy
38 / 55
How I built the tool
Specs first, then the engine, then the checks
Prathy Kamasani · Data Nova · Data Alchemy
39 / 55
05 · How I built the tool
How the tool fits together
Specs
19 written algorithms
Engine
One generator
Report files
Checked against Microsoft's schemas
Checks
Hooks, gates and the pipeline
Deploy
Only through the pipeline
What feeds the engine
Knowledge
Visuals, tricks, gotchas
Microsoft tools
CLI validator, sample report
Skills
9 recipes for agents
Engagement
Brief, model, decisions
A fix goes in the spec or the engine, never in a report file.
Prathy Kamasani · Data Nova · Data Alchemy
40 / 55
05 · How I built the tool
The building blocks, in my setup
BlockKindWhat it doesIn my setup
ContextAdvisoryStanding rules for every sessionCLAUDE.md, AGENTS.md
SkillsAdvisoryA repeatable recipe for one job.claude/skills/ (9)
RulesAdvisoryWhat good looks like, in wordsPRINCIPLES.md
AlgorithmsStructureThe steps of each phasealgorithms/ (19)
LoopsBlockingRepeat until a check passesrender-fix and QA loops
HooksBlockingBlock one action, on an eventpre-commit (29), edit hooks
GatesBlockingNo sign-off, no next phasethe rail: 44 steps
MCPReachLive access to tools and datanone: REST and XMLA queries
Prathy Kamasani · Data Nova · Data Alchemy
41 / 55
05 · How I built the tool
Testing in five layers
LayerProvesHow
0 · RepoThe engine still behavesAbout 3,100 tests on every push
1 · ContractThe config matches the designBlocking rules, Microsoft's validator
2 · DataEvery measure resolves, with plausible valuesQueried live after each deploy
3 · RenderEvery text whole, the page reviewedLive page measured, reviewed by another model
4 · InteractionClicks and hovers do what was promisedA headless QA runner, a person as fallback
Prathy Kamasani · Data Nova · Data Alchemy
42 / 55
05 · How I built the tool
Design rules
The design order
0The surface: report, dashboard or app
1The person and their job
2Flow and empty states
3The canvas, then fixed
4Layout: one hero, the rest quiet
5Interaction: remove what you can
6Accessibility
7Data honesty
8Critique: cut what does not serve the job
Fails the build
Every text whole in the live render
No em dashes in visible copy
Warns only
Text contrast
Prathy Kamasani · Data Nova · Data Alchemy
43 / 55
05 · How I built the tool
Three prompts
Operator
New page for uk-trade-data, report name "UK Trade - Trade stripes". The brief is below. You are the operator: run the tool and write only under clients/. When the tool cannot do something, log a gap, use the nearest supported option, and carry on. Never ask me.
What it stops
The build session editing the engine, with a hook behind it
Builder
Fix this in the engine, never in a report file. Reproduce it, find the root cause, write the spec first if the behaviour has none, add a test that fails without the fix, and open a pull request. Do not merge.
What it stops
A fix in a report file that the next build overwrites
Architecture
Before you build anything new: is there a spec for it? If not, write the algorithm first, then the engine, then the check that enforces it. One generator, no second path.
What it stops
A second way of doing the same thing
Prathy Kamasani · Data Nova · Data Alchemy
44 / 55
05 · How I built the tool
Deliverables for one report
Report
On the canary and in the client workspace
Design contract
Challenged by a second model, then decided
Mockup
Drawn from a sample of live data
Design brief
Acceptance tests for every element
Decision records
16, each with its reasoning
QA report
34 of 34 items passed
Deliverable pack
Walkthrough, measures, proof points
Report guide
Plain English, for the reader; shown next
Prathy Kamasani · Data Nova · Data Alchemy
45 / 55
05 · How I built the tool
The report guide
The generated report guide for The Balance
For the reader
Not for the people who built it
Matches gov.uk
Every figure, to within 0.005%
Explains the design
What it shows, and why it looks the way it does
Prathy Kamasani · Data Nova · Data Alchemy
46 / 55
Cost and limits
Time, tokens, and what still needs a person
Prathy Kamasani · Data Nova · Data Alchemy
47 / 55
06 · Cost and limits
What one delegated report cost
5 h 11 min
On the clock, brief to client deploy
3 h 9 min
Working, after a 2 hour usage-limit pause
0
Questions to me
225 million
Tokens read from cache, mostly the session re-reading its own history
6
Render fixes, none by me
10
Engine gaps logged, each fixed by a builder
Prathy Kamasani · Data Nova · Data Alchemy
48 / 55
06 · Cost and limits
Limits
A new kind of page finds gaps
One page, ten engine gaps. The engine only does what it has been taught.
The deciding model was not the one asked for
The delegate asked for one model and was served the drafting model. The tool now records which model answered and blocks the drafter's.
Approvals reopen on harmless changes
A colour written as a hex instead of a name re-ran the whole sign-off chain.
Usage limits pause long runs
Two hours of waiting in a five-hour run.
Someone has to own the grant
What may be delegated, and the client deploy, stay with a person.
Prathy Kamasani · Data Nova · Data Alchemy
49 / 55
06 · Cost and limits
Two bugs the checks missed
The slicer did not filter the chart
It was on the page and you could click it. The chart never changed.
Checks that passed
GatesDAXMockup match
How it was found
Clicking it in the Service.
The headline card clipped its figures
The figures were clipped inside the card.
Checks that passed
GatesDAXMockup match
How it was found
A person looked at the published page, after it had gone out three times.
No check read the published page.
Prathy Kamasani · Data Nova · Data Alchemy
50 / 55
06 · Cost and limits
Which approach, when
UseWhenTrade-off
ChatOne measure or a quick questionNo setup, nothing checked
Fabric skillsA prototype, or a report you will not rebuildReal file formats, advice only
MCPYou need the live model's real answersReal figures, but nothing stops a wrong write
My setupReports you rebuild, check and hand overUpfront cost and upkeep
Prathy Kamasani · Data Nova · Data Alchemy
51 / 55
06 · Cost and limits
What to check, and what you do yourself
A check that runs
Measures resolve live
Every one, against the real model
Every text whole
Measured on the deployed page
It survives a refresh
Colours, sorts, and filters on new data
You
Write the brief
Who it is for, and what done means
Decide what to delegate
Which gates, and never the client deploy by default
Review what the builder changed
Every engine fix is yours to merge
Checks find the mistakes. You decide what done means.
Prathy Kamasani · Data Nova · Data Alchemy
52 / 55
Next steps
Three things to try
01
Write down how you work
A CLAUDE.md or AGENTS.md: your model, your names, your rules
02
Add one hook
Block the one mistake you have made twice
03
Ask for a check before every deploy
And read it before you approve
Prathy Kamasani · Data Nova · Data Alchemy
53 / 55
Prathy Kamasani
Thank you
Prathy Kamasani
Solopreneur @ Data Nova, specialising in Microsoft Fabric and Power BI
Microsoft MVP
London Microsoft Fabric User Group organiser
Blogger, speaker and budding YouTuber
Remote first, lives in the UK and the Netherlands
data-nova.io
linkedin.com/in/prathy
Prathy Kamasani · Data Nova · Data Alchemy
54 / 55
Prathy Kamasani · Data Nova · Data Alchemy
55 / 55