5 Power BI Claude AI Workflows To Save Hours
It was 4:45 on a Friday when my CFO sent the message. Five changes to the board dashboard, needed by Monday. I’ve gotten that message enough times to know how the weekend usually goes.
This time I didn’t open Power BI’s formatting pane once. I sat down with Claude, worked through the list top to bottom, and had it cleared before dinner. Same Power BI you already have. No Premium, no Fabric license, no plugins you can’t get.
Here’s the whole fire drill, the five tasks, the exact prompts, and an honest read on where Power BI Claude AI shines and where you still check the work.
Power BI and Claude Connector
Pbi-cli is a small command-line tool that connects Claude to a live Power BI project: it reads and writes the report files on disk and talks to the semantic model so Claude can create and check DAX.
You install it once, and it requires the .pbip project format rather than .pbix. One habit that matters with it: while pbi-cli has the file, you never save in Power BI yourself. You let Claude write the changes, then close without saving and reopen, and they appear.
Ask 1: Make the variance cards board-ready
The CFO said the cards looked flat. He was right. Power BI’s native KPI card gives you a number and not much else. No color logic, no layout control, no caption. For a board deck, that reads as unfinished.
Why Power BI’s native cards fall short
You can get partway there with conditional formatting on a table, but it’s clunky and you don’t control the layout. What you actually want is a card with cleaner formatting that colors itself red or green based on the variance.
There’s a clean way to do this that most people never try. The free HTML Viewer custom visual (search “HTML” under Get more visuals) renders any HTML string you feed it. So if you can get a DAX measure to return that HTML, you get design control Power BI doesn’t give you out of the box. And Claude writes the DAX.
The prompt that writes the DAX for you
This is the one task that doesn’t need pbi-cli. I drop the measure I want to display into a regular Claude chat and describe the behavior I want. One thing worth knowing: I asked for “HTML,” and Claude correctly pushed back that it can’t be static HTML inside a Power BI visual, it has to be dynamic, written as a DAX measure. That clarification is right, and it’s the whole reason this works.
I need your help writing HTML for a custom HTML visual inside Power BI. It's going to reference the measure I have included above. I want this KPI to be dynamic. I want better, cleaner formatting, and I want it to flip red or green depending on the variance. Higher revenue is good, lower revenue is bad.
Claude returns the DAX. In Power BI, create a New Measure, paste it in, and drop that measure into the HTML Viewer visual’s values. The native card and the new one sit side by side, and the difference is night and day. If the formatting isn’t quite right, you send it straight back to Claude and have it adjust.
The card now colors itself by variance and actually looks like it belongs on a board deck. That’s the moment the dashboard stops looking like a draft.
Ask 2: Double-check the number that looked wrong
This is the one that mattered. When the CFO says a number looks wrong, you check it, even at 5pm on a Friday. He glanced at the June sales revenue figure and said it didn’t sit right.
The Situation: The Sales Revenue Actuals card for June 2023 was coming in at nearly double the real number. It looked plausible enough to ship, and the board deck was going out Monday. The CFO’s gut said it was off.
What Changed: This is where I switched to pbi-cli. Instead of staring at the DAX and guessing, I told Claude the measure name, what it was supposed to show, and that it looked like roughly double the correct amount. Claude read the live model, found the bug, and confirmed it: the Actuals measure was missing its financials Version filter, so it was summing Actuals and Budget together instead of Actuals alone.
The Result: Claude proposed the fix, I told it to apply, and it wrote the correction straight to the file through pbi-cli and verified it. Close without saving, reopen, and the card read right. A bad number that would have gone to the board got caught on a Friday afternoon instead of in the meeting.
What Claude actually flagged
One clean bug: the measure summed the Value column without filtering to the Actuals version, so it pulled both Actuals and Budget rows and roughly doubled the figure. Add the Version filter, and the number is correct.
It’s the kind of thing that hides in an inherited report for months, because the output still looks like a real number until someone senior squints at it. And because pbi-cli is connected to the live model, Claude didn’t just describe the fix, it made it.
The prompt I used
I have a measure in my dashboard called Sales Revenue Actuals June 2023. I have another one called Sales Revenue Budget June 2023. The actuals version is not calculating correctly and it looks like it's nearly double the correct amount. Please research what could be wrong with this measure.
You don’t need to be a DAX expert to catch a bad number this way. You need a second set of eyes that doesn’t get tired at 5pm.
Ask 3: Put the “why” under every number
The board wants the number and the reason in the same glance. Normally that’s me, late, typing a sentence under each location after I’ve already stared at the variances all day.
Claude already has the live data through pbi-cli. So it can write the “why” straight from the numbers, and it can rearrange the page to make room for it.
This is a two-part ask, and it’s worth being explicit about both parts. First, write a line of commentary for each KPI card. Second, shift the existing visuals down so there’s actually space for it. Claude handled both across both pages of the dashboard, the financials view and the point-of-sale view.
The prompt:
Act as a financial analyst and Power BI expert. I have three KPI cards on each sheet inside this dashboard. I want to add text commentary underneath each KPI card explaining the card above it. You will need to add the commentary, adjust the page so everything is neat and organized, and write the commentary itself based on the data coming into the KPI.
Claude read the whole model, added three commentary textboxes per page, and pushed the existing charts down to fit. Same ritual as before: close without saving, reopen, and the commentary is there. It even pulled in context from the commentary notes already in the file, and it surfaced things worth a second look, like 14 units per transaction reading high for a coffee shop.
One caution worth saying out loud. Claude writes commentary from the size and direction of a variance, so it infers the likely driver. You still confirm the driver is real before it goes to a board. And aim for Claude doing about 80% of it. Nudging the spacing on the last card or two yourself is fine, you don’t want to over-optimize the prompt. The commentary is a strong first draft, not gospel.
Ask 4: Lock each manager to their own store
The store managers get report access Monday. Nobody can see anyone else’s P&L. That’s row-level security, and people put it off because it sounds like a project. Set up by hand it can take a while. Claude built it through pbi-cli in about five minutes.
I asked for four roles: one for corporate with access to all three locations, and one per location that only sees its own data. Claude wrote the filter logic against the Location field on both the P&L and the point-of-sale tables, so the whole dashboard respects the role, not just one page.
| Role | Sees |
|---|---|
| Corporate | All three locations, no filter |
| Astoria | Astoria only |
| Hell’s Kitchen | Hell’s Kitchen only |
| Lower Manhattan | Lower Manhattan only |
The 5-minute version
- Tell Claude the roles you want and what each should see. Here, four roles: corporate plus one per location.
- Let pbi-cli write the roles to the file, then close without saving and reopen.
- Under Modeling, Manage Roles, confirm the four roles are there. Use “View as role” and switch to Astoria.
Every card and chart on both pages snaps to one location. The thing the CFO assumed was a week of IT back-and-forth took about five minutes. When you have 30 stores instead of 3, this is the point where you’d ask Claude for a dynamic, table-driven version, but for a handful of locations the static roles are plenty.
Ask 5: Let the board summary write itself
Last one. The board summary, the job I’d normally save for Sunday night.
The Situation: A board memo on how the business was performing as of June 2023, due Monday, normally written by hand from a dashboard I’d already been staring at for hours.
What Changed: I pointed Claude at everything it had, the live dashboard and the model through pbi-cli, including the measure I’d fixed in Ask 2, and asked for the memo.
The Result: A full board memo saved straight to the project folder: executive summary, company-wide results, driver detail, and performance by location. It even surfaced a couple of analytical findings sitting in the data that weren’t on the dashboard yet.
The prompt:
Act as a financial analyst and data science expert. I need you to use everything at your disposal between the Power BI dashboard and the model to write the two-page board summary memo of how the business is performing as of June 2023.
A note on what to expect: it ran a little past two pages. That’s harder for a model to judge, since it writes the memo and then generates the document, so if length matters you send it back for a trim. You could also give it more structure and context up front to pin the output down. Either way, the heavy lifting is done.
Here’s the part people miss. The summary is only as good as the measures feeding it. If I’d skipped Ask 2, this draft would have repeated the wrong June number in prose, with total confidence. The fix earlier in the night is why the summary at the end is trustworthy. The five asks weren’t five separate jobs. They were one chain.
What this actually saved me
Honest accounting, task by task.
| Task | The old way | The Claude way |
|---|---|---|
| Board-ready variance cards | 45 to 60 min fighting formatting | ~5 min |
| Tracing a suspect measure | 30 to 60 min, if you find it | Seconds to diagnose |
| Per-location commentary | An hour, usually late | A few minutes to draft |
| Row-level security | Often a separate day or an IT ticket | ~5 min |
| Board summary | A Sunday-night sitting | A few minutes to draft |
The verdict: this is real, and it’s not magic. Claude shines at the parts that are slow because they’re fiddly, not because they’re hard. The formatting, the tracing, the first-draft writing. It needs you for judgment: confirming a commentary driver is real, testing the RLS roles before managers log in, reading the summary like it’s going to your actual board, because it is.
The limits worth knowing
A few things to set expectations before you try this.
- The live-model tasks (the measure fix, commentary, RLS, and the summary) need the .pbip project format and pbi-cli installed. If your report is a .pbix, you convert it first. Only the variance cards run without it.
- Mind the save ritual. While pbi-cli is working on the file, don’t save in Power BI yourself. Let Claude write the change, then close without saving and reopen, or you’ll overwrite its work.
- You still review the DAX. Claude is very good at explaining what a measure does, which is exactly why you should read that explanation rather than apply blindly.
- Row-level security has to be tested with “View as role” before anyone gets access. A wrong filter shows a manager too much, and that’s the one mistake you can’t take back.
- Commentary is inference. Claude reads the gap and proposes the driver. The driver is a hypothesis until you confirm it.
None of these are dealbreakers. They’re the difference between using this well and using it carelessly.
How to run your own Friday fire drill
You don’t need a CFO message to try this. Pick your own dashboard and run the list.
- Install the HTML Viewer custom visual from AppSource. Free, two minutes.
- If you want the live-model tasks, install pbi-cli and open your report as a .pbip project.
- Build one board-ready card with the Ask 1 prompt, in a plain Claude chat. Drop the measure in and watch it color itself by variance.
- Take your most-doubted measure and run the Ask 2 prompt. See what Claude finds.
- The day before your next board or leadership meeting, paste your key measures into Claude and ask it to sanity-check them. Make that your pre-board ritual.
That last one is the habit that pays off every month. A wrong number caught on Friday is a number that never embarrasses you on Monday.
