Skip to content

Commit 9f1a577

Browse files
Roland Krummenacherclaude
andcommitted
fix(open-data,hubs): align commitment discount eligibility with FOCUS categories
x_CommitmentDiscountSpendEligibility reported reservation pricing and x_CommitmentDiscountUsageEligibility reported savings plan pricing, which is the reverse of the FOCUS CommitmentDiscountCategory definition the toolkit uses everywhere else: a reservation is a Usage commitment (a quantity of usage) and a savings plan is a Spend commitment (an amount of money). Fixes the four components that carried the swap: - Update-CommitmentDiscountEligibility.ps1: the mapping moves into a new New-EligibilityRow helper so a unit test can pin the direction. - CommitmentDiscountEligibility.csv: the two columns are swapped for all 92,624 meters (36,287 rows change value). Verified against the Retail Prices API for a stratified sample of 12 meters covering all three value combinations. - IngestionSetup_v1_0.kql / IngestionSetup_v1_2.kql: the spend column now reads spMeters and the usage column reads riMeters. The "TODO: Check this to ensure it's correct" comment on the v1_2 block is resolved. The exclusion of reservation price rows from their own eligibility travels with riMeters. - open-data.md: corrects the two column descriptions and the sample rows. The best practice query in compute.md already used the correct mapping and is unchanged. This is a breaking change for consumers: the column names stay the same and the values change, so existing reports and queries return different results. Both changelog entries call that out. Fixes #2279 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent 298f792 commit 9f1a577

7 files changed

Lines changed: 36407 additions & 36309 deletions

File tree

docs-mslearn/toolkit/changelog.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: FinOps toolkit changelog
33
description: Review the latest features and enhancements in the FinOps toolkit, including updates to FinOps hubs, Power BI reports, and more.
44
author: MSBrett
55
ms.author: brettwil
6-
ms.date: 08/22/2026
6+
ms.date: 08/26/2026
77
ms.topic: reference
88
ms.service: finops
99
ms.subservice: finops-toolkit
@@ -38,6 +38,7 @@ The following section lists features and enhancements that are currently in deve
3838
- Fixed the `ContractedCost` recompute guard to compare with a null-safe tolerance instead of exact float equality, eliminating millions of no-op rewrites that polluted the `x_SourceValues` audit trail while preserving the null-cost backfill and no longer overwriting an existing cost when the unit price is missing ([#2216](https://github.com/microsoft/finops-toolkit/issues/2216)).
3939
- Fixed the SQL VMs without Azure Hybrid Benefit recommendation query to join on the SQL VM `virtualMachineResourceId` instead of a case-sensitive VM name match that skipped VMs with uppercase names and dropped duplicate names, and made all Azure Resource Graph join kinds explicit so no query relies on the `innerunique` default ([#2225](https://github.com/microsoft/finops-toolkit/pull/2225)).
4040
- Switched dimension enrichment in the v1_0/v1_2 ingestion transforms (`PricingUnits`, `Regions`, `ResourceTypes`, `Services`) from `join` to the broadcast-optimized `lookup` operator and deduplicated the `Services` mapping per resource type to prevent cost row fan-out ([#2225](https://github.com/microsoft/finops-toolkit/pull/2225)).
41+
- **Breaking change:** Fixed the v1_0 and v1_2 price transforms setting `x_CommitmentDiscountSpendEligibility` from reservation meters and `x_CommitmentDiscountUsageEligibility` from savings plan meters, the opposite of the FOCUS `CommitmentDiscountCategory` value the same transform assigns. The spend column now reports savings plan pricing and the usage column reports reservation pricing. Column names are unchanged, so reports and queries that read either column return different results. Prices ingested after upgrading carry the corrected values; rows ingested earlier keep the old values until they are reingested ([#2279](https://github.com/microsoft/finops-toolkit/issues/2279)).
4142
4243
### [FinOps workbooks](workbooks/finops-workbooks-overview.md)
4344
@@ -78,6 +79,7 @@ The following section lists features and enhancements that are currently in deve
7879
- **Fixed**
7980
- Fixed the commitment discount eligibility dataset refresh so it is reproducible and complete; retired meters now age out and previously missed meters are included ([#2164](https://github.com/microsoft/finops-toolkit/pull/2164)).
8081
- Fixed the weekly commitment discount eligibility refresh timing out before it could publish, which left the dataset unchanged since it first shipped in v14. The refresh now walks each price type directly instead of sharding by service family, and verifies completeness by comparing two independent traversals before writing ([#2251](https://github.com/microsoft/finops-toolkit/pull/2251)).
82+
- **Breaking change:** Fixed `x_CommitmentDiscountSpendEligibility` and `x_CommitmentDiscountUsageEligibility` carrying each other's values. FOCUS classifies a reservation as a usage commitment (committed to a quantity of usage) and a savings plan as a spend commitment (committed to an amount of money), so the spend column now reports savings plan pricing and the usage column reports reservation pricing. The dataset shipped with the two reversed from v14. Column names are unchanged, so any report or query that reads either column returns different results after this update ([#2279](https://github.com/microsoft/finops-toolkit/issues/2279)).
8183
8284
-->
8385

docs-mslearn/toolkit/open-data.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ description: Use open data to normalize and enhance your FinOps reporting, ensur
44
ms.topic: concept-article
55
author: flanakin
66
ms.author: micflan
7-
ms.date: 07/30/2026
7+
ms.date: 08/26/2026
88
ms.service: finops
99
ms.subservice: finops-toolkit
1010
ms.reviewer: micflan
@@ -162,13 +162,13 @@ Sample data:
162162
| MeterId | x_CommitmentDiscountSpendEligibility | x_CommitmentDiscountUsageEligibility |
163163
| ------------------------------------ | ------------------------------------ | ------------------------------------ |
164164
| 00003b45-e996-5b04-b673-a2db710f9237 | Eligible | Eligible |
165-
| 00020329-e657-5687-9d1a-0be9876e5116 | Eligible | Not Eligible |
166-
| 0003c425-b1df-551f-a855-9c95a08cb4ae | Not Eligible | Eligible |
165+
| 00020329-e657-5687-9d1a-0be9876e5116 | Not Eligible | Eligible |
166+
| 0003c425-b1df-551f-a855-9c95a08cb4ae | Eligible | Not Eligible |
167167

168168
A few important notes about the data:
169169

170-
- `x_CommitmentDiscountSpendEligibility` indicates whether the meter has Reserved Instance pricing.
171-
- `x_CommitmentDiscountUsageEligibility` indicates whether the meter has Savings Plan pricing.
170+
- `x_CommitmentDiscountSpendEligibility` indicates whether the meter has savings plan pricing. FOCUS classifies a savings plan as a spend commitment because you commit to an amount of money.
171+
- `x_CommitmentDiscountUsageEligibility` indicates whether the meter has reservation pricing. FOCUS classifies a reservation as a usage commitment because you commit to a quantity of usage.
172172
- Only primary meter regions are included to avoid duplicates.
173173
- Data is updated weekly via a GitHub Actions workflow.
174174

0 commit comments

Comments
 (0)