Reserved Instance Amortized Cost Shows $0 at Subscription Scope — CSP Explanation and Fix

Under CSP, Azure shows reservation usage with zero charges in both actual and amortized views at the subscription and resource group scopes you can access. Microsoft attributes reservation spend at billing scope — which for CSP customers lives in the partner's tenant. Without rebuilding amortization yourself, you can't see which resources consumed the benefit or how much reserved capacity is going unused. This is documented behavior, not a data problem in your tenant.

Why do reservation costs show $0 under CSP?

Reservation amortization — spreading a reservation purchase across the resources that consumed the benefit over the term — is computed at billing scope. Microsoft's Cost Management for partners documentation describes what CSP customers see at their own scopes: "Reservation usage appears with zero charges for actual and amortized costs," and "Amortized views and actual costs for reserved instances in the Azure RBAC scopes show zero charges." To see amortized reservation costs, the doc points to "the amortized cost view in billing scopes" — the partner's billing account, which customer tenants can't open.

This is worth being precise about, because it differs by agreement type: EA and MCA customers can see amortized costs at subscription scope, since their billing account lives in their own tenant. Microsoft's chargeback documentation frames amortized reporting as an EA/MCA billing-reader capability. Under CSP, the attribution never reaches your scope — so the portal isn't broken, it just has nothing to show you.

What can you do about it?

1. Rebuild amortization from the Reservations API (free, genuinely non-trivial)

The data needed to reconstruct amortization is readable with the Reservations Reader role: reservation orders (price, term, quantity) and daily utilization summaries. The rebuild then requires matching utilization to usage records — by SKU flexibility group, region, and reservation scope — and distributing each day's amortized cost across the matched resources, plus tracking capacity nobody consumed. Instance size flexibility is what makes this hard: a reservation for one VM size can be consumed by other sizes in the same flexibility group at ratio-adjusted rates. Budget for real engineering time if you take this on, and remember the portal's usage records at your scope still show the reservation-covered usage at $0, so you're joining two datasets with different keys.

2. Ask your CSP partner for amortized reporting (free, partner-dependent)

Your partner can see amortized views at their billing scope and may share reports. Coverage varies: partner reporting is typically periodic and invoice-oriented, not resource-level and daily, and it won't join against your own subscription-scope data or Power BI model. Worth asking; rarely sufficient as the only mechanism.

3. A maintained amortization rebuild

CSP Continuity implements option 1 as part of its daily collection: it pulls reservation orders and daily utilization via the Reservations API, matches them to usage records by SKU flexibility group, region, and scope, and distributes the daily amortized cost proportionally across matched resources. Unused capacity appears as synthetic records, so waste is visible instead of invisible. The amortized view sits alongside consolidated actual costs in the same SQL database, Parquet files, in-portal workbook, and query API — deployed in about 5 minutes from the Azure Marketplace, with read-only permissions granted by a 2-minute PowerShell script.

Frequently asked questions

Why does actual cost show $0 too, not just amortized cost?
Microsoft's partner documentation states that under CSP, "Reservation usage appears with zero charges for actual and amortized costs" at the Azure RBAC scopes you can access. Both views depend on billing-scope attribution, which lives in the partner tenant — so both show zero. The usage happened; the charge attribution is simply not visible at your scope.
How does CSP Continuity surface unused reservation capacity?
The application compares each reservation's purchased capacity against the daily utilization reported by the Reservations API. Capacity that no resource consumed appears as synthetic records in the consolidated data, so unused reservation spend shows up in reports instead of silently disappearing.
Does this apply to Savings Plans as well?
Microsoft's amortized-cost documentation notes that "the same logic applies to a savings plan" as to reservations — benefit attribution happens at billing scope. So CSP customers should expect similar visibility gaps for savings plan benefits at subscription scope, though Microsoft documents the zero-charges behavior explicitly for reserved instances.
Is my bill wrong? Am I actually being charged $0?
No. Your CSP partner invoices you according to your agreement with them, including reservation purchases. The $0 is a reporting artifact: the portal cannot attribute reservation benefit to resources at the scopes available to you. Invoiced amounts come from your partner and are unaffected.

The maintained alternative

CSP Continuity deploys from the Azure Marketplace in about 5 minutes, needs one 2-minute PowerShell script, and starts collecting consolidated cost data within hours — entirely inside your tenant.

Related guides

Last updated: July 15, 2026. CSP Continuity is designed to work across a wide range of Azure environments. Results may vary based on tenant configuration, Microsoft API availability, and CSP partner setup. See our Terms of Use for details. Microsoft, Azure, and Power BI are trademarks of Microsoft Corporation. This page describes documented behavior of Microsoft services and links to official Microsoft documentation.