Validate FOCUS data Compare and validate FOCUS cost and usage data with existing Cost Management actual and amortized datasets.
On this page
This document helps you validate FOCUS data by comparing it to actual and amortized cost data from Cost Management. The goal of this article is to help you familiarize yourself with and transition to FOCUS data with confidence. To learn more about FOCUS, refer to the FOCUS overview.
The comparisons in this document are focused on costs, prices, and quantities to facilitate validating numbers across datasets. For details about text and dates, refer to Updating reports to use FOCUS columns.
Note that FOCUS includes both actual and amortized data in a single dataset so there will be more rows in FOCUS than you will find in either the actual or amortized cost datasets, but there are fewer records than actual and amortized datasets together since many records are duplicated across actual and amortized datasets.
š Comparing FOCUS with actual cost
The following mapping can be used to compare FOCUS with an actual cost data in Cost analysis or other cost API or export.
Actual cost column | FOCUS column | Notes |
---|---|---|
BenefitId | CommitmentDiscountId | Avoid using ReservationId in Cost Management. Prefer BenefitId to include savings plans and map to the fully-qualified ID. Actual cost will be 0 for commitment usage. |
BillingPeriodEndDate + 1 day | BillingPeriodEnd | FOCUS uses exclusive end dates (e.g., Feb 1 instead of Jan 31). |
BillingPeriodStartDate | BillingPeriodStart | Ā |
ChargeType == āUsageā | ChargeCategory == āUsageāand CommitmentDiscountStatus != āUnusedā | FOCUS includes unused commitments in the usage charge category. |
ChargeType == āPurchaseā | ChargeCategory == āPurchaseāand ChargeClass == null | FOCUS categorizes refunds into each individual charge category. |
ChargeType == āRefundā | ChargeClass == āCorrectionā | FOCUS categorizes refunds into each individual charge category. As of September 2024, Cost Management only includes purchase refunds. |
ChargeType == āRoundingAdjustmentā | ChargeCategory == āAdjustmentā | Ā |
CostInBillingCurrency | BilledCost | FOCUS BilledCost maps to actual cost that is on the invoice. BilledCost cannot be compared to the amortized cost dataset. |
Date | ChargePeriodStart | FOCUS has separate start and end times for the date of the charge. Generally, you only need the start time. |
PayGPrice * Quantity (EA)PaygCostInBillingCurrency (MCA only) | ListCost | Ā |
PayGPrice (EA)PayGPrice * ExchangeRate (MCA) | ListUnitPrice | FOCUS prices use the billing currency while actual/amortized prices use the pricing currency for MCA. |
PricingModel == āOnDemandā | PricingCategory == āStandardā | Ā |
PricingModel == āSpotā | PricingCategory == āDynamicā | Ā |
PricingModel == āReservationā | PricingCategory == āCommittedā and CommitmentDiscountType == āReservationā | FOCUS PricingCategory merges all commitments. Use CommitmentDiscountType or CommitmentDiscountCategory to differentiate commitment discount types. Actual cost will be 0 for commitment usage. |
PricingModel == āSavingsPlanā | PricingCategory == āCommittedā and CommitmentDiscountType == āSavings Planā | FOCUS PricingCategory merges all commitments. Use CommitmentDiscountType or CommitmentDiscountCategory to differentiate commitment discount types. Actual cost will be 0 for commitment usage. |
PricingModel == āReservationā or PricingModel == āSavingsPlanā | PricingCategory == āCommittedā | FOCUS PricingCategory merges all commitments. Actual cost will be 0 for commitment usage. |
ProductId (MCA) | SkuId | Ā |
Quantity | ConsumedQuantity | FOCUS ConsumedQuantity is only available for usage. There may be cases where ConsumedQuantity differs from actual/amortized Quantity due to inconsistent units between Quantity and UnitOfMeasure . |
Quantity | PricingQuantity / x_PricingBlockSize | FOCUS PricingQuantity is based on the pricing block size, if applicable, while actual/amortized Quantity is not. There may be cases where PricingQuantity differs from actual/amortized Quantity due to inconsistent units between Quantity and UnitOfMeasure . |
SubscriptionId | SubAccountId | FOCUS subaccount maps to subscriptions. |
UnitPrice (EA)UnitPrice * ExchangeRate (MCA) | ContractedUnitPrice / x_PricingBlockSize | FOCUS ContractedUnitPrice is based on the pricing block size while actual/amortized UnitPrice is not. In many cases, they will be the same when x_PricingBlockSize is 1, but they will differ if pricing block size is larger. FOCUS prices use the billing currency while actual/amortized prices use the pricing currency for MCA. |
UnitPrice * Quantity (EA)UnitPrice * Quantity * ExchangeRate (MCA) | ContractedCost | FOCUS prices use the billing currency while actual/amortized prices use the pricing currency for MCA. |
UnitOfMeasure | PricingUnit | FOCUS PricingUnit is parsed out of UnitOfMeasure . For an exact match, refer to x_PricingUnitDescription . FOCUS ConsumedUnit matches PricingUnit while the quantities may differ based on x_PricingBlockSize . |
š Comparing FOCUS with amortized cost
The following mapping can be used to compare FOCUS with an amortized cost data in Cost analysis or other cost API or export.
Amortized cost column | FOCUS column | Notes |
---|---|---|
BenefitId | CommitmentDiscountId | Avoid using ReservationId in Cost Management. Prefer BenefitId to include savings plans and map to the fully-qualified ID. |
BillingPeriodEndDate + 1 day | BillingPeriodEnd | FOCUS uses exclusive end dates (e.g., Feb 1 instead of Jan 31). |
BillingPeriodStartDate | BillingPeriodStart | Ā |
ChargeType == āUsageā | ChargeCategory == āUsageāand CommitmentDiscountStatus != āUnusedā | FOCUS includes unused commitments in the usage charge category. |
ChargeType == āUsageāor ChargeType == āUnusedReservationāor ChargeType == āUnusedSavingsPlanā | ChargeCategory == āUsageā | FOCUS includes unused commitments in the usage charge category. |
ChargeType == āPurchaseā | ChargeCategory == āPurchaseāand ChargeClass == nulland ServiceName != āAzure Savings Plan for Computeāand ServiceName != āAzure Reservationsā | FOCUS includes commitment purchases and all refunds in the purchase charge category. |
ChargeType == āRefundā | ChargeClass == āCorrectionā | FOCUS includes refunds in the purchase charge category. |
ChargeType == āRoundingAdjustmentā | ChargeCategory == āAdjustmentā | Ā |
ChargeType == āUnusedReservationā | CommitmentDiscountStatus == āUnusedā and CommitmentDiscountType == āReservationā | FOCUS separates the commitment discount status and type in separate columns. |
ChargeType == āUnusedSavingsPlanā | CommitmentDiscountStatus == āUnusedā and CommitmentDiscountType == āSavings Planā | FOCUS separates the commitment discount status and type in separate columns. |
ChargeType == āUnusedReservationāor ChargeType == āUnusedSavingsPlanā | CommitmentDiscountStatus == āUnusedā | FOCUS separates the commitment discount status and type in separate columns. |
CostInBillingCurrency | EffectiveCost | FOCUS EffectiveCost maps to amortized cost. EffectiveCost cannot be compared to the actual cost dataset. |
Date | ChargePeriodStart | FOCUS has separate start and end times for the date of the charge. Generally, you only need the start time. |
PayGPrice * Quantity (EA)PaygCostInBillingCurrency (MCA only) | ListCost | Ā |
PayGPrice (EA)PayGPrice * ExchangeRate (MCA) | ListUnitPrice | FOCUS prices use the billing currency while actual/amortized prices use the pricing currency for MCA. |
PricingModel == āOnDemandā | PricingCategory == āStandardā | Ā |
PricingModel == āSpotā | PricingCategory == āDynamicā | Ā |
PricingModel == āReservationā | PricingCategory == āCommittedā and CommitmentDiscountType == āReservationā | FOCUS PricingCategory merges all commitments. Use CommitmentDiscountType or CommitmentDiscountCategory to differentiate commitment discount types. |
PricingModel == āSavingsPlanā | PricingCategory == āCommittedā and CommitmentDiscountType == āSavings Planā | FOCUS PricingCategory merges all commitments. Use CommitmentDiscountType or CommitmentDiscountCategory to differentiate commitment discount types. |
PricingModel == āReservationā or PricingModel == āSavingsPlanā | PricingCategory == āCommittedā | FOCUS PricingCategory merges all commitments. |
ProductId (MCA) | SkuId | Ā |
Quantity | ConsumedQuantity | FOCUS ConsumedQuantity is only available for usage. There may be cases where ConsumedQuantity differs from actual/amortized Quantity due to inconsistent units between Quantity and UnitOfMeasure . |
Quantity | PricingQuantity / x_PricingBlockSize | FOCUS PricingQuantity is based on the pricing block size, if applicable, while actual/amortized Quantity is not. There may be cases where PricingQuantity differs from actual/amortized Quantity due to inconsistent units between Quantity and UnitOfMeasure . |
SubscriptionId | SubAccountId | FOCUS subaccount maps to subscriptions. |
UnitPrice (EA)UnitPrice * ExchangeRate (MCA) | ContractedUnitPrice / x_PricingBlockSize | FOCUS ContractedUnitPrice is based on the pricing block size while actual/amortized UnitPrice is not. In many cases, they will be the same when x_PricingBlockSize is 1, but they will differ if pricing block size is larger. FOCUS prices use the billing currency while actual/amortized prices use the pricing currency for MCA. |
UnitPrice * Quantity (EA)UnitPrice * Quantity * ExchangeRate (MCA) | ContractedCost | FOCUS prices use the billing currency while actual/amortized prices use the pricing currency for MCA. |
UnitOfMeasure | PricingUnit | FOCUS PricingUnit is parsed out of UnitOfMeasure . For an exact match, refer to x_PricingUnitDescription . FOCUS ConsumedUnit matches PricingUnit while the quantities may differ based on x_PricingBlockSize . |
šāāļø Feedback about FOCUS columns
If you have feedback about our mappings or about our full FOCUS support plans, please start a thread in discussions. If you believe youāve found a bug, please create an issue.
If you have feedback about FOCUS, please create an issue in the FOCUS repository. We also encourage you to consider contributing to the FOCUS project. The project is looking for more practitioners to help bring their experience to help guide efforts and make this the most useful spec it can be. To learn more about FOCUS or to contribute to the project, visit focus.finops.org.
š§ See also
- How to update existing reports to FOCUS
- How to convert Cost Management data to FOCUS
- Data dictionary
- Generating a unique ID
- Known issues
- Common terms
š§° Related tools
- š¦ FinOps hubs ā Open, extensible, and scalable cost reporting.
- š Power BI reports ā Accelerate your reporting with Power BI starter kits.
- š„ļø PowerShell module ā Automate and manage FinOps solutions and capabilities.
- š Open data ā Data available for anyone to access, use, and share without restriction.