Prasad.dev
All projects

AI Analytics Platform for Microsoft Fabric

An Electron desktop app that generates production React dashboards from natural-language prompts against Fabric semantic models — and publishes them straight into Power BI.

Electron
TypeScript
React
ECharts
Fabric REST API
LLMs
AI Analytics Platform for Microsoft Fabric

The gap

Microsoft Fabric ships with one of the most powerful semantic-modeling stacks in the enterprise. Power BI Desktop is the dominant authoring tool for it. And yet, there is no first-party way to say "build me a dashboard that shows revenue, profit, returns, and orders by region — connected to my Fabric semantic model, on the same brand and theme as everything else we ship" and get a production-ready, governed report back.

Every existing AI-assisted BI workflow I tried either:

  • Generated raw images instead of governed reports (Power BI doesn't know about them),
  • Asked the LLM to produce DAX in a chat window, leaving the user to copy / paste / debug, or
  • Hard-coded a single vendor or model, with no escape hatch.

I wanted a tool that closes the gap end to end: natural language in, a real .pbip-compatible artifact out, published into a Fabric workspace where the rest of the team can refresh it, version it, share it.

What it does

A desktop app. You pick a Fabric semantic model, choose a model provider (Anthropic, OpenAI, Gemini, Groq, or a local Phi-4-mini for offline / sensitive workflows), and describe the dashboard you want. The app:

  1. Plans a layout (KPI strip, comparison chart, trend, drill-down — six pre-baked templates plus free-form composition).
  2. Generates DAX measures grounded in the semantic model — never invents columns, only references what's there.
  3. Builds React + ECharts components from a primitive composition system, not from string-template hacks.
  4. Renders a live preview at any aspect ratio (16:9 by default for slide embeds, 9:16 for mobile, full-bleed for canvas dashboards).
  5. Publishes the result back into Power BI through the Fabric Items REST API — so it lands in your workspace, in your deployment pipeline, with the same governance as anything else.

There's a Refine mode that applies incremental changes ("add a year filter", "swap the geography column for territory") and a Replace mode that starts from a clean canvas. The chat history is the audit log of how the dashboard came together.

The hard parts

XPress9 / JSZip incompatibility. The conventional path for programmatic .pbix publishing goes through the import API. That path requires the file to use Microsoft's XPress9 compression — which conflicts with how every JavaScript Zip library packs data. After two days of dead ends I found that the Fabric Items REST API exposes an updateDefinition endpoint that accepts .pbip source format directly. It's the cleanest publish path I've seen, and it's almost completely undocumented for this use case.

A 3,374-line monolithic renderer. The first version of the visualization layer was one giant file that branched on chart type. It worked for the demo and was impossible to extend. I planned an eight-phase migration to a primitive-based composition system: instead of "render a bar chart", the generator produces "a flex container with an axis primitive, a series primitive, and a tooltip primitive." That ended up at 870 lines across 47 modular files — and most importantly, new chart types compose without touching existing code.

Provider-agnostic prompting. Different model families need different prompting strategies (Anthropic prefers structured XML, OpenAI tools work best with JSON schemas, Gemini has its own contracts). The app abstracts a common Plan → Generate → Validate loop and lets each provider implement its own translation layer underneath.

What's next

  • Custom .pbiviz renderer modeled on Deneb's architecture (with advancedEditModeSupport, persistProperties, and a single-table data role) to replace the HTML Content visual dependency. This is what unlocks Power BI Service deployment for the AI-generated dashboards.
  • A more conversational refinement loop that surfaces ambiguity early ("did you mean revenue net of returns or gross revenue?") instead of guessing.
  • A library of named themes that match real enterprise brand systems.

This is an active build. The Electron app isn't open source today — I'm working through the legal and IP considerations of releasing pieces of it. If you want a walkthrough or to try it, get in touch.