THE LINUX FOUNDATION PROJECTS
Test-spec

FinOps Open Cost and Usage Specification

Version

Publication version 1.1

Copyright © 2024 – FinOps Open Cost and Usage Specification (FOCUS) aSeries of the Joint Development Foundation Projects, LLC. LinuxFoundation trademark,and document use rules apply.

Status of This Document

This section describes the status of this document at the time of itspublication.

This is a published release of the FinOps Open Cost and UsageSpecification.

This document was produced by a group operating under the JointDevelopment Foundation Projects agreement. FOCUS maintains a public listof any patent disclosures made in connection with the deliverables ofthe group; thatpage also includes instructions for disclosing a patent. Anindividual who has actual knowledge of a patent which the individualbelieves contains Essential Claim(s) must disclose the information.

Document Use License

Copyright (c) Joint Development Foundation Projects, LLC, FinOps OpenCost and Usage Specification (FOCUS) Series and its contributors. Thematerials in this repository are made available under the CreativeCommons Attribution 4.0 International license (CC-BY-4.0), available at[https://creativecommons.org/licenses/by/4.0/legalcode](https://creativecommons.org/licenses/by/4.0/legalcode).

Shield:

This work is made available under: Creative CommonsAttribution 4.0 International License.

THESE MATERIALS ARE PROVIDED “AS IS.” The parties expressly disclaimany warranties (express, implied, or otherwise), including impliedwarranties of merchantability, non-infringement, fitness for aparticular purpose, or title, related to the materials. The entire riskas to implementing or otherwise using the materials is assumed by theimplementer and user. IN NO EVENT WILL THE PARTIES BE LIABLE TO ANYOTHER PARTY FOR LOST PROFITS OR ANY FORM OF INDIRECT, SPECIAL,INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER FROM ANY CAUSES OFACTION OF ANY KIND WITH RESPECT TO THIS DELIVERABLE OR ITS GOVERNINGAGREEMENT, WHETHER BASED ON BREACH OF CONTRACT, TORT (INCLUDINGNEGLIGENCE), OR OTHERWISE, AND WHETHER OR NOT THE OTHER MEMBER HAS BEENADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

This document is governed by the Patent Policy Option 4: W3C Mode:See projectcharter.

Abstract

FOCUS is an open-source specification for billing data. It defines a common schema for billing data, aligns terminology with the FinOpsFramework and defines a minimum set of requirements for billing data. The specification provides clear guideline for billing data generators to produce FinOps-serviceable data. The specification enables FinOps practitioners to perform common FinOps capabilities such as chargeback,cost allocation, budgeting and forecasting etc. using a generic set of instructions, regardless of the origin of the FOCUS compatible dataset.

Working Group

Maintainers

Thanks to the following FOCUS Maintainers for their leadership andcontributions to the FOCUS Release v1.1specification.

  • Alex Hullah (Goldman Sachs)
  • Christopher Harris (Datadog)
  • Irena Jurica (Neos)
  • Joaquin Prado (FinOps Foundation)
  • Karl Kraft (Walmart)
  • Larry Advey (Twilio)
  • Michael Flanakin (Microsoft)
  • Riley Jenkins (Domo)
  • Shawn Alpay (Envisor / FinOps Foundation)
  • Udam Dewaraja (FinOps Foundation)
  • Zach Erdman (Amazon Web Services)

Contributors

Thanks to the following FOCUS members for their contributions to theFOCUS Release v1.1 specification.

  • Adam Schwartz (Ernst & Young)
  • Andrew Qu (Everest)
  • Arun Ramakrishnan (Oracle)
  • Erik Peterson (CloudZero)
  • George Parker (Salesforce)
  • Graham Murphy (Australian Retirement Trust)
  • Janine Pickard-Green (MagicOrange Group Limited)
  • John Grubb (Platform.sh)
  • Joseph John (Microsoft)
  • Marc Perreaut (Amadeus)
  • Rob Martin (FinOps Foundation)
  • Rupa Patel (Google)
  • Sanjna Srivatsa (VMWare)
  • Sonal Garg (Kyndryl)
  • Tim Wright (Google)

Steering Committee Members

Thanks to the following FOCUS Steering Committee members for theirleadership on the FOCUS specification.

  • Anne Johnston (Capital One)
  • Michael Flanakin (Microsoft)
  • Mike Fuller (FinOps Foundation)
  • Roy Wolman (Amazon Web Services)
  • Sarah McMullin (Google)
  • Tim O’Brien (Walmart)

Table of Contents

  • 5. Use Case Library
  • 6. Glossary
  • 7. Appendix
  • 1. Introduction

    This section is non-normative.

    FOCUS aims to establish a community-driven specification forconsumption-based billing data. Due to the lack of a broadly adoptedspecification, infrastructure and services providers have resorted toproprietary billing schemas and terminology. The lack of conformanceamongst the billing data generators has forced FinOps practitioners toemploy disparate, best-effort schemes which each practitionermust develop individually for each provider to performessential FinOps capabilities such as chargeback, cost allocation,budgeting and forecasting.

    The FOCUS specification’s schema definition and FinOps-alignedterminology provide a clear guide for producing FinOps-serviceablebilling datasets. Datasets conforming to FOCUS enable FinOpspractitioners to perform common FinOps capabilities, like the onesmentioned above, using a generic set of instructions, regardless of theorigin of the dataset.

    1.1. Background and History

    This project is supported by the FinOps Foundation. This work initiallystarted under the Open Billing working group under the FinOpsFoundation. The decision was made in Jan 2023 to begin to migrate thework to a newly formed project under the Linux Foundation called theFinOps Open Cost and Usage Specification (FOCUS) to better support thecreation of a specification.

    1.2. Intended Audience

    This specification is designed to be used by three major groups:

    • Billing data generators: Infrastructure and servicesproviders that bill based on consumption, such as (but notlimited to):
    • FinOps tool providers: Organizations that provide tools toassist with FinOps
    • FinOps practitioners: Organizations and individuals consumingbilling data for doing FinOps

    1.3. Scope

    The FOCUS working group will develop an open-source specification forbilling data. The schema will define data dimensions, metrics, a set of attributes aboutbilling data, and a common lexicon for describing billing data.

    1.4. Design Principles

    The following principles were considered while building thespecification.

    1.4.1. FOCUS isan iterative, living specification

    • Incremental iterations of the specification released regularly willprovide higher value to practitioners and allow feedback as thespecification develops. The goal is not to get to a complete, finishedspecification in one pass.

    1.4.2. Workingbackward with ease of adoption

    • Aim to work backward from essential FinOps capabilities thatpractitioners need to perform to prioritize the dimensions, metrics andattributes of the cost and usage data that should be defined in thespecification to fulfill that capability.
    • Be FinOps scenario-driven. Define columns that answer scenarioquestions; don’t look for scenarios to fit a column, each column musthave a use case.
    • Don’t add dimensions or metrics to the specification just because itcan be added.
    • When defining the specification, consideration should be made toexisting data already in the major providers’ (AWS, GCP, Azure, OCI)datasets.
    • As long as it solves the FinOps use case, there should be apreference to align with data that is already present in a majority ofthe major providers.
    • Strive for simplicity. However, prioritize accuracy, clarity, andconsistency.
    • Strive to build columns that serve a single purpose, with clear andconcise names and values.
    • The specification should allow data to be presented free fromjargon, using simple understandable terms, and be approachable.
    • Naming and terms used should be carefully considered to avoid usingterms for which the definition could be confused by the reader. If aterm must be used which has either an unclear or multiple definitions,it should be clarified in the glossary.
    • The specification should provide all of the data elements necessaryfor the Capabilities.

    1.4.3.Provider-neutral approach by default

    • While the schema, naming, terminology, and attributes of manyproviders are reviewed during development, this specification aims to beprovider-neutral.
    • Contributors must take care to ensure the specification examines howeach decision relates to each of the major cloud providers and SaaSvendors, not favoring any single one.
    • In some cases, the approach may closely resemble one or moreprovider’s implementations, while in other cases, the approach might benew. In all cases, the FOCUS group (community composed of FinOpspractitioners, Cloud and SaaS providers and FinOps vendors) will attemptto prioritize enabling FinOps Capabilitiesand alignment with the FinOps Framework.

    1.4.4. Extensibility

    • The initial specification aims to introduce a common schema andterminology for billing datasets produced by Cloud Service Providers(CSPs).
    • The specification, however, aims to be extensible to SaaS productsand other types of cost datasets.
    • Future versions of the specification will look to expand the contentto support a broader set of prioritized FinOps capabilities.

    1.5. Design Notes

    1.5.1. Optimize for dataanalysis

    • Optimize columns for data analysis at scale and avoid therequirement of splitting or parsing values.
    • Avoid complex JSON structures when an alternative columnar structureis possible.
    • Facilitate the inclusion of data necessary for a system of recordfor cost and usage data to consume.

    1.5.2. Consistency helpswith clarity

    • Where possible, use consistent names that will naturally createassociations between related columns in the specification.
    • Column naming must strictly follow the column naming conventions.
    • Use established standards (e.g., ISO8601 for dates, ISO4217 forcurrency).

    1.6. Typographic Conventions

    The keywords “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”,”SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and”OPTIONAL” in this specification are to be interpreted as described inBCP14 [RFC2119][RFC8174] when, and onlywhen, they appear in all capitals, as shown here.

    1.7. FOCUS Feature level

    Under each column defined in the FOCUS specification, there exists a’Feature level’ designation that describes the column as ‘Mandatory’,’Conditional’, or ‘Optional’. Feature level is designated based on thefollowing criteria described in the normative requirements in eachcolumn definition:

    • If the existence of a column is described with MUST with noconditions of when it applies, then the feature level is designated as’Mandatory’.
    • If the existence of a column is described as MUST with conditions ofwhen it applies, then the feature level is designated as’Conditional’.
    • If the existence of a column is described as RECOMMENDED, then thefeature level is designated as ‘Recommended’.
    • If the existence of a column is described as MAY, then the featurelevel is designated as ‘Optional’.

    1.8. ConformanceCheckers and Validators

    There are no current resources available to test for specificationconformance or validators to run on sample data. When one becomesavailable, this section of the specification will be updated withdetails.

    2. Columns

    The FOCUS specification defines a group of columns that providequalitative values (such as dates, resource, and provider information)categorized as “dimensions” and quantitative values (numeric values)categorized as “metrics” that can be used for performing various FinOpscapabilities. Metrics are commonly used for aggregations (sum,multiplication, averaging etc.) and statistical operations within thedataset. Dimensions are commonly used to categorize, filter, and revealdetails in your data when combined with metrics. The Columns arepresented in Alphabetical order.

    2.1. Availability Zone

    An availabilityzone is a provider-assigned identifier for a physicallyseparated and isolated area within a Region that provides highavailability and fault tolerance. Availability Zone is commonly used forscenarios like analyzing cross-zone data transfer usage and thecorresponding cost based on where resources are deployed.

    The AvailabilityZone column is RECOMMENDED to be present in a FOCUS dataset when theprovider supports deploying resources or services within anavailability zone. This column MUST be of type String and MAYcontain null values when a charge is not specific to an availabilityzone.

    2.1.1. Column ID

    AvailabilityZone

    2.1.2. Display Name

    Availability Zone

    2.1.3. Description

    A provider-assigned identifier for a physically separated andisolated area within a Region that provides high availability and faulttolerance.

    2.1.4. Content constraints

    Constraint Value
    Column type Dimension
    Feature level Recommended
    Allows nulls True
    Data type String
    Value format <not specified>

    2.1.5. Introduced (version)

    0.5

    2.2. Billed Cost

    The billed costrepresents a charge serving as the basis for invoicing, inclusive of theimpacts of all reduced rates and discounts while excluding the amortization of relevantpurchases (one-time or recurring) paid to cover future eligible charges.This cost is denominated in the BillingCurrency. The Billed Cost is commonly used to perform FinOpscapabilities that require cash-basis accounting such as cost allocation,budgeting, and invoice reconciliation.

    The BilledCost column MUST be present in a FOCUS dataset and MUST NOTbe null. This column MUST be of type Decimal, MUST conform to Numeric Format, and be denominated in theBillingCurrency. The sum of the BilledCost for rows in a given billing period MUST matchthe sum of the invoices received for that billing period for abilling account.

    2.2.1. Column ID

    BilledCost

    2.2.2. Display Name

    Billed Cost

    2.2.3. Description

    A charge serving as the basis for invoicing, inclusive of all reducedrates and discounts while excluding the amortization of upfrontcharges (one-time or recurring).

    2.2.4. Content constraints

    Constraint Value
    Column type Metric
    Feature level Mandatory
    Allows nulls False
    Data type Decimal
    Value format NumericFormat
    Number range Any valid decimal value

    2.2.5. Introduced (version)

    0.5

    2.3. Billing Account ID

    A Billing Account ID is a provider-assigned identifier for a billing account.Billing accounts are commonly used for scenarios like groupingbased on organizational constructs, invoice reconciliation and costallocation strategies.

    The BillingAccountId column MUST be present in a FOCUS dataset. This columnMUST be of type String and MUST NOT contain null values.BillingAccountId MUST be a globally unique identifier within aprovider.

    See Appendix:Grouping constructs for resources or services for details andexamples of the different grouping constructs supported by FOCUS.

    2.3.1. Column ID

    BillingAccountId

    2.3.2. Display Name

    Billing Account ID

    2.3.3. Description

    The identifier assigned to a billing account by theprovider.

    2.3.4. Content constraints

    Constraint Value
    Column type Dimension
    Feature level Mandatory
    Allows nulls False
    Data type String
    Value format <not specified>

    2.3.5. Introduced (version)

    0.5

    2.4. Billing Account Name

    A Billing Account Name is a display name assigned to a billing account.Billing accounts are commonly used for scenarios like groupingbased on organizational constructs, invoice reconciliation and costallocation strategies.

    The BillingAccountName column MUST be present in a FOCUS dataset and MUST NOTbe null when the provider supports assigning a display name for thebilling account. This column MUST be of type String.BillingAccountName MUST be unique within a customer when a customer hasmore than one billing account.

    See Appendix:Grouping constructs for resources or services for details andexamples of the different grouping constructs supported by FOCUS.

    2.4.1. Column ID

    BillingAccountName

    2.4.2. Display Name

    Billing Account Name

    2.4.3. Description

    The display name assigned to a billing account.

    2.4.4. Content constraints

    Constraint Value
    Column type Dimension
    Feature level Mandatory
    Allows nulls True
    Data type String
    Value format <not specified>

    2.4.5. Introduced (version)

    0.5

    2.5. Billing Currency

    Billing currency isan identifier that represents the currency that a charge for resources or services was billed in. BillingCurrency is commonly used in scenarios where costs need to be grouped oraggregated.

    The BillingCurrency column MUST be present in a FOCUS dataset.BillingCurrency MUST match the currency used in the invoice generated bythe invoice issuer. This column MUST be of type String and MUST NOTcontain null values. BillingCurrency MUST conform to Currency Code Format requirements.

    2.5.1. Column ID

    BillingCurrency

    2.5.2. Display Name

    Billing Currency

    2.5.3. Description

    Represents the currency that a charge was billed in.

    2.5.4. Content Constraints

    Constraint Value
    Column type Dimension
    Feature level Mandatory
    Allows nulls False
    Data type String
    Value format CurrencyCode Format

    2.5.5. Introduced (version)

    0.5

    2.6. Billing Period End

    Billing Period End represents the exclusive end date and timeof a billing period. Forexample, a time period where BillingPeriodStart is’2024-01-01T00:00:00Z’ and BillingPeriodEnd is ‘2024-02-01T00:00:00Z’includes charges for January, since BillingPeriodStart is inclusive, but does notinclude charges for February since BillingPeriodEnd isexclusive.

    The BillingPeriodEnd column MUST be present in a FOCUS dataset. This columnMUST be of type Date/Time Format, MUST bean exclusive value, and MUST NOT contain null values. The sumof the BilledCost column for rows in a given billingperiod MUST match the sum of the invoices received for thatbilling period for a billing account.

    2.6.1. Column ID

    BillingPeriodEnd

    2.6.2. Display Name

    Billing Period End

    2.6.3. Description

    The exclusive enddate and time of a billingperiod.

    2.6.4. Content Constraints

    Constraint Value
    Column type Dimension
    Feature level Mandatory
    Allows nulls False
    Data type Date/Time
    Value format Date/TimeFormat

    2.6.5. Introduced (version)

    0.5

    2.7. Billing Period Start

    Billing Period Start represents the inclusive start date andtime of a billingperiod. For example, a time period where BillingPeriodStart is’2024-01-01T00:00:00Z’ and BillingPeriodEnd is ‘2024-02-01T00:00:00Z’includes charges for January, since BillingPeriodStart is inclusive, butdoes not include charges for February since BillingPeriodEnd is exclusive.

    The BillingPeriodStart column MUST be present in a FOCUS dataset, MUST be oftype Date/Time Format, MUST be aninclusive value, and MUST NOT contain null values. The sum ofthe BilledCost metric for rows in a given billingperiod MUST match the sum of the invoices received for thatbilling period for a billing account.

    2.7.1. Column ID

    BillingPeriodStart

    2.7.2. Display Name

    Billing Period Start

    2.7.3. Description

    The inclusive startdate and time of a billingperiod.

    2.7.4. Content Constraints

    Constraint Value
    Column type Dimension
    Feature level Mandatory
    Allows nulls False
    Data type Date/Time
    Value format Date/TimeFormat

    2.7.5. Introduced (version)

    0.5

    2.8. Capacity Reservation ID

    A Capacity Reservation ID is the identifier assigned to a capacity reservationby the provider. Capacity Reservation ID is commonly used for scenariosto allocate charges for capacity reservation usage.

    The CapacityReservationId column adheres to the followingrequirements:

    • CapacityReservationId MUST be present in a FOCUS dataset when theprovider supports capacity reservations and MUST be of typeString.
    • CapacityReservationId SHOULD NOT be null when a charge is related toa capacity reservation.
    • CapacityReservationId MUST NOT be null when a charge represents theunused portion of a capacity reservation.
    • CapacityReservationId MUST be null when a charge is not related to acapacity reservation.
    • CapacityReservationId MUST ensure global uniqueness within theprovider and SHOULD be a fully-qualified identifier.

    2.8.1. Column ID

    CapacityReservationId

    2.8.2. Display Name

    Capacity Reservation ID

    2.8.3. Description

    The identifier assigned to a capacity reservation by theprovider.

    2.8.4. Content constraints

    Constraint Value
    Column type Dimension
    Feature level Conditional
    Allows nulls True
    Data type String
    Value format <not specified>

    2.8.5. Introduced (version)

    1.1

    2.9. Capacity ReservationStatus

    Capacity Reservation Status indicates whether the charge representseither the consumption of the capacity reservationidentified in the CapacityReservationId column or when the capacityreservation is unused.

    The CapacityReservationStatus column adheres to the followingrequirements:

    • CapacityReservationStatus MUST be present in a FOCUS dataset when theprovider supports capacity reservations and MUST be of typeString.
    • CapacityReservationStatus MUST be null when CapacityReservationId isnull.
    • CapacityReservationStatus MUST NOT be null whenCapacityReservationId is not null and ChargeCategory is “Usage”.
    • CapacityReservationStatus MUST be one of the allowed values.
    • CapacityReservationStatus MUST label all unused capacityreservation charges and MUST label used capacityreservation charges if the provider supports it.

    2.9.1. Column ID

    CapacityReservationStatus

    2.9.2. Display Name

    Capacity Reservation Status

    2.9.3. Description

    Indicates whether the charge represents either the consumption of acapacity reservation or when a capacity reservation isunused.

    2.9.4. Content constraints

    Constraint Value
    Column type Dimension
    Feature level Conditional
    Allows nulls True
    Data type String
    Value format Allowed Values

    Allowed values:

    Value Description
    Used Charges that utilized a specific amount ofa capacity reservation.
    Unused Charges that represent the unused portionof a capacity reservation.

    2.9.5. Introduced (version)

    1.1

    2.10. Charge Category

    Charge Category represents the highest-level classification of acharge based on the nature of how it is billed. Charge Category iscommonly used to identify and distinguish between types of charges thatmay require different handling.

    The ChargeCategory column MUST be present in a FOCUS dataset and MUST NOTbe null. This column is of type String and MUST be one of the allowedvalues.

    2.10.1. Column ID

    ChargeCategory

    2.10.2. Display Name

    Charge Category

    2.10.3. Description

    Represents the highest-level classification of a charge based on thenature of how it is billed.

    2.10.4. Content Constraints

    Constraint Value
    Column type Dimension
    Feature level Mandatory
    Allows nulls False
    Data type String
    Value format Allowed values

    Allowed values:

    Value Description
    Usage Positive or negative charges based on thequantity of a service or resource that was consumed over a given periodof time including refunds.
    Purchase Positive or negative charges for theacquisition of a service or resource bought upfront or on a recurringbasis including refunds.
    Tax Positive or negative applicable taxes thatare levied by the relevant authorities including refunds. Tax chargesmay vary depending on factors such as the location, jurisdiction, andlocal or federal regulations.
    Credit Positive or negative charges granted bythe provider for various scenarios e.g promotional credits orcorrections to promotional credits.
    Adjustment Positive or negative charges the providerapplies that do not fall into other category values.

    2.10.5. Introduced (version)

    0.5

    2.11. Charge Class

    Charge Class indicates whether the row represents a correction to apreviously invoiced billingperiod. Charge Class is commonly used to differentiatecorrections from regularly incurred charges.

    The ChargeClass column MUST be present in a FOCUS dataset. This columnMUST be of type String and MUST be “Correction” when the row representsa correction to a previously invoiced billing period.ChargeClass MUST be null when it is not a correction or when it is acorrection within the current billing period.

    2.11.1. Column ID

    ChargeClass

    2.11.2. Display Name

    Charge Class

    2.11.3. Description

    Indicates whether the row represents a correction to a previouslyinvoiced billing period.

    2.11.4. Content Constraints

    Constraint Value
    Column type Dimension
    Feature level Mandatory
    Allows nulls True
    Data type String
    Value format Allowed values

    Allowed values:

    Value Description
    Correction Correction to a previously invoicedbilling period (e.g., refunds and credit modifications).

    2.11.5. Introduced (version)

    1.0

    2.12. Charge Description

    A Charge Description provides a high-level context of a row without requiring additionaldiscovery. This column is a self-contained summary of the charge’spurpose and price. It typically covers a select group of correspondingdetails across a billing dataset or provides information not otherwiseavailable.

    The ChargeDescription column MUST be present in a FOCUS dataset, MUST be oftype String, and SHOULD NOT be null. Providers SHOULD specify the lengthof this column in their publicly available documentation.

    2.12.1. Column ID

    ChargeDescription

    2.12.2. Display Name

    Charge Description

    2.12.3. Description

    Self-contained summary of the charge’s purpose and price.

    2.12.4. Content Constraints

    Constraint Value
    Column type Dimension
    Feature level Mandatory
    Allows nulls True
    Data type String
    Value format <not specified>

    2.12.5. Introduced (version)

    1.0-preview

    2.13. Charge Frequency

    Charge Frequency indicates how often a charge will occur. Along withthe charge period related columns,the Charge Frequency is commonly used to understand recurrence periods(e.g., monthly, yearly), forecast upcoming charges, and differentiatebetween one-time and recurring fees for purchases.

    The ChargeFrequency column is RECOMMENDED be present in a FOCUS dataset and MUST NOTbe null. This column is of type String and MUST be one of the allowedvalues. When ChargeCategory is “Purchase”,ChargeFrequency MUST NOT be “Usage-Based”.

    2.13.1. Column ID

    ChargeFrequency

    2.13.2. Display Name

    Charge Frequency

    2.13.3. Description

    Indicates how often a charge will occur.

    2.13.4. Content Constraints

    Constraint Value
    Column type Dimension
    Feature level Recommended
    Allows nulls False
    Data type String
    Value format Allowed values

    Allowed values:

    Value Description
    One-Time Charges that only happen once and will notrepeat. One-time charges are typically recorded on the hour or day whenthe cost was incurred.
    Recurring Charges that repeat on a periodic cadence(e.g., weekly, monthly) regardless of whether the product or service wasused. Recurring charges typically happen on the same day or point withinevery period. The charge date does not change based on how or when theservice is used.
    Usage-Based Charges that repeat every time the serviceis used. Usage-based charges are typically recorded hourly or daily,based on the granularity of the cost data for the period when theservice was used (referred to as charge period). Usage-based charges arenot recorded when the service is not used.

    2.13.5. Introduced (version)

    1.0-preview

    2.14. Charge Period End

    Charge Period End represents the exclusive end date and timeof a charge period. Forexample, a time period where ChargePeriodStart is’2024-01-01T00:00:00Z’ and ChargePeriodEnd is ‘2024-01-02T00:00:00Z’includes charges for January 1, since ChargePeriodStart is inclusive, but does notinclude charges for January 2 since ChargePeriodEnd isexclusive.

    ChargePeriodEnd MUST be present in a FOCUS dataset, MUST be oftype Date/Time, MUST be an exclusive value, and MUST NOTcontain null values. ChargePeriodEnd MUST match the ending date and timeboundary of the effective period of the charge.

    2.14.1. Column ID

    ChargePeriodEnd

    2.14.2. Display Name

    Charge Period End

    2.14.3. Description

    The exclusive enddate and time of a charge period.

    2.14.4. Content constraints

    Constraint Value
    Column type Dimension
    Feature level Mandatory
    Allows nulls False
    Data type Date/Time
    Value format Date/TimeFormat

    2.14.5. Introduced (version)

    0.5

    2.15. Charge Period Start

    Charge Period Start represents the inclusive start date andtime within a chargeperiod. For example, a time period where ChargePeriodStart is’2024-01-01T00:00:00Z’ and ChargePeriodEnd is ‘2024-01-02T00:00:00Z’includes charges for January 1, since ChargePeriodStart isinclusive, but does not include charges for January 2 sinceChargePeriodEnd is exclusive.

    ChargePeriodStart MUST be present in a FOCUS dataset, MUST be oftype Date/Time, MUST be an inclusive value, and MUST NOTcontain null values. ChargePeriodStart MUST match the beginning date andtime boundary of the effective period of the charge.

    2.15.1. Column ID

    ChargePeriodStart

    2.15.2. Display Name

    Charge Period Start

    2.15.3. Description

    The inclusive startdate and time within a chargeperiod.

    2.15.4. Content constraints

    Constraint Value
    Column type Dimension
    Feature level Mandatory
    Allows nulls False
    Data type Date/Time
    Value format Date/TimeFormat

    2.15.5. Introduced (version)

    0.5

    2.16. Commitment DiscountCategory

    Commitment Discount Category indicates whether the commitment discountidentified in the CommitmentDiscountId column is based on usage quantityor cost (aka “spend”). The CommitmentDiscountCategory column is onlyapplicable to commitment discounts and not negotiateddiscounts.

    The CommitmentDiscountCategory column MUST be present in a FOCUS dataset when theprovider supports commitment discounts. This column MUST be oftype String, MUST be null when CommitmentDiscountId is null, and MUSTNOT be null when CommitmentDiscountId is not null. TheCommitmentDiscountCategory MUST be one of the allowed values.

    2.16.1. Column ID

    CommitmentDiscountCategory

    2.16.2. Display Name

    Commitment Discount Category

    2.16.3. Description

    Indicates whether the commitment discount identified in theCommitmentDiscountId column is based on usage quantity or cost (aka”spend”).

    2.16.4. Content constraints

    Constraint Value
    Column type Dimension
    Feature level Conditional
    Allows nulls True
    Data type String
    Value format Allowed Values

    Allowed values:

    Value Description
    Spend Commitment discounts that require apredetermined amount of spend.
    Usage Commitment discounts that require apredetermined amount of usage.

    2.16.5. Introduced (version)

    1.0-preview

    2.17. Commitment Discount ID

    A Commitment Discount ID is the identifier assigned to a commitment discount bythe provider. Commitment Discount ID is commonly used for scenarios likechargeback for commitments and savings per commitmentdiscount. The CommitmentDiscountId column is only applicable tocommitment discounts and not negotiateddiscounts.

    The CommitmentDiscountId column MUST be present in a FOCUS dataset when theprovider supports commitment discounts. This column MUST be oftype String and MUST NOT contain null values when a charge is related toa commitment discount. When a charge is not associated with acommitment discount, the column MUST be null.CommitmentDiscountId MUST ensure global uniqueness within the providerand SHOULD be a fully-qualified identifier.

    2.17.1. Column ID

    CommitmentDiscountId

    2.17.2. Display Name

    Commitment Discount ID

    2.17.3. Description

    The identifier assigned to a commitment discount by theprovider.

    2.17.4. Content constraints

    Constraint Value
    Column type Dimension
    Feature level Conditional
    Allows nulls True
    Data type String
    Value format <not specified>

    2.17.5. Introduced (version)

    1.0-preview

    2.18. Commitment DiscountName

    A Commitment Discount Name is the display name assigned to a commitment discount.The CommitmentDiscountName column is only applicable to commitmentdiscounts and not negotiateddiscounts.

    The CommitmentDiscountName column MUST be present in a FOCUS dataset when theprovider supports commitment discounts. This column MUST be oftype String. The CommitmentDiscountName value MUST be null if the chargeis not related to a commitment discount and MAY be null if adisplay name cannot be assigned to a commitment discount.CommitmentDiscountName MUST NOT be null if a display name can beassigned to a commitment discount.

    2.18.1. Column ID

    CommitmentDiscountName

    2.18.2. Display Name

    Commitment Discount Name

    2.18.3. Description

    The display name assigned to a commitment discount.

    2.18.4. Content constraints

    Constraint Value
    Column type Dimension
    Feature level Conditional
    Allows nulls True
    Data type String
    Value format <not specified>

    2.18.5. Introduced (version)

    1.0-preview

    2.19. Commitment DiscountQuantity

    Commitment Discount Quantity is the amount of a commitment discountpurchased or accounted for in commitment discount related rows that is denominated in Commitment Discount Units. Theaggregated Commitment Discount Quantity across purchase records,pertaining to a particular CommitmentDiscount ID during its term,represents the total Commitment Discount Units acquired with thatcommitment discount. For committed usage, the Commitment DiscountQuantity is either the number of Commitment Discount Units consumed by arow that is covered by a commitment discount or is theunused portion of a commitment discount over a chargeperiod. Commitment Discount Quantity is commonly used incommitment discount analysis and optimization use cases andonly applies to commitment discounts, not negotiateddiscounts.

    When CommitmentDiscountCategory is”Usage” (usage-based commitment discounts), the CommitmentDiscount Quantity reflects the predefined amount of usage purchased orconsumed. If commitment discountflexibility is applicable, this value may be furthertransformed based on additional, provider-specific requirements. WhenCommitmentDiscountCategory is “Spend” (spend-based commitmentdiscounts), the Commitment Discount Quantity reflects thepredefined amount of spend purchased or consumed.

    The CommitmentDiscountQuantity column adheres to the followingrequirements:

    • CommitmentDiscountQuantity MUST be present in a FOCUS dataset when theprovider supports commitment discounts.
    • CommitmentDiscountQuantity MUST be of type Decimal and MUST conformto Numeric Format requirements.
    • CommitmentDiscountQuantity MAY be null or any valid decimal value ifCommitmentDiscountId is notnull and ChargeClass is”Correction”.

    In cases where the ChargeCategory is “Purchase”, CommitmentDiscountIdis not null, and ChargeClass is not “Correction”, the followingapplies:

    • When ChargeFrequency is “One-Time”,and CommitmentDiscountId is not null, CommitmentDiscountQuantity MUST bethe positive quantity of CommitmentDiscountUnits, paid fully orpartially upfront, that is eligible for consumption over thecommitment discount’sterm.
    • When ChargeFrequency is “Recurring”, and CommitmentDiscountId is notnull, CommitmentDiscountQuantity MUST be the positive quantity ofCommitmentDiscountUnits that is eligible for consumption for eachcharge period that corresponds with the purchase.

    In cases where the ChargeCategory is “Usage”, CommitmentDiscountId isnot null, and ChargeClass is not “Correction”, the followingapplies:

    • When CommitmentDiscountStatus is “Used”,CommitmentDiscountQuantity MUST be the positive, metered quantity ofCommitmentDiscountUnits that is consumed over the row’scharge period.
    • When CommitmentDiscountStatus is “Unused”,CommitmentDiscountQuantity MUST be the remaining, positive, unusedquantity of CommitmentDiscountUnits for the row’schargeperiod.

    CommitmentDiscountQuantity MUST be null in all other cases.

    2.19.1. Column ID

    CommitmentDiscountQuantity

    2.19.2. Display Name

    Commitment Discount Quantity

    2.19.3. Description

    The amount of a commitment discount purchased or accountedfor in commitment discount related rows that isdenominated in Commitment Discount Units.

    2.19.4. Usability Constraints

    Aggregation: When aggregating Commitment DiscountQuantity for commitment utilization calculations, it’s important toexclude commitment discount purchases (i.e. when ChargeCategoryis “Purchase”) that are paid to cover future eligible charges (e.g.,commitment discount). Otherwise, when accounting for allupfront or accrued purchases, it’s important to exclude commitmentdiscount usage (i.e. when ChargeCategory is “Usage”). Thisexclusion helps prevent double counting of these quantities in theaggregation.

    2.19.5. Content constraints

    Constraint Value
    Column type Metric
    Feature level Conditional
    Allows nulls True
    Data type Decimal
    Value format NumericFormat
    Number range Any valid decimal value

    2.19.6. Introduced (version)

    1.1

    2.20. Commitment DiscountStatus

    Commitment Discount Status indicates whether the charge correspondswith the consumption of a commitment discountidentified in the CommitmentDiscountId column or the unused portion ofthe committed amount. The CommitmetnDiscountStatus column is onlyapplicable to commitment discounts and not negotiateddiscounts.

    The CommitmentDiscountStatus column MUST be present in a FOCUS dataset when theprovider supports commitment discounts. This column MUST be oftype String, MUST be null when CommitmentDiscountId is null, and MUSTNOT be null when CommitmentDiscountId is not null and Charge Category is “Usage”.CommitmentDiscountStatus MUST be one of the allowed values.

    2.20.1. Column ID

    CommitmentDiscountStatus

    2.20.2. Display name

    Commitment Discount Status

    2.20.3. Description

    Indicates whether the charge corresponds with the consumption of acommitment discount or the unused portion of the committedamount.

    2.20.4. Content constraints

    Constraint Value
    Column type Dimension
    Feature level Conditional
    Allows nulls True
    Data type String
    Value format Allowed Values

    Allowed values:

    Value Description
    Used Charges that utilized a specific amount ofa commitment discount.
    Unused Charges that represent the unused portionof the commitment discount.

    2.20.5. Introduced (version)

    1.0

    2.21. Commitment DiscountType

    Commitment Discount Type is a provider-assigned name to identify thetype of commitmentdiscount applied to the row. The CommitmentDiscountType columnis only applicable to commitment discounts and not negotiateddiscounts.

    The CommitmentDiscountType column MUST be present in a FOCUS dataset when theprovider supports commitment discounts. This column MUST be oftype String, MUST be null when CommitmentDiscountId is null, and MUSTNOT be null when CommitmentDiscountId is not null.

    2.21.1. Column ID

    CommitmentDiscountType

    2.21.2. Display Name

    Commitment Discount Type

    2.21.3. Description

    A provider-assigned identifier for the type of commitmentdiscount applied to the row.

    2.21.4. Content constraints

    Constraint Value
    Column type Dimension
    Feature level Conditional
    Allows nulls True
    Data type String
    Value format <not specified>

    2.21.5. Introduced (version)

    1.0-preview

    2.22. Commitment DiscountUnit

    Commitment Discount Unit represents the provider-specifiedmeasurement unit indicating how a provider measures the Commitment Discount Quantity of acommitmentdiscount. The CommitmentDiscountUnit column is only applicableto commitment discounts and not negotiateddiscounts.

    The CommitmentDiscountUnit column adheres to the followingrequirements:

    • CommitmentDiscountUnit MUST be present in a FOCUS dataset when theprovider supports commitmentdiscounts.
    • CommitmentDiscountUnit MUST be of type String, and the units ofmeasure used in CommitmentDiscountUnit SHOULD adhere to the values andformat requirements specified in the UnitFormat attribute.
    • The CommitmentDiscountUnit MUST be the same across all rowswhere CommitmentDiscountQuantity has the same CommitmentDiscountId.
    • CommitmentDiscountUnit MAY be null if CommitmentDiscountId is notnull and ChargeClass is “Correction”.
    • CommitmentDiscountUnit MUST NOT be null when CommitmentDiscountId isnot null and ChargeClass is not “Correction”.
    • CommitmentDiscountUnit MUST be null in all other cases.

    In cases where the CommitmentDiscountUnit is not null, the followingapplies:

    • The CommitmentDiscountUnit MUST represent the unit used to measurethe commitment discount.
    • When accounting for commitment discountflexibility, the CommitmentDiscountUnit value SHOULD reflectthis consideration.

    2.22.1. Column ID

    CommitmentDiscountUnit

    2.22.2. Display Name

    Commitment Discount Unit

    2.22.3. Description

    The provider-specified measurement unit indicating how a providermeasures the Commitment Discount Quantity of a commitmentdiscount.

    2.22.4. Content constraints

    Constraint Value
    Column type Dimension
    Feature level Conditional
    Allows nulls True
    Data type String
    Value format Unit Format

    2.22.5. Introduced (version)

    1.1

    2.23. Consumed Quantity

    The Consumed Quantity represents the volume of a metered SKUassociated with a resource orservice used, based on the Consumed Unit. Consumed Quantity is oftenderived at a finer granularity or over a different time interval whencompared to the Pricing Quantity(complementary to Pricing Unit) and focuseson resource and service consumption, not pricing andcost.

    The ConsumedQuantity column adheres to the followingrequirements:

    • ConsumedQuantity MUST be present in a FOCUS dataset when theprovider supports the measurement of usage.
    • ConsumedQuantity MUST be of type Decimal and MUST conform to Numeric Format requirements.
    • ConsumedQuantity MUST NOT be null and MUST be a valid positivedecimal value if ChargeCategory is”Usage”, CommitmentDiscountStatus is not”Unused”, and ChargeClass is not”Correction”.
    • ConsumedQuantity MAY be null or any valid decimal value ifChargeCategory is “Usage”, CommitmentDiscountStatus is not “Unused”, andChargeClass is “Correction”.
    • ConsumedQuantity MUST be null in all other cases.

    2.23.1. Column ID

    ConsumedQuantity

    2.23.2. Display Name

    Consumed Quantity

    2.23.3. Description

    The volume of a metered SKU associated with a resource orservice used, based on the Consumed Unit.

    2.23.4. Content constraints

    Constraint Value
    Column type Metric
    Feature level Conditional
    Allows nulls True
    Data type Decimal
    Value format NumericFormat
    Number range Any valid decimal value

    2.23.5. Introduced (version)

    1.0

    2.24. Consumed Unit

    The Consumed Unit represents a provider-specified measurement unitindicating how a provider measures usage of a metered SKU associatedwith a resource or service. Consumed Unit complementsthe Consumed Quantity metric. It isoften listed at a finer granularity or over a different time intervalwhen compared to Pricing Unit (complementaryto Pricing Quantity), and focuses onresource and service consumption, not pricing andcost.

    The ConsumedUnit column adheres to the following requirements:

    • ConsumedUnit MUST be present in a FOCUS dataset when theprovider supports the measurement of usage.
    • ConsumedUnit MUST be of type String, and the units of measure usedin ConsumedUnit SHOULD adhere to the values and format requirementsspecified in the UnitFormat attribute.
    • ConsumedUnit MUST NOT be null if ChargeCategory is “Usage”, CommitmentDiscountStatus is not”Unused”, and ChargeClass is not”Correction”.
    • ConsumedUnit MAY be null if ChargeCategory is “Usage”,CommitmentDiscountStatus is not “Unused”, and ChargeClass is”Correction”.
    • ConsumedUnit MUST be null in all other cases.

    2.24.1. Column ID

    ConsumedUnit

    2.24.2. Display Name

    Consumed Unit

    2.24.3. Description

    Provider-specified measurement unit indicating how a providermeasures usage of a metered SKU associated with a resource orservice.

    2.24.4. Content constraints

    Constraint Value
    Column type Dimension
    Feature level Conditional
    Allows nulls True
    Data type String
    Value format Unit Formatrecommended

    2.24.5. Introduced (version)

    1.0

    2.25. Contracted Cost

    Contracted Cost represents the cost calculated by multiplying contracted unitprice and the corresponding PricingQuantity. Contracted Cost is denominated in the Billing Currency and is commonly used forcalculating savings based on negotiation activities, by comparing itwith List Cost. If negotiated discountsare not applicable, the Contracted Cost defaults to the List Cost.

    The ContractedCost column MUST be present in a FOCUS dataset and MUST NOTbe null. This column MUST be of type Decimal, MUST conform to Numeric Format requirements, and bedenominated in the BillingCurrency. When ContractedUnitPrice is present and notnull, multiplying the ContractedUnitPrice by PricingQuantity MUSTproduce the ContractedCost, except in cases of ChargeClass “Correction”, which may addressPricingQuantity or any cost discrepancies independently.

    In cases where the ContractedUnitPrice is present and null, thefollowing applies:

    • The ContractedCost of a charge calculated based on other charges(e.g., when the ChargeCategory is “Tax”)MUST be calculated based on the ContractedCost of those relatedcharges.
    • The ContractedCost of a charge unrelated to other charges (e.g.,when the ChargeCategory is “Credit”) MUSTmatch the BilledCost.

    2.25.1. Column ID

    ContractedCost

    2.25.2. Display Name

    Contracted Cost

    2.25.3. Description

    Cost calculated by multiplying contracted unit price and thecorresponding Pricing Quantity.

    2.25.4. Usability Constraints

    Aggregation: When aggregating Contracted Cost forsavings calculations, it’s important to exclude either Charge Category “Purchase” charges (one-timeand recurring) that are paid to cover future eligible charges (e.g., Commitment Discount) or thecovered Charge Category “Usage” chargesthemselves. This exclusion helps prevent double counting of thesecharges in the aggregation. Which set of charges to exclude depends onwhether cost are aggregated on a billed basis (exclude covered charges)or accrual basis (exclude Purchases for future charges). For instance,charges categorized as Charge Category“Purchase” and their related ChargeCategory “Tax” charges for a Commitment Discount might be excludedfrom an accrual basis cost aggregation of Contracted Cost. This isbecause the “Usage” and “Tax” charge records provided during the term ofthe commitment discount already specify the Contracted Cost. Purchasecharges that cover future eligible charges can be identified byfiltering for Charge Category “Purchase”records with a Billed Cost greater than 0 andan Effective Cost equal to 0.

    2.25.5. Content Constraints

    Constraint Value
    Column type Metric
    Feature level Mandatory
    Allows nulls False
    Data type Decimal
    Value format NumericFormat
    Number range Any valid decimal value

    2.25.6. Introduced (version)

    1.0

    2.26. Contracted Unit Price

    The Contracted Unit Price represents the agreed-upon unit price for asingle Pricing Unit of the associated SKU,inclusive of negotiateddiscounts, if present, while excluding negotiated commitment discountsor any other discounts. This price is denominated in the Billing Currency. The Contracted Unit Priceis commonly used for calculating savings based on negotiationactivities. If negotiated discounts are not applicable, the ContractedUnit Price defaults to the List UnitPrice.

    The ContractedUnitPrice column MUST be present in a FOCUS dataset when theprovider supports negotiated pricing concepts. This column MUST be aDecimal within the range of non-negative decimal values, MUST conform toNumeric Format requirements, and bedenominated in the BillingCurrency. It MUST NOT be null when ChargeClass is not “Correction” and ChargeCategory is “Usage” or “Purchase”, MUSTbe null when ChargeCategory is “Tax”, and MAY be null for all othercombinations of ChargeClass and ChargeCategory. When ContractedUnitPriceis present and not null, multiplying ContractedUnitPrice by PricingQuantity MUST equal ContractedCost, except in cases ofChargeClass “Correction”, which may address PricingQuantity or any costdiscrepancies independently.

    2.26.1. Column ID

    ContractedUnitPrice

    2.26.2. Display Name

    Contracted Unit Price

    2.26.3. Description

    The agreed-upon unit price for a single Pricing Unit of theassociated SKU, inclusive of negotiated discounts, if present, whileexcluding negotiated commitment discounts or any other discounts.

    2.26.4. Usability Constraints

    Aggregation: Column values should only be viewed inthe context of their row and not aggregated to produce a total.

    2.26.5. Content Constraints

    Constraint Value
    Column type Metric
    Feature level Conditional
    Allows nulls True
    Data type Decimal
    Value format NumericFormat
    Number range Any valid non-negative decimal value

    2.26.6. Introduced (version)

    1.0

    2.27. Effective Cost

    Effective Cost represents the amortized cost of the charge after applying all reducedrates, discounts, and the applicable portion of relevant, prepaidpurchases (one-time or recurring) that covered this charge. Theamortized portion included should be proportional to the Pricing Quantity and the time granularity ofthe data. Since amortization breaks down and spreads the cost of aprepaid purchase, to subsequent eligible charges, the Effective Cost ofthe original prepaid charge is set to 0. Effective Cost does not mix or”blend” costs across multiple charges of the same service. This cost isdenominated in the Billing Currency. TheEffective Cost is commonly utilized to track and analyze spendingtrends.

    This column resolves two challenges that are faced bypractitioners:

    1. Practitioners need to amortize relevant purchases, such asupfront fees, throughout the commitment and distribute them tothe appropriate reporting groups (e.g. tags, resources).
    2. Many commitmentdiscount constructs include a recurring expense for thecommitment for every billing period and mustdistribute this cost to the resources using thecommitment. This forces reconciliation between the initialcommitmentrow per periodand the actual usage rows.

    The EffectiveCost column MUST be present in a FOCUS dataset and MUST NOTbe null. This column MUST be of type Decimal, MUST conform to Numeric Format requirements, and bedenominated in the BillingCurrency. EffectiveCost MUST be 0 whenChargeCategory is “Purchase” and the purchase is intended to coverfuture eligible charges. The aggregated EffectiveCost for a billingperiod may not match the charge received on the invoice for the samebilling period.

    In cases where the ChargeCategory isnot “Usage” or “Purchase”, the following applies:

    • The EffectiveCost MUST be calculated based on the EffectiveCost ofthe related charges if the charge is calculated based on other charges(e.g. ChargeCategory is “Tax”).
    • The EffectiveCost MUST match the BilledCost if the charge is unrelated to othercharges (e.g. ChargeCategory is”Credit”).
    • When CommitmentDiscountStatus is “Unused”, the EffectiveCost MUST bethe total committed cost consumed for the given charge period minusrelated usage charges.

    2.27.1. Column ID

    EffectiveCost

    2.27.2. Display Name

    Effective Cost

    2.27.3. Description

    The amortized cost of the charge after applying allreduced rates, discounts, and the applicable portion of relevant,prepaid purchases (one-time or recurring) that covered this charge.

    2.27.3.1.Concerning Granularity and Distribution of Recurring Fee

    Providers should distribute the commitment purchase amountinstead of including a row at the beginning of a period sopractitioners do not need to manually distribute the fee themselves.

    2.27.3.2. ConcerningAmortization Approaches

    Eligible purchases should be amortized using a methodologydetermined by the provider that reflects the needs of their customerbase and is proportional to the Pricing Quantity and the timegranularity of the row. Should a practitioner desire toamortize relevant purchases using a different approach, thepractitioner can do so using the Billed Costfor the line item representing the initial purchase.

    2.27.4. Content constraints

    Constraint Value
    Column type Metric
    Feature level Mandatory
    Allows nulls False
    Data type Decimal
    Value format NumericFormat
    Number range Any valid decimal value

    2.27.5. Introduced (version)

    0.5

    2.28. Invoice Issuer

    An Invoice Issuer is an entity responsible for invoicing for the resources or services consumed. It is commonlyused for cost analysis and reporting scenarios.

    The InvoiceIssuer column MUST be present in a FOCUS dataset. This columnMUST be of type String and MUST NOT contain null values.

    See Appendix: Origination of costdata section for examples of Provider, Publisher and Invoice Issuer values that can beused for various purchasing scenarios.

    2.28.1. Column ID

    InvoiceIssuerName

    2.28.2. Display Name

    Invoice Issuer

    2.28.3. Description

    The name of the entity responsible for invoicing for theresources or services consumed.

    2.28.4. Content Constraints

    Constraint Value
    Column type Dimension
    Feature level Mandatory
    Allows nulls False
    Data type String
    Value format <not specified>

    2.28.5. Introduced (version)

    0.5

    2.29. List Cost

    List Cost represents the cost calculated by multiplying the list unit price and thecorresponding Pricing Quantity. List Costis denominated in the Billing Currencyand is commonly used for calculating savings based on various rateoptimization activities, by comparing it with Contracted Cost, BilledCost and Effective Cost.

    The ListCost column MUST be present in a FOCUS dataset and MUST NOTbe null. This column MUST be of type Decimal, MUST conform to Numeric Format requirements, and bedenominated in the BillingCurrency. When ListUnitPrice is present and not null,multiplying the ListUnitPrice by PricingQuantity MUST produce theListCost, except in cases of ChargeClass“Correction”, which may address PricingQuantity or any costdiscrepancies independently.

    In cases where the ListUnitPrice is present and is null, thefollowing applies:

    • The ListCost of a charge calculated based on other charges (e.g.,when the ChargeCategory is “Tax”) MUST becalculated based on the ListCost of those related charges.
    • The ListCost of a charge unrelated to other charges (e.g., when theChargeCategory is “Credit”) MUST match theBilledCost.

    2.29.1. Column ID

    ListCost

    2.29.2. Display Name

    List Cost

    2.29.3. Description

    Cost calculated by multiplying List Unit Price and the correspondingPricing Quantity.

    2.29.4. Usability Constraints

    Aggregation: When aggregating List Cost for savingscalculations, it’s important to exclude either Charge Category “Purchase” charges (one-timeand recurring) that are paid to cover future eligible charges (e.g., Commitment Discount) or thecovered Charge Category “Usage” chargesthemselves. This exclusion helps prevent double counting of thesecharges in the aggregation. Which set of charges to exclude depends onwhether cost are aggregated on a billed basis (exclude covered charges)or accrual basis (exclude Purchases for future charges). For instance,charges categorized as Charge Category“Purchase” and their related ChargeCategory “Tax” charges for a Commitment Discount might be excludedfrom an accrual basis cost aggregation of List Cost. This is because the”Usage” and “Tax” charge records provided during the term of thecommitment discount already specify the List Cost. Purchase charges thatcover future eligible charges can be identified by filtering for Charge Category “Purchase” records with a Billed Cost greater than 0 and an Effective Cost equal to 0.

    2.29.5. Content Constraints

    Constraint Value
    Column type Metric
    Feature level Mandatory
    Allows nulls False
    Data type Decimal
    Value format NumericFormat
    Number range Any valid decimal value

    2.29.6. Introduced (version)

    1.0-preview

    2.30. List Unit Price

    The List Unit Price represents the suggested provider-published unitprice for a single Pricing Unit of theassociated SKU, exclusive of any discounts. This price is denominated inthe Billing Currency. The List Unit Priceis commonly used for calculating savings based on various rateoptimization activities.

    The ListUnitPrice column MUST be present in a FOCUS dataset when theprovider publishes unit prices exclusive of discounts. This column MUSTbe a Decimal within the range of non-negative decimal values, MUSTconform to Numeric Format requirements, andbe denominated in the BillingCurrency. It MUST NOT be null when ChargeClass is not “Correction” and ChargeCategory is “Usage” or “Purchase”, MUSTbe null when ChargeCategory is “Tax”, and MAY be null for all othercombinations of ChargeClass and ChargeCategory. When ListUnitPrice ispresent and is not null, multiplying ListUnitPrice by PricingQuantity MUST equal ListCost, except in cases of ChargeClass”Correction”, which may address PricingQuantity or any costdiscrepancies independently.

    2.30.1. Column ID

    ListUnitPrice

    2.30.2. Display Name

    List Unit Price

    2.30.3. Description

    The suggested provider-published unit price for a single Pricing Unitof the associated SKU, exclusive of any discounts.

    2.30.4. Usability Constraints

    Aggregation: Column values should only be viewed inthe context of their row and not aggregated to produce a total.

    2.30.5. Content Constraints

    Constraint Value
    Column type Metric
    Feature level Conditional
    Allows nulls True
    Data type Decimal
    Value format NumericFormat
    Number range Any valid non-negative decimal value

    2.30.6. Introduced (version)

    1.0-preview

    2.31. Pricing Category

    Pricing Category describes the pricing model used for a charge at thetime of use or purchase. It can be useful for distinguishing betweencharges incurred at the listunit price or a reduced price and exposing optimizationopportunities, like increasing commitment discountcoverage.

    The PricingCategory column adheres to the following requirements:

    • PricingCategory MUST be present in a FOCUS dataset when theprovider supports more than one pricing category across all SKUs andMUST be of type String.
    • PricingCategory MUST NOT be null when ChargeClass is not “Correction” and ChargeCategory is “Usage” or “Purchase”, MUSTbe null when ChargeCategory is “Tax”, and MAY be null for all othercombinations of ChargeClass and ChargeCategory.
    • PricingCategory MUST be one of the allowed values.
    • PricingCategory MUST be “Standard” when pricing is predetermined atthe agreed upon rate for the billingaccount.
    • PricingCategory MUST be “Committed” when the charge is subject to anexisting commitment discount and is not the purchase of thecommitment discount.
    • PricingCategory MUST be “Dynamic” when pricing is determined by theprovider and may change over time, regardless of predetermined agreementpricing.
    • PricingCategory MUST be “Other” when there is a pricing model butnone of the allowed values apply.

    2.31.1. Column ID

    PricingCategory

    2.31.2. Display Name

    Pricing Category

    2.31.3. Description

    Describes the pricing model used for a charge at the time of use orpurchase.

    2.31.4. Content constraints

    Constraint Value
    Column type Dimension
    Feature level Conditional
    Allows nulls True
    Data type String
    Value format Allowed values

    Allowed values:

    Value Description
    Standard Charges priced at the agreed upon rate forthe billing account, including negotiated discounts.This pricing includes any flat rate and volume/tiered pricing but doesnot include dynamic pricing or reduced pricing due to the application ofa commitment discount. This does include the purchase of acommitment discount at agreed upon rates.
    Dynamic Charges priced at a variable ratedetermined by the provider. This includes any product or service with aunit price the provider can change without notice, like interruptible orlow priority resources.
    Committed Charges with reduced pricing due to theapplication of the commitment discount specified by theCommitment Discount ID.
    Other Charges priced in a way not covered byanother pricing category.

    2.31.5. Introduced (version)

    1.0-preview

    2.32. Pricing Quantity

    The Pricing Quantity represents the volume of a given SKU associatedwith a resource or service used or purchased, basedon the Pricing Unit. Distinct from Consumed Quantity (complementary to Consumed Unit), it focuses on pricing and cost,not resource and service consumption.

    The PricingQuantity column MUST be present in a FOCUS dataset. This columnMUST be of type Decimal and MUST conform to Numeric Format requirements. The value MAY benegative in cases where ChargeClass is”Correction”. This column MUST NOT be null when ChargeClass is not “Correction” and ChargeCategory is “Usage” or “Purchase”, MUSTbe null when ChargeCategory is “Tax”, and MAY be null for all othercombinations of ChargeClass and ChargeCategory. When unit prices are notnull, multiplying PricingQuantity by a unit price MUST produce a resultequal to the corresponding cost metric, except in cases of ChargeClass”Correction”, which may address PricingQuantity or any costdiscrepancies independently.

    2.32.1. Column ID

    PricingQuantity

    2.32.2. Display Name

    Pricing Quantity

    2.32.3. Description

    The volume of a given SKU associated with a resource orservice used or purchased, based on the Pricing Unit.

    2.32.4. Usability Constraints

    Aggregation: When aggregating Pricing Quantity forcommitment utilization calculations, it’s important to excludecommitment discount purchases (i.e. whenChargeCategory is “Purchase”) that are paid to cover futureeligible charges (e.g., Commitment Discount). Otherwise, whenaccounting for all upfront or accrued purchases, it’s important toexclude commitment discount usage (i.e. whenChargeCategory is “Usage”). This exclusion helps prevent doublecounting of these quantities in the aggregation.

    2.32.5. Content Constraints

    Constraint Value
    Column type Metric
    Feature level Mandatory
    Allows nulls True
    Data type Decimal
    Value format NumericFormat
    Number Range Any valid decimal value

    2.32.6. Introduced (version)

    1.0-preview

    2.33. Pricing Unit

    The Pricing Unit represents a provider-specified measurement unit fordetermining unit prices, indicating how the provider rates measuredusage and purchase quantities after applying pricing rules like block pricing. Commonexamples include the number of hours for compute appliance runtime (e.g.Hours), gigabyte-hours for a storage appliance (e.g.,GB-Hours), or an accumulated count of requests for anetwork appliance or API service (e.g., 1000 Requests).Pricing Unit complements the PricingQuantity metric. Distinct from the ConsumedUnit, it focuses on pricing and cost, not resource and service consumption, often at acoarser granularity.

    The PricingUnit column MUST be present in a FOCUS dataset. This columnMUST be of type String. It MUST NOT be null when ChargeClass is not “Correction” and ChargeCategory is “Usage” or “Purchase”, MUSTbe null when ChargeCategory is “Tax”, and MAY be null for all othercombinations of ChargeClass and ChargeCategory. Units of measure used inPricingUnit SHOULD adhere to the values and format requirementsspecified in the UnitFormat attribute.

    The PricingUnit value MUST be semantically equal to the correspondingpricing measurement unit value provided in:

    • The provider-published pricelist
    • The invoice, when the invoice includes a pricing measurementunit

    2.33.1. Column ID

    PricingUnit

    2.33.2. Display Name

    Pricing Unit

    2.33.3. Description

    Provider-specified measurement unit for determining unit prices,indicating how the provider rates measured usage and purchase quantitiesafter applying pricing rules like block pricing.

    2.33.4. Content constraints

    Constraint Value
    Column type Dimension
    Feature level Mandatory
    Allows nulls True
    Data type String
    Value format Unit Format

    2.33.5. Introduced (version)

    1.0-preview

    2.34. Provider

    A Provider is an entity that makes the resources or services available for purchase.It is commonly used for cost analysis and reporting scenarios.

    The Provider column MUST be present in a FOCUS dataset. This columnMUST be of type String and MUST NOT contain null values.

    See Appendix: Origination of costdata section for examples of Provider, Publisher and Invoice Issuervalues that can be used for various purchasing scenarios.

    2.34.1. Column ID

    ProviderName

    2.34.2. Display Name

    Provider

    2.34.3. Description

    The name of the entity that made the resources orservices available for purchase.

    2.34.4. Content Constraints

    Constraint Value
    Column type Dimension
    Feature level Mandatory
    Allows nulls False
    Data type String
    Value format <not specified>

    2.34.5. Introduced (version)

    0.5

    2.35. Publisher

    A Publisher is an entity that produces the resources or services that were purchased. Itis commonly used for cost analysis and reporting scenarios.

    The Publisher column MUST be present in a FOCUS dataset. This columnMUST be of type String and MUST NOT contain null values.

    See Appendix: Origination of costdata section for examples of Provider,Publisher and Invoice Issuer values thatcan be used for various purchasing scenarios.

    2.35.1. Column ID

    PublisherName

    2.35.2. Display Name

    Publisher

    2.35.3. Description

    The name of the entity that produced the resources orservices that were purchased.

    2.35.4. Content Constraints

    Constraint Value
    Column type Dimension
    Feature level Mandatory
    Allows nulls False
    Data type String
    Value format <not specified>

    2.35.5. Introduced (version)

    0.5

    2.36. Region ID

    A Region ID is a provider-assigned identifier for an isolatedgeographic area where a resource is provisioned or a service is provided. The region iscommonly used for scenarios like analyzing cost and unit prices based onwhere resources are deployed.

    The RegionId column MUST be present in a FOCUS dataset when theprovider supports deploying resources or services within aregion and MUST be of type String. RegionId MUST NOT be nullwhen a resource or service is operated in or managedfrom a distinct region by the Provider and MAY contain null values whena resource or service is not restricted to an isolatedgeographic area.

    2.36.1. Column ID

    RegionId

    2.36.2. Display Name

    Region ID

    2.36.3. Description

    Provider-assigned identifier for an isolated geographic area where aresource is provisioned or a service is provided.

    2.36.4. Content constraints

    Constraint Value
    Column type Dimension
    Feature level Conditional
    Allows nulls True
    Data type String
    Value format <not specified>

    2.36.5. Introduced (version)

    1.0

    2.37. Region Name

    Region Name is a provider-assigned display name for an isolatedgeographic area where a resource is provisioned or a service is provided. Region Nameis commonly used for scenarios like analyzing cost and unit prices basedon where resources are deployed.

    The RegionName column MUST be present in a FOCUS dataset when theprovider supports deploying resources or services within aregion and MUST be of type String. RegionName MUST NOT be nullwhen a resource or service is operated in or managedfrom a distinct region by the Provider and MAY contain null values whena resource or service is not restricted to an isolatedgeographic area.

    2.37.1. Column ID

    RegionName

    2.37.2. Display Name

    Region Name

    2.37.3. Description

    The name of an isolated geographic area where a resource isprovisioned or a service is provided.

    2.37.4. Content constraints

    Constraint Value
    Column type Dimension
    Feature level Conditional
    Allows nulls True
    Data type String
    Value format <not specified>

    2.37.5. Introduced (version)

    1.0

    2.38. Resource ID

    A Resource ID is an identifier assigned to a resource by the provider. TheResource ID is commonly used for cost reporting, analysis, andallocation scenarios.

    The ResourceId column MUST be present in a FOCUS dataset when theprovider supports billing based on provisioned resources. This columnMUST be of type String. The ResourceId value MAY be a nullable column assome cost data rows may not beassociated with a resource. ResourceId MUST appear in the costdata if an identifier is assigned to a resource by theprovider. ResourceId SHOULD be a fully-qualified identifier that ensuresglobal uniqueness within the provider.

    2.38.1. Column ID

    ResourceId

    2.38.2. Display Name

    Resource ID

    2.38.3. Description

    Identifier assigned to a resource by the provider.

    2.38.4. Content Constraints

    Constraint Value
    Column type Dimension
    Feature level Conditional
    Allows nulls True
    Data type String
    Value format <not specified>

    2.38.5. Introduced (version)

    0.5

    2.39. Resource Name

    The Resource Name is a display name assigned to a resource. It is commonly used forcost analysis, reporting, and allocation scenarios.

    The ResourceName column MUST be present in a FOCUS dataset when theprovider supports billing based on provisioned resources. This columnMUST be of type String. The ResourceName value MAY be a nullable columnas some cost data rows may not beassociated with a resource or because a display name cannot beassigned to a resource. ResourceName MUST NOT be null if adisplay name can be assigned to a resource. Resourcesnot provisioned interactively or only have a system-generated ResourceId MUST NOT duplicate the same value asthe ResourceName.

    2.39.1. Column ID

    ResourceName

    2.39.2. Display Name

    Resource Name

    2.39.3. Description

    Display name assigned to a resource.

    2.39.4. Content Constraints

    Constraint Value
    Column type Dimension
    Feature level Conditional
    Allows nulls True
    Data type String
    Value format <not specified>

    2.39.5. Introduced (version)

    0.5

    2.40. Resource Type

    Resource Type describes the kind of resource the charge applies to. AResource Type is commonly used for scenarios like identifying costchanges in groups of similar resources and may include valueslike Virtual Machine, Data Warehouse, and Load Balancer.

    The ResourceType column MUST be present in a FOCUS dataset when theprovider supports billing based on provisioned resources and supportsassigning a type for resources. This column MUST be of type String andMUST NOT be null when a corresponding ResourceId is not null. When a correspondingResourceId value is null, the ResourceType column value MUST also benull.

    2.40.1. Column ID

    ResourceType

    2.40.2. Display Name

    Resource Type

    2.40.3. Description

    The kind of resource the charge applies to.

    2.40.4. Content Constraints

    Constraint Value
    Column type Dimension
    Feature level Conditional
    Allows nulls True
    Data type String
    Value format <not specified>

    2.40.5. Introduced (version)

    1.0-preview

    2.41. Service Category

    The Service Category is the highest-level classification of a service based on the core functionof the service. Each service should have one and onlyone category that best aligns with its primary purpose. The ServiceCategory is commonly used for scenarios like analyzing costs acrossproviders and tracking the migration of workloads across fundamentallydifferent architectures.

    The ServiceCategory column MUST be present in a FOCUS dataset and MUST NOTbe null. This column is of type String and MUST be one of the allowedvalues.

    2.41.1. Column ID

    ServiceCategory

    2.41.2. Display Name

    Service Category

    2.41.3. Description

    Highest-level classification of a service based on the corefunction of the service.

    2.41.4. Content Constraints

    Constraint Value
    Column type Dimension
    Feature level Mandatory
    Allows nulls False
    Data type String
    Value format Allowed Values

    Allowed values:

    Service Category Description
    AI and Machine Learning Artificial Intelligence and MachineLearning related technologies.
    Analytics Data processing, analytics, andvisualization capabilities.
    Business Applications Business and productivity applications andservices.
    Compute Virtual, containerized, serverless, orhigh-performance computing infrastructure and services.
    Databases Database platforms and services that allowfor storage and querying of data.
    Developer Tools Software development and delivery toolsand services.
    Multicloud Support for interworking of multiple cloudand/or on-premises environments.
    Identity Identity and access managementservices.
    Integration Services that allow applications tointeract with one another.
    Internet of Things Development and management of IoT devicesand networks.
    Management and Governance Management, logging, and observability ofa customer’s use of cloud.
    Media Media and entertainment streaming andprocessing services.
    Migration Moving applications and data to thecloud.
    Mobile Services enabling cloud applications tointeract via mobile technologies.
    Networking Network connectivity and management.
    Security Security monitoring and complianceservices.
    Storage Storage services for structured orunstructured data.
    Web Services enabling cloud applications tointeract via the Internet.
    Other New or emerging services that do not alignwith an existing category.

    2.41.5. Introduced (version)

    0.5

    2.42. Service Name

    A service represents anoffering that can be purchased from a provider (e.g., cloud virtualmachine, SaaS database, professional services from a systemsintegrator). A service offering can include various types ofusage or other charges. For example, a cloud database servicemay include compute, storage, and networking charges.

    The Service Name is a display name for the offering that waspurchased. The Service Name is commonly used for scenarios likeanalyzing aggregate cost trends over time and filtering data toinvestigate anomalies.

    The ServiceName column MUST be present in a FOCUS dataset. This columnMUST be of type String and MUST NOT contain null values.

    2.42.1. Column ID

    ServiceName

    2.42.2. Display Name

    Service Name

    2.42.3. Description

    An offering that can be purchased from a provider (e.g., cloudvirtual machine, SaaS database, professional services from asystems integrator).

    2.42.4. Content Constraints

    Constraint Value
    Column type Dimension
    Feature level Mandatory
    Allows nulls False
    Data type String
    Value format <not specified>

    2.42.5. Introduced (version)

    0.5

    2.43. Service Subcategory

    The Service Subcategory is a secondary classification of the Service Category for a service based on its corefunction. The Service Subcategory (in conjunction with the ServiceCategory) is commonly used for scenarios like analyzing spend and usagefor specific workload types across providers and tracking the migrationof workloads across fundamentally different architectures.

    The ServiceSubcategory column adheres to the followingrequirements:

    • ServiceSubcategory is RECOMMENDED to be present in a FOCUS dataset and MUST NOTbe null.
    • ServiceSubcategory is of type String and MUST be one of the allowedvalues.
    • Each ServiceSubcategory value MUST have one and only one parentServiceCategory as specified in the allowed values below.
    • Though a given service can have multiple purposes, eachservice SHOULD have one and only one ServiceSubcategory thatbest aligns with its primary purpose.

    2.43.1. Column ID

    ServiceSubcategory

    2.43.2. Display Name

    Service Subcategory

    2.43.3. Description

    Secondary classification of the Service Category for aservice based on its core function.

    2.43.4. Content Constraints

    Constraint Value
    Column type Dimension
    Feature level Recommended
    Allows nulls False
    Data type String
    Value format Allowed Values

    Allowed values:

    Service Category Service Subcategory Service Subcategory Description
    AI and Machine Learning AI Platforms Unified solution that combines artificial intelligence and machinelearning technologies.
    AI and Machine Learning Bots Automated performance of tasks such as customer service, datacollection, and content moderation.
    AI and Machine Learning Generative AI Creation of content like text, images, and music by learningpatterns from existing data.
    AI and Machine Learning Machine Learning Creation, training, and deployment of statistical algorithms thatlearn from and perform tasks based on data.
    AI and Machine Learning Natural Language Processing Generation of human language, handling tasks like translation,sentiment analysis, and text summarization.
    AI and Machine Learning Other (AI and Machine Learning) AI and Machine Learning services that do not fall into one of thedefined subcategories.
    Analytics Analytics Platforms Unified solution that combines technologies across the entireanalytics lifecycle.
    Analytics Business Intelligence Semantic models, dashboards, reports, and data visualizations totrack performance and identify trends.
    Analytics Data Processing Integration and transformation tasks to prepare data foranalysis.
    Analytics Search Discovery of information by indexing and retrieving data fromvarious sources.
    Analytics Streaming Analytics Real-time data stream processes to detect patterns, trends, andanomalies as they occur.
    Analytics Other (Analytics) Analytics services that do not fall into one of the definedsubcategories.
    Business Applications Productivity and Collaboration Tools that facilitate individuals managing tasks and workingtogether.
    Business Applications Other (Business Applications) Business Applications services that do not fall into one of thedefined subcategories.
    Compute Containers Management and orchestration of containerized computeplatforms.
    Compute End User Computing Virtualized desktop infrastructure and device / endpointmanagement.
    Compute Quantum Compute Resources and simulators that leverage the principles of quantummechanics.
    Compute Serverless Compute Enablement of compute capabilities without provisioning or managingservers.
    Compute Virtual Machines Computing environments ranging from hosts with abstracted operatingsystems to bare-metal servers.
    Compute Other (Compute) Compute services that do not fall into one of the definedsubcategories.
    Databases Caching Low-latency and high-throughput access to frequently accesseddata.
    Databases Data Warehouses Big data storage and querying capabilities.
    Databases Ledger Databases Immutable and transparent databases to record tamper-proof andcryptographically secure transactions.
    Databases NoSQL Databases Unstructured or semi-structured data storage and queryingcapabilities.
    Databases Relational Databases Structured data storage and querying capabilities.
    Databases Time Series Databases Time-stamped data storage and querying capabilities.
    Databases Other (Databases) Database services that do not fall into one of the definedsubcategories.
    Developer Tools Developer Platforms Unified solution that combines technologies across multiple areas ofthe software development lifecycle.
    Developer Tools Continuous Integration and Deployment CI/CD tools and services that support building and deploying codefor software and systems.
    Developer Tools Development Environments Tools and services that support authoring code for software andsystems.
    Developer Tools Source Code Management Tools and services that support version control of code for softwareand systems.
    Developer Tools Quality Assurance Tools and services that support testing code for software andsystems.
    Developer Tools Other (Developer Tools) Developer Tools services that do not fall into one of the definedsubcategories.
    Identity Identity and Access Management Technologies that ensure users have appropriate access toresources.
    Identity Other (Identity) Identity services that do not fall into one of the definedsubcategories.
    Integration API Management Creation, publishing, and management of application programminginterfaces.
    Integration Messaging Asynchronous communication between distributed applications.
    Integration Workflow Orchestration Design, execution, and management of business processes andworkflows.
    Integration Other (Integration) Integration services that do not fall into one of the definedsubcategories.
    Internet of Things IoT Analytics Examination of data collected from IoT devices.
    Internet of Things IoT Platforms Unified solution that combines IoT data collection, processing,visualization, and device management.
    Internet of Things Other (Internet of Things) Internet of Things (IoT) services that do not fall into one of thedefined subcategories.
    Management and Governance Architecture Planning, design, and construction of software systems.
    Management and Governance Compliance Adherance to regulatory standards and industry best practices.
    Management and Governance Cost Management Monitoring and controlling expenses of systems and services.
    Management and Governance Data Governance Management of the availability, usability, integrity, and securityof data.
    Management and Governance Disaster Recovery Plans and procedures that ensure systems and services can recoverfrom disruptions.
    Management and Governance Endpoint Management Tools that configure and secure access to devices.
    Management and Governance Observability Monitoring, logging, and tracing of data to track the performanceand health of systems.
    Management and Governance Support Assistance and expertise supplied by providers.
    Management and Governance Other (Management and Governance) Management and governance services that do not fall into one of thedefined subcategories.
    Media Content Creation Production of media content.
    Media Gaming Development and delivery of gaming services.
    Media Media Streaming Multimedia delivered and rendered in real-time on devices.
    Media Mixed Reality Technologies that blend real-world and computer-generatedenvironments.
    Media Other (Media) Media services that do not fall into one of the definedsubcategories.
    Migration Data Migration Movement of stored data from one location to another.
    Migration Resource Migration Movement of resources from one location to another.
    Migration Other (Migration) Migration services that do not fall into one of the definedsubcategories.
    Mobile Other (Mobile) All Mobile services.
    Multicloud Multicloud Integration Environments that facilitate consumption of services from multiplecloud providers.
    Multicloud Other (Multicloud) Multicloud services that do not fall into one of the definedsubcategories.
    Networking Application Networking Distribution of incoming network traffic across application-basedworkloads.
    Networking Content Delivery Distribution of digital content using a network of servers(CDNs).
    Networking Network Connectivity Facilitates communication between networks or network segments.
    Networking Network Infrastructure Configuration, monitoring, and troubleshooting of networkdevices.
    Networking Network Routing Services that select paths for traffic within or acrossnetworks.
    Networking Network Security Protection from unauthorized network access and cyber threats usingfirewalls and anti-malware tools.
    Networking Other (Networking) Networking services that do not fall into one of the definedsubcategories.
    Security Secret Management Information used to authenticate users and systems, includingsecrets, certificates, tokens, and other keys.
    Security Security Posture Management Tools that help organizations configure, monitor, and improve systemsecurity.
    Security Threat Detection and Response Collect and analyze security data to identify and respond topotential security threats and vulnerabilities.
    Security Other (Security) Security services that do not fall into one of the definedsubcategories.
    Storage Backup Storage Secondary storage to protect against data loss.
    Storage Block Storage High performance, low latency storage that provides randomaccess.
    Storage File Storage Scalable, sharable storage for file-based data.
    Storage Object Storage Highly available, durable storage for unstructured data.
    Storage Storage Platforms Unified solution that supports multiple storage types.
    Storage Other (Storage) Storage services that do not fall into one of the definedsubcategories.
    Web Application Platforms Integrated environments that run web applications.
    Web Other (Web) Web services that do not fall into one of the definedsubcategories.
    Other Other (Other) Services that do not fall into one of the defined categories.

    2.43.5. Introduced (version)

    1.1

    2.44. SKU ID

    A SKU ID is a unique identifier that defines a provider-supportedconstruct for organizing properties that are common across one or moreSKU Prices. SKU ID can bereferenced on a catalog or pricelist published by a provider to look up detailed informationabout the SKU. The composition of the properties associated with the SKUID may differ across providers. Some providers may not support the SKU construct and instead associateall such properties directly with the SKU Price. SKU ID iscommonly used for analyzing cost based on SKU-relatedproperties above the pricing constructs.

    The SkuId column MUST be present in a FOCUS dataset when theprovider publishes a SKU list. This column MUST be of type String. ItMUST NOT be null when ChargeClass is not”Correction” and ChargeCategory is “Usage”or “Purchase”, MUST be null when ChargeCategory is “Tax”, and MAY benull for all other combinations of ChargeClass and ChargeCategory. SkuIdMUST equal SkuPriceId when a provider does not support an overarchingSKU ID construct.

    2.44.1. Column ID

    SkuId

    2.44.2. Display Name

    SKU ID

    2.44.3. Description

    A unique identifier that defines a provider-supported construct fororganizing properties that are common across one or more SKUPrices.

    2.44.4. Content constraints

    Constraint Value
    Column type Dimension
    Feature level Conditional
    Allows nulls True
    Data type String
    Value format <not specified>

    2.44.5. Introduced (version)

    1.0-preview

    2.45. SKU Meter

    The SKU Meter describes the functionality being metered or measuredby a particular SKU in a charge.

    Providers often have billing models in which multiple SKUs exist fora given service to describe and bill for different functionalities forthat service. For example, an object storage service may have separateSKUs for functionalities such as object storage, API requests, datatransfer, encryption, and object management. This field helpspractitioners understand which functionalities are being metered by thedifferent SKUs that appear in a FOCUS dataset.

    The SkuMeter column adheres to the following requirements:

    • SkuMeter MUST be present in a FOCUS dataset when when theprovider includes a SkuId.
    • SkuMeter MUST be of type String.
    • SkuMeter MUST be null when SkuId is null.
    • SkuMeter SHOULD NOT be null when SkuId is not null.
    • SkuMeter SHOULD remain consistent over time for a given SkuId.

    2.45.1. Examples

    Compute Usage, Block Volume Usage, Data Transfer, API Requests

    2.45.2. Column ID

    SkuMeter

    2.45.3. Display Name

    SKU Meter

    2.45.4. Description

    Describes the functionality being metered or measured by a particularSKU in a charge.

    2.45.5. Content Constraints

    Constraint Value
    Column type Dimension
    Feature level Conditional
    Allows nulls True
    Data type String
    Value format <not specified>

    2.45.6. Introduced (version)

    1.1

    2.46. SKU Price Details

    The SKU Price Details column represents a list of relevant propertiesshared by all charges with the same SKU PriceID. These properties provide qualitative and quantitative detailsabout the service represented by a SKU Price ID. This can enablepractitioners to calculate metrics such as total units of a service whenit is not directly billed in those units (e.g. cores) and thus enablesFinOps capabilities such as unit economics. These properties can alsohelp a practitioner understand the specifics of a SKU Price ID anddifferentiate it other SKU Price IDs.

    The SkuPriceDetails column adheres to the following requirements:

    • The SkuPriceDetails column MUST be in KeyValueFormat.
    • The key for a property SHOULD be formatted in PascalCase.
    • The properties (both keys and values) contained in theSkuPriceDetails column MUST be shared across all charges having the sameSkuPriceId, subject to the below provisions.
      • Additional properties (key-value pairs) MAY be added toSkuPriceDetails going forward for a given SkuPriceId.
      • Properties SHOULD NOT be removed from SkuPriceDetails for a givenSkuPriceId, once they have been included.
      • Individual properties (key-value pairs) SHOULD NOT be modified for agiven SkuPriceId and SHOULD remain consistent over time.
    • The key for a property SHOULD remain consistent across comparableSKUs having that property and the values for this key SHOULD remain in aconsistent format.
    • The SkuPriceDetails column MUST NOT contain properties which are notapplicable to the corresponding SkuPriceId.
    • The SkuPriceDetails column MAY contain properties which are alreadycaptured in other dedicated columns.
    • If a property has a numeric value, it MUST represent the value for asingle PricingUnit.
    • The SkuPriceDetails column MUST be present in a FOCUS dataset when theprovider includes a SkuPriceId.
      • The SkuPriceDetails column MAY be null when SkuPriceId is notnull.
      • The SkuPriceDetails column MUST be null when SkuPriceId isnull.

    2.46.1. Examples

    {"OperationClass":"A","PricingTier":2,"CoreHours":4,"PreimumProcessing":true,}

    2.46.2. Column ID

    SkuPriceDetails

    2.46.3. Display Name

    SKU Price Details

    2.46.4. Description

    A set of properties of a SKU Price ID which are meaningful and commonto all instances of that SKU Price ID.

    2.46.5. Content Constraints

    Constraint Value
    Column type Dimension
    Feature level Conditional
    Allows nulls True
    Data type JSON
    Value format Key-ValueFormat

    2.46.6. Introduced (version)

    1.1

    2.47. SKU Price ID

    A SKU Price ID is a unique identifier that defines the unit priceused to calculate the charge. SKU Price ID can be referenced on a price list published by aprovider to look up detailed information, including a corresponding listunit price. The composition of the properties associated with the SKUPrice ID may differ across providers. SKU Price ID is commonly used foranalyzing cost based on pricing properties such as Terms and Tiers.

    The SkuPriceId column adheres to the following requirements:

    • SkuPriceId MUST be present in a FOCUS dataset when theprovider publishes a SKU price list and MUST be of type String.
    • SkuPriceId MUST define a single unit price used for calculating thecharge.
    • ListUnitPrice MUST be associated withthe SkuPriceId in the provider published price list.
    • SkuPriceId MUST NOT be null when ChargeClass is not “Correction” and ChargeCategory is “Usage” or “Purchase”, MUSTbe null when ChargeCategory is “Tax”, and MAY be null for all othercombinations of ChargeClass and ChargeCategory.
    • A given value of SkuPriceId MUST be associated with one and only oneSkuId, except in cases of commitment discountflexibility.
    • If a provider does not have a SkuPriceId and wants to includeinformation in columns linked to SkuPriceId such as ListUnitPrice or SkuPriceDetails, the SkuId MAY be used inthe SkuPriceId column as long as it adheres to the aboveconditions.

    2.47.1. Column ID

    SkuPriceId

    2.47.2. Display Name

    SKU Price ID

    2.47.3. Description

    A unique identifier that defines the unit price used to calculate thecharge.

    2.47.4. Content constraints

    Constraint Value
    Column type Dimension
    Feature level Conditional
    Allows nulls True
    Data type String
    Value format <not specified>

    2.47.5. Introduced (version)

    1.0-preview

    2.48. Sub Account ID

    A Sub Account ID is a provider-assigned identifier assigned to a sub account. Sub Account ID iscommonly used for scenarios like grouping based on organizationalconstructs, access management needs, and cost allocation strategies.

    The SubAccountId column MUST be present in a FOCUS dataset when theprovider supports a sub account construct. This column MUST beof type String. If a charge does not apply to a sub account,the SubAccountId column MUST be null.

    See Appendix:Grouping constructs for resources or services for details andexamples of the different grouping constructs supported by FOCUS.

    2.48.1. Column ID

    SubAccountId

    2.48.2. Display Name

    Sub Account ID

    2.48.3. Description

    An ID assigned to a grouping of resources or services, often used to manageaccess and/or cost.

    2.48.4. Content constraints

    Constraint Value
    Column type Dimension
    Feature level Conditional
    Allows nulls True
    Data type String
    Value format <not specified>

    2.48.5. Introduced (version)

    0.5

    2.49. Sub Account Name

    A Sub Account Name is a display name assigned to a sub account. Sub account Nameis commonly used for scenarios like grouping based on organizationalconstructs, access management needs, and cost allocation strategies.

    The SubAccountName column MUST be present in a FOCUS dataset when theprovider supports a sub account construct. This column MUST beof type String. If a charge does not apply to a sub account,the SubAccountName column MUST be null.

    See Appendix:Grouping constructs for resources or services for details andexamples of the different grouping constructs supported by FOCUS.

    2.49.1. Column ID

    SubAccountName

    2.49.2. Display Name

    Sub Account Name

    2.49.3. Description

    A name assigned to a grouping of resources or services, often used to manageaccess and/or cost.

    2.49.4. Content constraints

    Constraint Value
    Column type Dimension
    Feature level Conditional
    Allows nulls True
    Data type String
    Value format <not specified>

    2.49.5. Introduced (version)

    0.5

    2.50. Tags

    The Tags column represents the set of tags assigned to tag sources that also accountfor potential provider-defined or user-defined tag evaluations. Tags arecommonly used for scenarios like adding business context to cost andusage data to identify and accurately allocate charges. Tags may also bereferred to by providers using other terms such as labels.

    A tag becomes finalized when a singlevalue is selected from a set of possible tag values assigned to the tagkey. When supported by a provider, this can occur when a tag value isset by provider-defined or user-defined rules.

    The Tags column adheres to the following requirements:

    • The Tags column MUST be present in a FOCUS dataset when theprovider supports setting user or provider-defined tags.
    • The Tags column MUST contain user-defined and provider-definedtags.
    • The Tags column MUST only contain finalized tags.
    • The Tags column MUST be in KeyValueFormat.
    • A Tag key with a non-null value for a given resource SHOULD beincluded in the tags column.
    • A Tag key with a null value for a given resource MAY be included inthe tags column depending on the provider’s tag finalizationprocess.
    • A Tag key that does not support a corresponding value, MUSThave a corresponding true (boolean) value set.
    • If Tag finalization is supported, providers MUST publish tagfinalization methods and semantics within their respectivedocumentation.
    • Providers MUST NOT alter user-defined Tag keys or values.

    Provider-defined Tags additionally adhere to the followingrequirements:

    • Provider-defined tags MUST be prefixed with a provider-specified tagkey prefix.
    • Providers SHOULD publish all provider-specified tag key prefixeswithin their respective documentation.

    2.50.1.Provider-Defined vs. User-Defined Tags

    This example illustrates three different tagging scenarios. The firsttwo illustrate when the provider supports both keys and values, whilethe third is for supporting keys only. The first tag is user-defined anddoesn’t have a provider prefix. The second tag is provider-defined andhas a prefix of acme/, which is reserved by the provider.The third tag has a tag key of baz and its value isassigned the boolean value true since the tag doesn’tsupport a value.

    {"foo":"bar","acme/foo":"bar","baz":true,}

    2.50.2. Finalized Tags

    Within a provider, tag keys may be associated with multiple values,and potentially defined at different levels within the provider, such asaccounts, folders, resourceand other resource grouping constructs. When finalizing,providers must reduce these multiple levels of definition to asingle value where each key is associated with exactly one value. Themethod by which this is done and the semantics are up to each providerbut must be documented within their respective documentation.

    As an example, let’s assume 1 subaccount exists with 1 virtual machine with the followingdetails, and tag inheritance favors Resources over SubAccounts.

    • Sub Account
      • id: my-sub-account
      • user-defined tags: team:ops, env:prod
    • Virtual Machine
      • id: my-vm
      • user-defined tags: team:web

    The table below represents a finalized dataset with theseresources. It also shows the finalized state after allresource-oriented, tag inheritance rules are processed.

    ResourceType ResourceId Tags
    Sub Account my-sub-account { “team”: “ops”, “env”: “prod” }
    Virtual Machine my-vm { “team”: “web”, “env”: “prod”}

    Because the the Virtual Machine Resource did not have anenv tag, it inherited tag, env:prod(italicized), from its parent sub account. Conversely, becausethe Virtual Machine Resource already has a team tag(team:web), it did not inherit team:ops fromits parent sub account.

    2.50.3. Column ID

    Tags

    2.50.4. Display Name

    Tags

    2.50.5. Description

    The set of tags assigned to tag sources that account forpotential provider-defined or user-defined tag evaluations.

    2.50.6. Content Constraints

    Constraint Value
    Column type Dimension
    Feature level Conditional
    Allows nulls True
    Data type JSON
    Value format Key-ValueFormat

    2.50.7. Introduced (version)

    1.0-preview

    3. Attributes

    Attributes are requirements that apply across a FOCUS dataset instead of anindividual column level. Requirements on data content can include namingconventions, data types, formatting standardizations, etc. Attributesmay introduce high-level requirements for data granularity, recency,frequency, etc. Requirements defined in attributes are necessary forservicing FinOpscapabilities accurately using a standard set of instructionsregardless of the origin of the data.

    3.1. Column Naming andOrdering

    Column IDs provided in cost data following a consistent naming andordering convention reduce friction for FinOps practitioners who consumethe data for analysis, reporting, and other use cases.

    All columns defined in the FOCUS specification MUST follow the namingand ordering requirements listed below.

    3.1.1. Attribute ID

    ColumnNamingAndOrdering

    3.1.2. Attribute Name

    Column Naming and Ordering

    3.1.3. Description

    Naming and ordering convention for columns appearing in a FOCUS dataset.

    3.1.4. Requirements

    3.1.4.1. Column Names
    • All columns defined by FOCUS MUST follow the following rules:
      • Column IDs MUST use Pascalcase.
      • Column IDs MUST NOT use abbreviations.
      • Column IDs MUST be alphanumeric with no special characters.
      • Columns that have an ID and a Name MUST have the Id orName suffix in the Column ID. Display Name for a Column MAYavoid the Name suffix if there are no other columns with the same nameprefix.
      • Column IDs SHOULD NOT use acronyms.
      • Column IDs SHOULD NOT exceed 50 characters to accommodate columnlength restrictions of various data repositories.
    • All custom columns MUST be prefixed with a consistentx_ prefix to identify them as external, custom columns anddistinguish them from FOCUS columns to avoid conflicts in futurereleases.
    • Columns that have an ID and a Name MUST have the Id orName suffix in the Column ID. Display Name for a Column MAYavoid the Name suffix if it is considered superfluous.
    • Columns with the Category suffix MUST benormalized.
    • Custom (e.g., provider-defined) columns SHOULD follow the same ruleslisted above for FOCUS columns.

    3.1.4.2. Column Order
    • All FOCUS columns SHOULD be first in the provided dataset.
    • Custom columns SHOULD be listed after all FOCUS columns and SHOULDNOT be intermixed.
    • Columns MAY be sorted alphabetically, but custom columns SHOULD beafter all FOCUS columns.

    3.1.5. Exceptions

    • Identifiers will use the “Id” abbreviation since this is a standardpattern across the industry.
    • Product offerings that incur charges will use the “Sku” abbreviationbecause it is a well-understood term both within and outside theindustry.

    3.1.6. Introduced (version)

    0.5

    3.2. Currency Code Format

    Columns that contain currency information in cost data following aconsistent format reduce friction for FinOps practitioners who consumethe data for analysis, reporting, and other use cases.

    All columns capturing a currency value, defined in the FOCUSspecification, MUST follow the requirements listed below. Customcurrency-related columns SHOULD also follow the same formattingrequirements.

    3.2.1. Attribute ID

    CurrencyCodeFormat

    3.2.2. Attribute Name

    Currency Code Format

    3.2.3. Description

    Formatting for currency columns appearing in a FOCUS dataset.

    3.2.4. Requirements

    Currency-related columns MUST be represented as a three-letteralphabetic code as dictated in the governing document ISO 4217:2015.

    3.2.5. Exceptions

    None

    3.2.6. Introduced (version)

    0.5

    3.3. Date/Time Format

    Columns that provide date and time information conforming tospecified rules and formatting requirements ensure clarity, accuracy,and ease of interpretation for both humans and systems.

    All columns capturing a date/time value, defined in the FOCUSspecification, MUST follow the formatting requirements listed below.Custom date/time-related columns SHOULD also follow the same formattingrequirements.

    3.3.1. Attribute ID

    DateTimeFormat

    3.3.2. Attribute Name

    Date/Time Format

    3.3.3. Description

    Rules and formatting requirements for date/time-related columnsappearing in a FOCUSdataset.

    3.3.4. Requirements

    • Date/time values MUST be in UTC (Coordinated Universal Time) toavoid ambiguity and ensure consistency across different time zones.
    • Date/time values format MUST be aligned with ISO 8601 standard,which provides a globally recognized format for representing dates andtimes (see ISO8601-1:2019 governing document for details).
    • Values providing information about a specific moment in time MUST berepresented in the extended ISO 8601 format with UTC offset(‘YYYY-MM-DDTHH:mm:ssZ’) and conform to the following guidelines:
      • Include the date and time components, separated with the letter’T’
      • Use two-digit hours (HH), minutes (mm), and seconds (ss).
      • End with the ‘Z’ indicator to denote UTC (Coordinated UniversalTime)

    3.3.5. Exceptions

    None

    3.3.6. Introduced (version)

    0.5

    3.4. Discount Handling

    A discount is a pricing construct where providers offer a reducedprice for services. Providersmay have many types of discounts, including but not limited tocommercially negotiateddiscounts, commitment discountswhen you agree to a certain amount of usage or spend, and bundleddiscounts where you receive free or discounted usage of one product orservice based on the usage of another. Discount Handling iscommonly used in scenarios like verifying discounts were applied andcalculating cost savings.

    Some discount offers can be purchased from a provider to get reducedprices. The most common example is a commitment discount, whereyou “purchase” a commitment to use or spend a specific amount within aperiod. When a commitment isn’t fully utilized, the unused amountreduces the potential savings from the discount and can even result inpaying higher costs than without the discount. Due to this risk, unusedcommitment amounts need to be clearly identifiable at a granular level.To facilitate this, unused commitments are recorded with a separate rowfor each charge period where the commitment was not fully utilized. Toshow the impact of purchased discounts on each discounted row, discountpurchases need the purchase amount to be amortized over the term the discount is applied to(e.g., 1 year) with each chargeperiod split and applied to each row that received thediscount.

    Amortization is a process used to break down and spread purchasecosts over a period of time or term of use. When a purchase isapplicable to resources, like commitment discounts, theamortized cost of a resource takes the initial payment and terminto account and distributes it out based on the resource’s usage,attributing the prorated cost for each unit of billing. Amortizationenables users of billing data to distribute purchase charges to theappropriate audience in support of cost allocation efforts. DiscountHandling for purchased commitments is commonly used for scenarios likecalculating utilization and implementing chargeback for the purchaseamount.

    While providers may use different terms to describe discounts, FOCUSidentifies a discount as being a reduced price applied directly to arow. Any price or cost reductions that are awarded after the fact areidentified as a “Credit” Charge Category. One example might be when aprovider offers a reduced rate after passing a certain threshold ofusage or spend.

    All rows defined in FOCUS MUST follow the discount handlingrequirements listed below.

    3.4.1. Attribute ID

    DiscountHandling

    3.4.2. Attribute Name

    Discount Handling

    3.4.3. Description

    Indicates how to include and apply discounts to usage charges or rowsin a FOCUS dataset.

    3.4.4. Requirements

    • All applicable discounts SHOULD be applied to each row they pertainto and SHOULD NOT be negated in a separate row.
    • All discounts applied to a row MUST apply to the entire charge.
      • Multiple discounts MAY apply to a row, but they MUST apply to theentire charge covered by that row.
      • If a discount only applies to a portion of a charge, then thediscounted portion of the charge MUST be split into a separate row.
      • Each discount MUST be identifiable using existing FOCUS columns.
        • Rows with a commitment discount applied to them MUSTinclude a CommitmentDiscountId.
        • If a provider applies a discount that cannot be represented by aFOCUS column, they SHOULD include additional columns to identify thesource of the discount.
    • Purchased discounts (e.g., commitment discounts) MUST beamortized.
      • The BilledCost MUST be 0 for any row where the commitment covers theentire cost for the charge period.
      • The EffectiveCost MUST include the portion of the amortized purchasecost that applies to this row.
      • The sum of the EffectiveCost for all rows whereCommitmentDiscountStatus is “Used” or “Unused” for eachCommitmentDiscountId over the entire duration of the commitment MUST bethe same as the total BilledCost of the commitmentdiscount.
      • The CommitmentDiscountId and ResourceId MUST be set to the IDassigned to the commitment discount. ChargeCategory MUST be setto “Purchase” on rows that represent a purchase of a commitmentdiscount.
      • CommitmentDiscountStatus MUST be “Used” for ChargeCategory “Usage”rows that received a reduced price from a commitment.CommitmentDiscountId MUST be set to the ID assigned to the discount.ResourceId MUST be set to the ID of the resource that received thediscount.
      • If a commitment is not fully utilized, the provider MUST include arow that represents the unused portion of the commitment for thatcharge period. These rows MUST be represented withCommitmentDiscountStatus set to “Unused” and ChargeCategory set to”Usage”. Such rows MUST have their CommitmentDiscountId and ResourceIdset to the ID assigned to the commitment discount.
    • Credits that are applied after the fact MUST use a ChargeCategory of”Credit”.

    3.4.5. Exceptions

    None

    3.4.6. Introduced (version)

    1.0-preview

    3.5. Key-Value Format

    Columns that provide Key-Value information are often used in place ofseparate columns for enumerating data which would be inherently sparseand/or without predetermined keys. This consolidates related informationand provides more consistency in the schema. Key-value pairs are alsoreferred to as name-value pairs, attribute-value pairs, or field-valuepairs.

    All key-value related columns defined in the FOCUS specification MUSTfollow the key-value formatting requirements listed below.

    3.5.1. Attribute ID

    KeyValueFormat

    3.5.2. Attribute Name

    Key-Value Format

    3.5.3. Description

    Rules and formatting requirements for columns appearing in a FOCUS dataset that conveydata as key-value pairs.

    3.5.4. Requirements

    • Key-Value Format columns MUST contain a serialized JSON string,consistent with the ECMA404 definition of an object.
    • Keys in a key-value pair MUST be unique within an object.
    • Values in a key-value pair MUST be one of the following types:number, string, true, false, ornull.
    • Values in a key-value pair MUST NOT be an object or an array.

    3.5.5. Exceptions

    None

    3.5.6. Introduced (version)

    1.0-preview

    3.6. Null Handling

    Cost data rows that don’t have avalue that can be presented for a column must be handled in a consistentway to reduce friction for FinOps practitioners who consume the data foranalysis, reporting, and other use cases.

    All columns defined in the FOCUS specification MUST follow the nullhandling requirements listed below. Custom columns SHOULD also followthe same formatting requirements.

    3.6.1. Attribute ID

    NullHandling

    3.6.2. Attribute Name

    Null Handling

    3.6.3. Description

    Indicates how to handle columns that don’t have a value.

    3.6.4. Requirements

    • Columns MUST use NULL when there isn’t a value that can be specifiedfor a nullable column.
    • Columns MUST NOT use empty strings or placeholder values such as 0for numeric columns or “Not Applicable” for string columns to representa null or not having a value, regardless of whether the column allowsnulls or not.

    3.6.5. Exceptions

    None

    3.6.6. Introduced (version)

    0.5

    3.7. Numeric Format

    Columns that provide numeric values conforming to specified rules andformatting requirements ensure clarity, accuracy, and ease ofinterpretation for humans and systems. The FOCUS specification does notrequire a specific level of precision for numeric values. The level ofprecision required for a given column is determined by the provider andshould be part of a data definition published by the provider.

    All columns capturing a numeric value, defined in the FOCUSspecification, MUST follow the formatting requirements listed below.Custom numeric value capturing columns SHOULD adopt the same formatrequirements over time.

    3.7.1. Attribute ID

    NumericFormat

    3.7.2. Attribute Name

    Numeric Format

    3.7.3. Description

    Rules and formatting requirements for numeric columns appearing in aFOCUS dataset.

    3.7.4. Requirements

    • Columns with a Numeric value format MUST contain a single numericvalue.
    • Numeric values MUST be expressed as an integer value, a decimalvalue, or a value expressed in scientific notation. Fractional notationMUST NOT be used.
    • Numeric values expressed using scientific notation MUST be expressedusing E notation “mEn” with a real number m and an integer n indicatinga value of “m x 10^n”. The sign of the exponent MUST only be expressedas part of the exponent value if n is negative.
    • Numeric values MUST NOT be expressed with mathematical symbols,functions, or operators.
    • Numeric values MUST NOT contain qualifiers or additional characters(e.g., currency symbols, units of measure, etc.).
    • Numeric values MUST NOT contain commas or punctuation marks exceptfor a single decimal point (“.”) if required to express a decimalvalue.
    • Numeric values MUST NOT include a character to represent a sign fora positive value. A negative sign (-) MUST indicate a negativevalue.
    • Columns with a Numeric value format MUST present one of thefollowing values as the “Data type” in the column definition.
      • Allowed values:

        Data Type Type Description
        Integer Specifies a numeric value represented by awhole number or by zero. Integer number formats correspond to standarddata types defined by ISO/IEC 9899:2018
        Decimal Specifies a numeric value represented by adecimal number. Decimal formats correspond to ISO/IEC/IEEE 60559:2011and IEEE 754-2008 definitions.
    • Providers SHOULD define precision and scale for Numeric Formatcolumns using one of the following precision values in a data definitiondocument that providers publish.
      • Allowed values:

        Data Type Precision Definition Range / Significant Digits
        Integer Short 16-bit signed short int ISO/IEC9899:2018 -32,767 to +32,767
        Integer Long 32-bit signed long int ISO/IEC9899:2018 -2,147,483,647 to +2,147,483,647
        Integer Extended 64-bit signed two’s complement integeror higher -(2^63 – 1) to (2^63 – 1)
        Decimal Single 32-bit binary format IEEE 754-2008floating-point (decimal32) 9
        Decimal Double 64-bit binary format IEEE 754-2008floating-point (decimal64) 16
        Decimal Extended 128-bit binary format IEEE 754-2008floating-point (decimal128) or higher 36+

    3.7.4.1. Examples

    This format requires that single numeric values be represented usingan integer or decimal format without additional characters orqualifiers. The following lists provide examples of values that meet therequirements and those that do not.

    • Values Meeting Numeric Requirements:

      • -100.2
      • -3
      • 4
      • 35.2E-7
      • 1.234
    • Values NOT Meeting Numeric Requirements

      • 1 1/2 – contains fractional notation
      • 35.2E+7 – contains a positive exponent with a sign
      • 35.24 x 10^7 – contains an invalid format for scientificnotation
      • [3,5,8] – contains an array
      • [4:5] – contains a range
      • 5i + 4 – contains a complex number
      • sqrt(2) – contains a mathematical symbol or operation
      • 2.3^3 – contains an exponent
      • 32 GiB – contains a unit of measure
      • $32 – contains a currency symbol
      • 3,432,342 – contains a comma
      • +333 – contains a positive sign

    3.7.5. Exceptions

    None

    3.7.6. Introduced (version)

    1.0-preview

    3.8. String Handling

    Columns that capture string values conforming to specifiedrequirements foster data integrity, interoperability, and consistency,improve data analysis and reporting, and support reliable data-drivendecision-making.

    All columns capturing a string value, defined in the FOCUSspecification, MUST follow the requirements listed below. Custom stringvalue capturing columns SHOULD adopt the same requirements overtime.

    3.8.1. Attribute ID

    StringHandling

    3.8.2. Attribute Name

    String Handling

    3.8.3. Description

    Requirements for string-capturing columns appearing in a FOCUS dataset.

    3.8.4. Requirements

    • String values MUST maintain the original casing, spacing, and otherrelevant consistency factors as specified by providers andend-users.
    • Charges to mutable entities(e.g., resource names) MUST be accurately reflected in correspondingcharges incurred after the change and MUST NOT altercharges incurred before the change, preserving data integrityand auditability for all charge records.
    • Immutable string values that refer to the same entity (e.g.,resource identifiers, region identifiers, etc.) MUST remain consistentand unchanged across all billingperiods.
    • Empty strings and strings consisting solely of spaces SHOULD NOT beused in not-nullable string columns.

    3.8.5. Exceptions

    • When a record is provided after a change to a mutable string valueand the ChargeClass is “Correction”, therecord MAY contain the altered value.

    3.8.6. Introduced (version)

    1.0

    3.9. Unit Format

    Billing data frequently captures data measured in units related todata size, count, time, and other dimensions. The Unit Formatattribute provides a standard for expressing units of measure in columnsappearing in a FOCUSdataset.

    All columns defined in FOCUS specifying Unit Format as a value formatMUST follow the requirements listed below.

    3.9.1. Attribute ID

    UnitFormat

    3.9.2. Attribute Name

    Unit Format

    3.9.3. Description

    Indicates standards for expressing measurement units in columnsappearing in a FOCUS dataset.

    3.9.4. Requirements

    • Units SHOULD be expressed as a single unit of measure adhering toone of the following three formats.
      • <plural-units> – “GB”, “Seconds”
      • <singular-unit>-<plural-time-units> -“GB-Hours”, “MB-Days”
      • <plural-units>/<singular-time-unit> -“GB/Hour”, “PB/Day”
    • Units MAY be expressed with a unit quantity or time interval. If aunit quantity or time interval is used, the unit quantity or timeinterval MUST be expressed as a whole number. The following formats arevalid:
      • <quantity> <plural-units> – “1000 Tokens”,”1000 Characters”
      • <plural-units>/<interval> <plural-time-units>– “Units/3 Months”
    • Unit values and components of columns using the Unit Format MUST usea capitalization scheme that is consistent with the capitalizationscheme used in this attribute if that term is listed in this section.For example, a value of “gigabyte-seconds” would not be compliant withthis specification as the terms “gigabyte” and “second” are listed inthis section with the appropriate capitalization. If the unit is notlisted in the table, it is to be used over a functional equivalent witha similar meaning with the same capitalization scheme.
    • Units SHOULD be composed of the list of recommended units listed inthis section unless the unit value covers a dimension notlisted in the recommended unit set, or if the unit covers a count-basedunit distinct from recommended values in the count dimensionlisted in this section.

    3.9.4.1. Data Size Unit Names

    Data size unit names MUST be abbreviated using one of theabbreviations in the following table. For example, a unit name of “TB”is a valid unit name, and a unit name of “terabyte” is an invalid unitname. Data size abbreviations can be considered both the singular andplural form of the unit. For example, “GB” is both the singular andplural form of the unit “gigabyte”, and “GBs” would be an invalid unitname. Values that exceed 10^18 MUST use the abbreviation for exabit,exabyte, exbibit, and exbibyte, and values smaller than a byte MUST usethe abbreviation for bit or byte. For example, the abbreviation “YB” for”yottabyte” is not a valid data size unit name as it represents a valuelarger than what is listed in the following table.

    The following table lists the valid abbreviations for data size unitsfrom a single bit or byte to 10^18 bits or bytes.

    Data size in bits Data size in bytes
    b (bit) = 10^1 B (byte = 10^1)
    Kb (kilobit = 10^3) KB (kilobyte = 10^3)
    Mb (megabit = 10^6) MB (megabyte = 10^6)
    Gb (gigabit = 10^9) GB (gigabyte = 10^9)
    Tb (terabit = 10^12) TB (terabyte = 10^12)
    Pb (petabit = 10^15) PB (petabyte = 10^15)
    Eb (exabit = 10^18) EB (exabyte = 10^18)
    Kib (kibibit = 2^10) KiB (kibibyte = 2^10)
    Mib (mebibit = 2^20) MiB (mebibyte = 2^20)
    Gib (gibibit = 2^30) GiB (gibibyte = 2^30)
    Tib (tebibit = 2^40) TiB (tebibyte = 2^40)
    Pib (pebibit = 2^50) PiB (pebibyte = 2^50)
    Eib (exbibit = 2^60) EiB (exbibyte = 2^60)

    3.9.4.2. Count-based UnitNames

    A count-based unit is a noun that represents a discrete number ofitems, events, or actions. For example, a count-based unit can be usedto represent the number of requests, instances, tokens, orconnections.

    If the following list of recommended values does not cover acount-based unit, a provider MAY introduce a new noun representing acount-based unit. All nouns appearing in units that are not listed inthe recommended values table will be considered count-based units. A newcount-based unit value MUST be capitalized.

    Count
    Count
    Unit
    Request
    Token
    Connection
    Certificate
    Domain
    Core

    3.9.4.3. Time-based Unit Names

    A time-based unit is a noun that represents a time interval.Time-based units can be used to measure consumption over a time intervalor in combination with another unit to capture a rate of consumption.Time-based units MUST match one of the values listed in the followingtable.

    Time
    Year
    Month
    Day
    Hour
    Minute
    Second

    3.9.4.4. Composite Units

    If the unit value is a composite value made from combinations of oneor more units, each component MUST also align with the set ofrecommended values.

    Instead of “per” or “-” to denote a Composite Unit, slash (“/”) andspace(” “) MUST be used as a common convention. Count-based units likerequests, instances, and tokens SHOULD be expressed using a value listedin the count dimension. For example, if a usage unit ismeasured as a rate of requests or instances over a period of time, theunit SHOULD be listed as “Requests/Day” to signify the number ofrequests per day.

    3.9.5. Exceptions

    None

    3.9.6. Introduced (version)

    1.0-preview

    4. Metadata

    The FOCUS specification defines a metadata structure to be suppliedby data providers to facilitate practitioners’ use of FOCUS data. Thismetadata includes general information about the data generator and theschema of the FOCUSdataset.

    FOCUS Metadata SHOULD be provided in a format that is accessibleprogrammatically, such as a file, website, API, or table. ProvidersSHOULD provide documentation on their implementation of the FOCUSmetadata.

    4.1. Data Generator

    The FOCUS metadata about the generator of the FOCUS data.

    4.1.1. Requirements

    The FOCUS Data Generator metadata MUST be provided. This metadataMUST be of type Object and MUST NOT contain null values.

    4.1.2. Schema Example

    For an example of the FOCUS Data Generator metadata please refer to:Data Generator Example

    4.1.3. Data Generator

    Human-readable name of the entity that is generating the data.

    The DataGenerator MUST be provided in the metadata. DataGeneratorMUST be of type String and MUST NOT be null. The DataGenerator SHOULD beeasily associated with the provider who generated the FOCUS dataset.

    4.1.3.1. Metadata ID

    DataGenerator

    4.1.3.2. Metadata Name

    Data Generator

    4.1.3.3. Content constraints
    Constraint Value
    Feature level Mandatory
    Allows nulls False
    Data type String
    Value format <not specified>

    4.1.3.4. Introduced (version)

    1.0

    4.2. Schema

    The schema metadata object and its contents provides informationabout the structure of the data provided.

    4.2.1. Requirements

    4.2.1.1. Reference to FOCUSData

    FOCUS data artifacts, whether they are data files, data streams, ordata tables, MUST provide a clear reference to the schema of the data.This reference MUST be retrievable without inspection of the contents ofthe FOCUS data within the data artifact. For some delivery mechanismssuch as database tables, the provider may rely on the schemafunctionality of the providing system.

    It is recommended that the schema reference be provided as anexternal reference rather than included in full as metadata accompanyingthe data artifact. This allows for easier understanding of when changesto the schema of the FOCUSdatasets occurs.

    4.2.1.2. Schema MetadataCreation

    Should the provider change the structure of the supplied FOCUS dataartifact, a new schema metadata object MUST be supplied. These scenariosinclude, but are not limited to:

    4.2.1.3. Schema MetadataUpdates

    Should there be an error where the schema metadata object does notmatch the schema of the FOCUS data artifact, the provider MUST updatethe schema metadata object to match the schema of the FOCUS dataartifact. This is to ensure that the schema metadata object is alwaysaccurate.

    4.2.2. Schema Example

    For an example of the FOCUS schema metadata please refer to: Schema Metadata Example

    4.2.3. Schema ID

    The Schema ID provides the reference item to associate which Schemawas used for the generation of a FOCUS Dataset.

    The SchemaId MUST be present in the metadata. The SchemaId MUST be ofString. It is RECOMMENDED for SchemaId to be a Globally UniqueIdentifier (GUID).

    4.2.3.1. Metadata ID

    SchemaId

    4.2.3.2. Metadata Name

    Schema ID

    4.2.3.3. Content constraints
    Constraint Value
    Feature level Mandatory
    Allows nulls False
    Data type STRING
    Value format Recommend GUID String

    4.2.3.4. Introduced (version)

    1.0

    4.2.4. Creation Date

    Date the schema was created.

    The CreationDate MUST be present in the metadata. This MUST be oftype Date/Time and MUST NOT contain null values. CreationDate MUSTconform to DateTimeFormat.

    4.2.4.1. Metadata ID

    CreationDate

    4.2.4.2. Metadata Name

    Creation Date

    4.2.4.3. Content constraints
    Constraint Value
    Feature level Mandatory
    Allows nulls False
    Data type Date/Time
    Value format Date/TimeFormat

    4.2.4.4. Introduced (version)

    1.0

    4.2.5. FOCUS Version

    The version of FOCUS utilized for building the dataset.

    The FocusVersion MUST be provided in the metadata. FocusVersion MUSTbe of type String and MUST NOT contain null values. FocusVersion MUSTmatch one of the published versions of the FOCUS specification.FocusVersion MUST match the version of the FOCUS specification that theFOCUS dataset conformsto.

    4.2.5.1. Metadata ID

    FocusVersion

    4.2.5.2. Metadata Name

    FOCUS Version

    4.2.5.3. Content constraints
    Constraint Value
    Feature level Mandatory
    Allows nulls False
    Data type STRING
    Value format Must align with a publishedFocusVersion

    4.2.5.4. Introduced (version)

    1.0

    4.2.6. Provider Version

    The ProviderVersion MAY be supplied to declare the version of logicby which the FOCUSdataset was generated and is separate from FOCUS Version.ProviderVersion allows for the provider to specify changes that may notresult in a structural change in the data. It is suggested that theprovider version use a versioning approach such as SemVer version.

    ProviderVersion MUST be of type String and MUST NOT contain nullvalues. If FocusVersion is changed a new ProviderVersion MUST be alsochanged. The provider MUST document what changes are present in theProviderVersion.

    4.2.6.1. Metadata ID

    ProviderVersion

    4.2.6.2. Metadata Name

    Provider Version

    4.2.6.3. Content constraints
    Constraint Value
    Feature level Optional
    Allows nulls False
    Data type STRING
    Value format <not specified>

    4.2.6.4. Introduced (version)

    1.1

    4.2.7. Column Definition

    The FOCUS metadata schema column definition provides a list of thecolumns present in the FOCUSdataset along with metadata about the columns.

    4.2.7.1. Requirements

    This metadata MUST be present in the FOCUS metadata schema. Thismetadata MUST be of type Object and MUST NOT contain null values.

    4.2.7.2. Column Name

    The name of the column provided in the FOCUS dataset.

    The ColumnName MUST be provided in the FOCUS Metadata schema.ColumnName MUST be of type String and MUST NOT contain null values.

    4.2.7.2.1. Metadata ID

    ColumnName

    4.2.7.2.2. Metadata Name

    Column Name

    4.2.7.2.3. Content constraints
    Constraint Value
    Feature level Mandatory
    Allows nulls False
    Data type String
    Value format <not specified>

    4.2.7.2.4. Introduced (version)

    1.0

    4.2.7.3. Data Type

    The data type of the column provided in the FOCUS dataset.

    The DataType MUST be provided in the FOCUS Metadata schema. DataTypeMUST be of type String and MUST NOT contain null values.

    4.2.7.3.1. Metadata ID

    DataType

    4.2.7.3.2. Metadata Name

    Data Type

    4.2.7.3.3. Content constraints
    Constraint Value
    Feature level Mandatory
    Allows nulls False
    Data type String
    Value format <not specified>

    4.2.7.3.4. Introduced (version)

    1.0

    4.2.7.4. Numeric Precision

    Numeric Precision is the maximum number of digits for the values inthe column.

    NumericPrecision SHOULD be provided in the FOCUS Metadata schema forNumeric Format columns. NumericPrecision MUST be of type Integer andMUST NOT contain null values.

    4.2.7.4.1. Metadata ID

    NumericPrecision

    4.2.7.4.2. Metadata Name

    Numeric Precision

    4.2.7.4.3. Content constraints
    Constraint Value
    Feature level Conditional
    Allows nulls False
    Data type Integer
    Value format NumericFormat

    4.2.7.4.4. Introduced (version)

    1.0

    4.2.7.5. Number Scale

    The number scale of the data provides the maximum number of digitsafter the decimal point in decimal numbers.

    NumberScale SHOULD be provided in the FOCUS Metadata schema forDecimal columns. NumberScale MUST be of type Integer and MUST NOTcontain null values.

    4.2.7.5.1. Metadata ID

    NumberScale

    4.2.7.5.2. Metadata Name

    Number Scale

    4.2.7.5.3. Content constraints
    Constraint Value
    Feature level Conditional
    Allows nulls False
    Data type Integer
    Value format NumericFormat

    4.2.7.5.4. Introduced (version)

    1.0

    4.2.7.6. Provider Tag Prefixes

    The Provider Tag Prefixes defines the list of prefixes used in thetag name of provider-defined tags. This metadata isuseful for the consumer to identify which tags are provider-defined vsuser-defined.

    The ProviderTagPrefixes MUST be provided when ColumnName is equal toTags. The ProviderTagPrefix MUST be of type Array of Strings. TheProviderTagPrefixes SHOULD be easily associated with the provider whogenerated the FOCUSdataset.

    4.2.7.6.1. Metadata ID

    ProviderTagPrefixes

    4.2.7.6.2. Metadata Name

    Provider Tag Prefixes

    4.2.7.6.3. Content constraints
    Constraint Value
    Feature level Conditional
    Allows nulls False
    Data type Array
    Value format STRING datatype values in the array

    4.2.7.6.4. Introduced (version)

    1.0

    4.2.7.7. String Encoding

    The string encoding scheme of the column provided in the FOCUS dataset.

    StringEncoding SHOULD be provided in the FOCUS Metadata schema whenit is required to know this information in order to successfully readthe data. StringEncoding MUST be of type String and MUST NOT containnull values.

    4.2.7.7.1. Metadata ID

    StringEncoding

    4.2.7.7.2. Metadata Name

    StringEncoding

    4.2.7.7.3. Content constraints
    Constraint Value
    Feature level Conditional
    Allows nulls False
    Data type String
    Value format <not specified>

    4.2.7.7.4. Introduced (version)

    1.0

    4.2.7.8. String Max Length

    The string max length of the data that can be stored in thecolumn.

    StringMaxLength SHOULD be provided in the FOCUS Metadata schema forString columns. StringMaxLength MUST be of type Integer and MUST NOTcontain null values.

    4.2.7.8.1. Metadata ID

    StringMaxLength

    4.2.7.8.2. Metadata Name

    String Max Length

    4.2.7.8.3. Content constraints
    Constraint Value
    Feature level Conditional
    Allows nulls False
    Data type Integer
    Value format NumericFormat

    4.2.7.8.4. Introduced (version)

    1.0

    5. Use Case Library

    This specification is based on a set of common FinOps use cases,which are publicly available at [https://focus.finops.org/use-cases/](https://focus.finops.org/use-cases/).Developed by FinOps practitioners, these use cases are organized bypersona and capability, making it easy to find relevant scenarios. Eachuse case includes sample SQL queries to help you get started withimplementation.

    6. Glossary

    Adjustment

    A charge representing a modification to billing data to account forcertain events or circumstances not previously captured, or capturedincorrectly. Examples include billing errors, service disruptions, orpricing changes.

    Amortization

    The distribution of upfront costs over time to accurately reflect theconsumption or benefit derived from the associated resources orservices. Amortization is valuable when the commitment period (timeduration of the cost) extends beyond the granularity of the sourcereport.

    Availability Zone

    A collection of geographically separated locations containing a datacenter or cluster of data centers. Each availability zone (AZ) shouldhave its own power, cooling, and networking, to provide redundancy andfault tolerance.

    Billed Cost

    A charge that serves as the basis for invoicing. It includes thetotal amount of fees and discounts, signifying a monetary obligation.Valuable when reconciling cash outlay with incurred expenses isrequired, such as cost allocation, budgeting, and invoicereconciliation.

    Billing Account

    A container for resources and/or services that are billed together inan invoice. A billing account may have sub accounts, all of whose costsare consolidated and invoiced to the billing account.

    Billing Currency

    An identifier that represents the currency that a charge forresources and/or services was billed in.

    Billing Period

    The time window that an organization receives an invoice for,inclusive of the start date and exclusive of the end date. It isindependent of the time of usage and consumption of resources andservices.

    Block Pricing

    A pricing approach where the cost of a particular resource or serviceis determined based on predefined quantities or tiers of usage. In thesescenarios, the Pricing Unit and the corresponding Pricing Quantity canbe different from the Consumed Unit and Consumed Quantity.

    CapacityReservation

    A capacity reservation is an agreement that secures a dedicatedamount of resources or services for a specified period. This ensures thereserved capacity is always available and accessible, even if it’s notfully utilized. Customers are typically charged for the reservedcapacity, regardless of actual consumption.

    Charge

    A row in a FOCUS-compatible cost and usage dataset.

    Charge Period

    The time window for which a charge is effective, inclusive of thestart date and exclusive of the end date. The charge period forcontinuous usage should match the time granularity of the dataset (e.g.,1 hour for hourly, 1 day for daily). The charge period for a non-usagecharge with time boundaries should match the duration ofeligibility.

    Cloud Service Provider(CSP)

    A company or organization that provides remote access to computingresources, infrastructure, or applications for a fee.

    Commitment

    A customer’s agreement to consume a specific quantity of a service orresource over a defined period, usually also creating a financialcommitment throughout the entirety of the commitment period. Somecommitments also hold Providers to certain assurance levels of resourceavailability.

    CommitmentDiscount

    A billing discount model that offers reduced rates on preselectedSKUs in exchange for an obligated usage or spend amount over apredefined term. Commitment discount purchases, made upfront and/or withrecurring monthly payments are amortized evenly across predefined chargeperiods (i.e. hourly), and unused amounts cannot be carried over tosubsequent charge periods. Commitment discounts are publicly availableto customers without special contract arrangements.

    CommitmentDiscount Flexibility

    A feature of commitmentdiscounts that may further transform the predetermined amountof usage purchased or consumed based on additional, provider-specificrequirements.

    Contracted UnitPrice

    The agreed-upon unit price for a single Pricing Unit of the associated SKU, inclusive ofnegotiated discounts, if present, and exclusive of any other discounts.This price is denominated in the Billing Currency.

    Dimension

    A specification-defined categorical attribute that provides contextor categorization to billing data.

    Effective Cost

    The amortized cost of the charge after applying all reduced rates,discounts, and the applicable portion of relevant, prepaid purchases(one-time or recurring) that covered this charge.

    Exclusive Bound

    A Date/Time Format value that is not contained within the endingbound of a time period.

    Finalized Tag

    A tag with one tag value chosen from a set of possible tag valuesafter being processed by a set of provider-defined or user-definedrules.

    FinOps Costand Usage Specification (FOCUS)

    An open-source specification that defines requirements for billingdata.

    FOCUS Dataset

    A structured collection of cost and usage data that meets or exceedsthe Basic compliance criteria of FOCUS.

    Inclusive Bound

    A Date/Time Format value that is contained within the beginning boundof a time period.

    Interruptible

    A category of compute resources that can be paused or terminated bythe CSP within certain criteria, often advertised at reduced unitpricing when compared to the equivalent non-interruptible resource.

    List Unit Price

    The suggested provider-published unit price for a single Pricing Unit of the associated SKU, exclusive of any discounts. This price isdenominated in the BillingCurrency.

    Managed ServiceProvider (MSP)

    A company or organization that provides outsourced management andsupport of a range of IT services, such as network infrastructure,cybersecurity, cloud computing, and more.

    Metric

    A FOCUS-defined column that provides numeric values, allowing foraggregation operations such as arithmetic operations (sum,multiplication, averaging etc.) and statistical operations.

    NegotiatedDiscount

    A contractual agreement where a customer commits to specific spend orusage goals over a term inexchange for discounted rates across varying SKUs. Unlike commitment discounts,negotiated discounts are typically more customized to customer’saccounts, can be utilized at varying frequencies, and may overlap withcommitment discounts.

    On-Demand

    A term that describes a service that is available and providedimmediately or as needed, without requiring a pre-scheduled appointmentor prior arrangement. In cloud computing, virtual machines can becreated and terminated as needed, i.e. on demand.

    Pascal Case

    Pascal Case (PascalCase, also known as UpperCamelCase) is a formatfor identifiers which contain one or more words meaning the words areconcatenated together with no delimiter and the first letter of eachword is capitalized.

    Potato

    A long and often painful conversation had by the FOCUS contributors.Sometimes the name of a thing that we could not yet name. No starchyroot vegetables were harmed during the production of this specification.We thank potato for its contribution in the creation of thisspecification.

    Practitioner

    An individual who performs FinOps within an organization to maximizethe business value of using cloud and cloud-like services.

    Price List

    A comprehensive list of prices offered by a provider.

    Provider

    An entity that made internal or 3rd party resources and/or servicesavailable for purchase.

    Resource

    A unique component that incurs a charge.

    Row

    A row in a FOCUS-compatible cost and usage dataset.

    Service

    An offering that can be purchased from a provider, and can includemany types of usage or other charges; eg., a cloud database service mayinclude compute, storage, and networking charges.

    SKU

    A construct composed of the common properties of a product offeringassociated with one or many SKU Prices.

    SKU Price

    The unit price used to calculate a charge that is associated with oneSKU. SKU Prices are usually referenced from the provider’s price listand are unique to various providers.

    Sub Account

    A sub account is an optional provider-supported construct fororganizing resources and/or services connected to a billing account. Subaccounts must be associated with a billing account as they do notreceive invoices.

    Tag

    A metadata label assigned to a resource to provide information aboutit or to categorize it for organizational and management purposes.

    Tag Source

    A Resource or Provider-defined construct for grouping resourcesand/or other Provider-defined construct that a Tag can be assignedto.

    Term

    A duration of a contractual agreement like with a commitment discount ornegotiateddiscount.

    7. Appendix

    This section is non-normative.

    7.1. Commitment Discounts

    A commitmentdiscount is a billing discount model that offers reduced rateson preselected SKUs in exchange foran obligated usage or spend amount over a predefined term. Commitment discountstypically consist of purchase and usage records within cost and usagedatasets.

    Usage-based commitment discounts obligate a customer to apredetermined amount of usage over a preselected term. In somecases, usage-based commitment discounts also feature commitment discountflexibility which may expand the types of resources that a commitmentdiscount can cover. It is important to note when mixingcommitment discounts with and without commitment discountflexibility, the CommitmentDiscountUnit should reflectthis difference.

    Spend-based commitment discounts obligate a customer to apredetermined amount of spend over a preselected term. In theusage examples below, each rowmeasures the monetary amount of the hourly commit consumed by thecommitment discount, so the CommitmentDiscountUnit chosen is”USD”, or the billingcurrency.

    7.1.1. Purchasing

    While customers are bound to the term of a commitmentdiscounts, providers offer some or all of the following paymentoptions before and/or during the term:

    • All Upfront – The commitment discounts is paid infull before the term begins.
    • No Upfront – The commitment discounts is paid on arepeated basis, typically over each billing period of theterm.
    • Partial Upfront – Some of the commitment discountsis paid before the term begins, and the rest is paid repeatedlyover the term.

    For example, if a customer buys a 1-year, spend-based commitmentdiscount with a $1.00 hourly commit and pays with the partialoption, the commitment discount’s payment consists of aone-time purchase in the beginning of the termandmonthly recurring purchases with the following totals:

    1. One-Time – $4,380(24 hours * 365 days * &dollar;1.00 * 0.5)
    2. Recurring – $182.50(24 hours * 365 days * &dollar;1.00 / 12 months)

    7.1.2. Usage

    Commitment discounts follow a “use-it-or-lose-it” model where the amortization of acommitment discount’s purchase applies evenly to eligibleresources over each charge period of theterm.

    For example, if a customer buys a spend-based commitmentdiscount with a $1.00 hourly commit in January (31 days), only$1.00 is eligible for consumption for each hourly chargeperiod. If a customer has eligible resources runningduring this charge period, an amount of up to $1.00 will beallocated to these resources. Conversely, if a customer doeshave eligible resources running that fully take advantage ofthis $1.00 during this charge period, then some or all of thisamount will go to waste.

    7.1.3. Commitment Discountsin FOCUS

    Within the FOCUS specification, the following examples demonstratehow a commitment discount appears across various payment andusage scenarios.

    7.1.3.1. Purchase Rows

    All commitment discount purchases appear with a positive BilledCost, PricingCategory as “Standard”, and with thecommitment discount’s id populating both the ResourceId and CommitmentDiscountId value. One-timepurchases appear as a single record with ChargeCategory as “Purchase”, ChargeFrequency as “One-Time”, and the totalquantity and units for commitment discount’stermreflected as CommitmentDiscountQuantity andCommitmentDiscountUnit, respectively.

    Recurring purchases are allocated across all corresponding chargeperiods of the term when ChargeCategory is “Purchase”,ChargeFrequency is “Recurring”, and CommitmentDiscountQuantity andCommitmentDiscountUnit are reflected only for that chargeperiod.

    Using the same commitment discount example as above with aone-year, spend-based commitment discount with a $1.00 hourlycommit purchased on Jan 1, 2023, various purchase options areavailable:

    7.1.3.1.1. Scenario #1: AllUpfront

    The entire commitment discount is billed onceduring the first charge period of the term for $8,670(derived as 24 hours * 365 days * &dollar;1.00).

    [{"BillingPeriodStartDate":"2023-01-01T00:00:00Z","BillingPeriodEndDate":"2023-02-01T00:00:00Z","ChargePeriodStartDate":"2023-01-01T00:00:00Z","ChargePeriodEndDate":"2024-01-01T00:00:00Z","ChargeCategory":"Purchase","ChargeFrequency":"One-Time","PricingCategory":"Standard","ResourceId":"<commitment-discount-id>","BilledCost":8760.00,"EffectiveCost":0.00,"CommitmentDiscountId":"<commitment-discount-id>","CommitmentDiscountQuantity":8760.00,"CommitmentDiscountUnit":"USD"}]

    7.1.3.1.2. Scenario #2: NoUpfront

    The commitment discount is billed across all 8,760(24 hours * 365 days) charge periods of theterm with $1.00 allocated to each charge period overthe term.

    [{"BillingPeriodStartDate":"2023-01-01T00:00:00Z","BillingPeriodEndDate":"2023-02-01T00:00:00Z","ChargePeriodStartDate":"2023-01-01T00:00:00Z","ChargePeriodEndDate":"2023-01-01T01:00:00Z","ChargeCategory":"Purchase","ChargeFrequency":"Recurring","PricingCategory":"Standard","ResourceId":"<commitment-discount-id>","BilledCost":1.00,"EffectiveCost":0.00,"CommitmentDiscountId":"<commitment-discount-id>","CommitmentDiscountQuantity":1.00,"CommitmentDiscountUnit":"USD"},/*...8,759morerecurringpurchaserecordsforthe*term*...*/]

    7.1.3.1.3. Scenario #3:Partial Upfront

    With a 50/50 split, half of the commitment is billed onceduring the first charge period of the term for $4,380(derived as 24 hours * 182.5 days * &dollar;1.00), andthe other half is billed across each charge period over theterm, derived as (&dollar;1.00 * 8,760 hours * 0.5).Amortized costs incur half of the amount (i.e. $0.50) from the one-timepurchase and the other half from the recurring purchase.

    [{"BillingPeriodStartDate":"2023-01-01T00:00:00Z","BillingPeriodEndDate":"2023-02-01T00:00:00Z","ChargePeriodStartDate":"2023-01-01T00:00:00Z","ChargePeriodEndDate":"2024-01-01T00:00:00Z","ChargeCategory":"Purchase","ChargeFrequency":"One-Time","PricingCategory":"Standard","ResourceId":"<commitment-discount-id>","BilledCost":4380.00,"EffectiveCost":0.00,"CommitmentDiscountId":"<commitment-discount-id>","CommitmentDiscountQuantity":4380.00,"CommitmentDiscountUnit":"USD"},{"BillingPeriodStartDate":"2023-01-01T00:00:00Z","BillingPeriodEndDate":"2023-02-01T00:00:00Z","ChargePeriodStartDate":"2023-01-01T00:00:00Z","ChargePeriodEndDate":"2023-01-01T01:00:00Z","ChargeCategory":"Purchase","ChargeFrequency":"Recurring","PricingCategory":"Standard","ResourceId":"<commitment-discount-id>","BilledCost":0.50,"EffectiveCost":0.00,"CommitmentDiscountId":"<commitment-discount-id>","CommitmentDiscountQuantity":0.50,"CommitmentDiscountUnit":"USD"},/*...8,759morerecurringpurchaserecordsforthe*term*...*/]

    7.1.3.2. Usage Rows

    Amortization of commitment discounts occursimilarly regardless of how commitment discount purchases aremade. The same usage-based or spend-based amount is applied evenlyacross all charge periods and potentially allocated to eligibleresources. Continuing with the same commitmentdiscount example, a one-year, spend-based commitmentdiscount with a $1.00 hourly commit and 1 resource (forsimplicity) yields 4 types of scenarios that can occur during acharge period:

    • Scenario #1: An eligible resource fully consumes theallocated amount (100% utilization)
    • Scenario #2: No eligible resource consumes the allocatedamount (0% utilization)
    • Scenario #3: An eligible resource partially consumes theallocated amount (75% utilization)
    • Scenario #4: An eligible resource fully consumes the $1.00hourly commit with an overage (100% utilization + overage)

    7.1.3.2.1.Scenario #1: An eligible resource fully consumes the allocatedamount (100% utilization)

    In this scenario, one eligible resource runs for the fullhour and consumes $1.00, so one row allocated to theresource is produced.

    [{"BillingPeriodStartDate":"2023-01-01T00:00:00Z","BillingPeriodEndDate":"2023-02-01T00:00:00Z","ChargePeriodStartDate":"2023-01-01T00:00:00Z","ChargePeriodEndDate":"2023-01-01T01:00:00Z","ChargeCategory":"Usage","ChargeFrequency":"Usage-Based","PricingCategory":"Committed","ResourceId":"<resource-id>","ConsumedQuantity":1,"ConsumedUnit":"Hour","BilledCost":0.00,"EffectiveCost":1.00,"CommitmentDiscountId":"<commitment-discount-id>","CommitmentDiscountQuantity":1.00,"CommitmentDiscountStatus":"Used","CommitmentDiscountUnit":"USD"}]

    7.1.3.2.2.Scenario #2: No eligible resource consumes the allocated amount(0% utilization)

    In this situation, the full eligible, $1.00 amount remainedunutilized and results in 1 unused row. In this scenario, it isimportant to note that while CommitmentDiscountQuantity is not because$1 was still drawn down by the commitment discount even though,no resource was allocated, so ConsumedQuantity and ConsumedUnit are null.

    [{"BillingPeriodStartDate":"2023-01-01T00:00:00Z","BillingPeriodEndDate":"2023-02-01T00:00:00Z","ChargePeriodStartDate":"2023-01-01T00:00:00Z","ChargePeriodEndDate":"2023-01-01T01:00:00Z","ChargeCategory":"Usage","ChargeFrequency":"Usage-Based","PricingCategory":"Committed","ResourceId":"<commitment-discount-id>","ConsumedQuantity":null,"ConsumedUnit":null,"BilledCost":0.00,"EffectiveCost":1.00,"CommitmentDiscountId":"<commitment-discount-id>","CommitmentDiscountQuantity":1.00,"CommitmentDiscountStatus":"Unused","CommitmentDiscountUnit":"USD"}]

    7.1.3.2.3.Scenario #3: An eligible resource partially consumes theallocated amount (75% utilization)

    In this scenario, one eligible resource runs for the fullhour and consumes $0.75 of the $1.00 allocation. One row shows$0.75 to a resource, and the other row shows that$0.25 was unused.

    [{"BillingPeriodStartDate":"2023-01-01T00:00:00Z","BillingPeriodEndDate":"2023-02-01T00:00:00Z","ChargePeriodStartDate":"2023-01-01T00:00:00Z","ChargePeriodEndDate":"2023-01-01T01:00:00Z","ChargeCategory":"Usage","ChargeFrequency":"Usage-Based","PricingCategory":"Committed","ResourceId":"<resource-id>","ConsumedQuantity":1,"ConsumedUnit":"Hour","BilledCost":0.00,"EffectiveCost":0.75,"CommitmentDiscountId":"<commitment-discount-id>","CommitmentDiscountQuantity":0.75,"CommitmentDiscountStatus":"Used","CommitmentDiscountUnit":"USD"},{"BillingPeriodStartDate":"2023-01-01T00:00:00Z","BillingPeriodEndDate":"2023-02-01T00:00:00Z","ChargePeriodStartDate":"2023-01-01T00:00:00Z","ChargePeriodEndDate":"2023-01-01T01:00:00Z","ChargeCategory":"Usage","ChargeFrequency":"Usage-Based","PricingCategory":"Committed","ResourceId":"<commitment-discount-id>","ConsumedQuantity":null,"ConsumedUnit":null,"BilledCost":0.00,"EffectiveCost":0.25,"CommitmentDiscountId":"<commitment-discount-id>","CommitmentDiscountQuantity":0.25,"CommitmentDiscountStatus":"Unused","CommitmentDiscountUnit":"USD"}]

    7.1.3.2.4.Scenario #4: An eligible resource fully consumes the $1.00hourly commit with an overage (100% utilization + overage)

    In this scenario, one eligible resource runs for the fullhour and is charged $1.50. One row shows that $1.00 wasamortized from the commitment discount, and the othershows that $0.50 was charged as standard, on-demand spend.

    [{"BillingPeriodStartDate":"2023-01-01T00:00:00Z","BillingPeriodEndDate":"2023-02-01T00:00:00Z","ChargePeriodStartDate":"2023-01-01T00:00:00Z","ChargePeriodEndDate":"2023-01-01T01:00:00Z","ChargeCategory":"Usage","ChargeFrequency":"Usage-Based","PricingCategory":"Committed","ResourceId":"<resource-id>","ConsumedQuantity":1,"ConsumedUnit":"Hour","BilledCost":0.00,"EffectiveCost":1.00,"CommitmentDiscountId":"<commitment-discount-id>","CommitmentDiscountQuantity":1.00,"CommitmentDiscountStatus":"Used","CommitmentDiscountUnit":"USD"},{"BillingPeriodStartDate":"2023-01-01T00:00:00Z","BillingPeriodEndDate":"2023-02-01T00:00:00Z","ChargePeriodStartDate":"2023-01-01T00:00:00Z","ChargePeriodEndDate":"2023-01-01T01:00:00Z","ChargeCategory":"Usage","ChargeFrequency":"Usage-Based","PricingCategory":"Standard","ResourceId":"<resource-id>","ConsumedQuantity":1,"ConsumedUnit":"Hour","BilledCost":0.50,"EffectiveCost":0.00}]

    7.2. Groupingconstructs for resources or services

    Providers natively support various constructs for grouping resources or services. These groupingconstructs are often used to mimic organizational structures, technicalarchitectures, cost attribution/allocation and access managementboundaries, or other customer-specific structures based onrequirements.

    Providers may support multiple levels of resource or service groupingmechanisms. FOCUS supports two distinct levels of groupings that arecommonly needed for FinOps capabilities like chargeback, invoicereconciliation and cost allocation.

    • Billing account: Amandatory container for resources or services that arebilled together in an invoice. Billing accounts are commonlyused for scenarios like grouping based on organizational constructs,invoice reconciliation and cost allocation strategies.
    • Sub account: An optionalprovider-supported construct for organizing resources andservices connected to a billing account. Subaccounts are commonly used for scenarios like grouping based onorganizational constructs, access management needs and cost allocationstrategies. Sub accounts must be associated with a billingaccount as they do not receive invoices.

    The table below highlights key properties of the two groupingconstructs supported by FOCUS.

    Property Billing account Sub account
    Requirement level Mandatory Optional
    Receives an invoice? Yes No
    Invoiced at Self Associated billing account
    Examples AWS: ManagementAccount*
    GCP: Billing Account
    Azure MCA: BillingProfile
    Snowflake: Organizational Account
    AWS: Member Account
    GCP:Project
    Azure MCA: Subscription
    Snowflake: Account

    * For organizations that have multiple AWS Member Accountswithin an AWS Organization, consolidated billing is enabled by defaultand invoices are received at Management Account level. A Member Accountcan be removed from AWS consolidated billing whereby the removed accountreceives independent invoices and is responsible for payments.

    7.3. Origination of Cost Data

    Cost data presented in the billing datasets originates from varioussources depending on the purchasing mechanism. There are at least 3different pieces of information that are important for understandingwhere cost originated from.

    • Provider: The entity that made the resources or services available forpurchase.
    • Publisher: The entity that produced theresources or services that were purchased.
    • Invoice Issuer: The entity responsiblefor invoicing for the resources or servicesconsumed.

    The value for each of these may be different depending on the variouspurchasing scenarios for resources or services. Usecases for purchasing direct, via a Managed Service Provider (MSP), via acloud marketplace, and from internal service offerings were considered.The table below presents a few scenarios to show how the value for eachdimension may change based on the purchasing scenario.

    # Scenario Provider Publisher Invoice Issuer
    1.1 Purchasing cloud services directly fromcloud provider Cloud service provider Cloud service provider Cloud service provider
    1.2 Purchasing cloud services from the cloudprovider where the cloud region is operated by a 3rd party Cloud service provider Cloud service provider Entity operating the region for the cloudservice provider
    2.1 Purchasing cloud services via MSP Managed Service Provider Cloud service provider Managed Service Provider
    2.2 Purchasing cloud-agnostic resources orservices built/sold by an MSP Managed Service Provider Managed Service Provider Managed Service Provider
    2.3 Purchasing labor services from managedservice provider Managed Service Provider Managed Service Provider Managed Service Provider
    3.1 Purchasing a cloud marketplace offeringthat runs on the cloud provider Cloud service provider Company building the software or services(Cloud service provider OR third-party software or servicescompany) Cloud service provider
    3.2 Purchasing a cloud marketplace offeringthat is not running directly on your cloud infrastructure (e.g,. SaaSproduct, Professional Services) Cloud service provider Company producing the SaaS or servicesproduct Cloud service provider
    3.3 Purchasing a SaaS product that is notdirectly running on your cloud infrastructure from a 3rd party resellermanaged cloud marketplace Cloud service provider SaaS provider Reseller
    4.1 Purchasing SaaS software directly fromprovider SaaS provider SaaS provider SaaS provider
    4.2 Purchasing SaaS software that additionallyruns on your cloud resources (in addition to #4.1) Cloud service provider Cloud service provider Cloud service provider
    5.1 Purchasing internal infrastructure orservices offerings running on-premise Internal product name Internal product name Internal product name
    5.2 Purchasing internal infrastructure orservices offerings running on cloud Internal product name Internal product name Internal product name
    5.3 Associated software license cost for useon an on-premise infrastructure platform (Where license cost ispresented separately in cost data) Internal product name Company producing the software Internal product name

    7.4. Examples

    This section is non-normative.

    7.4.1. Metadata Examples

    The following sections contain examples of metadata provided by ahypothetical FOCUS data provider called ACME to supply the requiredreference between the FOCUSdataset and the schema metadata. Provider implementations willvary on how the metadata is disseminated; however, the provider’s chosenmetadata delivery approach should be able to support the structurerepresented in this example.

    In this example, the provider supports delivery of FOCUS data viafile export to a data storage system. It uses JSON as the format forproviding the metadata. The provider delivers data every 12 hours into apath structure described below:

    Type of data Path
    Export location /FOCUS
    Metadata location /FOCUS/metadata
    Cost data location /FOCUS/data

    Here are some metadata examples for various scenarios:

    7.4.1.1. Data GeneratorMetadata

    7.4.1.1.1. Scenario

    Acme provides metadata about the data generator as a part of theirFOCUS data export. They provide the relevant data via the Data Generator schema object.

    7.4.1.1.2. Supplied Metadata

    Metadata can be provided at a location such as/FOCUS/metadata/data_generator.json.

    The updated data generator related metadata could look like this:

    {"DataGenerator":"Acme"}

    7.4.1.2. Schema Metadata

    7.4.1.2.1. Scenario

    ACME has only provided one Schema for theirFOCUS data export. ACME provides a directory of schemas and each schemais a single file. Acme’s provides a file representing the schema for thedata they provide.

    7.4.1.2.2. Supplied Metadata

    Metadata can be provided at a location such as/FOCUS/metadata/schemas/schema-1234-abcde-12345-abcde-12345.json.

    The updated schema related metadata could look like this:

    {"SchemaId":"1234-abcde-12345-abcde-12345","FocusVersion":"1.0","CreationDate":"2024-01-01T12:01:03.083z","ColumnDefinition":[{"ColumnName":"BillingAccountId","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"BillingAccountName","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"ChargePeriodStart","DataType":"DATETIME"},{"ColumnName":"ChargePeriodEnd","DataType":"DATETIME"},{"ColumnName":"BilledCost","DataType":"DECIMAL","NumericPrecision":20,"NumberScale":10},{"ColumnName":"EffectiveCost","DataType":"DECIMAL","NumericPrecision":20,"NumberScale":10},{"ColumnName":"Tags","DataType":"JSON","ProviderTagPrefixes":["acme","ac"]}]}

    7.4.1.3. SchemaMetadata to FOCUS Data Reference

    7.4.1.3.1. Scenario

    ACME makes a change to the Schema of their dataexports. For each FOCUS data export, ACME includes a metadata referenceto the schema object. Because multiple files are provided in eachexport, Acme has elected to include a metadata file in each exportfolder that includes the FOCUS schema reference that applies to the dataexport files within that folder. When the schema changes, they includethe new Schema ID in their export metadata fileof the new folder.

    7.4.1.3.2. Supplied Metadata

    Metadata can be provided at a location such as/FOCUS/data/export1-metadata.json

    The export metadata could look like this:

    {"SchemaId":"1234-abcde-12345-abcde-12345","data_location":[{"filepath":"/FOCUS/data/export1/export1-part1.csv","total_bytes":9010387,"total_rows":4450},{"filepath":"/FOCUS/data/export1/export1-part2.csv","total_bytes":9010387,"total_rows":4450},{"filepath":"/FOCUS/data/export1/export1-part3.csv","total_bytes":9010387,"total_rows":4450},{"filepath":"/FOCUS/data/export1/export1-part4.csv","total_bytes":9010387,"total_rows":4450}]}

    New metadata can be provided at a location such as/FOCUS/data/export2-metadata.json.

    The new export metadata could look like this:

    {"SchemaId":"23456-abcde-23456-abcde-23456","data_location":[{"filepath":"/FOCUS/data/export2/export2-part1.csv","total_bytes":9010387,"total_rows":4450},{"filepath":"/FOCUS/data/export2/export2-part2.csv","total_bytes":9010387,"total_rows":4450},{"filepath":"/FOCUS/data/export2/export2-part3.csv","total_bytes":9010387,"total_rows":4450},{"filepath":"/FOCUS/data/export2/export2-part4.csv","total_bytes":9010387,"total_rows":4450}]}

    7.4.1.4. Adding New Columns

    7.4.1.4.1. Scenario

    ACME has decided add additional columns to their FOCUS data export.The new columns are x_awesome_column1, x_awesome_column2, andx_awesome_column3. The provider creates a new Schema object to represent the new schema, thisschema object has a unique SchemaId. Thesubsequent data exports that use the new schema include the new schema’sid as a reference to their corresponding schema object.

    7.4.1.4.2. Supplied Metadata

    Metadata can be provided at a location such as/FOCUS/metadata/schemas/schema-23456-abcde-23456-abcde-23456.json.

    The updated schema related metadata could look like this:

    {"SchemaId":"23456-abcde-23456-abcde-23456","FocusVersion":"1.0","CreationDate":"2024-02-02T12:01:03.083z","ColumnDefinition":[{"ColumnName":"BillingAccountId","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"BillingAccountName","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"ChargePeriodStart","DataType":"DATETIME"},{"ColumnName":"ChargePeriodEnd","DataType":"DATETIME"},{"ColumnName":"BilledCost","DataType":"DECIMAL","NumericPrecision":20,"NumberScale":10},{"ColumnName":"EffectiveCost","DataType":"DECIMAL","NumericPrecision":20,"NumberScale":10},{"ColumnName":"Tags","DataType":"JSON","ProviderTagPrefixes":["awecorp","ac"]},{"ColumnName":"x_awesome_column1","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"x_awesome_column2","DataType":"DATETIME"},{"ColumnName":"x_awesome_column3","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"}]}

    For an example of how ACME ensures the schema metadata referencerequirement is met see: Schema Metadata to FOCUS DataReference

    7.4.1.5. Removing Columns

    7.4.1.5.1. Scenario

    ACME has decided to remove columns from their FOCUS data export. Thecolumn removed is x_awesome_column3. The provider creates a new Schema object to represent the new schema, with aunique SchemaId.

    7.4.1.5.2. Supplied Metadata

    Metadata can be provided at a location such as/FOCUS/metadata/schemas/schema-34567-abcde-34567-abcde-34567.json.

    The updated schema related metadata could look like this:

    {"SchemaId":"34567-abcde-34567-abcde-34567","FocusVersion":"1.0","CreationDate":"2024-03-02T12:01:03.083z","ColumnDefinition":[{"ColumnName":"BillingAccountId","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"BillingAccountName","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"ChargePeriodStart","DataType":"DATETIME"},{"ColumnName":"ChargePeriodEnd","DataType":"DATETIME"},{"ColumnName":"BilledCost","DataType":"DECIMAL","NumericPrecision":20,"NumberScale":10},{"ColumnName":"EffectiveCost","DataType":"DECIMAL","NumericPrecision":20,"NumberScale":10},{"ColumnName":"Tags","DataType":"JSON","ProviderTagPrefixes":["acme","ac"]},{"ColumnName":"x_awesome_column1","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"x_awesome_column2","DataType":"DATETIME"}]}

    For an example of how ACME ensures the schema metadata referencerequirement is met see: Schema Metadata to FOCUS DataReference

    7.4.1.6. Changing ColumnMetadata

    7.4.1.6.1. Scenario

    ACME has decided to change the datatype of column x_awesome_column1from a string to a number. ACME creates a new Schema object with the modification tox_awesome_column2.

    7.4.1.6.2. Supplied Metadata

    Metadata can be provided at a location such as/FOCUS/metadata/schemas/schema-67891-abcde-67891-abcde-67891.json.

    The updated schema related metadata could look like this:

    {"SchemaId":"67891-abcde-67891-abcde-67891","FocusVersion":"1.0","CreationDate":"2024-06-02T12:01:03.083z","ColumnDefinition":[{"ColumnName":"BillingAccountId","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"BillingAccountName","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"ChargePeriodStart","DataType":"DATETIME"},{"ColumnName":"ChargePeriodEnd","DataType":"DATETIME"},{"ColumnName":"BilledCost","DataType":"DECIMAL","NumericPrecision":20,"NumberScale":10},{"ColumnName":"EffectiveCost","DataType":"DECIMAL","NumericPrecision":20,"NumberScale":10},{"ColumnName":"Tags","DataType":"JSON","ProviderTagPrefixes":["acme","ac"]},{"ColumnName":"x_awesome_column1","DataType":"DECIMAL","NumericPrecision":20,"NumberScale":10},{"ColumnName":"x_awesome_column2","DataType":"DATETIME"}]}

    For an example of how ACME ensures the schema metadata referencerequirement is met see: Schema Metadata to FOCUS DataReference

    7.4.1.7. ProviderMetadata Error Correction

    7.4.1.7.1. Scenario

    ACME has discovered that while their export includes the columnx_awesome_column3, the Schema metadata does notinclude this column. In this case, the provider fixes the metadata inthe existing schema object and does not need to create a new schemaobject. Reference metadata remains the same.

    7.4.1.7.2. Supplied Metadata

    Metadata can be provided at a location such as/FOCUS/metadata/schemas/schema-34567-abcde-34567-abcde-34567.json.

    The updated schema related metadata could look like this:

    {"SchemaId":"34567-abcde-34567-abcde-34567","FocusVersion":"1.0","CreationDate":"2024-03-02T12:01:03.083z","ColumnDefinition":[{"ColumnName":"BillingAccountId","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"BillingAccountName","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"ChargePeriodStart","DataType":"DATETIME"},{"ColumnName":"ChargePeriodEnd","DataType":"DATETIME"},{"ColumnName":"BilledCost","DataType":"DECIMAL","NumericPrecision":20,"NumberScale":10},{"ColumnName":"EffectiveCost","DataType":"DECIMAL","NumericPrecision":20,"NumberScale":10},{"ColumnName":"Tags","DataType":"JSON","ProviderTagPrefixes":["acme","ac"]},{"ColumnName":"x_awesome_column1","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"x_awesome_column2","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"}]}

    7.4.1.8. FOCUS Version Changed

    7.4.1.8.1. Scenario

    ACME’s previous exports used FOCUS version 1.0. They are now going toadopt FOCUS version 1.1. It is required that they create a new schemametadata object which specifies the new FOCUS version via the FOCUS Version property – regardless of schemachanges. In this example, the new FOCUS version adoption doesn’t includecolumns changes. This is to illustrate that FOCUS version changes areindependent of column changes, however, this scenario is unlikely.

    7.4.1.8.2. Supplied Metadata

    Metadata can be provided at a location such as/FOCUS/metadata/schemas/schema-45678-abcde-45678-abcde-45678.json.

    The updated schema related metadata could look like this:

    {"SchemaId":"45678-abcde-45678-abcde-45678","FocusVersion":"1.1","CreationDate":"2024-04-02T12:01:03.083z","ColumnDefinition":[{"ColumnName":"BillingAccountId","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"BillingAccountName","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"ChargePeriodStart","DataType":"DATETIME"},{"ColumnName":"ChargePeriodEnd","DataType":"DATETIME"},{"ColumnName":"BilledCost","DataType":"DECIMAL","NumericPrecision":20,"NumberScale":10},{"ColumnName":"EffectiveCost","DataType":"DECIMAL","NumericPrecision":20,"NumberScale":10},{"ColumnName":"Tags","DataType":"JSON","ProviderTagPrefixes":["acme","ac"]},{"ColumnName":"x_awesome_column1","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"x_awesome_column2","DataType":"DATETIME"}]}

    For an example of how ACME ensures the schema metadata referencerequirement is met see: Schema Metadata to FOCUS DataReference

    7.4.1.9.FOCUS Version Changed by Provider Using Provider Version

    7.4.1.9.1. Scenario

    ACME specifies the optional metadata property Provider Version in their Schema object. Their provider version 2.2 supportedFOCUS version 1.0. They are now going to adopt FOCUS Version 1.1 whichrequires that they update their Provider Version when updating the FOCUSVersion. They create a new schema object designating that bothproperties have changed. In this example, the adoption of the new FOCUSversion doesn’t include additional columns. This is to illustrate thatProvider Version can change independent of column changes; however, thisscenario is unlikely.

    The provider creates a new schema object to represent the new schema.The provider includes both the new FOCUS Version and Provider Version inthe schema object.

    7.4.1.9.2. Supplied Metadata

    Metadata can be provided at a location such as/FOCUS/metadata/schemas/schema-45678-abcde-45678-abcde-45678.json.

    The updated schema related metadata could look like this:

    {"SchemaId":"45678-abcde-45678-abcde-45678","FocusVersion":"1.1","ProviderVersion":"2.3","name":"New Columns","CreationDate":"2024-04-02T12:01:03.083z","ColumnDefinition":[{"ColumnName":"BillingAccountId","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"BillingAccountName","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"ChargePeriodStart","DataType":"DATETIME"},{"ColumnName":"ChargePeriodEnd","DataType":"DATETIME"},{"ColumnName":"BilledCost","DataType":"DECIMAL","NumericPrecision":20,"NumberScale":10},{"ColumnName":"EffectiveCost","DataType":"DECIMAL","NumericPrecision":20,"NumberScale":10},{"ColumnName":"Tags","DataType":"JSON","ProviderTagPrefixes":["acme","ac"]},{"ColumnName":"x_awesome_column1","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"x_awesome_column2","DataType":"DATETIME"}]}

    For reference, the prior schema object looked like this:

    {"SchemaId":"34567-abcde-34567-abcde-34567","FocusVersion":"1.0","ProviderVersion":"2.2","CreationDate":"2024-04-02T12:01:03.083z","ColumnDefinition":[{"ColumnName":"BillingAccountId","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"BillingAccountName","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"ChargePeriodStart","DataType":"DATETIME"},{"ColumnName":"ChargePeriodEnd","DataType":"DATETIME"},{"ColumnName":"BilledCost","DataType":"DECIMAL","NumericPrecision":20,"NumberScale":10},{"ColumnName":"EffectiveCost","DataType":"DECIMAL","NumericPrecision":20,"NumberScale":10},{"ColumnName":"Tags","DataType":"JSON","ProviderTagPrefixes":["acme","ac"]},{"ColumnName":"x_awesome_column1","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"x_awesome_column2","DataType":"DATETIME"}]}

    For an example of how ACME ensures the schema metadata referencerequirement is met see: Schema Metadata to FOCUS DataReference

    7.4.1.10.Data Changed by Provider Using Provider Version

    7.4.1.10.1. Scenario

    ACME specifies the optional metadata property Provider Version in their Schema object. They made a change to the FOCUS dataset they producethat does not adopt a new FOCUS Version, nor make a change the includedcolumns but does impact values in the data. This example illustratesthat Provider Version changes are independent of column changes, howeverprovider version changes may include column changes.

    The provider creates a new schema object to represent the new schema.The provider includes both the FOCUS Version and Provider Version in theschema object.

    7.4.1.10.2. Supplied Metadata

    Metadata can be provided at a location such as/FOCUS/metadata/schemas/schema-56789-abcde-56789-abcde-56789.json.

    The updated schema related metadata could look like this:

    {"SchemaId":"56789-abcde-56789-abcde-56789","FocusVersion":"1.1","ProviderVersion":"2.4","CreationDate":"2024-05-02T12:01:03.083z","ColumnDefinition":[{"ColumnName":"BillingAccountId","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"BillingAccountName","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"ChargePeriodStart","DataType":"DATETIME"},{"ColumnName":"ChargePeriodEnd","DataType":"DATETIME"},{"ColumnName":"BilledCost","DataType":"DECIMAL","NumericPrecision":20,"NumberScale":10},{"ColumnName":"EffectiveCost","DataType":"DECIMAL","NumericPrecision":20,"NumberScale":10},{"ColumnName":"Tags","DataType":"JSON","ProviderTagPrefixes":["acme","ac"]},{"ColumnName":"x_awesome_column1","DataType":"STRING","StringMaxLength":64,"StringEncoding":"UTF-8"},{"ColumnName":"x_awesome_column2","DataType":"DATETIME"}]}

    For an example of how ACME ensures the schema metadata referencerequirement is met see: Schema Metadata to FOCUS DataReference