Skip to content

Commit

Permalink
Merge branch 'working_draft' into 7-pricing-model-dimension
Browse files Browse the repository at this point in the history
  • Loading branch information
Rodney committed Oct 10, 2023
2 parents 2febb35 + 657d1b5 commit 576430d
Show file tree
Hide file tree
Showing 21 changed files with 238 additions and 1 deletion.
31 changes: 31 additions & 0 deletions specification/metrics/listunitprice.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# List Unit Price

The List Unit Price represents the suggested provider published unit price for a single pricing measurement unit, which incorporates volume/tier-based rates while excluding any negotiated or commitment-based discounts. This price is denominated in the [Billing Currency](#billingcurrency). It is used to calculate List Cost and savings based on rate optimization activities.

The ListUnitPrice column MUST be present in the billing data. This column MUST be a numeric value of type Decimal within the range of non-negative decimal values. It MUST NOT contain null values in cases where the [ChargeType](#chargetype) is 'usage' or 'purchase'. When ListUnitPrice is not null, multiplying ListUnitPrice by [QuantityInPricingUnit](#quantityinpricingunit) MUST equal [ListCost](#listcost).

## Column ID

ListUnitPrice

## Display name

List Unit Price

## Description

Represents the suggested provider published price for a single pricing measurement unit, which incorporates volume/tier-based reductions while excluding any negotiated or commitment-based discounts.

## Content Constraints

| Constraint | Value |
|:----------------|:-------------------------------------|
| Column required | True |
| Data type | Decimal |
| Allows nulls | True |
| Value format | Numeric value |
| Number range | Any valid non-negative decimal value |

## Introduced (version)

1.0
1 change: 1 addition & 0 deletions specification/metrics/metrics.mdpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ operations. When combined with dimensions (which are qualitative value columns),

!INCLUDE "effectivecost.md",1
!INCLUDE "billedcost.md",1
!INCLUDE "listunitprice.md",1
86 changes: 86 additions & 0 deletions supporting_content/appendix/quantity_driven_pricing_strategies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# Quantity-Driven Pricing Strategies

## Introduction

Providers employ two primary approaches for pricing their offerings: flat-rate pricing and quantity-dependent pricing.

### Flat-Rate Pricing

With flat-rate pricing, each pricing unit is assigned a fixed price, regardless of the quantity being consumed. This pricing strategy is characterized by its simplicity, as customers are charged a consistent rate, making it easy to forecast costs.

### Quantity-Dependent Pricing (Usage-Dependent Pricing)

Quantity-dependent pricing, also referred to as usage-dependent pricing, takes into account the quantity and adjusts pricing accordingly. This approach involves configuring multiple price tiers, each defined by a specific quantity range and associated unit prices, such as ListUnitPrice, NegotiatedUnitPrice, BilledUnitPrice, etc.

Typically, higher usage tiers feature lower unit prices, offering users the advantage of reduced unit costs as their usage expands. Additionally, quantity-dependent pricing may include a **free-tier**, a special price tier designed for an introductory usage level.

Two common quantity-dependent pricing strategies are volume-based pricing and tier-based pricing. While both strategies reset the count of charged units at the beginning of each billing period, they differ in how charges are categorized into different price tiers:

* **volume-based pricing:** This strategy adjusts unit prices based on the total usage within a specific billing period, affecting all charges within it. Customers benefit from reduced unit costs as their overall usage increases.
* **tier-based pricing:** In tier-based pricing, unit prices change as the number of charged units increases. You are charged for the consumed quantity within each tier based on the associated unit price for each tier.

For better comprehension, please refer to the sample price-tiers configuration and UC scenarios, provided in Fictional Use Case scenarios.

## Example usage scenarios

### Fictional Use Case scenarios

#### Sample price-tiers configuration

| | Lower Tier | Higher Tier |
|:---------------------------|:-----------|:------------|
| List Unit Price | 1 | 0.50 |
| Pricing currency | USD | USD |
| Starting Range (inclusive) | 0 | 10GB |
| Ending Range (exclusive) | 10 | 100 |
| Pricing Unit | 1GB | 1GB |
| Enterprise discount | 10% | 10% |

#### UC scenarios for different (sub)types of pricing mechanisms

| Scenario | Description |
|:---------|:------------------------------------------------------------------------------------------------------------|
| S-1 | Tier-based pricing: 12GB of usage falls into two different tiers, resulting in two separate charge records. |
| S-2 | Volume-based pricing: 12GB of usage falls into the highest tier, resulting in a single charge record. |

#### Sample Billing data

| Scenario | QuantityInPricingUnit | PricingUnit | ListUnitPrice | NegotiatedUnitPrice | BilledUnitPrice | PricingCurrency | BillingCurrency | ListCost | BilledCost | EffectiveCost |
|:----|---:|:----|-----:|-----:|-----:|:----|:----|---:|----:|----:|
| S-1 | 10 | 1GB | 1 | 0.90 | 0.90 | USD | USD | 10 | 9 | 9 |
| S-1 | 2 | 1GB | 0.50 | 0.45 | 0.45 | USD | USD | 1 | 0.9 | 0.9 |
| S-2 | 12 | 1GB | 0.50 | 0.45 | 0.45 | USD | USD | 6 | 5.4 | 5.4 |

### Current values observed in billing data for various scenarios

| Provider | Scenario | ListUnitPrice Pattern | BilledUnitPrice Pattern |
|:----------|:-----------------------------------------------------------------------------------|:-------------------------------------|:------------------------|
| AWS | Flat-rate based pricing<br>SKU: E9YHNFENF4XQBZR6 | pricing/publicOnDemandRate: 0.000005 | *TODO: Add sample data* |
| AWS | Quantity-dependent pricing<br> ??? *TODO: look for a higher tier sample* | pricing/publicOnDemandRate: ??? *TODO: look for a higher tier sample* | *TODO: Add sample data* |
| GCP | Flat-rate based pricing | Not available | *TODO: Add sample data* |
| GCP | Quantity-dependent pricing | Not available | *TODO: Add sample data* |
| Microsoft | Flat-rate based pricing - PAYG<br>meterId: b9e5e77c-a0b3-4a2c-9b8b-57fa54f31c52 | PayGPrice: 0.00036 | *TODO: Add sample data* |
| Microsoft | Flat-rate based pricing - CSP<br>meterId: b9e5e77c-a0b3-4a2c-9b8b-57fa54f31c52 | PayGPrice: 0.0003707 | *TODO: Add sample data* |
| Microsoft | Quantity-dependent pricing - PAYG<br>meterId: 9995d93a-7d35-4d3f-9c69-7a7fea447ef4 | PayGPrice: 0.087 | *TODO: Add sample data* |
| Microsoft | Quantity-dependent pricing - CSP<br>meterId: 9995d93a-7d35-4d3f-9c69-7a7fea447ef4 | PayGPrice: 0.087 | *TODO: Add sample data* |
| OCI | Flat-rate based pricing | Not available | *TODO: Add sample data* |
| OCI | Quantity-dependent pricing | Not available | *TODO: Add sample data* |

### Alternative data sources for various scenarios

| Provider | Scenario | Data source | Authentication required | Request/Query Sample |
|:----------|:-----------------------------------------------|:-----------------------------|:------------------------|:---------------------|
| AWS | Flat-rate based and quantity-dependent pricing | AWS Price List API | N | [GET request](https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonS3/current/index.csv) |
| GCP | Flat-rate based pricing | BigQuery Pricing Data Export | Y | Query:<pre>SELECT sku.id AS sku_id, sku.description AS sku_description, service.id AS service_id, service.description as service_description, pricing_unit, pricing_unit_description, account_currency_code, tier.*<br>FROM &grave;my-billing-admin-project.my_billing_dataset.cloud_pricing_export&grave; AS sku_pricing, UNNEST (sku_pricing.list_price.tiered_rates) as tier <br>WHERE TIMESTAMP_TRUNC(_PARTITIONTIME, DAY) = TIMESTAMP("2023-08-24") AND sku.id = "0012-B7F2-DD14"<br>LIMIT 1000;</pre>Response:<pre>[{"sku_id":"0012-B7F2-DD14", "sku_description":"Spot Preemptible Compute optimized Ram running in Montreal", "service_id":"6F81-5844-456A", "service_description":"Compute Engine", "pricing_unit":"GIBIBYTE_HOUR", "pricing_unit_description":"gibibyte hour", "account_currency_code":"USD", "pricing_unit_quantity":"1.0", "start_usage_amount":"0.0", "usd_amount":"0.001537", "account_currency_amount":"0.001537"}]</pre>|
| GCP | Quantity-dependent pricing | BigQuery Pricing Data Export | Y | Query:<pre>SELECT sku.id AS sku_id, sku.description AS sku_description, service.id AS service_id, service.description as service_description, pricing_unit, pricing_unit_description, account_currency_code, tier.*<br>FROM &grave;my-billing-admin-project.my_billing_dataset.cloud_pricing_export&grave; AS sku_pricing, UNNEST (sku_pricing.list_price.tiered_rates) as tier <br>WHERE TIMESTAMP_TRUNC(_PARTITIONTIME, DAY) = TIMESTAMP("2023-08-24") AND sku.id = "3886-1DF3-046E"LIMIT 1000;</pre>Response:<pre>[{"sku_id":"3886-1DF3-046E", "sku_description":"Certificate", "service_id":"3C02-AF97-2288", "service_description":"AppViewX Inc AppViewX-CLM-v2", "pricing_unit":"DAY", "pricing_unit_description":"day", "account_currency_code":"USD", "pricing_unit_quantity":"1.0", "start_usage_amount":"0.0", "usd_amount":"0.0", "account_currency_amount":"0.0"},{"sku_id":"3886-1DF3-046E", "sku_description":"Certificate", "service_id":"3C02-AF97-2288", "service_description":"AppViewX Inc AppViewX-CLM-v2", "pricing_unit":"DAY", "pricing_unit_description":"day", "account_currency_code":"USD", "pricing_unit_quantity":"1.0", "start_usage_amount":"30001.0", "usd_amount":"0.09", "account_currency_amount":"0.09"}...]</pre>|
| GCP | Flat-rate based pricing | GCP Cloud Billing API | Y | [GET request](https://cloudbilling.googleapis.com/v1beta/skus/0012-B7F2-DD14/price?currencyCode=USD) <br><br><pre>{"name":"skus/0012-B7F2-DD14/price", "currencyCode":"USD", "valueType":"rate", "rate":{"tiers":[{"startAmount":{"value":"0"},"listPrice":{"currencyCode":"USD", "nanos":1397000}}],"unitInfo":{"unit":"GiBy.h", "unitDescription":"gibibyte hour", "unitQuantity":{"value":"1"}},"aggregationInfo":{"level":"ACCOUNT", "interval":"MONTHLY"}}}</pre> |
| GCP | Quantity-dependent pricing | GCP Cloud Billing API | Y | [GET request](https://cloudbilling.googleapis.com/v1beta/skus/0012-B7F2-DD14/price?currencyCode=USD) <br><br><pre>{"name":"skus/3886-1DF3-046E/price", "currencyCode":"USD", "valueType":"rate", "rate":{"tiers":[{"startAmount":{"value":"0"},"listPrice":{"currencyCode":"USD"}},{"startAmount":{"value":"300001"},"listPrice":{"currencyCode":"USD", "nanos":47000000}}...],"unitInfo":{"unit":"d", "unitDescription":"day", "unitQuantity":{"value":"1"}},"aggregationInfo":{"level":"LEVEL_ACCOUNT", "interval":"INTERVAL_MONTHLY"}}}</pre> |
| Microsoft | Flat-rate based pricing | Azure Retail Prices REST API | N | [GET request](https://prices.azure.com/api/retail/prices?api-version=2023-01-01-preview&currencyCode=%27EUR%27&meterRegion=%27primary%27&$filter=meterId%20eq%20%27b9e5e77c-a0b3-4a2c-9b8b-57fa54f31c52%27%20and%20location%20eq%20%27EU%20West%27) |
| Microsoft | Quantity-dependent pricing | Azure Retail Prices REST API | N | [GET request](https://prices.azure.com/api/retail/prices?api-version=2023-01-01-preview&currencyCode=%27USD%27&meterRegion=%27primary%27&$filter=meterId%20eq%20%279995d93a-7d35-4d3f-9c69-7a7fea447ef4%27%20%20and%20location%20eq%20%27EU%20West%27&$orderby=tierMinimumUnits%20asc) |
| OCI | Flat-rate based pricing | OCI List Pricing REST API | N | [GET request](https://apexapps.oracle.com/pls/apex/cetools/api/v1/products/?currencyCode=EUR&partNumber=B88513) |
| OCI | Quantity-dependent pricing | OCI List Pricing REST API | N | [GET request](https://apexapps.oracle.com/pls/apex/cetools/api/v1/products/?currencyCode=EUR&partNumber=B90617) |

## Discussion / Scratch space

* Quantity-driven pricing strategies might not be the most appropriate term
* See [Pricing Support – UCs and Data samples Spreadsheet](https://docs.google.com/spreadsheets/d/1AZ-vtkKeKwYc8rqhxP1zMTnAVAS-svmWQQmr8cpv-IM/edit#gid=117987709) for additional UC scenarios.
4 changes: 4 additions & 0 deletions supporting_content/attributes/currency_code_format.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ Current column mappings found in available data sets:
| AWS | CUR | CurrencyCode |
| GCP | Big Query Billing Export | Currency |
| Azure | Cost details | BilledCurrency |
| OCI | Cost reports | cost/currencyCode |

## Example usage scenarios

Expand All @@ -19,6 +20,7 @@ Current values observed in billing data for various scenarios:
| AWS | CUR | USD |
| GCP | Big Query Billing Export | EUR |
| Azure | Cost details | JPY |
| OCI | Cost reports | USD |

## Requirements

Expand All @@ -34,6 +36,8 @@ GCP: [Currency](https://cloud.google.com/billing/docs/resources/currency)

Azure: [Pricing FAQ](https://azure.microsoft.com/en-us/pricing/faq/)

OCI: [OCI Price List](https://www.oracle.com/cloud/price-list/)

## Discussion / Scratch space

There is a dimension of currency rate conversions for billing data with multiple currencies. See [Currency](https://cloud.google.com/billing/docs/resources/currency). We may need to consider adding currency conversion rates to future versions of the specification
2 changes: 2 additions & 0 deletions supporting_content/attributes/datetime_format.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ Current column mappings found in available data sets:
| AWS | CUR | lineItem/UsageStartDate, lineItem/UsageEndDate, etc. |
| GCP | Big Query Billing Export | usage_start_time, usage_end_time, etc. |
| Microsoft | Cost details | date, etc. |
| OCI | Cost reports | lineItem/intervalUsageStart, lineItem/intervalUsageEnd |

### Documentation

Expand All @@ -26,6 +27,7 @@ Current values observed in billing data for various scenarios:
| GCP | Big Query Billing Export | 2023-05-13 21:00:00 UTC |
| Microsoft | Cost details via Consumption API (usageDetails) | 2023-05-13T00:00:00Z |
| Microsoft | Cost details via Cost export file | 05/13/2023 |
| OCI | Cost reports | 2022-08-19T01:00Z |

## Discussion / Scratch space

Expand Down
1 change: 1 addition & 0 deletions supporting_content/attributes/null_handling.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ Current values observed in billing data for various scenarios:
| AWS | CUR | Product_operation shows the type of operation used by a consumer. <br>However, in scenarios where the line item represents tax, this column is set to null. |
| GCP | Big Query Billing Export | Credits.name is null when a credit is not applied. |
| Microsoft | Cost Details | ResourceGroup is null when a charge is not from a resource deployed to a resource group.|
| OCI | Cost reports | product/availabilityDomain is null when resource is an Object Store bucket |

## Discussion / Scratch space

Expand Down
4 changes: 4 additions & 0 deletions supporting_content/dimensions/availabilityzone.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ Current column mappings found in available data sets:
| AWS | CUR | lineItem/AvailabilityZone |
| Google Cloud | BigQuery Billing Export | location.zone |
| Microsoft | Cost details | Not available |
| OCI | Cost reports | product/availabilityDomain |

## Example usage scenarios

Expand All @@ -19,6 +20,7 @@ Current values observed in billing data for various scenarios:
| AWS | CUR | us-east-1a, me-south-1, ap-southeast-4 |
| Google Cloud | BigQuery Billing Export | us-central1-a, europe-west6-b, asia-east2-b |
| Microsoft | Cost details | N/A |
| OCI | Cost reports | product/availabilityDomain | EnnW:CA-TORONTO-1-AD-1, EnnW:EU-STOCKHOLM-1-AD-1, EnnW:US-ASHBURN-AD-1 |

## Discussion / Scratch space:

Expand All @@ -34,6 +36,8 @@ Discussion of zone definition
- AWS Billing: [Product details - AWS Cost and Usage Reports](https://docs.aws.amazon.com/cur/latest/userguide/product-columns.html#R)
- GCP Billing: [Structure of Detailed data export | Cloud Billing](https://cloud.google.com/billing/docs/how-to/export-data-bigquery-tables/detailed-usage#detailed-usage-cost-data-schema)
- Azure Billing: [Understand cost details fields](https://learn.microsoft.com/en-us/azure/cost-management-billing/automate/understand-usage-details-fields)
- OCI Billing: [OCI Cost report schema - Cost and Usage Reports Overview](https://docs.oracle.com/en-us/iaas/Content/Billing/Concepts/usagereportsoverview.htm)
- Azure Zone: [What are Azure regions and availability zones? | Microsoft Learn](https://learn.microsoft.com/en-us/azure/reliability/availability-zones-overview)
- GCP Zone: [Geography and regions](https://cloud.google.com/docs/geography-and-regions)
- AWS Zone: [AWS Regions and Availability Zones](https://docs.aws.amazon.com/whitepapers/latest/get-started-documentdb/aws-regions-and-availability-zones.html)
- OCI Zone: [OCI Regions and Availability Domains](https://docs.oracle.com/en-us/iaas/Content/General/Concepts/regions.htm)
2 changes: 2 additions & 0 deletions supporting_content/dimensions/billingaccountid.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Current column mappings found in available data sets:
| Microsoft | Cost details | EA: BillingAccountId |
| Microsoft | Cost details | MCA: BillingProfileId |
| Microsoft | Cost details | MOSA: SubscriptionId |
| OCI | Cost reports | cost/subscriptionId |


## Documentation
Expand All @@ -29,6 +30,7 @@ Current values observed in billing data for various scenarios:
| AWS | CUR | |
| GCP | Big Query Billing Export | |
| Microsoft | Cost details | |
| OCI | Cost reports | |


## Discussion / Scratch space:
Expand Down
4 changes: 4 additions & 0 deletions supporting_content/dimensions/billingcurrency.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ Current column mappings found in available data sets:
| AWS | CUR | CurrencyCode |
| Google Cloud | Big Query Billing Export | Currency |
| Microsoft | Cost details | EA: BillingCurrency |
| OCI | Cost reports | cost/currencyCode |


## Requirements
Expand All @@ -27,6 +28,7 @@ Current values observed in billing data for various scenarios:
| AWS | CUR | USD |
| Google Cloud | Big Query Billing Export | INR |
| Microsoft | Cost details | USD |
| OCI | Cost reports | USD |


## References
Expand All @@ -36,3 +38,5 @@ AWS: https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html#l-C
Google Cloud: https://cloud.google.com/billing/docs/resources/currency

Azure: https://azure.microsoft.com/en-us/pricing/faq/

OCI: https://www.oracle.com/cloud/price-list/
Loading

0 comments on commit 576430d

Please sign in to comment.