Updated March 2026

Fabric & Power BI Cost Optimization Playbook: The CapacityRight Framework

EO
Errin O'ConnorChief AI Architect & CEO, EPC Group
Last Updated: March 202628 min read

Your organization is almost certainly overspending on Microsoft Fabric and Power BI. After auditing 500+ enterprise deployments, we have found that the average company wastes 30-50% of their capacity budget. This playbook shows you exactly how to find and eliminate that waste.

Quick Answer: How Do I Reduce Fabric and Power BI Costs?

Most organizations overspend on Microsoft Fabric and Power BI Premium by 30-50%. The three biggest sources of waste are: running P SKUs that cannot be paused (costing you 40-60% more than equivalent F SKUs with pause/resume), paying for Pro licenses ($10/user/month) for users who only view reports, and over-provisioning capacity that sits idle 60-70% of the time.

The fix is systematic, not guesswork. We developed the CapacityRight Framework after optimizing Fabric deployments for Fortune 500 healthcare systems, financial institutions, and government agencies. The framework consists of five steps: audit current spend, measure actual utilization using our CU Efficiency Score, right-size your SKUs, implement autoscaling and pause/resume scheduling, and establish ongoing monitoring. Most clients see a 30-60% cost reduction within 60 days.

Here are the numbers that matter: switching from a P1 to an F64 with pause/resume saves $3,200-$5,200 per month. Azure Reserved Instances save 36-40% on 1-year commitments. Moving 500 report viewers from Pro to free licenses on Fabric capacity saves $5,000 per month. Optimizing DAX queries and implementing DirectLake mode reduces CU consumption by 15-30%. These are not theoretical numbers — they come from actual client engagements completed in the last 12 months.

I have been deploying Power BI and Fabric since the earliest preview builds. As a Microsoft Press bestselling author with four published books on Power BI, SharePoint, Azure, and large-scale migrations, I have personally overseen more than 500 enterprise deployments across healthcare, finance, education, and government. This playbook distills everything I have learned about capacity cost optimization into an actionable, step-by-step guide. If your organization spends more than $3,000 per month on Fabric or Power BI Premium, this page will save you money.

The Cost Problem: Why Enterprises Overspend on Fabric and Power BI

Enterprise organizations typically spend between $5,000 and $50,000 per month on Microsoft Fabric capacity and Power BI licensing. That number climbs to $100,000 or more per month for large healthcare systems and financial institutions with thousands of report consumers. The problem is not the pricing itself — Microsoft's rates are competitive. The problem is that most organizations are paying for capacity and licenses they do not actually use.

After auditing more than 500 enterprise Fabric and Power BI deployments, we have identified three systemic patterns of waste that account for 80% of unnecessary spending:

Pattern 1: P SKUs That Cannot Pause ($2,000-$5,000/month wasted)

Power BI Premium P SKUs, purchased through the Microsoft 365 admin center, bill at a flat monthly rate regardless of usage. A P1 costs $4,995 per month. It runs 24 hours a day, 7 days a week, 365 days a year — even at 2:00 AM on a Sunday when nobody is running reports. You cannot pause a P SKU. You cannot scale it down during off-hours. You pay the same rate whether your CU utilization is 95% or 5%.

The equivalent Fabric F64 SKU provides the same 64 CU of compute capacity. But because it is provisioned through Azure, it can be paused and resumed programmatically. If your organization only needs capacity during business hours (roughly 50-60 hours per week out of 168 total hours), you are paying for 100+ hours of idle time every week on a P SKU. That idle time costs between $2,000 and $5,000 per month depending on the SKU size — money that could be eliminated entirely by switching to an F SKU with automated pause/resume.

Pattern 2: License Sprawl ($3,000-$15,000/month wasted)

The second biggest source of waste is assigning Power BI Pro licenses ($10/user/month) or Premium Per User licenses ($20/user/month) to people who only consume reports. In a typical enterprise deployment, 70-80% of users are viewers— they open dashboards, look at data, maybe apply a filter, and leave. They never build reports. They never write DAX. They never create data models.

These viewers do not need paid licenses if your content is hosted on Fabric capacity (F64 or higher) or the legacy P SKUs. Any user with a free Power BI license can view content on capacity-backed workspaces. An organization with 1,000 Power BI users where 800 are viewers is spending $8,000 per month on Pro licenses that could be replaced with $0 free licenses. Over a year, that is $96,000 in unnecessary license costs. We see this pattern in virtually every enterprise we audit. IT departments provision Pro licenses by default because the Microsoft 365 admin center makes it the path of least resistance, and nobody goes back to audit who actually needs a paid license.

Pattern 3: Over-Provisioned Capacity ($1,500-$10,000/month wasted)

The third pattern is provisioning more capacity than you need. This happens for several reasons. Teams estimate capacity requirements based on vendor recommendations rather than actual measured workload. They provision for peak load (month-end reporting, quarterly close) and never scale back down. Multiple departments each request their own dedicated capacity instead of sharing a properly sized pool. The result is Fabric capacities running at 15-30% average CU utilization — meaning 70-85% of what you are paying for goes unused.

We have seen organizations running an F128 ($10,517.76/month) when their actual peak utilization would be comfortably served by an F64 ($5,258.88/month). That is $5,258.88 per month — $63,106 per year — spent on capacity that never gets used. And because Fabric throttles rather than fails when you hit capacity limits, there is a natural tendency to over-provision “just in case.” The right approach is to right-size based on measured data and use burst capacity for occasional peaks, not to permanently over-provision.

The Combined Impact

When all three patterns are present — and they usually are — the typical enterprise is overspending by $6,500-$30,000 per month on Fabric and Power BI. That is $78,000 to $360,000 per year in avoidable costs. For large organizations running multiple P3 or P4 SKUs with thousands of Pro licenses, the waste can exceed $500,000 annually. The CapacityRight Framework exists specifically to find and eliminate this waste systematically.

The CapacityRight Framework: Our 5-Step Approach to Eliminating Fabric Waste

The CapacityRight Framework is our proprietary methodology for right-sizing Microsoft Fabric capacity and Power BI licensing. We developed it over 8 years of enterprise deployments and have refined it through 500+ client engagements. It works for organizations spending $3,000/month on a single F64 or $150,000/month across a fleet of capacities. The framework is systematic, data-driven, and typically delivers measurable savings within 30 days of Step 1.

1

Audit Current Spend

Before you can optimize, you need a complete picture of what you are paying for. Most organizations cannot answer the question “How much do we spend on Power BI and Fabric per month?” because the costs are spread across multiple billing systems. Capacity costs appear in Azure billing. Pro and PPU license costs appear in Microsoft 365 billing. Gateway VM costs appear in Azure or on-premises infrastructure budgets. Data storage costs appear in Azure Storage or OneLake billing.

What to inventory:

  • Every P SKU — list the SKU size (P1, P2, P3, P4, P5), monthly cost, and which workspaces are assigned to it
  • Every F SKU — list the SKU size (F2 through F2048), Azure subscription, resource group, region, monthly cost (PAYG vs reserved), and assigned workspaces
  • Every E SKU — Embedded SKUs (A1 through A6) used for ISV or app embedding scenarios
  • Pro licenses — total count assigned, total count actively used (signed in within 30 days), cost per month
  • PPU licenses — total count assigned, total count actively used, cost per month
  • Gateway VMs — Azure VM size, monthly cost, which data sources they serve, redundancy configuration
  • Azure storage — OneLake storage costs, Azure Data Lake Storage costs for any data pipelines feeding Fabric

Expected output: A single spreadsheet or dashboard showing total monthly Fabric/Power BI spend broken down by category. In our experience, this step alone surprises 90% of organizations because the total is 20-40% higher than anyone estimated.

2

Measure Actual Utilization (CU Efficiency Score)

The CU Efficiency Score is the single most important metric for Fabric cost optimization. The formula is simple:

CU Efficiency Score = (Actual CU Usage / Provisioned CU Capacity) x 100

For example, if you are running an F64 (64 CU provisioned) and your average peak-hours CU consumption is 28 CU, your CU Efficiency Score is (28 / 64) x 100 = 43.75%. That means 56.25% of your provisioned capacity is sitting idle during your busiest hours — and the percentage is even worse during off-peak.

How to measure: Install the Microsoft Fabric Capacity Metrics app from AppSource. This free app connects to your Fabric capacity and provides detailed CU consumption data broken down by workspace, item type (dataset, dataflow, notebook, pipeline), and time period. Run it for a minimum of 14 days to capture both typical weekday and weekend patterns. Export the data and calculate your CU Efficiency Score for peak hours (9 AM - 6 PM weekdays), off-peak hours (6 PM - 9 AM weekdays), and weekends separately.

What to look for: Burst patterns (high spikes followed by long idle periods suggest pause/resume opportunities). Refresh clustering (multiple datasets refreshing simultaneously, creating artificial peaks). Background operations consuming CU during business hours (dataflows, notebooks, pipelines competing with interactive queries). Single datasets or reports consuming a disproportionate share of CU (candidates for DAX optimization).

3

Right-Size SKUs

With your CU Efficiency Score data in hand, you can now make informed decisions about capacity sizing. The goal is a peak-hours CU Efficiency Score between 60% and 80% — high enough that you are not wasting money on idle capacity, but with enough headroom to absorb usage spikes without throttling.

  • Downgrade oversized capacity: If your peak-hours CU Efficiency Score is below 40%, your capacity is at least 2x larger than needed. An F128 at 35% utilization should be an F64. That single change saves $5,258.88/month.
  • Consolidate underused capacities: If you have three F8 capacities at 25% utilization each, consolidate to a single F16 or F32. Three F8 SKUs cost $1,314.72/month total. A single F32 costs $2,629.44/month but provides 4x the capacity of each individual F8 — and you save $1,314.72/month through consolidation while gaining better burst headroom.
  • Switch P SKUs to F SKUs: Every P SKU should be evaluated for migration to its F SKU equivalent. P1 maps to F64, P2 to F128, P3 to F256. The F SKU gives you pause/resume capability and Azure Reserved Instance eligibility that the P SKU does not offer.

Important: Right-sizing should be done incrementally. Downgrade one tier at a time, monitor for 7-14 days, and then reassess. Do not jump from an F128 directly to an F32 without testing intermediate sizes. Fabric throttles gracefully rather than failing, but aggressive throttling degrades user experience.

4

Implement Autoscaling and Scheduling

Once your capacity is right-sized for peak hours, the next step is to stop paying for it during off-peak hours. Fabric F SKUs can be paused and resumed through the Azure REST API, Azure PowerShell, or Azure CLI. This means you can automate a schedule that pauses capacity at 8:00 PM and resumes it at 6:00 AM, pauses Friday evening and resumes Monday morning, and pauses during holidays.

Automation options:

  • Azure Automation runbooks — PowerShell scripts triggered on a schedule via Azure Automation. Most reliable option. Cost: approximately $0.002 per minute of runtime (negligible).
  • Azure Logic Apps — Visual workflow that calls the Fabric REST API on a schedule. Easier to set up than runbooks, slightly higher cost at approximately $0.000125 per action.
  • Power Automate — If your organization already has Power Automate premium licenses, you can create flows that pause/resume Fabric capacity. Good for organizations that want IT admins to manage schedules without Azure portal access.

Burst rules: For workloads with unpredictable peaks (ad-hoc executive reporting, month-end close), implement burst capacity rules. Azure supports Fabric capacity smoothing that spreads CU consumption over 24-hour windows. You can also configure alerts that trigger a temporary SKU scale-up when CU utilization exceeds 85% for more than 15 minutes, then scale back down after utilization drops below 50%.

Expected savings: Pause/resume scheduling alone saves 30-55% depending on your work pattern. A standard Monday-Friday, 6 AM to 10 PM schedule saves approximately 40% compared to 24/7 operation. Adding weekend pauses increases savings to approximately 52%.

5

Ongoing Monitoring and Continuous Optimization

Cost optimization is not a one-time project. Usage patterns change as new reports are published, new users onboard, and business requirements evolve. Without ongoing monitoring, capacity creep and license sprawl will gradually erode your savings.

  • Monthly CU Efficiency Score tracking: Calculate and record your CU Efficiency Score every month. If it drops below 50%, investigate whether you need to downsize or increase pause/resume hours.
  • Monthly license audit: Run a report of all Pro and PPU license holders. Identify accounts that have not signed in within 30 days. Reclaim and reassign or downgrade to free licenses.
  • Azure Cost Management alerts: Set budget alerts at 80% and 100% of your target monthly spend. Configure anomaly detection to flag unexpected cost spikes (a new dataset refresh consuming excessive CU, an accidental capacity scale-up that was not reverted).
  • Quarterly CapacityRight review: Every 90 days, repeat Steps 2 and 3 to reassess utilization and SKU sizing. Check whether reserved instance commitments still align with your usage patterns. Evaluate whether workload optimization (DAX improvements, DirectLake migration) has reduced CU consumption enough to justify a further downsize.

Organizations that implement ongoing monitoring with the CapacityRight Framework save an additional 5-10% annually compared to those that do a one-time optimization and then stop paying attention. Over three years, that compounding effect is significant — a $20,000/month Fabric deployment saves an extra $36,000-$72,000 by maintaining discipline.

10 Fabric and Power BI Cost Optimization Strategies with Specific Savings

Each strategy below includes specific dollar savings based on real client engagements. Your actual savings will depend on your current configuration, but these ranges are representative of what we see in mid-market and enterprise deployments.

1. Switch P SKU to F SKU with Pause/Resume

Savings: 30-40% ($1,500-$8,000/month depending on SKU)

P SKUs bill 24/7. F SKUs can be paused. A P1 costs $4,995/month running continuously. An F64 (equivalent capacity) costs approximately $5,258.88/month at PAYG if running 24/7, but only $2,100-$3,150/month with a standard business-hours-only schedule. Even without reserved instances, the pause/resume capability alone delivers 30-40% savings. This is the single highest-impact change for organizations currently running P SKUs. The migration takes 2-4 hours with zero data loss using Microsoft's workspace migration tools.

2. Purchase Reserved Instances for Steady-State Workloads

Savings: 36-60% ($1,900-$6,300/month on F64 equivalent)

Azure Reserved Instances offer 36-40% savings on 1-year commitments and 55-60% on 3-year commitments compared to PAYG pricing. An F64 at PAYG costs $5,258.88/month. With a 1-year reservation, that drops to approximately $3,155/month — saving $2,103 monthly. With a 3-year reservation, it drops to approximately $2,366/month — saving $2,892 monthly. Reserved instances make sense for any capacity that runs consistently during business hours. You can combine reservations with pause/resume: reserve capacity for your core 10-12 hour business day and use PAYG for any burst capacity beyond that.

3. Right-Size Capacity Based on Measured Utilization

Savings: 25-50% ($1,300-$10,000/month)

Most organizations are over-provisioned by at least one SKU tier. An F128 running at 35% peak utilization should be an F64, saving $5,258.88/month. An F64 at 30% peak utilization could be an F32 if workloads are optimized, saving $2,629.44/month. Use the CU Efficiency Score measured over 14+ days to determine the right SKU size. Target a peak-hours score of 60-80% to balance cost efficiency with headroom for spikes. Downgrade incrementally — one tier at a time with 7-14 days of monitoring between changes.

4. Consolidate Workspaces to Fewer Capacities

Savings: 20-35% ($500-$4,000/month)

Many organizations have multiple small capacities because different departments each requested their own. Three F8 SKUs ($438.24/month each = $1,314.72 total) serve 24 CU of combined capacity. A single F32 ($2,629.44/month) provides 32 CU — more total capacity for a similar price, with better burst headroom and simpler management. Consolidation also improves CU utilization because workloads from different departments often peak at different times, creating a natural smoothing effect. The caveat is that consolidation requires governance — workspace owners must agree on shared capacity rules, and you need to implement row-level security if datasets from different departments share a capacity.

5. Move Report Viewers from Pro to Free Licenses

Savings: $8-$15 per viewer per month ($4,000-$15,000/month for large orgs)

Users who only view reports on Fabric capacity or Premium workspaces do not need Pro licenses. A free Power BI (Fabric) license is sufficient for viewing, filtering, and exporting from published reports. In a typical 1,000-user deployment where 800 are viewers, switching them from Pro ($10/month each) to free saves $8,000 per month or $96,000 per year. The process is straightforward: verify the user's activity logs to confirm they are view-only, switch their license in the Microsoft 365 admin center, and confirm they can still access all assigned workspaces. PPU users who only view PPU content can also be switched to free if that content is moved to Fabric capacity.

6. Use DirectLake Instead of Import Mode

Savings: 15-30% CU reduction ($800-$3,000/month on F64)

Import mode datasets consume significant CU during scheduled refreshes. A 10 GB dataset refreshing 6 times per day might consume 45-90 minutes of CU per refresh cycle — that adds up to 4.5-9 hours of CU consumption daily just for refreshes. DirectLake mode eliminates refresh CU entirely by reading directly from Parquet files in OneLake. Query performance remains comparable to Import because DirectLake loads column segments into memory on demand. The migration requires restructuring your data pipeline to produce Delta/Parquet files in a Fabric lakehouse, which typically takes 2-4 weeks. For organizations with many large, frequently refreshed datasets, DirectLake is the single most impactful CU reduction strategy.

7. Optimize DAX to Reduce CU per Query

Savings: 10-25% CU reduction ($500-$2,500/month)

Poorly written DAX is one of the most common causes of excessive CU consumption. A single complex measure using CALCULATE with nested iterators can consume 10-50x more CU per query than an optimized equivalent. Common optimization targets include: replacing row-by-row iterators (SUMX over large tables) with batch aggregators (SUM), eliminating unnecessary CALCULATE context transitions, using variables to cache intermediate results, and implementing aggregation tables for high-cardinality datasets. We have seen cases where optimizing the top 5 most expensive DAX measures reduced total CU consumption by 20% — no capacity changes required. Use the Fabric Capacity Metrics app to identify the top CU-consuming queries, then work with a Power BI architecture consultant to optimize them.

8. Implement Incremental Refresh

Savings: 10-20% CU reduction on refresh operations ($400-$1,500/month)

Full dataset refreshes process every row in every table, even if 95% of the data has not changed. Incremental refresh partitions your data by date and only refreshes the most recent partition(s), leaving historical data untouched. A 50 GB dataset with 3 years of history that does a full refresh might take 45 minutes and consume 30+ CU-minutes. With incremental refresh configured to only process the current month, that drops to 5-8 minutes and 3-5 CU-minutes — an 80-85% reduction in refresh CU consumption. Incremental refresh is available on Pro, PPU, and Fabric capacity. Configuration requires defining a RangeStart and RangeEnd parameter in Power Query, which takes 15-30 minutes per dataset.

9. Schedule Heavy Workloads During Off-Peak Hours

Savings: 5-15% improvement in peak-hour CU efficiency

Dataset refreshes, dataflow runs, and notebook executions do not need to happen during business hours unless users need real-time data. Moving heavy batch operations to off-peak windows (11 PM - 5 AM) reduces CU competition with interactive queries during business hours. This does not directly reduce your bill if capacity runs 24/7, but it allows you to right-size to a smaller SKU because your peak-hour CU demand is lower. If scheduling heavy workloads off-peak drops your peak CU Efficiency Score from 75% to 50%, you can downgrade one SKU tier — which does save real money. The shift also improves report performance during business hours because interactive queries have more CU headroom.

10. Audit and Remove Unused Reports and Datasets

Savings: 5-15% CU reduction ($300-$1,500/month)

Enterprise Power BI environments accumulate unused content over time. Reports built for a one-time project that nobody looks at anymore. Datasets that still refresh 4 times daily despite having zero views in 90 days. Test copies of production datasets that were never cleaned up. Each unused dataset with an active refresh schedule consumes CU for absolutely no business value. Use the Power BI activity log and Fabric Capacity Metrics app to identify datasets and reports with zero views in the past 90 days. Disable their refresh schedules first (immediate CU savings), then archive or delete them after confirming with the original creators. We typically find that 15-25% of datasets in an enterprise environment are essentially abandoned but still actively refreshing.

P SKU to F SKU Migration Guide: Step by Step

Migrating from Power BI Premium P SKUs to Microsoft Fabric F SKUs is the single most impactful cost optimization for organizations currently on P SKUs. The migration unlocks pause/resume capability, Azure Reserved Instance pricing, and native Azure cost management integration. Here is how to do it with zero downtime.

P SKUP SKU Cost/moF SKU EquivalentF SKU PAYG Cost/moF SKU Reserved 1yrCU
P1$4,995F64$5,258.88~$3,15564
P2$9,990F128$10,517.76~$6,310128
P3$19,980F256$21,035.52~$12,621256
P4$39,960F512$42,071.04~$25,242512
P5$79,920F1024$84,142.08~$50,4851024

Migration Steps

  1. Provision the F SKU in Azure: Create a Fabric capacity resource in the same region as your existing P SKU. Choose the F SKU that matches your P SKU (e.g., F64 for P1). Do not delete the P SKU yet.
  2. Test with a non-critical workspace: Reassign one low-priority workspace from the P SKU to the new F SKU. Verify that reports load correctly, refreshes complete, and row-level security works as expected. Test for 48-72 hours.
  3. Migrate remaining workspaces: Reassign all remaining workspaces from the P SKU to the F SKU. This can be done through the Fabric admin portal or PowerShell. Workspace reassignment is instant and does not require downtime — users may experience a brief interruption (under 30 seconds) during the switch.
  4. Configure pause/resume automation: Set up Azure Automation runbooks or Logic Apps to pause the F SKU during off-hours. Start with a conservative schedule (pause at 10 PM, resume at 5 AM) and gradually extend pause windows based on usage data.
  5. Decommission the P SKU: After 7-14 days of stable operation on the F SKU, cancel the P SKU subscription through the Microsoft 365 admin center. Ensure you cancel before the next billing cycle to avoid an additional month of charges.
  6. Evaluate reserved instances: After 30 days of stable F SKU operation, analyze your usage patterns. If the capacity runs consistently during a predictable schedule, purchase a 1-year reserved instance to lock in 36-40% savings over PAYG.

What Changes After Migration

Stays the Same

  • All reports and dashboards
  • Dataset refresh schedules
  • Row-level security rules
  • Workspace permissions
  • XMLA endpoint connectivity
  • Deployment pipelines
  • Paginated reports
  • Dataflows and datamarts

Changes

  • Billing moves to Azure (from M365)
  • Admin management in Azure portal
  • Pause/resume capability added
  • Reserved instance eligibility added
  • Azure RBAC for capacity management
  • Azure Cost Management integration
  • Azure tags for cost allocation
  • Region flexibility for new capacities

Fabric Pricing Deep Dive: F2 through F2048

Microsoft Fabric capacity is priced by Capacity Units (CU). Each F SKU provides a fixed number of CU per second. Pricing varies by Azure region; the table below uses East US pricing as of March 2026. Note that F SKUs below F64 do not include Power BI functionality — they only support Fabric workloads (lakehouses, notebooks, pipelines, warehouses). For Power BI report hosting, you need F64 or higher. See our complete Power BI pricing guide for license-level details.

SKUCUPAYG $/hrPAYG $/moReserved 1yr $/moReserved 3yr $/moPower BI?
F22$0.36$262.80~$164~$118No
F44$0.72$525.60~$328~$236No
F88$1.44$1,051.20~$657~$473No
F1616$2.88$2,102.40~$1,314~$946No
F3232$3.60$2,629.44~$1,643~$1,182No
F6464$7.30$5,258.88~$3,155~$2,366Yes
F128128$14.60$10,517.76~$6,310~$4,733Yes
F256256$29.20$21,035.52~$12,621~$9,466Yes
F512512$58.40$42,071.04~$25,242~$18,932Yes
F10241024$116.80$84,142.08~$50,485~$37,864Yes
F20482048$233.60$168,284.16~$100,970~$75,728Yes

Azure Billing Integration

F SKUs are Azure resources, which means they integrate with Azure Cost Management, Azure Budgets, Azure Tags, and Azure Reservations. You can tag capacities by department, project, or cost center for chargeback reporting. Azure Cost Management provides daily cost breakdowns, spend forecasts, and anomaly detection. This level of financial visibility is not available with P SKUs, which appear as flat line items in Microsoft 365 billing with no granularity. For enterprise deployments that need to allocate Fabric costs across business units, F SKUs with Azure tagging is the only viable approach.

Real Savings Examples from Enterprise Clients

These are anonymized results from actual CapacityRight Framework engagements completed in the past 12 months. All dollar figures represent recurring monthly savings after implementation, verified through Azure Cost Management and Microsoft 365 billing comparisons.

A

Healthcare System (450 Users)

$8,400/mo reduced to $3,200/mo (62% savings)

Before: Running a P1 ($4,995/mo) with 320 Pro licenses ($3,200/mo) and 2 gateway VMs ($200/mo). Total monthly cost: $8,395. The P1 averaged 38% CU utilization during business hours and 3% overnight. Of the 320 Pro users, 280 were report viewers who never created content.

What we did: Migrated P1 to F64 with pause/resume (pause 8 PM - 6 AM weekdays, pause all weekend). Moved 280 viewers to free licenses. Purchased a 1-year reserved instance for the F64 base capacity. Optimized 3 high-CU DAX measures that were responsible for 35% of total CU consumption.

After: F64 reserved instance ($3,155/mo effective cost, but only running ~48% of hours with pause/resume = ~$1,800/mo effective). Retained 40 Pro licenses for content creators ($400/mo). Gateway VMs unchanged ($200/mo). New monthly cost: approximately $3,200. Annual savings: $62,400.

B

Financial Services Firm (2,200 Users)

$24,000/mo reduced to $14,400/mo (40% savings)

Before: Running a P2 ($9,990/mo) and a P1 ($4,995/mo) in separate business units, plus 1,100 Pro licenses ($11,000/mo) and 200 PPU licenses ($4,000/mo). Total monthly cost: $29,985. However, combining license overlap and shared capacity, the effective analytical cost was approximately $24,000/mo after accounting for E5 license bundles that included some Pro licenses.

What we did: Consolidated P2 and P1 into a single F128 (128 CU, same as P2 alone but replacing both). Purchased a 1-year reserved instance. Moved 1,600 view-only users to free licenses. Migrated 12 large Import-mode datasets to DirectLake, reducing refresh CU by 25%. Implemented incremental refresh on remaining Import datasets. Optimized DAX across 8 high-consumption reports.

After: F128 reserved instance (~$6,310/mo). 300 Pro licenses for creators and PPU power users ($3,000/mo). Eliminated separate PPU licenses by moving PPU features to F128 capacity. Reduced CU consumption enough to avoid needing burst capacity. New monthly cost: approximately $14,400. Annual savings: $115,200.

C

Mid-Market Manufacturing Company (400 Users)

$4,200/mo reduced to $1,800/mo (57% savings)

Before: 400 Pro licenses ($4,000/mo) with content hosted on shared capacity (no Premium or Fabric capacity). An additional $200/mo in gateway costs. Total: $4,200/mo. Performance was poor because shared capacity has limited CU and throttles aggressively. The company was considering adding a P1 ($4,995/mo) to improve performance, which would have nearly doubled their spend.

What we did: Instead of adding an expensive P1, we provisioned an F64 with pause/resume scheduling (business hours only, Monday-Friday). Moved 350 viewers to free licenses, keeping 50 Pro licenses for content creators. The F64 provided dramatically better performance than shared capacity while costing less than the Pro license sprawl it replaced.

After: F64 with aggressive pause/resume scheduling (~$1,300/mo effective cost running only business hours). 50 Pro licenses ($500/mo). Gateway unchanged. New monthly cost: approximately $1,800. Annual savings: $28,800. Performance improved 5-10x compared to the previous shared capacity, so user satisfaction also increased significantly. The company avoided the $4,995/mo P1 purchase they were about to make, saving an additional $60,000/year in avoided costs.

CU Efficiency Score: Calculator and Benchmarks

The CU Efficiency Score is the core metric of the CapacityRight Framework. It tells you, at a glance, whether your Fabric capacity is right-sized. We calculate it using data from the Microsoft Fabric Capacity Metrics app, which is free and available in AppSource.

The Formula

CU Efficiency Score = (Average Actual CU Usage During Peak Hours / Total Provisioned CU) x 100

Example: You are running an F128 (128 CU provisioned). During your peak business hours (9 AM - 6 PM weekdays), your average CU consumption from the Metrics app is 72 CU. Your CU Efficiency Score is (72 / 128) x 100 = 56.25%. This falls in the “healthy” range — you have adequate headroom for spikes without massive waste.

Important: Always calculate the score using peak hours data, not 24-hour averages. A 24-hour average will always look low because overnight utilization is near zero for most organizations, which would misleadingly suggest over-provisioning even when your peak-hour capacity is right-sized.

CU Efficiency Score Benchmarks

0-30%

Critically Over-Provisioned

You are paying for 3x or more capacity than you use. Immediate action required: downgrade at least one SKU tier and implement pause/resume scheduling. Expected savings: 40-60% of current spend.

30-50%

Moderately Over-Provisioned

Room for optimization. Consider downsizing one tier, consolidating capacities, or extending pause/resume windows. Expected savings: 20-35% of current spend.

50-75%

Healthy / Well-Optimized

Good balance of cost efficiency and headroom. Maintain current sizing, focus on workload optimization (DAX, DirectLake, incremental refresh) for incremental gains. Consider reserved instances if not already using them.

75-90%

Optimal for Reserved Instances

Ideal utilization for steady-state workloads with reserved instance pricing. Limited headroom for spikes — consider burst capacity rules or configuring Fabric smoothing to handle occasional peaks without throttling.

90%+

At Risk of Throttling

You are running near capacity limits. Users are likely experiencing slow report loads during peak times. Upgrade to the next SKU tier or aggressively optimize workloads (DAX, refresh schedules, unused report cleanup) to bring utilization down below 80%.

Quick Assessment: Where Does Your Organization Fall?

If you do not know your CU Efficiency Score, here is a quick proxy. Check your Fabric Capacity Metrics app (or ask your Fabric admin) for the average CU utilization percentage during your busiest 4-hour window on a typical Wednesday. That number, roughly, is your CU Efficiency Score.

  • If it is below 40%: You are almost certainly overspending. A managed analytics engagement will likely pay for itself in the first month through capacity savings alone.
  • If it is 40-60%: You are in the optimization zone. Targeted improvements (DAX, scheduling, license audit) can trim 15-25% off your bill.
  • If it is above 60%: Your capacity is reasonably well-sized. Focus on reserved instances and workload optimization for incremental gains.

Frequently Asked Questions: Fabric and Power BI Cost Optimization

How much can I save by optimizing Fabric capacity?

Most organizations save between 30% and 60% on their monthly Fabric and Power BI spend after a proper optimization engagement. The exact savings depend on your current configuration. Organizations running P SKUs without pause/resume capability typically save 30-40% by migrating to equivalent F SKUs. Those with significant off-hours idle time save an additional 15-25% through automated pause/resume scheduling. Companies with license sprawl (Pro licenses assigned to view-only users) often save $8-$15 per user per month by moving viewers to free licenses backed by Fabric capacity. In our experience across 500+ enterprise deployments, the average mid-market organization ($10K-$30K/month Fabric spend) reduces costs by $4,000-$12,000 per month within 60 days of implementing the CapacityRight Framework.

Should I switch from P SKU to F SKU?

In most cases, yes. Microsoft introduced Fabric F SKUs as the successor to Power BI Premium P SKUs, and they offer several cost advantages. F SKUs can be paused and resumed through the Azure portal or API, meaning you only pay for hours of actual use. P SKUs cannot be paused and bill 24/7/365 regardless of utilization. F SKUs also integrate with Azure Reserved Instances for up to 40% savings on committed workloads. The compute equivalents are: P1 maps to F64, P2 maps to F128, P3 maps to F256, P4 maps to F512, and P5 maps to F1024. Feature parity is nearly identical, though some admin experiences differ slightly. The migration itself is straightforward and can be completed with zero downtime using Microsoft workspace migration tools. We recommend switching unless you have a specific contractual reason to remain on P SKUs.

Can I pause Fabric capacity to save money?

Yes, but only F SKUs (Fabric SKUs provisioned through Azure) support pause and resume. Legacy P SKUs (Power BI Premium SKUs purchased through Microsoft 365) cannot be paused. When you pause an F SKU, billing stops within the hour and your workspaces become read-only. Users cannot view or interact with reports on a paused capacity. When you resume, it takes 1-3 minutes for full functionality to restore. The savings are significant: pausing an F64 ($7.30/hour) for 12 hours every night and all weekend saves approximately $3,500 per month compared to running 24/7. You can automate pause/resume using Azure Automation runbooks, Power Automate flows, or Azure Logic Apps triggered on a schedule. We recommend starting with nights and weekends, then analyzing usage patterns to identify additional pause windows during business hours where utilization drops below 5%.

What is a good CU utilization rate?

We measure utilization using our CU Efficiency Score, calculated as actual CU usage divided by provisioned CU capacity multiplied by 100. A score below 30% means you are significantly overspending and should downsize your SKU or implement pause/resume scheduling immediately. A score between 30% and 50% indicates moderate waste with room for optimization through scheduling and workload consolidation. A score between 50% and 75% represents a healthy, well-optimized capacity with adequate headroom for peak usage. A score between 75% and 90% is optimal for steady-state production workloads with reserved instances. A score above 90% means you are at risk of throttling and should consider upgrading your SKU or implementing burst capacity rules. Most organizations we audit initially score between 20% and 35%, which means they are paying for 2-3x more capacity than they actually consume.

How do I know if I am overpaying for Power BI?

There are five clear indicators of overspending. First, you are running a P SKU that cannot be paused while your utilization drops below 20% outside business hours. Second, you have Pro licenses ($10/user/month) assigned to users who only view reports and never create content, since viewers can use free licenses on Fabric capacity. Third, your Fabric Capacity Metrics app shows sustained CU utilization below 40% during peak hours. Fourth, you are paying month-to-month for Fabric capacity instead of using Azure Reserved Instances, which offer 40% savings on 1-year commitments. Fifth, you have multiple small capacities (F2, F4, F8) that could be consolidated into a single larger, more cost-efficient SKU. If any two of these apply to your organization, you are likely overspending by 25% or more.

What are reserved instances for Fabric?

Azure Reserved Instances allow you to pre-commit to a specific Fabric SKU for 1 or 3 years in exchange for a significant discount over pay-as-you-go pricing. A 1-year reservation saves approximately 36-40% compared to PAYG rates. A 3-year reservation saves approximately 55-60%. For example, an F64 at PAYG costs approximately $5,258.88 per month. With a 1-year reservation, that drops to approximately $3,155 per month, saving $2,103 monthly or $25,240 annually. Reserved instances are ideal for production workloads that run consistently during business hours. You can combine reserved instances with pause/resume for maximum savings: reserve capacity for your core business hours workload and use PAYG burst capacity for occasional peak demand. Reservations can be purchased through the Azure portal, and you can exchange or cancel them within Microsoft policy windows.

Can DirectLake mode reduce my Fabric costs?

Yes, DirectLake can significantly reduce CU consumption by eliminating the need for scheduled data refreshes. Traditional Import mode copies data into the Power BI engine, consuming substantial CU during each refresh cycle. A large dataset refresh might consume 30-60 minutes of CU time multiple times per day. DirectLake reads data directly from Parquet files in your Fabric lakehouse or warehouse OneLake storage, so there is no refresh step and therefore no refresh CU consumption. The query performance is comparable to Import mode because DirectLake still loads column segments into memory on demand. Organizations with large datasets (10 GB or larger) that refresh 4-8 times daily typically see a 15-30% reduction in overall CU consumption after migrating to DirectLake. The migration requires restructuring your data pipeline to land data in Delta/Parquet format in OneLake, which usually takes 2-4 weeks for a typical enterprise dataset.

How often should I review my Fabric spending?

We recommend monthly reviews at minimum, with weekly monitoring of key metrics. Your monthly review should include: CU Efficiency Score trending, cost-per-report analysis, license utilization audit (identify unused Pro/PPU licenses), and comparison of actual spend versus budget. Weekly, you should monitor the Fabric Capacity Metrics app for throttling events, burst usage patterns, and any new workspaces or reports consuming unexpected CU. Quarterly, conduct a full CapacityRight assessment that includes SKU right-sizing evaluation, reserved instance renewal or adjustment, workspace consolidation opportunities, and DAX query performance optimization. Set up Azure Cost Management alerts to notify you when spending exceeds thresholds. Most organizations we work with save an additional 5-10% annually through ongoing monitoring versus a one-time optimization.

Related Guides and Resources

Ready to Transform Your Data Strategy?

Get a free consultation to discuss how Power BI and Microsoft Fabric can drive insights and growth for your organization.

Get a Free Fabric Cost Assessment

Want to know exactly how much you can save? Our team will analyze your current Fabric and Power BI spend, calculate your CU Efficiency Score, and deliver a detailed savings roadmap — typically identifying $3,000 to $30,000 in monthly savings within the first engagement.