Create cloud cost allocation dimensions that merge native AWS, GCP, and Azure tags, normalize values, and define rule-based virtual dimensions for team, product, or environment reporting.
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.
Dimensions page listing imported labels and virtual dimensions in one place
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.A large lookup that lives in git is an enrichment. Enrichments are in beta. You publish them from files, separately from the rules on this page.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
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.
Add a virtual dimension from the Dimensions page
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.
Rules editor with conditions and 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.
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 from Integrations > + Add integration > External metric (Metrics Correlation), then add the allocation rule from the web app or through MCP. See Shared Cost Allocation for the full walkthrough and supported sources.
Merge env, environment, and k8s_label_env, then normalize values into development, staging, and production. Use this for environment cost reports and alerts.
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.
See how dimensions and shared cost allocation fit together
Shared Cost Allocation
Split shared infrastructure costs with usage metrics
Enrichments (beta)
Publish lookup files from git, including a dynamic split
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 October 12, 2026
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Costory Documentation","colors":{"primary":"#1D3C93","light":"#305DD9","dark":"#1D3C93"},"logo":{"light":"https://mintcdn.com/costory/jdghijjvsrOsYiTC/logo/light.png?fit=max\u0026auto=format\u0026n=jdghijjvsrOsYiTC\u0026q=85\u0026s=dee63acdba91bf952855557cc5c5ec16","dark":"https://mintcdn.com/costory/jdghijjvsrOsYiTC/logo/light.png?fit=max\u0026auto=format\u0026n=jdghijjvsrOsYiTC\u0026q=85\u0026s=dee63acdba91bf952855557cc5c5ec16","href":"https://costory.io"},"favicon":"https://mintcdn.com/costory/stODLWETeKeyz7ed/favicon-new.svg?fit=max\u0026auto=format\u0026n=stODLWETeKeyz7ed\u0026q=85\u0026s=334ff5307103e4ffc0473bb6e1b9b56c","appearance":{"default":"light","strict":true},"navbar":{"links":[{"href":"https://costory.io","label":"Website"}],"primary":{"type":"button","label":"Start a free trial","href":"https://app.costory.io/welcome-demo?utm_source=get-started"}},"integrations":{"posthog":{"apiKey":"phc_jgU0iQbU4Arfu5ouKpn9YhzkTWv3P5VfW2n7sJsKR0P","apiHost":"https://user.costory.io","sessionRecording":true}},"contextual":{"options":["copy","view","chatgpt","claude","aistudio"],"display":"header"},"metadata":{"timestamp":true},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"costory","hasAudioNarration":false,"actualSubdomain":"costory","customDomains":["docs.costory.io"],"gitSource":{"type":"github","owner":"costory-io","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6af2033088844f4e905da51d","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"default","tag":"API Reference","count":124},{"language":"default","tag":"Documentation","count":70},{"language":"default","tag":"Setup","count":44},{"language":"default","tag":"Alerts V2","count":26},{"language":"default","tag":"Dashboards","count":23},{"language":"default","tag":"Billing Data","count":22},{"language":"default","tag":"Use Cases","count":17},{"language":"default","tag":"Reports","count":16},{"language":"default","tag":"Metrics Correlation","count":13},{"language":"default","tag":"Events","count":11}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"features/tagging/dimensions","slug":"/features/tagging/dimensions","pageMetadata":{"title":"Dimensions","sidebarTitle":"Dimensions","description":"Create cloud cost allocation dimensions that merge native AWS, GCP, and Azure tags, normalize values, and define rule-based virtual dimensions for team, product, or environment reporting.","href":"/features/tagging/dimensions"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Create cloud cost allocation dimensions that merge native AWS, GCP, and Azure tags, normalize values, and define rule-based virtual dimensions for team, product, or environment reporting.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Card,CardGroup,Frame,Heading,Mermaid,OptimizedImage,Step,Steps,Table,Tip,Tooltip}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Tooltip)_missingMdxReference(`Tooltip`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`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.`]}),`\n`,_jsxs(_components.p,{children:[`Costory resolves dimensions on top of your billing export and recomputes history on every change, so a dimension reads the same in `,_jsx(_components.a,{href:`/features/cost-explorer`,children:`Explorer`}),`, dashboards, alerts, and reports. The UI and the `,_jsx(_components.a,{href:`/features/mcp`,children:`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.`]}),`\n`,_jsx(Frame,{caption:`Dimensions page listing imported labels and virtual dimensions in one place`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-import/01-dimensions-list.png?fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=885098c5f63dbe96f62ead0822efb9b8`,alt:`Costory Dimensions page listing imported labels and virtual dimensions`,\"data-og-width\":`1620`,width:`1620`,\"data-og-height\":`954`,height:`954`,\"data-path\":`images/dimensions-import/01-dimensions-list.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-import/01-dimensions-list.png?w=280\u0026fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=e4415006fec9a119b41caa02650873b9 280w, https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-import/01-dimensions-list.png?w=560\u0026fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=ff44eff3dced852db07de62160a7403f 560w, https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-import/01-dimensions-list.png?w=840\u0026fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=55661b7f405afd33249aaddd5950dbd8 840w, https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-import/01-dimensions-list.png?w=1100\u0026fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=b2936d828955e5fa939acd070e53df40 1100w, https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-import/01-dimensions-list.png?w=1650\u0026fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=83b7466cee8bb977c91b82b66b7551ef 1650w, https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-import/01-dimensions-list.png?w=2500\u0026fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=3d53b8648a08a05eae3699632a4b50c7 2500w`})}),`\n`,_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsx(_components.p,{children:`There are two kinds of dimension.`}),`\n`,_jsxs(_components.p,{children:[`An `,_jsx(_components.strong,{children:`imported dimension`}),` points several native tags or labels at the same concept. Map `,_jsx(_components.code,{children:`aws:Environment`}),`, `,_jsx(_components.code,{children:`env`}),`, and `,_jsx(_components.code,{children:`environment`}),` into one `,_jsx(_components.code,{children:`Environment`}),` dimension so filters and splits stay consistent across providers.`]}),`\n`,_jsxs(_components.p,{children:[`A `,_jsx(_components.strong,{children:`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 `,_jsx(_components.code,{children:`Team`}),` virtual dimension can route rows where `,_jsx(_components.code,{children:`cos_gcp_project_id.startsWith(\"eng-\")`}),` to `,_jsx(_components.code,{children:`Engineering`}),` and send everything else to a leftover bucket.`]}),`\n`,_jsxs(_components.p,{children:[`A large lookup that lives in git is an `,_jsx(_components.a,{href:`/features/tagging/enrichments`,children:`enrichment`}),`. Enrichments are in beta. You publish them from files, separately from the rules on this page.`]}),`\n`,_jsx(_components.p,{children:`Common uses:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Collapse duplicate tag keys across AWS, GCP, and Azure into one field`}),`\n`,_jsxs(_components.li,{children:[`Normalize values such as `,_jsx(_components.code,{children:`prod`}),`, `,_jsx(_components.code,{children:`prd`}),`, and `,_jsx(_components.code,{children:`production`})]}),`\n`,_jsx(_components.li,{children:`Allocate untagged resources to teams, products, or cost centers`}),`\n`,_jsx(_components.li,{children:`Build shared dashboards, alerts, and reports on stable business fields`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`key-terms-used-in-this-article`,children:`Key terms used in this article`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Dimension`}),`: A Costory reporting field used to filter, group, allocate, or scope costs.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Imported dimension`}),`: A dimension built from native provider tags, labels, or billing metadata.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(Tooltip,{tip:`Rule-based dimensions whose output values are defined in Costory.`,cta:`See Glossary`,href:`/docs/glossary#virtual-dimensions`,children:`Virtual dimension`})}),`: A dimension whose values come from CEL rules you define in Costory.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`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.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`See the `,_jsx(_components.a,{href:`/docs/glossary`,children:`Glossary`}),` for a full list of terms.`]}),`\n`,_jsx(Heading,{level:`2`,id:`create-a-dimension-from-native-tags-and-labels`,children:`Create a dimension from native tags and labels`}),`\n`,_jsx(_components.p,{children:`Use imported dimensions when the data already exists in your cloud billing export, but the names or values are inconsistent.`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Open Dimensions`,children:_jsxs(_components.p,{children:[`Navigate to `,_jsx(_components.strong,{children:`Dimensions`}),` from the left sidebar.`]})}),_jsxs(Step,{title:`Add a dimension`,children:[_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`+ Add new dimension`}),`, then select the native tags or labels you want to merge.`]}),_jsx(Frame,{caption:`Select source tags and labels from AWS, GCP, and Azure`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-import/02-select-namespace-tag.png?fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=7f21830e675af20eab8e46a3d8c8fa8f`,alt:`Selecting native tag and label sources to create a Costory dimension`,\"data-og-width\":`1620`,width:`1620`,\"data-og-height\":`954`,height:`954`,\"data-path\":`images/dimensions-import/02-select-namespace-tag.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-import/02-select-namespace-tag.png?w=280\u0026fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=7842d1f731aa99e0736df9837249047a 280w, https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-import/02-select-namespace-tag.png?w=560\u0026fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=06318fe94418fdd55ba08097f8c1dee8 560w, https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-import/02-select-namespace-tag.png?w=840\u0026fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=5a994eaf22f54ecf805eecaa973afe8e 840w, https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-import/02-select-namespace-tag.png?w=1100\u0026fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=0cc91bbdefa30b0dec98659b11f7fe81 1100w, https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-import/02-select-namespace-tag.png?w=1650\u0026fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=dbbf595289a0532b5ba13208d25188cd 1650w, https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-import/02-select-namespace-tag.png?w=2500\u0026fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=23193d0f1af68559383efaddd97bcc21 2500w`})})]}),_jsx(Step,{title:`Choose the reporting name`,children:_jsxs(_components.p,{children:[`Pick the name you want Costory users to see, such as `,_jsx(_components.code,{children:`environment`}),`, `,_jsx(_components.code,{children:`team`}),`, or `,_jsx(_components.code,{children:`cost_center`}),`.`]})}),_jsxs(Step,{title:`Normalize values`,children:[_jsxs(_components.p,{children:[`Review suggested value mappings and adjust them. For example, map `,_jsx(_components.code,{children:`prod`}),`, `,_jsx(_components.code,{children:`prd`}),`, and `,_jsx(_components.code,{children:`production`}),` to `,_jsx(_components.code,{children:`production`}),`.`]}),_jsx(Frame,{caption:`Remap variant values to one canonical value per dimension`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/costory/42bBN-TVANXyiZnv/images/dimensions-import/remap-dimensions.png?fit=max\u0026auto=format\u0026n=42bBN-TVANXyiZnv\u0026q=85\u0026s=f7df9900c3ff3d716f5c5c0d912ddb8c`,alt:`Environment dimension editor remapping values to canonical names`,\"data-og-width\":`1108`,width:`1108`,\"data-og-height\":`509`,height:`509`,\"data-path\":`images/dimensions-import/remap-dimensions.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/costory/42bBN-TVANXyiZnv/images/dimensions-import/remap-dimensions.png?w=280\u0026fit=max\u0026auto=format\u0026n=42bBN-TVANXyiZnv\u0026q=85\u0026s=8ae47a0e47e5b40a6311cb4051941b65 280w, https://mintcdn.com/costory/42bBN-TVANXyiZnv/images/dimensions-import/remap-dimensions.png?w=560\u0026fit=max\u0026auto=format\u0026n=42bBN-TVANXyiZnv\u0026q=85\u0026s=c0a9e159c350dccb4ba30d42d5f712b1 560w, https://mintcdn.com/costory/42bBN-TVANXyiZnv/images/dimensions-import/remap-dimensions.png?w=840\u0026fit=max\u0026auto=format\u0026n=42bBN-TVANXyiZnv\u0026q=85\u0026s=99e28772820db7a76b35f52ab583b7dd 840w, https://mintcdn.com/costory/42bBN-TVANXyiZnv/images/dimensions-import/remap-dimensions.png?w=1100\u0026fit=max\u0026auto=format\u0026n=42bBN-TVANXyiZnv\u0026q=85\u0026s=ca155b5c86bc0de51340965ed6b3f214 1100w, https://mintcdn.com/costory/42bBN-TVANXyiZnv/images/dimensions-import/remap-dimensions.png?w=1650\u0026fit=max\u0026auto=format\u0026n=42bBN-TVANXyiZnv\u0026q=85\u0026s=03f1e82d668dc5c8335f630d34a5d539 1650w, https://mintcdn.com/costory/42bBN-TVANXyiZnv/images/dimensions-import/remap-dimensions.png?w=2500\u0026fit=max\u0026auto=format\u0026n=42bBN-TVANXyiZnv\u0026q=85\u0026s=4bfc2da501030419eff98f49d81bffaf 2500w`})})]}),_jsx(Step,{title:`Publish`,children:_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Publish all changes`}),`. Costory reprocesses historical data so the dimension is available in `,_jsx(_components.a,{href:`/features/cost-explorer`,children:`Explorer`}),`, `,_jsx(_components.a,{href:`/features/dashboards`,children:`Dashboards`}),`, `,_jsx(_components.a,{href:`/features/alerts`,children:`Alerts`}),`, and `,_jsx(_components.a,{href:`/features/slack-reports`,children:`Reports`}),`.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`create-a-virtual-dimension-from-rules`,children:`Create a virtual dimension from rules`}),`\n`,_jsx(_components.p,{children:`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.`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Create the virtual dimension`,children:[_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`Dimensions`}),`, click `,_jsx(_components.strong,{children:`+ Add new dimension`}),` > `,_jsx(_components.strong,{children:`Virtual dimension`}),`, and enter a name such as `,_jsx(_components.code,{children:`team`}),`, `,_jsx(_components.code,{children:`business_unit`}),`, or `,_jsx(_components.code,{children:`product`}),`.`]}),_jsx(Frame,{caption:`Add a virtual dimension from the Dimensions page`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-virtual/01-add-menu-virtual-dimension.png?fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=66754a5e14290f8d74f00350733c9491`,alt:`Dimensions page with Add new dimension menu showing Dimension and Virtual dimension options`,\"data-og-width\":`1620`,width:`1620`,\"data-og-height\":`954`,height:`954`,\"data-path\":`images/dimensions-virtual/01-add-menu-virtual-dimension.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-virtual/01-add-menu-virtual-dimension.png?w=280\u0026fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=26370c0466f1961424f154b1659c0acd 280w, https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-virtual/01-add-menu-virtual-dimension.png?w=560\u0026fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=dc2322f9f4e6e60fb093c0144a04912e 560w, https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-virtual/01-add-menu-virtual-dimension.png?w=840\u0026fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=a2ccb2f3c753aa2f208c827f8dcf56f4 840w, https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-virtual/01-add-menu-virtual-dimension.png?w=1100\u0026fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=9eabf5c0f08a340975e7eb7f51f32867 1100w, https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-virtual/01-add-menu-virtual-dimension.png?w=1650\u0026fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=089fecae2acd8a5f5963cb1564dd8ac5 1650w, https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-virtual/01-add-menu-virtual-dimension.png?w=2500\u0026fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=c717d779455d9238016da20f9f469d03 2500w`})})]}),_jsxs(Step,{title:`Define rules`,children:[_jsx(_components.p,{children:`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.`}),_jsx(Frame,{caption:`Rules editor with conditions and value mapping`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-virtual/03-rules-editor-new-virtual-dim.png?fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=8900310fffae9c428d1ec6ab80e69c12`,alt:`Virtual dimension rules editor with conditions and output value mapping`,\"data-og-width\":`1620`,width:`1620`,\"data-og-height\":`954`,height:`954`,\"data-path\":`images/dimensions-virtual/03-rules-editor-new-virtual-dim.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-virtual/03-rules-editor-new-virtual-dim.png?w=280\u0026fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=436e5a986d98db43385eae8b66624584 280w, https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-virtual/03-rules-editor-new-virtual-dim.png?w=560\u0026fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=8d65d974a5cb92dc6013b058ec0fd16a 560w, https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-virtual/03-rules-editor-new-virtual-dim.png?w=840\u0026fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=2866932938c7f13ef806aeda88bc830e 840w, https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-virtual/03-rules-editor-new-virtual-dim.png?w=1100\u0026fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=ff935d9afc8fbb576e154efae305fd17 1100w, https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-virtual/03-rules-editor-new-virtual-dim.png?w=1650\u0026fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=d943e8a817b3e615b9c0129d33c825d8 1650w, https://mintcdn.com/costory/ZRQ99Ovx-9xOnLCN/images/dimensions-virtual/03-rules-editor-new-virtual-dim.png?w=2500\u0026fit=max\u0026auto=format\u0026n=ZRQ99Ovx-9xOnLCN\u0026q=85\u0026s=5fb4515ac5510bf359800d859a113981 2500w`})})]}),_jsx(Step,{title:`Order the rules`,children:_jsx(_components.p,{children:`Rules are evaluated from top to bottom. Drag rules into the priority order you want.`})}),_jsx(Step,{title:`Save`,children:_jsx(_components.p,{children:`Costory reprocesses historical data and makes the new values available across the product.`})})]}),`\n`,_jsxs(_components.p,{children:[`Every virtual dimension ends with a `,_jsx(_components.strong,{children:`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.`]}),`\n`,_jsx(Heading,{level:`2`,id:`explore-and-build-allocation-with-your-ai-assistant`,children:`Explore and build allocation with your AI assistant`}),`\n`,_jsxs(_components.p,{children:[`Most of the work in allocation is deciding which field to split on, not entering the rules. Through the `,_jsx(_components.a,{href:`/features/mcp`,children:`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:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Surface the values behind a concept with semantic search. Ask for “checkout” and you also get `,_jsx(_components.code,{children:`payment-api`}),`, `,_jsx(_components.code,{children:`order-service`}),`, and `,_jsx(_components.code,{children:`cart-backend`}),`, so one rule covers related spend a literal match would miss.`]}),`\n`,_jsx(_components.li,{children:`Test which field best separates your cost with group-by suggestions and ad-hoc queries, so you split on something meaningful instead of guessing.`}),`\n`,_jsx(_components.li,{children:`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.`}),`\n`,_jsx(_components.li,{children:`Flag rules that overlap. The overlap matrix shows when a broad early rule shadows a later one and swallows its spend.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`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 `,_jsx(_components.strong,{children:`draft`}),`. Publishing is explicit and triggers a data refresh, so production stays unchanged until you confirm.`]}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`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.`})}),`\n`,_jsxs(_components.p,{children:[`See the `,_jsx(_components.a,{href:`/features/mcp#virtual-dimensions`,children:`FinOps MCP reference`}),` for the underlying tools and parameters.`]}),`\n`,_jsx(Heading,{level:`2`,id:`reallocate-shared-cost-with-a-usage-metric`,children:`Reallocate shared cost with a usage metric`}),`\n`,_jsxs(_components.p,{children:[`Beyond mapping rows to fixed values, a virtual dimension rule can split a shared cost `,_jsx(_components.strong,{children:`proportionally`}),` across teams based on a synced usage metric, a `,_jsx(_components.strong,{children:`telemetry`}),` allocation. For example, divide a shared Cloud SQL bill across teams by each schema’s size instead of guessing a flat percentage.`]}),`\n`,_jsxs(_components.p,{children:[`Connect a metric source from `,_jsx(_components.strong,{children:`Integrations`}),` > `,_jsx(_components.strong,{children:`+ Add integration`}),` > `,_jsx(_components.strong,{children:`External metric`}),` (`,_jsx(_components.a,{href:`/setup/usage-metrics`,children:`Metrics Correlation`}),`), then add the allocation rule from the web app or through MCP. See `,_jsx(_components.a,{href:`/features/tagging/shared-cost-allocation`,children:`Shared Cost Allocation`}),` for the full walkthrough and supported sources.`]}),`\n`,_jsx(Heading,{level:`2`,id:`dimension-sources`,children:`Dimension sources`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Source`}),_jsx(_components.th,{children:`Examples`}),_jsx(_components.th,{children:`When to use`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Native tags and labels`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`env`}),`, `,_jsx(_components.code,{children:`aws:Environment`}),`, `,_jsx(_components.code,{children:`project.labels.team`})]}),_jsx(_components.td,{children:`You already tag resources, but names or values differ by provider`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Standard columns`}),_jsx(_components.td,{children:`Provider, account, service, region, namespace`}),_jsx(_components.td,{children:`You need allocation from billing metadata that is always present`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Other dimensions`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`environment`}),`, `,_jsx(_components.code,{children:`team`}),`, `,_jsx(_components.code,{children:`business_unit`})]}),_jsx(_components.td,{children:`You want a hierarchy, such as namespace -> team -> business unit`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Usage metrics`}),_jsx(_components.td,{children:`Database size, API calls, CPU time`}),_jsxs(_components.td,{children:[`You need `,_jsx(_components.a,{href:`/features/tagging/shared-cost-allocation`,children:`shared cost allocation`}),` based on actual consumption`]})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`common-patterns`,children:`Common patterns`}),`\n`,_jsx(Heading,{level:`3`,id:`environment-dimension`,children:`Environment dimension`}),`\n`,_jsxs(_components.p,{children:[`Merge `,_jsx(_components.code,{children:`env`}),`, `,_jsx(_components.code,{children:`environment`}),`, and `,_jsx(_components.code,{children:`k8s_label_env`}),`, then normalize values into `,_jsx(_components.code,{children:`development`}),`, `,_jsx(_components.code,{children:`staging`}),`, and `,_jsx(_components.code,{children:`production`}),`. Use this for environment cost reports and alerts.`]}),`\n`,_jsx(Heading,{level:`3`,id:`team-virtual-dimension`,children:`Team virtual dimension`}),`\n`,_jsxs(_components.p,{children:[`Map accounts, namespaces, services, and project IDs to teams. This helps you allocate untagged resources and create team scopes in `,_jsx(_components.a,{href:`/features/teams`,children:`Teams`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`allocation-hierarchy`,children:`Allocation hierarchy`}),`\n`,_jsx(_components.p,{children:`Build one dimension on top of another. For example:`}),`\n`,_jsx(Mermaid,{chart:`graph LR\n A[Kubernetes namespace] --> B[Team]\n B --> C[Business unit]\n C --> D[P\u0026L line]`}),`\n`,_jsx(_components.p,{children:`When the team mapping changes, every dashboard, alert, and report that uses the downstream dimensions updates after reprocessing.`}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next Steps`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Tag \u0026 Allocate overview`,icon:`tags`,href:`/features/tagging`,children:_jsx(_components.p,{children:`See how dimensions and shared cost allocation fit together`})}),_jsx(Card,{title:`Shared Cost Allocation`,icon:`chart-pie`,href:`/features/tagging/shared-cost-allocation`,children:_jsx(_components.p,{children:`Split shared infrastructure costs with usage metrics`})}),_jsx(Card,{title:`Enrichments (beta)`,icon:`file-code`,href:`/features/tagging/enrichments`,children:_jsx(_components.p,{children:`Publish lookup files from git, including a dynamic split`})}),_jsx(Card,{title:`Explorer`,icon:`magnifying-glass`,href:`/features/cost-explorer`,children:_jsx(_components.p,{children:`Use dimensions to filter and group cost data`})}),_jsx(Card,{title:`Automated Environment Visibility`,icon:`eye`,href:`/use-cases/automated_env_allocation/visibility`,children:_jsx(_components.p,{children:`Walk through an environment dimension example`})}),_jsx(Card,{title:`Explore allocation with AI (MCP)`,icon:`robot`,href:`/features/mcp#virtual-dimensions`,children:_jsx(_components.p,{children:`Explore your spend and build virtual dimensions from chat`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Dimensions","sidebarTitle":"Dimensions","description":"Create cloud cost allocation dimensions that merge native AWS, GCP, and Azure tags, normalize values, and define rule-based virtual dimensions for team, product, or environment reporting.","href":"/features/tagging/dimensions"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"Key terms used in this article","slug":"key-terms-used-in-this-article","depth":2,"children":[]},{"title":"Create a dimension from native tags and labels","slug":"create-a-dimension-from-native-tags-and-labels","depth":2,"children":[]},{"title":"Create a virtual dimension from rules","slug":"create-a-virtual-dimension-from-rules","depth":2,"children":[]},{"title":"Explore and build allocation with your AI assistant","slug":"explore-and-build-allocation-with-your-ai-assistant","depth":2,"children":[]},{"title":"Reallocate shared cost with a usage metric","slug":"reallocate-shared-cost-with-a-usage-metric","depth":2,"children":[]},{"title":"Dimension sources","slug":"dimension-sources","depth":2,"children":[]},{"title":"Common patterns","slug":"common-patterns","depth":2,"children":[{"title":"Environment dimension","slug":"environment-dimension","depth":3,"children":[]},{"title":"Team virtual dimension","slug":"team-virtual-dimension","depth":3,"children":[]},{"title":"Allocation hierarchy","slug":"allocation-hierarchy","depth":3,"children":[]}]},{"title":"Next Steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"costory","siteName":"Costory Documentation","title":"Dimensions - Costory Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-12T07:06:41.097Z","gitLastModified":"2026-10-12T07:05:55.000Z","originalFileLocation":"features/tagging/dimensions.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"light\";if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Create cloud cost allocation dimensions that merge native AWS, GCP, and Azure tags, normalize values, and define rule-based virtual dimensions for team, product, or environment reporting.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Costory Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/svg+xml\" sizes=\"180x180\" href=\"https://mintcdn.com/costory/stODLWETeKeyz7ed/favicon-new.svg?fit=max\u0026amp;auto=format\u0026amp;n=stODLWETeKeyz7ed\u0026amp;q=85\u0026amp;s=334ff5307103e4ffc0473bb6e1b9b56c\">\u003clink data-mint-head rel=\"icon\" type=\"image/svg+xml\" sizes=\"32x32\" href=\"https://mintcdn.com/costory/stODLWETeKeyz7ed/favicon-new.svg?fit=max\u0026amp;auto=format\u0026amp;n=stODLWETeKeyz7ed\u0026amp;q=85\u0026amp;s=334ff5307103e4ffc0473bb6e1b9b56c\">\u003clink data-mint-head rel=\"icon\" type=\"image/svg+xml\" sizes=\"16x16\" href=\"https://mintcdn.com/costory/stODLWETeKeyz7ed/favicon-new.svg?fit=max\u0026amp;auto=format\u0026amp;n=stODLWETeKeyz7ed\u0026amp;q=85\u0026amp;s=334ff5307103e4ffc0473bb6e1b9b56c\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/svg+xml\" href=\"https://mintcdn.com/costory/stODLWETeKeyz7ed/favicon-new.svg?fit=max\u0026amp;auto=format\u0026amp;n=stODLWETeKeyz7ed\u0026amp;q=85\u0026amp;s=334ff5307103e4ffc0473bb6e1b9b56c\">\u003cmeta data-mint-head property=\"og:title\" content=\"Dimensions - Costory Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Create cloud cost allocation dimensions that merge native AWS, GCP, and Azure tags, normalize values, and define rule-based virtual dimensions for team, product, or environment reporting.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Costory Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.costory.io/features/tagging/dimensions\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://costory.mintlify.site/_mintlify/api/og/v2?division=Tag+%26+Allocate\u0026amp;title=Dimensions\u0026amp;description=Create+cloud+cost+allocation+dimensions+that+merge+native+AWS%2C+GCP%2C+and+Azure+tags%2C+normalize+values%2C+and+define+rule-based+virtual+dimensions+for+team%2C+product\u0026amp;theme=1281d3dcbd6f73a9ab3b217e\u0026amp;signature=d31101294bee3a15ae5db3b71dba462c2b53585747a96648b8e47bbe76214918\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Dimensions - Costory Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Create cloud cost allocation dimensions that merge native AWS, GCP, and Azure tags, normalize values, and define rule-based virtual dimensions for team, product, or environment reporting.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://costory.mintlify.site/_mintlify/api/og/v2?division=Tag+%26+Allocate\u0026amp;title=Dimensions\u0026amp;description=Create+cloud+cost+allocation+dimensions+that+merge+native+AWS%2C+GCP%2C+and+Azure+tags%2C+normalize+values%2C+and+define+rule-based+virtual+dimensions+for+team%2C+product\u0026amp;theme=1281d3dcbd6f73a9ab3b217e\u0026amp;signature=d31101294bee3a15ae5db3b71dba462c2b53585747a96648b8e47bbe76214918\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"https://mintlify.s3.us-west-1.amazonaws.com/costory/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Costory Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1D3C93\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.costory.io/features/tagging/dimensions\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/features/tagging/dimensions.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.costory.io/#organization\",\"name\":\"Costory Documentation\",\"url\":\"https://docs.costory.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/costory/jdghijjvsrOsYiTC/logo/light.png?fit=max\u0026auto=format\u0026n=jdghijjvsrOsYiTC\u0026q=85\u0026s=dee63acdba91bf952855557cc5c5ec16\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.costory.io#website\",\"name\":\"Costory Documentation\",\"url\":\"https://docs.costory.io\",\"publisher\":{\"@id\":\"https://docs.costory.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.costory.io/features/tagging/dimensions#webpage\",\"url\":\"https://docs.costory.io/features/tagging/dimensions\",\"name\":\"Dimensions\",\"description\":\"Create cloud cost allocation dimensions that merge native AWS, GCP, and Azure tags, normalize values, and define rule-based virtual dimensions for team, product, or environment reporting.\",\"dateModified\":\"2026-10-12T07:05:55.000Z\",\"isPartOf\":{\"@id\":\"https://docs.costory.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.costory.io/features/tagging/dimensions#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.costory.io/features/tagging/dimensions#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Tag \u0026 Allocate\",\"item\":\"https://docs.costory.io/features/tagging\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dimensions\",\"item\":\"https://docs.costory.io/features/tagging/dimensions\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.costory.io/features/tagging/dimensions#article\",\"headline\":\"Dimensions\",\"name\":\"Dimensions\",\"description\":\"Create cloud cost allocation dimensions that merge native AWS, GCP, and Azure tags, normalize values, and define rule-based virtual dimensions for team, product, or environment reporting.\",\"url\":\"https://docs.costory.io/features/tagging/dimensions\",\"mainEntityOfPage\":{\"@id\":\"https://docs.costory.io/features/tagging/dimensions#webpage\"},\"dateModified\":\"2026-10-12T07:05:55.000Z\",\"publisher\":{\"@id\":\"https://docs.costory.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.costory.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Costory Documentation\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Costory Documentation\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/features/tagging/dimensions.md","siteName":"Costory Documentation","nav":{"global":null,"tabs":[{"tab":"Documentation","icon":"book","groups":[{"group":"Get Started","pages":[{"title":"Welcome to Costory","href":"/get-started/welcome"},{"title":"Quickstart: How to set up automated cloud cost reporting in 30 minutes","sidebarTitle":"Quickstart: Automate your cloud cost reporting","href":"/get-started/quickstart"},{"title":"Plans and fair use","icon":"tags","href":"/get-started/plans"}]},{"group":"Setup","pages":[{"group":"Billing Data","root":{"title":"Billing Data","href":"/setup/billing"},"pages":[{"title":"Aiven Billing Setup","href":"/setup/billing/aiven"},{"title":"Anthropic Billing Setup","href":"/setup/billing/anthropic"},{"title":"AWS Billing Setup","href":"/setup/billing/aws"},{"title":"Azure Billing Setup","href":"/setup/billing/azure"},{"title":"BytePlus Billing Setup","sidebarTitle":"BytePlus","href":"/setup/billing/byteplus"},{"title":"ClickHouse Billing Setup","href":"/setup/billing/clickhouse"},{"title":"Cloudflare Billing Setup","href":"/setup/billing/cloudflare"},{"title":"Confluent Billing Setup","href":"/setup/billing/confluent"},{"title":"Cursor Billing Setup","href":"/setup/billing/cursor"},{"title":"Databricks Billing Setup","sidebarTitle":"Databricks","href":"/setup/billing/databricks"},{"title":"Custom Billing Format (FOCUS) in BigQuery","href":"/setup/billing/focus"},{"title":"Datadog Billing Setup","href":"/setup/billing/datadog"},{"title":"Elastic Cloud Billing Setup","href":"/setup/billing/elastic-cloud"},{"title":"ElevenLabs Billing Setup","sidebarTitle":"ElevenLabs","href":"/setup/billing/elevenlabs"},{"title":"GCP Billing Setup","href":"/setup/billing/gcp"},{"title":"GCP CUD Metadata","href":"/setup/billing/gcp-cud-metadata"},{"title":"Kling AI Billing Setup","sidebarTitle":"Kling AI","href":"/setup/billing/kling-ai"},{"title":"OpenAI Billing Setup","href":"/setup/billing/openai"},{"title":"OpenRouter Billing Setup","sidebarTitle":"OpenRouter","href":"/setup/billing/openrouter"},{"title":"Oracle Cloud Infrastructure Billing Setup","sidebarTitle":"Oracle Cloud","href":"/setup/billing/oci"},{"title":"Scaleway Billing Setup","href":"/setup/billing/scaleway"},{"title":"Snowflake Billing Setup","href":"/setup/billing/snowflake"}]},{"group":"Metrics Correlation","root":{"title":"Correlate your costs with technical or business metrics","sidebarTitle":"Metrics Correlation","href":"/setup/usage-metrics"},"pages":[{"title":"Amplitude","href":"/setup/usage-metrics/amplitude"},{"title":"AWS CloudWatch","href":"/setup/usage-metrics/aws-cloudwatch"},{"title":"BigQuery","href":"/setup/usage-metrics/bigquery"},{"title":"BigQuery jobs","sidebarTitle":"BigQuery jobs (beta)","href":"/setup/usage-metrics/bigquery-jobs"},{"title":"GCP Cloud Monitoring","sidebarTitle":"Cloud Monitoring","href":"/setup/usage-metrics/gcp-cloud-monitoring"},{"title":"Custom Metrics Push","sidebarTitle":"Custom metrics","href":"/setup/usage-metrics/custom-metrics-push"},{"title":"Datadog","href":"/setup/usage-metrics/datadog"},{"title":"Datadog CI Visibility","href":"/setup/usage-metrics/datadog-ci"},{"title":"GCS Inventory (Parquet)","href":"/setup/usage-metrics/gcs-inventory"},{"title":"Google Sheets","href":"/setup/usage-metrics/google-sheet"},{"title":"S3 metrics","href":"/setup/usage-metrics/s3-parquet"},{"title":"Snowflake Metrics","href":"/setup/usage-metrics/snowflake"},{"title":"Tsuga","href":"/setup/usage-metrics/tsuga"}]},{"group":"Data Exports","pages":[{"title":"BigQuery Data Exports","sidebarTitle":"BigQuery exports","href":"/setup/destinations/bigquery"}]},{"group":"Events","root":{"title":"Connect Engineering Events to Costory (GitHub, CI/CD, Custom API)","sidebarTitle":"Events","href":"/setup/events"},"pages":[{"title":"Connect GitHub Events","href":"/setup/events/github"},{"title":"Send Events from CI/CD Pipelines","href":"/setup/events/ci-cd"},{"title":"Send Custom Events via API","href":"/setup/events/custom-api"},{"title":"Provider Events","href":"/setup/events/provider"}]},{"group":"Collaboration","pages":[{"title":"Slack","href":"/setup/collaboration/slack"},{"title":"Microsoft Teams","href":"/setup/collaboration/teams"},{"title":"Email","href":"/setup/collaboration/email"}]},{"title":"FinOps MCP: Cloud Cost Automation for AI Assistants and Slack","href":"/features/mcp"}]},{"group":"Understand","pages":[{"title":"Explorer","sidebarTitle":"Explorer","href":"/features/cost-explorer"},{"group":"Dashboards","root":{"title":"Cloud Cost Dashboards","sidebarTitle":"Dashboards","href":"/features/dashboards"},"pages":[{"title":"Create and Organize Dashboards","sidebarTitle":"Create dashboards","href":"/features/dashboards/create-dashboard"},{"title":"Dashboard Templates","sidebarTitle":"Templates","href":"/features/dashboards/templates"},{"title":"Dashboard Widgets and Chart Types","sidebarTitle":"Widgets and charts","href":"/features/dashboards/widgets"}]},{"title":"Events","sidebarTitle":"Events","href":"/features/events"},{"title":"Unit Economics","sidebarTitle":"Unit Economics","href":"/features/unit-economics"}]},{"group":"Tag \u0026 Allocate","expanded":true,"pages":[{"title":"Tag \u0026 Allocate Cloud Costs","sidebarTitle":"Overview","description":"FinOps cost allocation made simple. Create dimensions, allocate untagged resources, and split shared costs across AWS, GCP, and Azure without touching your cloud console.","href":"/features/tagging"},{"title":"Dimensions","sidebarTitle":"Dimensions","href":"/features/tagging/dimensions"},{"title":"Split Shared Infrastructure Costs Across Teams","sidebarTitle":"Shared Cost Allocation","description":"Allocate shared cloud infrastructure costs like Cloud SQL, RDS, or network to teams based on actual usage metrics from any External metric source: Datadog, Datadog CI Visibility, Amplitude, BigQuery, Google Sheets, Tsuga, CloudWatch, S3, Snowflake, or Custom metrics.","href":"/features/tagging/shared-cost-allocation"},{"title":"Enrichments","sidebarTitle":"Enrichments","href":"/features/tagging/enrichments"}]},{"group":"Share","pages":[{"title":"Share cost views","sidebarTitle":"Sharing","href":"/features/sharing"},{"title":"Cost Reports","sidebarTitle":"Cost Reports","href":"/v2/Automate/reports"},{"title":"Cost Digest: automate your FinOps reporting","sidebarTitle":"Digest","href":"/features/digest"},{"title":"Alerts","sidebarTitle":"Alerts","href":"/features/alerts"}]},{"group":"Teams","pages":[{"title":"Teams","sidebarTitle":"Teams","href":"/features/teams"},{"title":"Cloud Cost Budgets and Budget Alerts","sidebarTitle":"Budgets","href":"/features/budgets"}]},{"group":"Technical Documentation","pages":[{"group":"Cost Metrics","root":{"title":"Cost Metrics","href":"/docs/cost-metrics"},"pages":[{"title":"Contracted Cost vs Billed Cost: Savings Plan discount sharing issues","sidebarTitle":"Savings Plan discount sharing issues","href":"/docs/savings-plan-cost-fluctuation"},{"title":"Cloud Cost Currency Conversion","href":"/docs/currency-conversion"}]},{"title":"Standard Columns","href":"/docs/standard-columns"},{"title":"Billing Data Refresh Schedule and Cloud Cost Data Freshness","href":"/docs/data-refresh"},{"title":"Settings","sidebarTitle":"Settings","href":"/get-started/settings"},{"group":"Security","root":{"title":"Security","href":"/docs/security"},"pages":[{"title":"Identity and Access","href":"/docs/sso-access-control"},{"title":"Subprocessors","href":"/docs/subprocessors"}]}]},{"group":"Glossary","pages":[{"title":"Glossary","href":"/docs/glossary"}]}]},{"tab":"Use Cases","icon":"lightbulb","pages":[{"title":"Use Cases","href":"/use-cases/overview"}]},{"tab":"API Reference","icon":"code","pages":[{"title":"API Reference","href":"/api-reference/overview"}]},{"tab":"Changelog","icon":"clock-rotate-left","pages":[{"title":"Changelog","href":"/changelog"}]},{"tab":"FinOps Memes","icon":"face-laugh-squint","pages":[{"title":"FinOps Memes","href":"/docs/finops-memes"}]}]},"basePath":"","title":"Dimensions - Costory Documentation","buildId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","deploymentId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-u3J1-UOn.js","DynamicMarkdown-B-f2cqXQ.js","zoom-image-lightbox-DTFzvaXJ.js","lightbox-handle-r17bVUz3.js"]}