Skip to main content
Dimensions are Costory reporting fields. They map provider-specific tags, labels, and billing metadata to consistent values you can group, filter, allocate, alert, and report on across AWS, GCP, and Azure. Costory resolves dimensions on top of your billing export and recomputes history on every change, so a dimension reads the same in Explorer, dashboards, alerts, and reports. The UI and the Costory MCP write the same definitions: rules you build in the app are the same CEL conditions an agent drafts and publishes through the virtual dimension tools.
Costory Dimensions page listing imported labels and virtual dimensions

Overview

There are two kinds of dimension. An imported dimension points several native tags or labels at the same concept. Map aws:Environment, env, and environment into one Environment dimension so filters and splits stay consistent across providers. A virtual dimension derives its values from rules instead of an existing tag. Each rule is a CEL condition evaluated top to bottom, first match wins. A Team virtual dimension can route rows where cos_gcp_project_id.startsWith("eng-") to Engineering and send everything else to a leftover bucket. Common uses:
  • Collapse duplicate tag keys across AWS, GCP, and Azure into one field
  • Normalize values such as prod, prd, and production
  • Allocate untagged resources to teams, products, or cost centers
  • Build shared dashboards, alerts, and reports on stable business fields

Key terms used in this article

  • Dimension: A Costory reporting field used to filter, group, allocate, or scope costs.
  • Imported dimension: A dimension built from native provider tags, labels, or billing metadata.
  • : A dimension whose values come from CEL rules you define in Costory.
  • Leftover bucket: The automatic catch-all value for any row that matches no rule. A large leftover share signals a missing or too-narrow rule.
See the Glossary for a full list of terms.

Create a dimension from native tags and labels

Use imported dimensions when the data already exists in your cloud billing export, but the names or values are inconsistent.
1

Open Dimensions

Navigate to Dimensions from the left sidebar.
2

Add a dimension

Click + Add new dimension, then select the native tags or labels you want to merge.
Selecting native tag and label sources to create a Costory dimension
3

Choose the reporting name

Pick the name you want Costory users to see, such as environment, team, or cost_center.
4

Normalize values

Review suggested value mappings and adjust them. For example, map prod, prd, and production to production.
Environment dimension editor remapping values to canonical names
5

Publish

Click Publish all changes. Costory reprocesses historical data so the dimension is available in Explorer, Dashboards, Alerts, and Reports.

Create a virtual dimension from rules

Use virtual dimensions when the right grouping does not exist as a clean tag. Rules can use billing metadata, imported dimensions, or other virtual dimensions.
1

Create the virtual dimension

Open Dimensions, click + Add new dimension > Virtual dimension, and enter a name such as team, business_unit, or product.
Dimensions page with Add new dimension menu showing Dimension and Virtual dimension options
2

Define rules

Add conditions that map cost rows to output values. Conditions can use fields such as account, service, resource name, Kubernetes namespace, imported dimensions, or another virtual dimension.
Virtual dimension rules editor with conditions and output value mapping
3

Order the rules

Rules are evaluated from top to bottom. Drag rules into the priority order you want.
4

Save

Costory reprocesses historical data and makes the new values available across the product.
Every virtual dimension ends with a leftover bucket: a catch-all value for any cost row that matches none of your rules. Watch its share when you build rules: a large leftover usually means a rule is missing or too narrow.

Explore and build allocation with your AI assistant

Most of the work in allocation is deciding which field to split on, not entering the rules. Through the Costory FinOps MCP, an assistant runs that exploration against your real spend and turns the result into a published dimension from chat. Before any rule exists, it can:
  • Surface the values behind a concept with semantic search. Ask for “checkout” and you also get payment-api, order-service, and cart-backend, so one rule covers related spend a literal match would miss.
  • Test which field best separates your cost with group-by suggestions and ad-hoc queries, so you split on something meaningful instead of guessing.
  • Preview where the money lands. A per-rule preview shows trailing-30-day cost per bucket and the leftover share, so a missing or too-narrow rule is obvious before you publish.
  • Flag rules that overlap. The overlap matrix shows when a broad early rule shadows a later one and swallows its spend.
Creating the dimension is the easy last step. The assistant drafts the rules as CEL conditions (top to bottom, first match wins), adds the leftover bucket automatically, and keeps everything on a draft. Publishing is explicit and triggers a data refresh, so production stays unchanged until you confirm.
Describe the outcome you want (“split our shared Cloud SQL bill across teams by schema size”) and let the assistant explore the data and propose rules. Review the preview, especially the leftover share, before approving the publish.
See the FinOps MCP reference for the underlying tools and parameters.

Reallocate shared cost with a usage metric

Beyond mapping rows to fixed values, a virtual dimension rule can split a shared cost proportionally across teams based on a synced usage metric, a telemetry allocation. For example, divide a shared Cloud SQL bill across teams by each schema’s size instead of guessing a flat percentage. Connect a metric source in Setup > Usage Metrics, then add the allocation rule from the web app or through MCP. See Shared Cost Allocation for the full walkthrough and supported sources.

Dimension sources

SourceExamplesWhen to use
Native tags and labelsenv, aws:Environment, project.labels.teamYou already tag resources, but names or values differ by provider
Standard columnsProvider, account, service, region, namespaceYou need allocation from billing metadata that is always present
Other dimensionsenvironment, team, business_unitYou want a hierarchy, such as namespace -> team -> business unit
Usage metricsDatabase size, API calls, CPU timeYou need shared cost allocation based on actual consumption

Common patterns

Environment dimension

Merge env, environment, and k8s_label_env, then normalize values into development, staging, and production. Use this for environment cost reports and alerts.

Team virtual dimension

Map accounts, namespaces, services, and project IDs to teams. This helps you allocate untagged resources and create team scopes in Teams.

Allocation hierarchy

Build one dimension on top of another. For example: When the team mapping changes, every dashboard, alert, and report that uses the downstream dimensions updates after reprocessing.

Next Steps

Tag & Allocate overview

See how dimensions and shared cost allocation fit together

Shared Cost Allocation

Split shared infrastructure costs with usage metrics

Explorer

Use dimensions to filter and group cost data

Automated Environment Visibility

Walk through an environment dimension example

Explore allocation with AI (MCP)

Explore your spend and build virtual dimensions from chat
Last modified on June 30, 2026