Allocation Dimension Element Cutoff Thresholds
Many allocation dimensions have a "long tail" problem where a significant number of elements account for a very small portion of total spend. This can impact materialization performance and query speed while delivering minimal analytical value.
You can use the ElementCutoff parameter to filter out these low-value elements from allocation dimensions. ElementCutoff sets a cumulative percentage threshold; elements that fall below this threshold are either excluded or grouped into a named bucket.
Supported allocation types
ElementCutoff is supported for the following allocation types:
| Allocation Type | Supported | Notes |
|---|---|---|
| Proportional Allocation | Yes | Primary use case |
| Telemetry Allocation | Yes | Standard telemetry only |
| Telemetry Allocation (rate-based) | No | Rate allocations have different semantics |
| Even Allocation | No | All elements have equal weight; threshold is not meaningful |
How the threshold works
The threshold is based on cumulative allocation percentage, sorted in descending order by allocation value. Elements are included until the cumulative sum exceeds (100 - ThresholdPercent). A secondary sort by element value ensures deterministic results.
Elements that fall below the threshold can be handled in 2 ways:
- Excluded: Sub-threshold elements are excluded from the dimension (default behavior when no
Nameis specified). - Grouped: Sub-threshold elements are aggregated into a named bucket (when
Nameis specified).
In both cases, the thresholded allocation values are renormalized so that non-excluded values sum to 1.0, ensuring cost allocation correctness.
Example
Given elements with the following original allocations and a threshold of 10%:
| Element | Allocation | Cumulative | Status |
|---|---|---|---|
| A | 45% | 45% | Included |
| B | 30% | 75% | Included |
| C | 15% | 90% | Included (90% is within 100 - 10) |
| D | 7% | 97% | Excluded |
| E | 3% | 100% | Excluded |
Exclude mode (no name specified)
Included elements (A, B, C) have an original sum of 0.90, so they are renormalized by dividing by 0.90:
| Element | Thresholded Allocation | Original Allocation |
|---|---|---|
| A | 0.50 (0.45 / 0.90) | 0.45 |
| B | 0.333 (0.30 / 0.90) | 0.30 |
| C | 0.167 (0.15 / 0.90) | 0.15 |
| D | Excluded | 0.07 |
| E | Excluded | 0.03 |
Thresholded allocations sum to 1.0 (0.50 + 0.333 + 0.167).
Grouping mode (with name specified)
When grouping is enabled, the bucket receives the excluded allocation, so no renormalization is needed for included elements:
| Element | Thresholded Allocation | Original Allocation |
|---|---|---|
| A | 0.45 | 0.45 |
| B | 0.30 | 0.30 |
| C | 0.15 | 0.15 |
| D | Excluded | 0.07 |
| E | Excluded | 0.03 |
| Small Accounts | 0.10 | N/A (synthetic) |
Thresholded allocations sum to 1.0 (0.45 + 0.30 + 0.15 + 0.10).
CostFormation syntax
Add an ElementCutoff block to your allocation dimension definition:
ElementCutoff:
ThresholdPercent: 5 # Required: cumulative percentage threshold (0-100 exclusive)
Name: 'Other' # Optional: bucket name for grouped sub-threshold elementsParameters
ThresholdPercent(required): A number between 0 and 100 (exclusive). Determines the cumulative percentage of allocation below which elements are filtered out.Name(optional): A string that specifies the name of a grouping bucket. When provided, sub-threshold elements are aggregated into a single element with this name instead of being excluded. You can use any name that makes sense for your use case, for example, "Other", "Small Accounts", or "Long Tail".
Example: Exclude sub-threshold elements
The following example defines an allocation dimension that filters out elements in the bottom 5% of cumulative allocation:
RDSSplitCosts:
Name: RDS Split Costs
Hide: True
Type: Allocation
AllocateByRules:
AllocationMethod: Proportional
SpendToAllocate:
Conditions:
- And:
- Source: Account
Equals: 123456789012
- Source: Service
Equals: AWS RDS
AcrossElements:
Rules:
- Type: GroupBy
Source: SingleTenantProduct
ElementCutoff:
ThresholdPercent: 5Example: Group sub-threshold elements
The following example groups sub-threshold elements into a bucket named "Small Accounts":
RDSSplitCosts:
Name: RDS Split Costs
Hide: True
Type: Allocation
AllocateByRules:
AllocationMethod: Proportional
SpendToAllocate:
Conditions:
- And:
- Source: Account
Equals: 123456789012
- Source: Service
Equals: AWS RDS
AcrossElements:
Rules:
- Type: GroupBy
Source: SingleTenantProduct
ElementCutoff:
ThresholdPercent: 10
Name: 'Small Accounts'Configuration priority
ElementCutoff can be configured at 2 levels. The following list describes the order of precedence, from highest to lowest:
- CostFormation
ElementCutoff: An explicit per-dimension configuration in your CostFormation definition file. - Organization default: A default threshold configured at the organization level by CloudZero. If you need help configuring an organization-level default, contact your FinOps Account Manager or Customer Success Representative.
If neither is configured, no threshold is applied and all elements are included (backward compatible default).
To disable the cutoff for a specific dimension when an organization-level default is set, explicitly setThresholdPercent: 0in the dimension'sElementCutoffblock.
Edge cases
- Single element: Always included regardless of threshold.
- Tied allocation values: A secondary sort by element value ensures deterministic results.
- Threshold of 0 or not configured: No elements are filtered (effectively disabled).
- Name collision with existing element: If the grouping bucket name matches an existing element, the sub-threshold values merge with that element.
Updated 13 days ago
