A scorecard generates its own semantic model the moment you create it. That second store is why goals go stale, RLS doesn't apply, and the fix is never where people look.
Episode 31 • 2026-07-31 Duration: 10:32
A scorecard silently creates its own semantic model the moment you hit New. That one architectural fact — that it's a stateful writer, not a read-only lens — explains why RLS doesn't carry over, why refresh breaks upstream, and why rollups leak across permission boundaries.
AI-generated voices. Matthias — cloned voice. Fabia — designed AI co-host. See Matthias live on YouTube (Fabric Friday), at his meetups, and at conferences like FabCon.
Hosted by Matthias Falland — Microsoft Data Platform MVP and community architect behind the Fabric Periodic Table. New episodes every Friday.
Have an architecture decision you are wrestling with? DM Matthias on LinkedIn — find him as Matthias Falland. Three to five sentences about the decision, your team size, and your current stack. We anonymize before airing.
This podcast was generated by AI.
Brand design based on fabricperiodictable.com.
Architecture decisions for Microsoft Fabric. Anonymized real customer scenarios, cost realism, counter-arguments included. Weekly episodes aligned with Fabric Friday recordings.
Who Promised That Number?
Episode 31 | 2026-07-31
Fabric Architecture Podcast | Hosted by Matthias Falland with AI co-host Fabia
---
[00:08] Fabia: The dominant community complaint about Power BI scorecards has persisted for years. Goals stop updating, even though the connected reports refresh fine.
[00:18] Matthias: Same complaint, for years. How's that not a bug someone would've fixed?
[00:22] Fabia: It's working exactly as designed.
[00:25] Matthias: That's worse.
[00:26] Fabia: Today we're pulling that apart. What a scorecard actually stores, where the refresh chain breaks, and why the fix is never where people look.
[00:35] Matthias: Start at the beginning. What IS a scorecard? Because I keep seeing teams treat it like a fancy dashboard.
[00:42] Fabia: A dashboard visual is stateless. Same data in, same picture out, no memory. A scorecard persists what a visual structurally can't: whose name is on the number, and what they said when it moved.
[00:55] Matthias: What does it store?
[00:56] Fabia: A check-in history. Each entry has a date, a status, and a free-text note where you can at-mention someone who gets notified.
[01:05] Matthias: The notes are the part that matters. I've seen teams argue about a revenue miss for weeks, and nobody can point to when the owner first flagged it or what they actually said. That note next to the number is the one artifact in Power BI that ends the argument.
[01:22] Fabia: The moment you create a scorecard, Power BI generates a semantic model alongside it in the same workspace. That's where all the metrics data lives — every snapshot, every check-in. The scorecard writes to its own store.
[01:37] Matthias: So if I'm tracking quarterly revenue... the data says where we are, but the target was decided in a room. Connected current, manual target.
[01:46] Fabia: That's the most common shape. And a connected value can never be overridden. If it's wrong, you fix the model.
[01:53] Matthias: What can a goal bind to?
[01:55] Fabia: One thing. A report visual. A data point inside a report visual, and everything else is transitive.
[02:02] Matthias: So if I have a measure nobody put on a report page—
[02:05] Fabia: —you can't track it. Visualize it first or you don't have a binding target.
[02:10] Matthias: The things we build just to have something to point at.
[02:14] Fabia: There's a reason. A semantic model exposes hundreds of measures across arbitrary filter contexts. The visual pins down which measure, sliced how, filtered to what. That's the contract.
[02:26] Matthias: What about time-series? I've heard that goes sideways.
[02:30] Fabia: Full date on the axis — day, month, year — and you can tick "Track all data in this time series" to backfill history. Partial date like month name? Nothing. That's the most common cause of blank goal history.
[02:43] Matthias: Can we talk about the naming? Four things in this space have "metric" or "KPI" in the name.
[02:50] Fabia: And the Capacity Metrics app is the expensive one. Someone searches "Fabric metrics," installs it, shows the board last Tuesday's Spark burn.
[02:59] Matthias: That's not what the CFO asked for.
[03:01] Fabia: Metric Sets are gone. Full retirement November 2025. Hierarchies removed this April.
[03:07] Matthias: Two retirements in one feature area inside a year.
[03:10] Fabia: Scorecards survived both. That's meaningful signal about which item Microsoft considers load-bearing.
[03:17] Fabia: Someone on the Fabric Community forum posted this. "Metrics refresh but values do not update unless I manually trigger every metric."
[03:26] Matthias: I've seen that pattern. Refresh appears to succeed, the numbers just... don't move.
[03:32] Fabia: And the variant's worse. Current values update, targets don't.
[03:36] Matthias: Because current and target are bound independently. So if the target was typed in six months ago and nobody—
[03:43] Fabia: —nobody revisited it. Now look at the chain. Data source, semantic model, report visual, goal, daily snapshot. Five hops. A goal only updates as often as its semantic model refreshes.
[03:55] Matthias: No scheduled refresh on the model, nothing moves. Ever.
[03:59] Fabia: Push semantic models don't update goals at all, by design. And even a well-refreshed model gives you one snapshot a day — last update wins. Sub-daily alerts need Data Activator.
[04:11] Matthias: The community wrote a PowerShell script for bulk goal refresh. Microsoft's own refresh docs link to it.
[04:18] Fabia: When the official documentation points at a community script, that tells you where the automation story sits.
[04:25] Matthias: RLS. I keep running into teams that assume their model's row-level security carries into the scorecard.
[04:32] Fabia: It doesn't. The docs say it flat out: goals don't support row-level security.
[04:37] Matthias: Why not? The model has RLS, the goal reads from the model.
[04:41] Fabia: The goal doesn't read at view time. The value was already snapshotted into the scorecard's own semantic model, under the connection owner's identity, before any viewer arrived. There's no row left to filter. The security boundary was crossed at snapshot time.
[04:58] Matthias: So the statefulness... which is the whole reason it exists... is also why RLS can't work here.
[05:04] Fabia: And rollups make the leak explicit. A rollup shows the same aggregated value to everyone, regardless of goal-level permissions. See four of five children, subtract. There's your fifth.
[05:17] Matthias: Don't use a rollup as a confidentiality boundary.
[05:20] Fabia: And they're forward-only. Switch from SUM to AVERAGE in July, January through June still shows sums. The chart has a visible seam and there's no backfill. Choose the aggregation before you accumulate history.
[05:34] Matthias: That's a sharp edge for something that looks like a dropdown.
[05:38] Fabia: Licensing. Authoring needs a Pro license. Viewing needs either Pro per viewer, or the scorecard sits on a Fabric F64 or greater capacity, at which point free users can consume it. There's nothing in between.
[05:52] Matthias: Two hundred executives on a quarterly scorecard... that's either two hundred Pro licenses or an F64. I'd want that conversation done before anyone promises the rollout.
[06:03] Fabia: And the email subscription caps at fifty goals. Larger scorecard, half the numbers don't show in the digest.
[06:10] Matthias: I'd push back on scorecards entirely here. If your team doesn't actually do the check-ins, if nobody writes the note, you've added a governed artifact with its own semantic model and no RLS, and you're getting less out of it than a KPI visual on a report page.
[06:28] Fabia: A scorecard nobody checks into is strictly worse than a KPI visual. It looks authoritative while it's stale.
[06:35] Matthias: So when IS it right?
[06:36] Fabia: Pattern dictates platform. When the board asks "why did we miss Q2" and the answer needs to live in the artifact, not in someone's email thread, a scorecard is the only item that stores it. When that question doesn't come up, a KPI visual does the job with none of this overhead.
[06:55] Matthias: One more thing. The scorecard's own semantic model — that's queryable?
[06:59] Fabia: It holds all the snapshot history. Point a paginated report at it, and you've got an exportable check-in history for the board pack. Every status change, every note.
[07:10] Matthias: That's the trick that justifies carrying a whole separate semantic model with no RLS inheritance. If the board pack comes out of it, the overhead's worth it. If nobody builds that report, you're maintaining an extra model for nothing.
[07:26] Fabia: Architecture is not religion. Use the scorecard for what nothing else can do, and route around its walls with what you already have.
[07:35] Matthias: Statefulness is the feature. Everything we've talked about — that's its bill. Know it before you sign.
[07:42] Fabia: Somewhere right now a check-in note says "we paused the campaign on purpose." That sentence lives in no warehouse. It's human judgment next to the number. And the scorecard is the only thing in Power BI that holds it.
[07:57] Matthias: If that changed how you're thinking about KPIs, DM me on LinkedIn. Find me as Matthias Falland.
[08:03] Fabia: Friday.
---
End of episode. ~08:04 estimated.