Area: FinOps hubs / FOCUS price sheet transform (Prices_transform_v1_2(), Prices_v1_2())
Summary
On SavingsPlan rows, ListUnitPrice, ContractedUnitPrice, and x_BaseUnitPrice are all back-filled from the matching on-demand (Consumption) row, and the row's raw MarketPrice / UnitPrice are discarded (raw UnitPrice survives only as x_EffectiveUnitPrice). As a result the negotiated-discount columns on SP rows are not SP-specific — they just echo the underlying PayGo meter's discount, so you cannot compute a "negotiated discount per SP meter" from Prices_v1_2().
Where (Prices_transform_v1_2())
| extend ContractedUnitPrice = iff(x_SkuPriceType != 'SavingsPlan', UnitPrice, real(null))
| extend ListUnitPrice = iff(x_SkuPriceType != 'SavingsPlan', MarketPrice, real(null))
...
// SP rows look up the Consumption twin by (MeterId, ProductId, SkuId, Tier, OfferId) - NOTE: no Term
| lookup kind=leftouter (Consumption | distinct tmp_SavingsPlanKey, ListUnitPrice, ContractedUnitPrice, x_BaseUnitPrice) on tmp_SavingsPlanKey
| extend ListUnitPrice = coalesce(ListUnitPrice, ListUnitPrice1)
| extend ContractedUnitPrice = coalesce(ContractedUnitPrice, ContractedUnitPrice1)
| extend x_EffectiveUnitPrice = iff(x_SkuPriceType == 'SavingsPlan', UnitPrice, real(null))
| extend x_ContractedUnitPriceDiscount = ListUnitPrice - ContractedUnitPrice
Consequences
x_ContractedUnitPriceDiscount(Percent) on an SP row = the on-demand meter's negotiated discount, not anything about the SP. Across a tenant it collapses to the flat PayGo EA/MCA discount (e.g. a uniform ~24.5% on compute), which is misleading when read as "SP negotiated discount."
- Because the back-fill key omits
Term, ListUnitPrice / ContractedUnitPrice are identical for the 1-yr and 3-yr SP rows of the same meter; only x_EffectiveUnitPrice varies by term. So x_ContractedUnitPriceDiscountPercent is term-independent on SP rows.
- The original SP
MarketPrice is not retained in any output column of Prices_v1_2().
Questions / requests
- Is populating
x_ContractedUnitPriceDiscount* on SP rows intended, given it only reflects the on-demand twin?
- Could the transform preserve the raw SP
MarketPrice (e.g. as x_SkuMarketPrice / x_SavingsPlanListPrice) so consumers can distinguish SP-native list pricing from the back-filled on-demand list price?
- Suggest documenting that, for SP rows, negotiated-discount columns are inherited from the on-demand meter and only
x_EffectiveUnitPriceDiscount* reflects the SP's own benefit.
Observed with toolkit v14, FOCUS 1.2.
Area: FinOps hubs / FOCUS price sheet transform (
Prices_transform_v1_2(),Prices_v1_2())Summary
On
SavingsPlanrows,ListUnitPrice,ContractedUnitPrice, andx_BaseUnitPriceare all back-filled from the matching on-demand (Consumption) row, and the row's rawMarketPrice/UnitPriceare discarded (rawUnitPricesurvives only asx_EffectiveUnitPrice). As a result the negotiated-discount columns on SP rows are not SP-specific — they just echo the underlying PayGo meter's discount, so you cannot compute a "negotiated discount per SP meter" fromPrices_v1_2().Where (
Prices_transform_v1_2())Consequences
x_ContractedUnitPriceDiscount(Percent)on an SP row = the on-demand meter's negotiated discount, not anything about the SP. Across a tenant it collapses to the flat PayGo EA/MCA discount (e.g. a uniform ~24.5% on compute), which is misleading when read as "SP negotiated discount."Term,ListUnitPrice/ContractedUnitPriceare identical for the 1-yr and 3-yr SP rows of the same meter; onlyx_EffectiveUnitPricevaries by term. Sox_ContractedUnitPriceDiscountPercentis term-independent on SP rows.MarketPriceis not retained in any output column ofPrices_v1_2().Questions / requests
x_ContractedUnitPriceDiscount*on SP rows intended, given it only reflects the on-demand twin?MarketPrice(e.g. asx_SkuMarketPrice/x_SavingsPlanListPrice) so consumers can distinguish SP-native list pricing from the back-filled on-demand list price?x_EffectiveUnitPriceDiscount*reflects the SP's own benefit.Observed with toolkit
v14, FOCUS1.2.