FOCUS Specification v0.5

Copyright © 2023 – FinOps Open Cost and Usage Specification (FOCUS) a
Series of the Joint Development Foundation Projects, LLC. Linux
Foundation trademark,
and document use rules apply.

Status of This Document

This section describes the status of this document at the time of its
publication.

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

This document was produced by a group operating under the W3C Patent
Policy. FOCUS maintains a public list of any patent disclosures made in
connection with the deliverables of the group; that
page
also includes instructions for disclosing a patent. An
individual who has actual knowledge of a patent which the individual
believes contains Essential Claim(s) must disclose the information in
accordance with section 6 of the W3C Patent Policy.

This document is governed by the 5 February
2004 W3C Patent Policy
.

Abstract

FOCUS is an open-source specification for cloud billing data. It
defines a common schema for billing data, aligns terminology with the
FinOps Framework 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.

Contributors

Thanks to the following FOCUS members for their contributions to this
work.

  • Amit Wadhwa (Google)
  • Chandra Deverajan (CloudTrakr)
  • Christopher Harris (Datadog)
  • Eleni Rundle (Google)
  • Erik Peterson (CloudZero)
  • Graham Murphy (Australian Retirement Trust)
  • Irena Jurica (Neos)
  • Jason Kelly (Anglepoint Group Inc)
  • Joe Ferrero (DB Gurus Inc.)
  • John Grubb (platform.sh)
  • Josh Kwon (Ternary)
  • Karl Kraft (Walmart)
  • Mark Krawczeniuk (NetApp)
  • Michael Arkoosh (Vega)
  • Michael Flanakin (Microsoft)
  • Mike Fuller (FinOps Foundation)
  • Mike Polson (VMWare)
  • Nicolas Fonrose (Teevity)
  • Ray Ding (Accenture)
  • Ricardo Triana (Accenture)
  • Riley Jenkins (Domo)
  • Rodney Joyce (CloudMonitor)
  • Rupa Patel (Google)
  • Sanjna Srivatsa (VMWare)
  • Tatiana Dubovchenko (Flexera)
  • Trey Morgan (Microsoft)
  • Tim O’Brien (Walmart)
  • Trig Ghosh (Accenture)
  • Udam Dewaraja (FinOps Foundation)

Table of Contents

  • 5. Glossary
  • 6. Appendix
  •  

    1. Introduction

    This section is non-normative.

    FOCUS aims to establish a community-driven specification for
    consumption-based billing data. Due to the lack of a broadly adopted
    specification, infrastructure and services providers have resorted to
    proprietary billing schemas and terminology. However, the lack of
    conformance amongst the billing data generators has forced FinOps
    practitioners to employ disparate, best-effort schemes which each
    practitioner must develop individually for each provider in order to
    perform essential FinOps capabilities such as chargeback, cost
    allocation, budgeting and forecasting.

    The FOCUS specification’s schema definition and FinOps aligned
    terminology provide a clear guide for producing FinOps-serviceable
    billing datasets. Datasets conforming to FOCUS enable FinOps
    practitioners to perform common FinOps capabilities, like the ones
    mentioned above, using a generic set of instructions, regardless of the
    origin of the dataset.

     

    1.1. Background and History

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

     

    1.2. Intended Audience

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

    • Billing data generators: Infrastructure and services providers that
      bill based on consumption, such as (but not limited to):

      • Cloud Service Providers (CSPs)
      • Software as a Service (SaaS) platforms
      • Managed Service Providers (MSPs)
      • Internal infrastructure and service platforms
    • FinOps tool providers: Organizations that provide tools to assist
      with FinOps
    • FinOps practitioners: Organizations and individuals consuming
      billing data for doing FinOps

     

    1.3. Scope

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

     

    1.4. Design Notes

    The following principles were considered while building the
    specification.

     

    1.4.1.
    Provider-Neutral Approach by Default

    While the schema, naming, terminology and attributes of many
    providers were reviewed during development, this specification aims to
    be provider-neutral. In some cases, the approach may closely resemble
    one or more provider’s implementation, while in other cases, the
    approach might be new. In all cases, the FOCUS group (community composed
    of FinOps practitioners, Cloud and SaaS providers and FinOps vendors)
    will attempt to prioritize alignment with the FinOps Framework and Capabilities.

     

    1.4.2. Working Backwards

    The FOCUS group working on the specification aims to work backwards
    from essential FinOps capabilities that practitioners need to perform to
    prioritize the dimensions, metrics and the attributes of the billing
    data that should be defined in the specification to fulfill that
    capability. Some of the enabled capabilities will be documented in the
    Appendix: FinOps
    Capabilities Enabled by FOCUS (TODO)
    .

     

    1.4.3. Extensibility

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

     

    1.5. 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 in
    BCP14 [RFC2119][RFC8174] when, and only
    when, they appear in all capitals, as shown here.

    An implementation of this specification is not compliant if it fails
    to satisfy one or more of the “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”,
    or “SHALL NOT” requirements defined in the specification. Conversely, an
    implementation of the specification is compliant if it satisfies all the
    “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, and “SHALL NOT” requirements
    defined in the specification.

     

    1.6. Conformance
    Checkers and Validators

    There are no current resources available to test for specification
    conformance or validators to run on sample data. When one becomes
    available, this section of the specification will be updated with
    details.

     

    2. Dimensions

    The FOCUS specification defines a group of columns that provide
    qualitative values (such as dates, resource, and provider information).
    These columns are categorized to as ‘dimensions’ within the dataset and
    are needed to serve many FinOps
    capabilities
    . You can use dimensions to categorize, filter, and
    reveal details in your data when grouped with ‘metrics’, which are the
    quantitative (numeric) values. The Dimensions are presented in
    Alphabetical order.

     

    2.1. Availability Zone

    Availability Zone is a provider assigned identifier for a physically
    separated and isolated area within a Region that provides high
    availability and fault tolerance. Availability Zone is commonly used for
    scenarios like analyzing cross-zone data transfer cost and usage based
    on where resources are deployed.

    The AvailabilityZone column SHOULD be present in the billing data.
    This column MUST be of type String and MAY contain null values.

     

    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 and
    isolated area within a Region that provides high availability and fault
    tolerance.

     

    2.1.4. Content constraints

    Constraint Value
    Column required False
    Data type String
    Allows nulls True
    Value format <not specified>

     

    2.1.5. Introduced (version)

    0.5  

    2.2. Billing Account ID

    A billing account is a container for resources and/or services that
    are billed together in an invoice. Billing accounts are commonly used
    for scenarios like grouping based on organizational constructs, invoice
    reconciliation and cost allocation strategies.

    A Billing Account ID is a provider assigned identifier for a billing
    account.

    The BillingAccountId column MUST be present in the billing data. This
    column must be of type String and MUST NOT contain null values.
    BillingAccountId MUST be a globally unique identifier within a
    provider.

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

     

    2.2.1. Column ID

    BillingAccountId

     

    2.2.2. Display name

    Billing Account ID

     

    2.2.3. Description

    The identifier assigned to a billing account by the provider.

     

    2.2.4. Content constraints

    Constraint Value
    Column required True
    Data type String
    Allows nulls False
    Value format <not specified>

     

    2.2.5. Introduced (version)

    0.5  

    2.3. Billing Account Name

    A billing account is a container for resources and/or services that
    are billed together in an invoice. Billing accounts are commonly used
    for scenarios like grouping based on organizational constructs, invoice
    reconciliation and cost allocation strategies.

    A Billing Account Name is a display name assigned to a billing
    account.

    The BillingAccountName column MUST be present in the billing data.
    This column MUST be of type String. The BillingAccountName MUST NOT be
    null if a display name can be assigned to a billing account.
    BillingAccountName MUST be unique within a customer when a customer has
    more than one billing account.

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

     

    2.3.1. Column ID

    BillingAccountName

     

    2.3.2. Display name

    Billing Account Name

     

    2.3.3. Description

    The display name assigned to a billing account.

     

    2.3.4. Content constraints

    Constraint Value
    Column required True
    Data type String
    Allows nulls True
    Value format <not specified>

     

    2.3.5. Introduced (version)

    0.5  

    2.4. Billing Currency

    Billing Currency is an identifier that represents the currency that a
    charge for resources and/or services was billed in. Billing Currency is
    commonly used in scenarios where costs need to be grouped or
    aggregated.

    The BillingCurrency column MUST be present in the billing data.
    BillingCurrency MUST match the currency used in the invoice generated by
    the invoice issuer. This column must be of type String and MUST NOT
    contain null values. BillingCurrency MUST conform to FOCUS Currency Code Format
    requirements.

     

    2.4.1. Column ID

    BillingCurrency

     

    2.4.2. Display name

    Billing Currency

     

    2.4.3. Description

    Represents the currency that a charge was billed in.

     

    2.4.4. Content Constraints

    Constraint Value
    Column required True
    Data type String
    Allows nulls False
    Value format list-of-values
    Allowed Values Meets FOCUS
    Currency Code Format
    requirements

     

    2.4.5. Introduced (version)

    0.5  

    2.5. Billing Period End

    Billing period represents the time window for which an organization
    has or will receive an invoice for. The time window is inclusive of the
    start date and exclusive of the end date.

    Billing Period End represents the end date and time of the billing
    period.

    The BillingPeriodEnd column MUST be present in the billing data. This
    column MUST be of type Date/Time and MUST NOT contain null values.
    BillingPeriodEnd column MUST conform to FOCUS
    Date/Time Format
    . The sum of the Billed Cost metric for line items
    in a given billing period MUST match the sum of the invoices received
    for that billing period for a billing account.

     

    2.5.1. Column ID

    BillingPeriodEnd

     

    2.5.2. Display Name

    Billing Period End

     

    2.5.3. Description

    The end date and time of the billing period.

     

    2.5.4. Content Constraints

    Constraint Value
    Column Required True
    Data type Date/Time
    Allows nulls False
    Value format Meets FOCUS
    Date/Time Format
    requirements

     

    2.5.5. Introduced (version)

    0.5  

    2.6. Billing Period Start

    Billing period represents the time window for which an organization
    has or will receive an invoice for. The time window is inclusive of the
    start date and exclusive of the end date.

    Billing Period Start represents the start date and time of the
    billing period.

    The BillingPeriodStart column MUST be present in the billing data.
    This column MUST be of type Date/Time and MUST NOT contain null values.
    BillingPeriodStart column MUST conform to FOCUS Date/Time Format. The sum of the
    Billed Cost metric for line items in a given billing period MUST match
    the sum of the invoices received for that billing period for a billing
    account.

     

    2.6.1. Column ID

    BillingPeriodStart

     

    2.6.2. Display Name

    Billing Period Start

     

    2.6.3. Description

    The beginning date and time of the billing period.

     

    2.6.4. Content Constraints

    Constraint Value
    Column Required True
    Data type Date/Time
    Allows nulls False
    Value format Meets FOCUS
    Date/Time Format
    requirements

     

    2.6.5. Introduced (version)

    0.5  

    2.7. Charge Period End

    Charge period represents the time window in which a charge was
    incurred. The time window is inclusive of the charge period start date
    and exclusive of the charge period end date. A charge can start and/or
    end at any time within a charge period window. The charge period for
    continuous usage should match the time granularity of the dataset (e.g.,
    1 hour for hourly, 1 day for daily).

    Charge Period End represents the end date and time of the charge
    period.

    The ChargePeriodEnd column MUST be present in the billing data. This
    column MUST be of type Date/Time and MUST NOT contain null values.
    ChargePeriodEnd column MUST conform to FOCUS
    Date/Time Format
    .

     

    2.7.1. Column ID

    ChargePeriodEnd

     

    2.7.2. Display name

    Charge Period End

     

    2.7.3. Description

    The end date and time of a charge period.

     

    2.7.4. Content constraints

    Constraint Value
    Column Required True
    Data type Date/Time
    Allows nulls False
    Value format Meets FOCUS
    Date/Time Format
    requirements

     

    2.7.5. Introduced (version)

    0.5  

    2.8. Charge Period Start

    Charge period represents the time window in which a charge was
    incurred. The time window is inclusive of the charge period start date
    and exclusive of the charge period end date. A charge can start and/or
    end at any time within a charge period window. The charge period for
    continuous usage should match the time granularity of the dataset (e.g.,
    1 hour for hourly, 1 day for daily).

    Charge Period Start represents the starting date and time of the
    charge period.

    The ChargePeriodStart column MUST be present in the billing data.
    This column MUST be of type Date/Time and MUST NOT contain null values.
    ChargePeriodStart column MUST conform to FOCUS Date/Time Format.

     

    2.8.1. Column ID

    ChargePeriodStart

     

    2.8.2. Display name

    Charge Period Start

     

    2.8.3. Description

    The beginning date and time of a charge period.

     

    2.8.4. Content constraints

    Constraint Value
    Column Required True
    Data type Date/Time
    Allows nulls False
    Value format Meets FOCUS
    Date/Time Format
    requirements

     

    2.8.5. Introduced (version)

    0.5  

    2.9. Charge Type

    A Charge Type indicates whether the record represents an upfront or
    recurring fee, cost of usage that already occurred, an after-the-fact
    adjustment (e.g., credits), or taxes. The Charge Type is commonly used
    to identify prepaid purchases separately from usage-based charges, to
    separate taxes that may require special handling, or to apply
    finer-grained allocation logic to purchases or adjustments.

    The ChargeType column MUST be present and MUST NOT be null or empty.
    This column is of type String and MUST be one of the allowed values.

    See Appendix: Charge Type for details
    about allowed values and governance criteria for this dimension.

     

    2.9.1. Column ID

    ChargeType

     

    2.9.2. Display Name

    Charge Type

     

    2.9.3. Description

    Indicates whether the record represents an upfront or recurring fee,
    cost of usage that already occurred, an after-the-fact adjustment (e.g.,
    credits), or taxes.

     

    2.9.4. Content Constraints

    Constraint Value
    Column required True
    Data type String
    Allows nulls False
    Value format list-of-values

    Allowed values:

    Value Description
    Adjustment Any adjustments that are applied after the
    original usage or purchase record. Adjustments may be related to
    multiple charges.
    Purchase Charges for the acquisition of a service
    or resource bought upfront or on a recurring basis.
    Tax Applicable taxes that are levied by the
    relevant authorities. Tax charges may vary depending on factors such as
    the location, jurisdiction, and local or federal regulations.
    Usage Charges based on the quantity of a service
    or resource that was consumed over a given period of time.

     

    2.9.5. Introduced (version)

    0.5  

    2.10. Invoice Issuer

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

    The InvoiceIssuer column MUST be present in the billing data. This
    column MUST be of type String and MUST NOT contain null values.

    See Appendix: Origination of cost
    data
    section for examples of Provider, Publisher and Invoice Issuer
    values that can be used for various purchasing scenarios.

     

    2.10.1. Column ID

    InvoiceIssuerName

     

    2.10.2. Display Name

    Invoice Issuer

     

    2.10.3. Description

    The name of the entity responsible for invoicing for the resources
    and/or services consumed.

     

    2.10.4. Content Constraints

    Constraint Value
    Column required True
    Data type String
    Allows nulls False
    Value format <not specified>

     

    2.10.5. Introduced (version)

    0.5  

    2.11. Provider

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

    The Provider column MUST be present in the billing data. This column
    MUST be of type String and MUST NOT contain null values.

    See Appendix: Origination of cost
    data
    section for examples of Provider, Publisher and Invoice Issuer
    values that can be used for various purchasing scenarios.

     

    2.11.1. Column ID

    ProviderName

     

    2.11.2. Display Name

    Provider

     

    2.11.3. Description

    The name of the entity that made the resources and/or services
    available for purchase.

     

    2.11.4. Content Constraints

    Constraint Value
    Column required True
    Data type String
    Allows nulls False
    Value format <not specified>

     

    2.11.5. Introduced (version)

    0.5  

    2.12. Publisher

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

    The Publisher column MUST be present in the billing data. This column
    MUST be of type String and MUST NOT contain null values.

    See Appendix: Origination of cost
    data
    section for examples of Provider, Publisher and Invoice Issuer
    values that can be used for various purchasing scenarios.

     

    2.12.1. Column ID

    PublisherName

     

    2.12.2. Display Name

    Publisher

     

    2.12.3. Description

    The name of the entity that produced the resources and/or services
    that were purchased.

     

    2.12.4. Content Constraints

    Constraint Value
    Column required True
    Data type String
    Allows nulls False
    Value format <not specified>

     

    2.12.5. Introduced (version)

    0.5  

    2.13. Region

    A Region is a provider assigned identifier for an isolated geographic
    area where a resource is provisioned in and/or a service is provided
    from. Region is commonly used for scenarios like analyzing cost and
    prices based on where resources are deployed.

    The Region column MUST be present in the billing data. This column
    MUST be of type String and MUST NOT contain null values. Region values
    MUST be consistent within the provider and MUST be the same values used
    to indicate the region when provisioning or purchasing the resource or
    service.

     

    2.13.1. Column ID

    Region

     

    2.13.2. Display name

    Region

     

    2.13.3. Description

    Isolated geographic area where a resource is provisioned in and/or a
    service is provided from.

     

    2.13.4. Content constraints

    Constraint Value
    Column required True
    Data type String
    Allows nulls False
    Value format <not specified>

     

    2.13.5. Introduced (version)

    0.5  

    2.14. Resource ID

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

    The ResourceId column MUST be present in the billing data. This
    column MUST be of type String. The ResourceId value MAY be a nullable
    column as some cost data rows may not be associated with a resource.
    ResourceId MUST appear in the cost data if an identifier is assigned to
    a resource by the provider. ResourceId SHOULD be a fully-qualified
    identifier that ensures global uniqueness within the provider.

     

    2.14.1. Column ID

    ResourceId

     

    2.14.2. Display Name

    Resource ID

     

    2.14.3. Description

    Identifier assigned to a resource by the provider.

     

    2.14.4. Content Constraints

    Constraint Value
    Column required True
    Data type String
    Allows nulls True
    Value format <not specified>

     

    2.14.5. Introduced (version)

    0.5  

    2.15. Resource Name

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

    The ResourceName column MUST be present in the billing data. This
    column MUST be of type String. The ResourceName value MAY be a nullable
    column as some cost data rows may not be associated with a resource or
    because a display name cannot be assigned to a resource. ResourceName
    MUST NOT be null if a display name can be assigned to a resource.
    Resources not provisioned interactively or only have a system generated
    ResourceId MUST NOT duplicate the same value as the ResourceName.

     

    2.15.1. Column ID

    ResourceName

     

    2.15.2. Display Name

    Resource Name

     

    2.15.3. Description

    Display name assigned to a resource.

     

    2.15.4. Content Constraints

    Constraint Value
    Column required True
    Data type String
    Allows nulls True
    Value format <not specified>

     

    2.15.5. Introduced (version)

    0.5  

    2.16. Service Category

    The Service Category is the highest-level classification of a service
    based on the core function of the service. Each service should have one
    and only one category that best aligns to its primary purpose. The
    Service Category is commonly used for scenarios like analyzing costs
    across providers and tracking the migration of workloads across
    fundamentally different architectures.

    The ServiceCategory column MUST be present and MUST NOT be null or
    empty. This column is of type String and MUST be one of the allowed
    values.

     

    2.16.1. Column ID

    ServiceCategory

     

    2.16.2. Display Name

    Service Category

     

    2.16.3. Description

    Highest-level classification of a service based on the core function
    of the service.

     

    2.16.4. Content Constraints

    Constraint Value
    Column required True
    Data type String
    Allows nulls False
    Value format List of values

    Allowed values:

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

     

    2.16.5. Introduced (version)

    0.5  

    2.17. Service Name

    A service represents an offering that can be purchased from a
    provider (e.g., cloud virtual machine, SaaS database, professional
    services from a systems integrator). A service offering can include
    various types of usage or other charges. For example, a cloud database
    service may include compute, storage, and networking charges.

    The Service Name is a display name for the offering that was
    purchased. The Service Name is commonly used for scenarios like
    analyzing aggregate cost trends over time and filtering data to
    investigate anomalies.

    The ServiceName column MUST be present in the cost data. This column
    MUST be of type String and MUST NOT contain null values.

     

    2.17.1. Column ID

    ServiceName

     

    2.17.2. Display Name

    Service Name

     

    2.17.3. Description

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

     

    2.17.4. Content Constraints

    Constraint Value
    Column required True
    Data type String
    Allows nulls False
    Value format <not specified>

     

    2.17.5. Introduced (version)

    0.5  

    2.18. Sub Account ID

    A sub account is an optional provider-supported construct for
    organizing resources and/or services connected to a billing account. Sub
    accounts are commonly used for scenarios like grouping based on
    organizational constructs, access management needs and cost allocation
    strategies. Sub accounts must be associated with a billing account as
    they do not receive invoices.

    A sub account ID is a provider assigned identifier assigned to a sub
    account.

    The SubAccountId column MUST be present in the billing data. This
    column MUST be of type String. If a provider supports a sub account
    construct, that value MUST appear in this column. If a provider does not
    support a sub account construct (only has a billing account) or does
    support a sub account construct, but the charge does not apply to a sub
    account, the SubAccountId column MUST be null.

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

     

    2.18.1. Column ID

    SubAccountId

     

    2.18.2. Display name

    Sub Account ID

     

    2.18.3. Description

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

     

    2.18.4. Content constraints

    Constraint Value
    Column required True
    Data type String
    Allows nulls True
    Value format <not specified>

     

    2.18.5. Introduced (version)

    0.5  

    2.19. Sub Account Name

    A sub account is an optional provider-supported construct for
    organizing resources and/or services connected to a billing account. Sub
    accounts are commonly used for scenarios like grouping based on
    organizational constructs, access management needs and cost allocation
    strategies. Sub accounts must be associated with a billing account as
    they do not receive invoices.

    A sub account name is a display name assigned to a sub account.

    The SubAccountName column MUST be present in the billing data. This
    column MUST be of type String. If a provider supports setting a display
    name for sub accounts, that value MUST appear in this column. If a
    provider does not support a sub account construct (only has a billing
    account) or does support a sub account construct, but the charge does
    not apply to a sub account, the SubAccountName column MUST be null.

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

     

    2.19.1. Column ID

    SubAccountName

     

    2.19.2. Display name

    Sub Account Name

     

    2.19.3. Description

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

     

    2.19.4. Content constraints

    Constraint Value
    Column required True
    Data type String
    Allows nulls True
    Value format <not specified>

     

    2.19.5. Introduced (version)

    0.5

     

    3. Metrics

    The FOCUS specification defines a group of columns that provide
    numeric values. These columns are categorized to as ‘metrics’ within the
    dataset and are needed to serve many FinOps
    capabilities
    . Metric columns in the dataset allow for aggregation
    operations such as arithmetic operations (sum, multiplication, averaging
    etc.) and statistical operations. When combined with dimensions (which
    are qualitative value columns), metrics reveal details in your data.

     

    3.1. Amortized Cost

    Amortized cost represents the sum of the amortized upfront fees,
    amortized recurring fees, and the usage cost of the line item. This
    column is often used to show spending trends that include on demand
    rates, effective commitment-based discount rates, recurring commitments,
    as well as amortization of upfront fees. The fee and upfront
    amortization portion of this column’s value should be proportional to
    the number of units for the line item and the time granularity of the
    data. The currency for the value specified in Amortized Cost can be
    found in the Billing Currency column. The
    aggregated Amortized Cost for a billing period may not match the charge
    received on the invoice for the same billing period.

    Practitioners are faced with two main challenges with respect to this
    metric:

    1. Practitioners need to amortize upfront fees over the duration of the
      commitment and distribute those fees to the appropriate reporting groups
      (e.g. tags, resources).
    2. Many commitment based discount constructs include a recurring
      expense for the commitment for every billing period and must distribute
      this cost to the resources using the commitment. This forces
      reconciliation between the initial commitment line item per period and
      the actual usage line items.

    The AmortizedCost column MUST be present in the billing data. This
    column MUST be a numeric value of type Decimal and MUST NOT contain null
    values.

     

    3.1.1. Column ID

    AmortizedCost

     

    3.1.2. Display name

    Amortized Cost

     

    3.1.3. Description

    The cost inclusive of amortized upfront fees, amortized recurring
    fees, and the usage cost of the line item.

     

    3.1.3.1.
    Concerning Granularity and Distribution of Recurring Fee

    Providers should distribute the commitment purchase amount instead of
    including a line item at the beginning of a period so practitioners do
    not need to manually distribute the fee themselves.

     

    3.1.3.2. Concerning
    Amortization Approaches

    The amortization of the upfront charge should be amortized using a
    methodology determined by the provider that reflects the needs of their
    customer base and is proportional with usage quantity and the time
    granularity of the line item. Should a practitioner desire to amortize
    upfront fees using a different approach, the practitioner can do so
    using the Billed Cost for the line item representing the initial
    purchase.

     

    3.1.4. Content constraints

    Constraint Value
    Column required True
    Data type Decimal
    Allows nulls False
    Value format Numeric value

     

    3.1.5. Introduced (version)

    0.5  

    3.2. Billed Cost

    The Billed Cost represents a charge inclusive of negotiated discounts
    that a consumer would be charged for each billing period. Billed Cost
    does not amortize upfront charges (one-time or recurring). The currency
    for the value specified in Billed Cost can be found in the Billing Currency column. Billed Cost is
    often used to perform FinOps capabilities that require cash-basis
    accounting such as cost allocation, budgeting, and invoice
    reconciliation.

    The BilledCost column MUST be present in the billing data. This
    column MUST be a numeric value of type Decimal and MUST NOT contain null
    values. The aggregated BilledCost for a billing period MUST match the
    charge received on the invoice for the same billing period.

     

    3.2.1. Column ID

    BilledCost

     

    3.2.2. Display name

    Billed Cost

     

    3.2.3. Description

    A charge inclusive of negotiated discounts that a consumer would be
    charged for each billing period.

     

    3.2.4. Content constraints

    Constraint Value
    Column required True
    Data type Decimal
    Allows nulls False
    Value format Numeric value

     

    3.2.5. Introduced (version)

    0.5

     

    4. Attributes

    Attributes are requirements that apply to the billing datasets.
    Requirements on data content can include naming conventions, data types,
    formatting standardizations, etc. Attributes may introduce high-level
    requirements for data granularity, recency, frequency, etc. Requirements
    defined in attributes are necessary for servicing FinOps
    capabilities
    accurately using a standard set of instructions
    regardless of the origin of the data.

     

    4.1. Column Naming Convention

    Column IDs provided in cost data following a consistent naming
    convention reduces friction for FinOps practitioners that consume the
    data for analysis, reporting, and other use cases.

    All columns defined in FOCUS MUST follow the naming requirements
    listed below. Provider generated columns SHOULD adopt these same naming
    requirements over time.

     

    4.1.1. Attribute ID

    ColumnNamingConvention

     

    4.1.2. Attribute Name

    Column Naming Convention

     

    4.1.3. Description

    Naming convention for columns appearing in billing data.

     

    4.1.4. Requirements

    • Column IDs MUST use Pascal case.
    • Column IDs MUST NOT use abbreviations.
    • Column IDs SHOULD NOT use acronyms.
    • Column IDs MUST be alphanumeric with no special characters.
    • Columns that have an ID and a Name MUST have the Id or Name suffix
      in the Column ID. Display Name for a Column MAY avoid the Name suffix if
      it is considered superfluous

     

    4.1.5. Exceptions

    • Identifiers will use the “Id” abbreviation since this is a standard
      pattern across the industry.

     

    4.1.6. Introduced (version)

    0.5  

    4.2. Currency Code Format

    Columns that contain currency information in cost data following a
    consistent format reduces friction for FinOps practitioners that consume
    the data for analysis, reporting, and other use cases.

    All currency related columns defined in the FOCUS schema MUST follow
    the currency formatting requirements listed below. Provider generated
    currency-related columns SHOULD adopt the same format requirements over
    time.

     

    4.2.1. Attribute ID

    CurrencyCodeFormat

     

    4.2.2. Attribute name

    Currency Code Format

     

    4.2.3. Description

    Formatting for currency columns appearing in billing data.

     

    4.2.4. Requirements

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

     

    4.2.5. Exceptions

    None

     

    4.2.6. Introduced (version)

    0.5  

    4.3. Date/Time Format

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

    All date/time related columns, defined in the FOCUS specification,
    MUST be represented in UTC and follow the ISO 8601 aligned formatting
    requirements listed below. Provider generated date/time related columns
    SHOULD also be represented in UTC and conform to the ISO 8601
    standard.

     

    4.3.1. Attribute ID

    DateTimeFormat

     

    4.3.2. Attribute name

    Date/Time Format

     

    4.3.3. Description

    Rules and formatting requirements for date/time related columns
    appearing in billing data.

     

    4.3.4. Requirements

    • Date/time values MUST be in UTC (Coordinated Universal Time) to
      avoid 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 and
      times (see ISO
      8601-1:2019
      governing document for details).
    • Values providing information about a specific moment in time MUST be
      represented 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 Universal
        Time)

     

    4.3.5. Exceptions

    None

     

    4.3.6. Introduced (version)

    0.5  

    4.4. Null Handling

    Cost data rows that don’t have a value that can be presented for a
    column must be handled in a consistent way to reduce friction for FinOps
    practitioners that consume the data for analysis, reporting, and other
    use cases.

    All columns defined in FOCUS MUST follow the null handling
    requirements listed below. Provider generated columns SHOULD adopt these
    same null handling requirements over time.

     

    4.4.1. Attribute ID

    NullHandling

     

    4.4.2. Attribute Name

    Null Handling

     

    4.4.3. Description

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

     

    4.4.4. Requirements

    • Columns MUST use NULL when there isn’t a value that can be specified
      for a nullable column.
    • Columns MUST NOT use empty strings or placeholder values such as
      ‘Not Set’ or ‘Not Applicable’ in columns, regardless of if the column
      allows nulls or not.

     

    4.4.5. Exceptions

    None

     

    4.4.6. Introduced (version)

    0.5

     

    5. Glossary

    This section is non-normative.

    TODO Needs to be completed and linked

    Resource:

    Add definition

    Service:

    Add definition

     

    6. Appendix

    This section is non-normative.

     

    6.1.
    Grouping constructs for resources and/or services

    Providers natively support various constructs for grouping resources
    and/or services. These grouping constructs are often used to mimic
    organizational structures, technical architectures, cost
    attribution/allocation and access management boundaries, or other
    customer-specific structures based on requirements.

    Providers may support multiple levels of resource and/or service
    grouping mechanisms. FOCUS supports two distinct levels of groupings
    that are commonly needed for FinOps capabilities like chargeback,
    invoice reconciliation and cost allocation.

    • Billing account: A mandatory container for resources and/or services
      that are billed together in an invoice. Billing accounts are commonly
      used for scenarios like grouping based on organizational constructs,
      invoice reconciliation and cost allocation strategies.
    • Sub account: An optional provider-supported construct for organizing
      resources and services connected to a billing account. Sub accounts are
      commonly used for scenarios like grouping based on organizational
      constructs, access management needs and cost allocation strategies. Sub
      accounts must be associated with a billing account as they do not
      receive invoices.

    The table below highlights key properties of the two grouping
    constructs 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: Management
    Account*
    GCP: Billing Account
    Azure MCA: Billing
    Profile
    Snowflake: Organizational Account
    AWS: Member Account
    GCP:
    Project
    Azure MCA: Subscription
    Snowflake: Account

    * For organizations that have multiple AWS Member Accounts
    within an AWS Organization, consolidated billing is enabled by default
    and invoices are received at Management Account level. A Member Account
    can be removed from AWS consolidated billing whereby the removed account
    receives independent invoices and is responsible for payments.
     

    6.2. Origination of Cost Data

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

    • Provider: The entity that made the resources and/or services
      available for purchase.
    • Publisher: The entity that produced the resources and/or services
      that were purchased.
    • Invoice Issuer: The entity responsible for invoicing for the
      resources and/or services consumed.

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

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

Get Trained and Certified on FOCUS

Learn how FOCUS can accelerate FinOps at your organization.

Introduction to FOCUS

Explore the goals of FOCUS, view sample use cases, and learn about gathering FOCUS conformed datasets.

Take the Free course

FinOps Certified FOCUS Analyst

An in-depth understanding of the FOCUS Specification, learn how to use FOCUS datasets to answer real-world business questions.

Learn more