Compound Aggregations allow you to derive numerical measures from usage data by applying a calculation to one or more simple Aggregations. The calculation can also reference Custom Fields. You can then use these calculated measures as pricing metrics to set up usage-based pricing Plans for your Products. In this way, Compound Aggregations can help you to implement a wide range of pricing use cases for your Products.This topic starts off by explaining the difference between Product-specific and Global Compound Aggregations:
The topic then illustrates the value of using Compound Aggregations with a usage-based pricing example, and explains how to create a Compound Aggregation to apply a calculation to simple Aggregations to satisfy the example pricing use case:
Creating Simple Aggregations? We strongly recommend that you create some simple Aggregations and are familiar with their purpose and their configuration as helpful preparation to creating and using Compound Aggregations. See Reviewing Aggregation Options.
Referencing Fields in Compound Aggregation Calculations? For details of the different types of fields you can reference in your calculations and supported syntax, see Working with Compound Aggregation Calculations.
Compound Aggregations based on Segmented Aggregations? You can use Compound Aggregations that reference Segmented Aggregations to price Plans. However, the segments available to the Compound Aggregation for pricing a Plan will depend on whether the Compound Aggregation references a single or multiple Segmented Aggregations. See Pricing with Compound Aggregations Based on Segmented Aggregations for details.
Tip: Compound Aggregations - the “Complexity Crunchers” - see more! By exploiting the powerful m3ter Calculation Engine, there’s virtually no limit to the flexibility Compound Aggregations give you for defining your precise pricing metrics. To see some worked examples of Compound Aggregations that illustrate how Compound Aggregations can quickly help you resolve complex UBP use cases, please review the Compound Aggregations - Examples topic.
You can create Product Compound Aggregations, which belong to a specific Product, or Global Compound Aggregations, which are not tied to a specific Product:
You can use a Product Compound Aggregation to price only those Plans that belong to the same Product.
You can use a Global Compound Aggregation to price Plans belonging to any Product.
Note: Referencing Simple Aggregations in Product/Global Compound Aggregation Calculations! The simple Aggregations you can reference in the calculation for a Product-specific Compound Aggregation or a Global Compound Aggregation are the same - for details, see Working with Compound Aggregation Calculations.
Suppose you provide a service which allows your customers to develop and run software applications and host these applications on your service. You intend to charge customers for this application build-and-host service by total number of requests made to all of their applications being hosted in any given billing period. However, you want to offer customers a sign-up bonus for their first year of using your service, where the first 100 requests made to an application they host with you are free for each billing period - for example, if a customer has 3 applications hosted with you during the first billing period, they are due 300 free requests for the first Bill.To set things up in m3ter to implement usage-based pricing for this type of case, you can use a Compound Aggregation:
First, create and configure a Meter which will record the number of applications hosted. You can send an event into m3ter each time one of your customers creates and loads an application into your service. Use this Meter field to create a simple Aggregation to give a Maximum value measure for hosted applications. Give this simple Aggregation a code of: unique_apps. (Note that for the example, we suppose that under the terms of the sign-up bonus if a customer reaches 5 applications in any given billing period, they are granted 500 free requests even if 2 of those applications are disabled before the end of the billing period.)
Second, create and configure a Meter to record the number of requests made by applications. You can then create a second simple Aggregation to Sum this data. Give this simple Aggregation a Code of: num_requests.
Third, create a Compound Aggregation that applies a calculation to the two simple Aggregations to give a number for chargeable requests:
When you come to price up your Product Plans, you can now use this Compound Aggregation.
Important! Compound Aggregation Calculations Use Base Values of Simple Aggregations. If a simple Aggregation referenced by a Compound Aggregation has a Quantity per unit defined for pricing and billing purposes or a Rounding defined, then these will not be factored into the value used by the calculation. For example in this case, if the num_requests simple Aggregation referenced has a base value of 100 and has Quantity per unit set at 10, the Compound Aggregation calculation will use the base value of 100not 10.
Tip: Calculation Expression - Referencing simple Aggregations and Supported Syntax? For details of how to reference the values of simple Aggregations in calculation expressions and the supported syntax, see Working with Compound Aggregation Calculations.
This section explains how to create a new Product Compound Aggregation for the example use case outlined above, and assumes the two simple Aggregations used have already been created for the same Product.To create a Compound Aggregation:
Select Metering>Compound aggregations. The Compound aggregations page opens.
In the Product drop-down, select the Product for which you want to create the new Compound Aggregation. The Compound aggregations page adjusts and lists:
Any existing Compound Aggregations created for the selected Product.
Any Global Compound Aggregations, which are clearly labeled.
Tip: Global Compound Aggregation? If you want to create a Global Compound Aggregation, which is not tied to a specific Product and which you can then use to price any of your Products, remove the selection - (Global) will then show for Product and the Compound Aggregations page will adjust to show only existing Global Compound Aggregations. When you select to Create Compound Aggregation, on the Create page the Product field will also then show (Global).
Select Create compound aggregation. The Compound aggregations>Create page opens.
Enter the Compound aggregation details:
Name. (Required) For this example, enter a descriptive name, such as Requests minus free.
Code. (Required) Unique identifier. For this example, we’ve used requests***_***minus_free.
Accounting product. Use the drop-down to select a Product. (Optional)
For accounting purposes, you can use this to link to a specific Product any usage line items on Bills that result from pricing a Plan using this Aggregation:
If you’ve also defined an Accounting product for a Pricing that uses this Aggregation, then the Pricing Accounting product takes precedence and is used.
If no Accounting product is defined for a Pricing and you omit an Accounting product for the Aggregation, then the Product the Plan belongs to is used.
Enter the Compound aggregation settings:
Calculation. First select Advanced if you want to enter a specific calculation. The form adjusts to show a text entry box. Enter the expression for the required calculation referencing simple Aggregations:
Calculations Use Base Values of Simple Aggregations. If a simple Aggregation referenced by a Compound Aggregation has a Quantity per unit defined for pricing and billing purposes or a Rounding defined, then these will not be factored into the value used by the calculation. For example in this case, if the num_requests simple Aggregation referenced has a base value of 100 and has Quantity per unit set at 10, the Compound Aggregation calculation will use the base value of 100not 10.
Referencing Custom Fields with the same name in Calculations. If you intend to reference a Custom Field on an Account Plan in a Calculation for a Compound Aggregation used to Price Plans attached to an Account for billing, please ensure to use different names for any Custom Fields if there is more than one Account Plan attached to the Account. For example, you have two Account Plans attached to an Account and the Calculation used by the Compound Aggregation is designed to use a value from a Custom Field on one of the Account Plans. However, you have created Custom Fields with the same name but different values on each of the two Account Plans. The Calculation is then be unable to distinguish which value to use and billing charges will be unpredictable.
Notes and Tips:
Info? You can select the Info link to open the m3ter Calculation Engine page in a new tab, which gives details of supported operators, variables, and functions.
Add Aggregations? If you want to create a Compound Aggregation by merely adding two or more simple Aggregations, you can leave the selection at the default Add Aggregations. You can then use a drop-down to select the simple Aggregations you want to add together. Note that Add Aggregations is searchable - if your start to type the name of a simple Aggregation, the list of available simple Aggregations is filtered.
Unit. For this example, enter Requests. This will be used as a label for billing to indicate to your customers what they are being charged for.
Quantity per unit. Enter the quantity by which you want to charge for the measured value. For example, if you want to charge your customers on a per-500 units used basis, enter 500. For the current example, enter 1.
Rounding. Specifies how you want m3ter to deal with non-integer, that is fractional number, Aggregation values. See Reviewing Aggregation Options for example. Four options:
None. Default
Down
Up
Nearest. Rounds up to the nearest half: 5.1 is rounded to 5; 5.5 is rounded to 6.
Note: Also used in conjunction with Quantity per unit setting. Rounds the number of units after the Quantity per unit has been applied. See Reviewing Aggregation Options for example.
Evaluate null aggregations. Optional setting - enable this if you want to allow null values from the simple Aggregations referenced in the Compound Aggregation to be passed in. Simple Aggregations based on Meter Target Fields where no usage data is available will have null values. Default is to have this disabled:
Tip: Set Default Values of Simple Aggregations to 0. If any of the simple Aggregations you reference in your Compound Aggregation calculation might have null values, you must set their Default Value to 0. This ensures that any null values passed into the Compound Aggregation are passed in correctly with value = 0.
Important! Compound Aggregation Custom Fields not supported for calculations. Creating Custom Fields for Compound Aggregations is intended to support financial reporting use cases. Although you can define Custom Fields at both the Organizational level and individual Compound Aggregation level, they are not supported for use in Derived Field and Compound Aggregation calculations.
Select Create compound aggregation. The Compound aggregation details page opens:
Any new Compound Aggregations you’ve created become immediately available for pricing up your Product Plans. See Pricing Plans and Plan Templates.
Important: Create Simple Aggregations First! If you try to create a Compound Aggregation and you enter a Calculation that references a simple Aggregation that you have not yet created for your Product, you won’t be able to save the Compound Aggregation and an error message will show.
If you want to edit a Compound Aggregation’s details, select the Edit button, make your changes, and click Update.
If you want to remove a Compound Aggregation, return to the Compound Aggregations page and select the Delete button for the Compound Aggregation:
A confirmation popup opens.
Select Yes to confirm the delete action.
Tip: Compound Aggregation Metadata? If you scroll down the Compound aggregation details page, you can review Compound Aggregation metadata - see Reviewing Aggregation Details.
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"m3ter Documentation","description":"Guides, learning resources and API reference for integrating with m3ter","colors":{"primary":"#4caf4c","dark":"#449d44"},"logo":{"light":"https://mintcdn.com/m3ter/t6C65JBQiQOFtjBy/images/m3ter-logo-blue-sf.svg?fit=max\u0026auto=format\u0026n=t6C65JBQiQOFtjBy\u0026q=85\u0026s=3928db28c84ec6950e43caf96e635d80","dark":"https://mintcdn.com/m3ter/t6C65JBQiQOFtjBy/images/m3ter-logo-white-sf.svg?fit=max\u0026auto=format\u0026n=t6C65JBQiQOFtjBy\u0026q=85\u0026s=a018cb782e49a2fbdd811276476d0605"},"favicon":"https://mintcdn.com/m3ter/T0RRts393DSUkWFc/favicon.svg?fit=max\u0026auto=format\u0026n=T0RRts393DSUkWFc\u0026q=85\u0026s=9492b54cc98df6775983b287b6f865cd","navbar":{"links":[{"href":"https://m3ter.freshdesk.com","label":"Support"},{"href":"https://console.m3ter.com","label":"Console"}],"primary":{"type":"button","label":"Schedule a demo","href":"https://www.m3ter.com/contact"}},"footer":{"socials":{"linkedin":"https://uk.linkedin.com/company/m3ter","x":"https://x.com/m3terHQ","github":"https://github.com/m3ter-com"},"links":[{"items":[{"label":"Website","href":"https://www.m3ter.com"},{"label":"Legal","href":"https://www.m3ter.com/legal"},{"label":"Security","href":"https://www.m3ter.com/security"},{"label":"Trust Center","href":"https://trust.m3ter.com"}]}]},"fonts":{"family":"Montserrat"},"icons":{"library":"lucide"},"styling":{"eyebrows":"breadcrumbs","latex":false},"integrations":{"ga4":{"measurementId":"G-V9C7TTPRQT"}},"contextual":{"options":["copy","view"],"display":"header"},"thumbnails":{"fonts":{"family":"Montserrat"}},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"m3ter","hasAudioNarration":false,"actualSubdomain":"m3ter","customDomains":["docs.m3ter.com"],"gitSource":{"type":"github","owner":"m3ter-com","repo":"m3ter-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae9a09c36175fbf7124961d","collectionId":"92768e54-2234-4c9f-bb43-903eed567982","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae9a09c36175fbf7124961d"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae9a09c36175fbf7124961d","clientVersion":"0.0.4054","searchFilterCounts":[{"language":"default","tag":"Guides","count":400},{"language":"default","tag":"API Reference","count":393},{"language":"default","tag":"Endpoints","count":387},{"language":"default","tag":"Integrations","count":66},{"language":"default","tag":"m3sh Function Reference","count":66},{"language":"default","tag":"Synthetic functions","count":50},{"language":"default","tag":"m3ter","count":50},{"language":"default","tag":"m3sh","count":43},{"language":"default","tag":"End-Customer Accounts","count":27},{"language":"default","tag":"m3ter Connector for Salesforce","count":24}]},"assistantConfig":{"enableAskAiButton":true,"enableStarterQuestions":false,"enableAskAiSearchBar":false},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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":"sso-setup-deadline-banner","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}],"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"guides/usage-data-aggregations/compound-aggregations","slug":"/guides/usage-data-aggregations/compound-aggregations","pageMetadata":{"title":"Compound Aggregations","description":null,"href":"/guides/usage-data-aggregations/compound-aggregations"},"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`,blockquote:`blockquote`,code:`code`,em:`em`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Heading,OptimizedImage,Tip,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[_jsx(_components.em,{children:`Compound Aggregations`}),` allow you to derive numerical measures from usage data by applying a calculation to one or more simple Aggregations. The calculation can also reference Custom Fields. You can then use these calculated measures as pricing metrics to set up usage-based pricing Plans for your Products. In this way, Compound Aggregations can help you to implement a wide range of pricing use cases for your Products.`]}),`\n`,_jsx(_components.p,{children:`This topic starts off by explaining the difference between Product-specific and Global Compound Aggregations:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/guides/usage-data-aggregations/compound-aggregations#product-vs-global-compound-aggregations`,children:`Product vs. Global Compound Aggregations`})}),`\n`]}),`\n`,_jsx(_components.p,{children:`The topic then illustrates the value of using Compound Aggregations with a usage-based pricing example, and explains how to create a Compound Aggregation to apply a calculation to simple Aggregations to satisfy the example pricing use case:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/guides/usage-data-aggregations/compound-aggregations#example-use-case`,children:`Example Use Case`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/guides/usage-data-aggregations/compound-aggregations#creating-a-compound-aggregation`,children:`Creating a Compound Aggregation`})}),`\n`]}),`\n`,_jsxs(Warning,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Important!`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Creating Simple Aggregations?`}),` We `,_jsx(_components.em,{children:`strongly recommend`}),` that you create some simple Aggregations and are familiar with their purpose and their configuration as helpful preparation to creating and using Compound Aggregations. See `,_jsx(_components.a,{href:`/guides/usage-data-aggregations/reviewing-aggregation-options`,children:`Reviewing Aggregation Options`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Referencing Fields in Compound Aggregation Calculations?`}),` For details of the different types of fields you can reference in your calculations and supported syntax, see `,_jsx(_components.a,{href:`/guides/usage-data-aggregations/compound-aggregation-calculations`,children:`Working with Compound Aggregation Calculations`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Compound Aggregations based on Segmented Aggregations?`}),` You can use Compound Aggregations that reference Segmented Aggregations to price Plans. However, the segments available to the Compound Aggregation for pricing a Plan will depend on whether the Compound Aggregation references a single or multiple Segmented Aggregations. See `,_jsx(_components.a,{href:`/guides/plans-and-pricing/pricing-plans/pricing-plans-using-segmented-aggregations#pricing-with-compound-aggregations-based-on-segmented-aggregations`,children:`Pricing with Compound Aggregations Based on Segmented Aggregations`}),` for details.`]}),`\n`]})]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Tip: Compound Aggregations - the “Complexity Crunchers” - see more!`}),` By exploiting the powerful `,_jsx(_components.a,{href:`/guides/m3ter-calculation-engine`,children:`m3ter Calculation Engine`}),`, there’s virtually no limit to the flexibility Compound Aggregations give you for defining your precise pricing metrics. To see some worked examples of Compound Aggregations that illustrate how Compound Aggregations can quickly help you resolve complex UBP use cases, please review the `,_jsx(_components.a,{href:`/guides/usage-data-aggregations/compound-aggregations-examples`,children:`Compound Aggregations - Examples`}),` topic.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`product-vs-global-compound-aggregations`,children:`Product vs. Global Compound Aggregations`}),`\n`,_jsx(_components.p,{children:`You can create Product Compound Aggregations, which belong to a specific Product, or Global Compound Aggregations, which are not tied to a specific Product:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`You can use a Product Compound Aggregation to price only those Plans that belong to the same Product.`}),`\n`,_jsx(_components.li,{children:`You can use a Global Compound Aggregation to price Plans belonging to any Product.`}),`\n`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Note: Referencing Simple Aggregations in Product/Global Compound Aggregation Calculations!`}),` The simple Aggregations you can reference in the calculation for a Product-specific Compound Aggregation or a Global Compound Aggregation are the same - for details, see `,_jsx(_components.a,{href:`/guides/usage-data-aggregations/compound-aggregation-calculations`,children:`Working with Compound Aggregation Calculations`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`example-use-case`,children:`Example Use Case`}),`\n`,_jsx(_components.p,{children:`Suppose you provide a service which allows your customers to develop and run software applications and host these applications on your service. You intend to charge customers for this application build-and-host service by total number of requests made to all of their applications being hosted in any given billing period. However, you want to offer customers a sign-up bonus for their first year of using your service, where the first 100 requests made to an application they host with you are free for each billing period - for example, if a customer has 3 applications hosted with you during the first billing period, they are due 300 free requests for the first Bill.`}),`\n`,_jsx(_components.p,{children:`To set things up in m3ter to implement usage-based pricing for this type of case, you can use a Compound Aggregation:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`First, create and configure a Meter which will record the number of applications hosted. You can send an event into m3ter each time one of your customers creates and loads an application into your service. Use this Meter field to create a simple Aggregation to give a `,_jsx(_components.strong,{children:`Maximum`}),` value measure for hosted applications. Give this simple Aggregation a code of: `,_jsx(_components.strong,{children:`unique_apps`}),`. (Note that for the example, we suppose that under the terms of the sign-up bonus if a customer reaches 5 applications in any given billing period, they are granted 500 free requests even if 2 of those applications are disabled before the end of the billing period.)`]}),`\n`,_jsxs(_components.li,{children:[`Second, create and configure a Meter to record the number of requests made by applications. You can then create a second simple Aggregation to `,_jsx(_components.strong,{children:`Sum`}),` this data. Give this simple Aggregation a Code of: `,_jsx(_components.strong,{children:`num_requests`}),`.`]}),`\n`,_jsx(_components.li,{children:`Third, create a Compound Aggregation that applies a calculation to the two simple Aggregations to give a number for chargeable requests:`}),`\n`]}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:_jsx(_components.code,{children:`Math.max(0, aggregation.num_requests - (aggregation.unique_apps * 100))`})}),`\n`]}),`\n`,_jsx(_components.p,{children:`When you come to price up your Product Plans, you can now use this Compound Aggregation.`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Important! Compound Aggregation Calculations Use Base Values of Simple Aggregations`}),`. If a simple Aggregation referenced by a Compound Aggregation has a `,_jsx(_components.strong,{children:`Quantity per unit`}),` defined for pricing and billing purposes or a `,_jsx(_components.strong,{children:`Rounding`}),` defined, then these `,_jsx(_components.em,{children:`will not be factored into the value used by the calculation`}),`. For example in this case, if the `,_jsx(_components.code,{children:`num_requests`}),` simple Aggregation referenced has a base value of 100 and has `,_jsx(_components.strong,{children:`Quantity per unit`}),` set at 10, the Compound Aggregation calculation will use the base `,_jsx(_components.em,{children:`value of 100`}),` `,_jsx(_components.em,{children:`not 10`}),`.`]})}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Tip: Calculation Expression - Referencing simple Aggregations and Supported Syntax?`}),` For details of how to reference the values of simple Aggregations in calculation expressions and the supported syntax, see `,_jsx(_components.a,{href:`/guides/usage-data-aggregations/compound-aggregation-calculations`,children:`Working with Compound Aggregation Calculations`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`creating-a-compound-aggregation`,children:`Creating a Compound Aggregation`}),`\n`,_jsxs(_components.p,{children:[`This section explains how to create a new Product Compound Aggregation for the example use case `,_jsx(_components.a,{href:`/guides/usage-data-aggregations/compound-aggregations#example-use-case`,children:`outlined above`}),`, and assumes the two simple Aggregations used have already been created for the same Product.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`To create a Compound Aggregation:`})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Metering>Compound aggregations`}),`. The `,_jsx(_components.strong,{children:`Compound aggregations`}),` page opens.`]}),`\n`,_jsxs(_components.li,{children:[`In the `,_jsx(_components.strong,{children:`Product`}),` drop-down, select the Product for which you want to create the new Compound Aggregation. The `,_jsx(_components.strong,{children:`Compound aggregations`}),` page adjusts and lists:`]}),`\n`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Any existing Compound Aggregations created for the selected Product.`}),`\n`,_jsx(_components.li,{children:`Any Global Compound Aggregations, which are clearly labeled.`}),`\n`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Tip: Global Compound Aggregation?`}),` If you want to create a `,_jsx(_components.em,{children:`Global`}),` Compound Aggregation, which is not tied to a specific Product and which you can then use to price any of your Products, remove the selection - `,_jsx(_components.strong,{children:`(Global)`}),` will then show for `,_jsx(_components.strong,{children:`Product`}),` and the `,_jsx(_components.strong,{children:`Compound Aggregations`}),` page will adjust to show only existing Global Compound Aggregations. When you select to `,_jsx(_components.strong,{children:`Create Compound Aggregation`}),`, on the `,_jsx(_components.strong,{children:`Create`}),` page the `,_jsx(_components.strong,{children:`Product`}),` field will also then show `,_jsx(_components.strong,{children:`(Global)`}),`.`]})}),`\n`,_jsxs(_components.ol,{start:`3`,children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Create compound aggregation`}),`. The `,_jsx(_components.strong,{children:`Compound aggregations>Create`}),` page opens.`]}),`\n`,_jsxs(_components.li,{children:[`Enter the `,_jsx(_components.strong,{children:`Compound aggregation details`}),`:`]}),`\n`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Name`}),`. (`,_jsx(_components.em,{children:`Required`}),`) For this example, enter a descriptive name, such as `,_jsx(_components.strong,{children:`Requests minus free`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Code`}),`. (`,_jsx(_components.em,{children:`Required`}),`) Unique identifier. For this example, we’ve used `,_jsx(_components.strong,{children:`requests`}),`***_***`,_jsx(_components.strong,{children:`minus_free`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Accounting product`}),`. Use the drop-down to select a Product. (`,_jsx(_components.em,{children:`Optional`}),`)`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`For accounting purposes, you can use this to link to a specific Product any usage line items on Bills that result from pricing a Plan using this Aggregation:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`If you’ve also defined an Accounting product for a Pricing that uses this Aggregation, then the `,_jsx(_components.em,{children:`Pricing Accounting product`}),` takes precedence and is used.`]}),`\n`,_jsxs(_components.li,{children:[`If no Accounting product is defined for a Pricing and you omit an Accounting product for the Aggregation, then the `,_jsx(_components.em,{children:`Product the Plan belongs`}),` to is used.`]}),`\n`]}),`\n`]}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1747128212-compoundaggs3a.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=6f12ac38f4de31f3bb87c86a2dc058a0`,style:{maxWidth:`min(450px, 100%)`},\"data-og-width\":`647`,width:`647`,\"data-og-height\":`531`,height:`531`,\"data-path\":`images/1747128212-compoundaggs3a.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1747128212-compoundaggs3a.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=7c69912aab74664be20e62f2d010a887 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1747128212-compoundaggs3a.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=ee6a29f7b94abd30f9ca81ecc6b17179 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1747128212-compoundaggs3a.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=6732eb0f63c0d1eb6206e392fb9e79d4 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1747128212-compoundaggs3a.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=416a46b662b0121cdba7fae2fb87f9c7 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1747128212-compoundaggs3a.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=4f0b2b81b1a273a6e3391d6cbef3dc0f 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1747128212-compoundaggs3a.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=130d40401788f68a7c24ea670bc21978 2500w`}),`\n`,_jsxs(_components.ol,{start:`5`,children:[`\n`,_jsxs(_components.li,{children:[`Enter the `,_jsx(_components.strong,{children:`Compound aggregation settings`}),`:`]}),`\n`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Calculation`}),`. First select `,_jsx(_components.strong,{children:`Advanced`}),` if you want to enter a specific calculation. The form adjusts to show a text entry box. Enter the expression for the required calculation referencing simple Aggregations:`]}),`\n`]}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:_jsx(_components.code,{children:`Math.max(0, aggregation.num_requests - (aggregation.unique_apps * 100))`})}),`\n`]}),`\n`,_jsxs(Warning,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Important! Compound Aggregation Calculations:`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Calculations Use Base Values of Simple Aggregations`}),`. If a simple Aggregation referenced by a Compound Aggregation has a `,_jsx(_components.strong,{children:`Quantity per unit`}),` defined for pricing and billing purposes or a `,_jsx(_components.strong,{children:`Rounding`}),` defined, then these `,_jsx(_components.em,{children:`will not be factored into the value used by the calculation`}),`. For example in this case, if the `,_jsx(_components.code,{children:`num_requests`}),` simple Aggregation referenced has a base value of 100 and has `,_jsx(_components.strong,{children:`Quantity per unit`}),` set at 10, the Compound Aggregation calculation will use the base `,_jsx(_components.em,{children:`value of 100`}),` `,_jsx(_components.em,{children:`not 10`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Referencing Custom Fields with the same name in Calculations`}),`. If you intend to reference a Custom Field on an Account Plan in a Calculation for a Compound Aggregation used to Price Plans attached to an Account for billing, please ensure to use `,_jsx(_components.em,{children:`different names for any Custom Fields`}),` if there is more than one Account Plan attached to the Account. For example, you have two Account Plans attached to an Account and the Calculation used by the Compound Aggregation is designed to use a value from a Custom Field on one of the Account Plans. However, you have created Custom Fields with the `,_jsx(_components.em,{children:`same name but different values`}),` on each of the two Account Plans. The Calculation is then be unable to distinguish which value to use and billing charges will be unpredictable.`]}),`\n`]})]}),`\n`,_jsxs(Tip,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Notes and Tips:`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Info?`}),` You can select the `,_jsx(_components.strong,{children:`Info`}),` link to open the m3ter Calculation Engine page in a new tab, which gives details of supported operators, variables, and functions.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Add Aggregations?`}),` If you want to create a Compound Aggregation by merely adding two or more simple Aggregations, you can leave the selection at the default `,_jsx(_components.strong,{children:`Add Aggregations`}),`. You can then use a drop-down to select the simple Aggregations you want to add together. Note that `,_jsx(_components.strong,{children:`Add Aggregations`}),` is searchable - if your start to type the name of a simple Aggregation, the list of available simple Aggregations is filtered.`]}),`\n`]})]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Unit`}),`. For this example, enter `,_jsx(_components.strong,{children:`Requests`}),`. This will be used as a label for billing to indicate to your customers what they are being charged for.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Quantity per unit`}),`. Enter the quantity by which you want to charge for the measured value. For example, if you want to charge your customers on a per-500 units used basis, enter `,_jsx(_components.strong,{children:`500`}),`. For the current example, enter `,_jsx(_components.strong,{children:`1`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Rounding`}),`. Specifies how you want m3ter to deal with non-integer, that is fractional number, Aggregation values. See `,_jsx(_components.a,{href:`/guides/usage-data-aggregations/reviewing-aggregation-options`,children:`Reviewing Aggregation Options`}),` for example. Four options:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`None`}),`. Default`]}),`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`Down`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`Up`})}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Nearest`}),`. Rounds up to the nearest half: 5.1 is rounded to 5; 5.5 is rounded to 6.`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Note`}),`: Also used in conjunction with `,_jsx(_components.strong,{children:`Quantity per unit`}),` setting. Rounds the number of units after the `,_jsx(_components.strong,{children:`Quantity per unit`}),` has been applied. See `,_jsx(_components.a,{href:`/guides/usage-data-aggregations/reviewing-aggregation-options`,children:`Reviewing Aggregation Options`}),` for example.`]}),`\n`]}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Evaluate null aggregations`}),`. Optional setting - enable this if you want to allow null values from the simple Aggregations referenced in the Compound Aggregation to be passed in. Simple Aggregations based on Meter Target Fields where no usage data is available will have null values. Default is to have this disabled:`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/SdDv9oj-Va1Koc1o/images/1761643358-compoundaggs5b.png?fit=max\u0026auto=format\u0026n=SdDv9oj-Va1Koc1o\u0026q=85\u0026s=648f270f166b7c248344871121cd4063`,style:{maxWidth:`min(450px, 100%)`},\"data-og-width\":`648`,width:`648`,\"data-og-height\":`706`,height:`706`,\"data-path\":`images/1761643358-compoundaggs5b.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/SdDv9oj-Va1Koc1o/images/1761643358-compoundaggs5b.png?w=280\u0026fit=max\u0026auto=format\u0026n=SdDv9oj-Va1Koc1o\u0026q=85\u0026s=5ebb2f80d8c76fa9004955c9e9b154b8 280w, https://mintcdn.com/m3ter/SdDv9oj-Va1Koc1o/images/1761643358-compoundaggs5b.png?w=560\u0026fit=max\u0026auto=format\u0026n=SdDv9oj-Va1Koc1o\u0026q=85\u0026s=fae394d1852a7e67fbe39ccf664e8dd2 560w, https://mintcdn.com/m3ter/SdDv9oj-Va1Koc1o/images/1761643358-compoundaggs5b.png?w=840\u0026fit=max\u0026auto=format\u0026n=SdDv9oj-Va1Koc1o\u0026q=85\u0026s=db00ff2e522a7de099fec91bfca479fb 840w, https://mintcdn.com/m3ter/SdDv9oj-Va1Koc1o/images/1761643358-compoundaggs5b.png?w=1100\u0026fit=max\u0026auto=format\u0026n=SdDv9oj-Va1Koc1o\u0026q=85\u0026s=763e33a612a9fac3c1397086ccdc0bf0 1100w, https://mintcdn.com/m3ter/SdDv9oj-Va1Koc1o/images/1761643358-compoundaggs5b.png?w=1650\u0026fit=max\u0026auto=format\u0026n=SdDv9oj-Va1Koc1o\u0026q=85\u0026s=6281c8c8f4838302020e95091b3d6c64 1650w, https://mintcdn.com/m3ter/SdDv9oj-Va1Koc1o/images/1761643358-compoundaggs5b.png?w=2500\u0026fit=max\u0026auto=format\u0026n=SdDv9oj-Va1Koc1o\u0026q=85\u0026s=55c8d0669b9cd07bc93b3cc1a565c88d 2500w`}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Tip: Set Default Values of Simple Aggregations to 0`}),`. If any of the simple Aggregations you reference in your Compound Aggregation calculation might have null values, you must set their `,_jsx(_components.strong,{children:`Default Value`}),` to `,_jsx(_components.strong,{children:`0`}),`. This ensures that any null values passed into the Compound Aggregation are passed in correctly with value = 0.`]})}),`\n`,_jsxs(_components.ol,{start:`6`,children:[`\n`,_jsxs(_components.li,{children:[`Add any required `,_jsx(_components.strong,{children:`Custom fields`}),` to the Compound Aggregation. For more on Custom fields, see `,_jsx(_components.a,{href:`/guides/organization-and-access-management/viewing-and-editing-organization/adding-and-editing-custom-fields`,children:`Adding and Editing Custom Fields`}),`. We strongly recommend reviewing `,_jsx(_components.a,{href:`/guides/creating-and-managing-products/working-with-custom-fields`,children:`Working with Custom Fields`}),` before you create and use Custom fields.`]}),`\n`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Important! Compound Aggregation Custom Fields not supported for calculations`}),`. Creating Custom Fields for Compound Aggregations is intended to support financial reporting use cases. Although you can define Custom Fields at both the Organizational level and individual Compound Aggregation level, they are not supported for use in Derived Field and Compound Aggregation calculations.`]})}),`\n`,_jsxs(_components.ol,{start:`7`,children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Create compound aggregation`}),`. The `,_jsx(_components.strong,{children:`Compound aggregation details`}),` page opens:`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/M5AlNqebQO4gKtmW/images/CreateAgg81.png?fit=max\u0026auto=format\u0026n=M5AlNqebQO4gKtmW\u0026q=85\u0026s=2188d4c9777005f2a92bd0c061cdc820`,alt:`Create Agg81`,\"data-og-width\":`1173`,width:`1173`,\"data-og-height\":`432`,height:`432`,\"data-path\":`images/CreateAgg81.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/M5AlNqebQO4gKtmW/images/CreateAgg81.png?w=280\u0026fit=max\u0026auto=format\u0026n=M5AlNqebQO4gKtmW\u0026q=85\u0026s=753a2f8dc2d14e30cec4d57f1b4cda2b 280w, https://mintcdn.com/m3ter/M5AlNqebQO4gKtmW/images/CreateAgg81.png?w=560\u0026fit=max\u0026auto=format\u0026n=M5AlNqebQO4gKtmW\u0026q=85\u0026s=e089b1ed08251edb7636554c2b5f77aa 560w, https://mintcdn.com/m3ter/M5AlNqebQO4gKtmW/images/CreateAgg81.png?w=840\u0026fit=max\u0026auto=format\u0026n=M5AlNqebQO4gKtmW\u0026q=85\u0026s=2e77abb2a075555d28bfa1d2077aae07 840w, https://mintcdn.com/m3ter/M5AlNqebQO4gKtmW/images/CreateAgg81.png?w=1100\u0026fit=max\u0026auto=format\u0026n=M5AlNqebQO4gKtmW\u0026q=85\u0026s=a45478195dd85c576f5b33a3a5aad6e4 1100w, https://mintcdn.com/m3ter/M5AlNqebQO4gKtmW/images/CreateAgg81.png?w=1650\u0026fit=max\u0026auto=format\u0026n=M5AlNqebQO4gKtmW\u0026q=85\u0026s=feb706f6fee8e2f07a21af78b12bdc93 1650w, https://mintcdn.com/m3ter/M5AlNqebQO4gKtmW/images/CreateAgg81.png?w=2500\u0026fit=max\u0026auto=format\u0026n=M5AlNqebQO4gKtmW\u0026q=85\u0026s=3223c598198dd7eee32b5a80a46e98eb 2500w`}),`\n`,_jsxs(_components.p,{children:[`Any new Compound Aggregations you’ve created become immediately available for pricing up your Product Plans. See `,_jsx(_components.a,{href:`/guides/plans-and-pricing/pricing-plans/pricing-plans`,children:`Pricing Plans and Plan Templates`}),`.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Important: Create Simple Aggregations First!`}),` If you try to create a Compound Aggregation and you enter a Calculation that references a simple Aggregation that you have not yet created for your Product, you won’t be able to save the Compound Aggregation and an error message will show.`]})}),`\n`,_jsxs(_components.ol,{start:`8`,children:[`\n`,_jsxs(_components.li,{children:[`If you want to edit a Compound Aggregation’s details, select the `,_jsx(_components.strong,{children:`Edit`}),` button, make your changes, and click `,_jsx(_components.strong,{children:`Update`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`If you want to remove a Compound Aggregation, return to the `,_jsx(_components.strong,{children:`Compound Aggregations`}),` page and select the `,_jsx(_components.strong,{children:`Delete`}),` button for the Compound Aggregation:`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/4PA7eaLaMtaA6FQv/images/1727272786-deleteicon2.png?fit=max\u0026auto=format\u0026n=4PA7eaLaMtaA6FQv\u0026q=85\u0026s=164e2bf3ef1032ad21cfed6fcd09a18a`,style:{width:`5%`},\"data-og-width\":`31`,width:`31`,\"data-og-height\":`29`,height:`29`,\"data-path\":`images/1727272786-deleteicon2.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/4PA7eaLaMtaA6FQv/images/1727272786-deleteicon2.png?w=280\u0026fit=max\u0026auto=format\u0026n=4PA7eaLaMtaA6FQv\u0026q=85\u0026s=d0b4b13cdf4e6a052f3ec8fc63e35e3e 280w, https://mintcdn.com/m3ter/4PA7eaLaMtaA6FQv/images/1727272786-deleteicon2.png?w=560\u0026fit=max\u0026auto=format\u0026n=4PA7eaLaMtaA6FQv\u0026q=85\u0026s=c678ba57482a829bec44025f36aa1776 560w, https://mintcdn.com/m3ter/4PA7eaLaMtaA6FQv/images/1727272786-deleteicon2.png?w=840\u0026fit=max\u0026auto=format\u0026n=4PA7eaLaMtaA6FQv\u0026q=85\u0026s=0963585ce2c4472885cc8c460108ccd4 840w, https://mintcdn.com/m3ter/4PA7eaLaMtaA6FQv/images/1727272786-deleteicon2.png?w=1100\u0026fit=max\u0026auto=format\u0026n=4PA7eaLaMtaA6FQv\u0026q=85\u0026s=345c3b8906833e99cb3c4bf839813e16 1100w, https://mintcdn.com/m3ter/4PA7eaLaMtaA6FQv/images/1727272786-deleteicon2.png?w=1650\u0026fit=max\u0026auto=format\u0026n=4PA7eaLaMtaA6FQv\u0026q=85\u0026s=39f50d9941045a27fa6d63a873b7892b 1650w, https://mintcdn.com/m3ter/4PA7eaLaMtaA6FQv/images/1727272786-deleteicon2.png?w=2500\u0026fit=max\u0026auto=format\u0026n=4PA7eaLaMtaA6FQv\u0026q=85\u0026s=bfc1db390a7b05061a8d2783e4994317 2500w`}),`\n`,_jsx(_components.p,{children:`A confirmation popup opens.`}),`\n`,_jsxs(_components.ol,{start:`10`,children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Yes`}),` to confirm the delete action.`]}),`\n`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Tip: Compound Aggregation Metadata?`}),` If you scroll down the `,_jsx(_components.strong,{children:`Compound aggregation details`}),` page, you can review `,_jsx(_components.strong,{children:`Compound Aggregation metadata`}),` - see `,_jsx(_components.a,{href:`/guides/usage-data-aggregations/reviewing-aggregation-details`,children:`Reviewing Aggregation Details`}),`.`]})})]})}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":"Compound Aggregations","description":null,"href":"/guides/usage-data-aggregations/compound-aggregations"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Product vs. Global Compound Aggregations","slug":"product-vs-global-compound-aggregations","depth":2,"children":[]},{"title":"Example Use Case","slug":"example-use-case","depth":2,"children":[]},{"title":"Creating a Compound Aggregation","slug":"creating-a-compound-aggregation","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"m3ter","siteName":"m3ter Documentation","title":"Compound Aggregations - m3ter Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-30T15:11:25.085Z","originalFileLocation":"guides/usage-data-aggregations/compound-aggregations.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;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=\"system\"}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=\"application-name\" content=\"m3ter Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/m3ter/zwvZvZyvpa8TKV7c/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/m3ter/zwvZvZyvpa8TKV7c/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/m3ter/zwvZvZyvpa8TKV7c/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/m3ter/zwvZvZyvpa8TKV7c/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/m3ter/zwvZvZyvpa8TKV7c/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/m3ter/zwvZvZyvpa8TKV7c/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/m3ter/zwvZvZyvpa8TKV7c/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/m3ter/zwvZvZyvpa8TKV7c/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/m3ter/zwvZvZyvpa8TKV7c/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Compound Aggregations - m3ter Documentation\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"m3ter Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.m3ter.com/guides/usage-data-aggregations/compound-aggregations\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://m3ter.mintlify.app/_mintlify/api/og/v2?division=Pricing+Metrics%3A+Aggregations\u0026amp;title=Compound+Aggregations\u0026amp;theme=a12cf6d8598fbb808e7ba8a7\u0026amp;signature=d01f8495cb09604180ac1999fc785649378ce6c68b40d580315c49e5be840538\">\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=\"Compound Aggregations - m3ter Documentation\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://m3ter.mintlify.app/_mintlify/api/og/v2?division=Pricing+Metrics%3A+Aggregations\u0026amp;title=Compound+Aggregations\u0026amp;theme=a12cf6d8598fbb808e7ba8a7\u0026amp;signature=d01f8495cb09604180ac1999fc785649378ce6c68b40d580315c49e5be840538\">\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=\"/mintlify-assets/_mintlify/favicons/m3ter/zwvZvZyvpa8TKV7c/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"m3ter Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#4caf4c\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.m3ter.com/guides/usage-data-aggregations/compound-aggregations\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/guides/usage-data-aggregations/compound-aggregations.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.m3ter.com/#organization\",\"name\":\"m3ter Documentation\",\"url\":\"https://docs.m3ter.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/m3ter/t6C65JBQiQOFtjBy/images/m3ter-logo-blue-sf.svg?fit=max\u0026auto=format\u0026n=t6C65JBQiQOFtjBy\u0026q=85\u0026s=3928db28c84ec6950e43caf96e635d80\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.m3ter.com#website\",\"name\":\"m3ter Documentation\",\"url\":\"https://docs.m3ter.com\",\"publisher\":{\"@id\":\"https://docs.m3ter.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.m3ter.com/guides/usage-data-aggregations/compound-aggregations#webpage\",\"url\":\"https://docs.m3ter.com/guides/usage-data-aggregations/compound-aggregations\",\"name\":\"Compound Aggregations\",\"dateModified\":\"2026-10-30T15:11:25.085Z\",\"isPartOf\":{\"@id\":\"https://docs.m3ter.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.m3ter.com/guides/usage-data-aggregations/compound-aggregations#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.m3ter.com/guides/usage-data-aggregations/compound-aggregations#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Guides\",\"item\":\"https://docs.m3ter.com/guides/getting-started/quick-start-worked-example\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Pricing Metrics: Aggregations\",\"item\":\"https://docs.m3ter.com/guides/usage-data-aggregations\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Compound Aggregations\",\"item\":\"https://docs.m3ter.com/guides/usage-data-aggregations/compound-aggregations\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.m3ter.com/guides/usage-data-aggregations/compound-aggregations#article\",\"headline\":\"Compound Aggregations\",\"name\":\"Compound Aggregations\",\"url\":\"https://docs.m3ter.com/guides/usage-data-aggregations/compound-aggregations\",\"mainEntityOfPage\":{\"@id\":\"https://docs.m3ter.com/guides/usage-data-aggregations/compound-aggregations#webpage\"},\"dateModified\":\"2026-10-30T15:11:25.085Z\",\"publisher\":{\"@id\":\"https://docs.m3ter.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.m3ter.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"m3ter Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"m3ter Documentation","nav":{"global":null,"tabs":[{"tab":"Exploring m3ter","pages":[{"title":"Exploring m3ter","href":""}]},{"tab":"Guides","pages":[{"group":"Guides","pages":[{"group":"Getting Started","root":{"title":"Getting Started","href":"/guides/getting-started"},"expanded":false,"pages":[{"title":"Quick Start","href":"/guides/getting-started/quick-start-worked-example"},{"title":"m3ter Console","href":"/guides/getting-started/working-in-the-m3ter-console"},{"title":"Configuration Workflow","href":"/guides/getting-started/previewing-main-configuration-steps"},{"group":"Worked Examples","expanded":false,"pages":[{"title":"Worked Examples","href":"/guides/getting-started/metering-for-production-worked-examples"},{"title":"Example 1: Cloud Storage and File Cleanup","href":"/guides/getting-started/metering-for-production-worked-examples/worked-example-1-cloud-storage-and-file-cleanup"},{"title":"Example 2: Compound Aggregation for Sign-Up Bonus","href":"/guides/getting-started/metering-for-production-worked-examples/example-2-compound-aggregation-for-sign-up-bonus"},{"title":"Example 3: Segmented Aggregation on Single Meter Usage","href":"/guides/getting-started/metering-for-production-worked-examples/example-3-segmented-aggregation-on-single-meter-usage"}]},{"title":"Dates in m3ter - Quick Reference Starter","href":"/guides/getting-started/working-with-dates-in-m3ter-easy-reference"},{"title":"Feature Release Stages","href":"/guides/getting-started/feature-release-stages"},{"title":"Knowledge Index","href":"/guides/getting-started/knowledge-index"},{"title":"Contacting m3ter Support","href":"/guides/getting-started/contacting-m3ter-support"}]},{"group":"Authentication","root":{"title":"Authentication","href":"/guides/authenticating-with-the-platform"},"expanded":false,"pages":[{"title":"User/Password Authentication","href":"/guides/authenticating-with-the-platform/user-password-authentication"},{"title":"m3ter Single Sign-On","href":"/guides/authenticating-with-the-platform/m3ter-single-sign-on"},{"title":"Service Authentication","href":"/guides/authenticating-with-the-platform/service-authentication"}]},{"group":"Creating, Managing, and Reviewing Products","root":{"title":"Creating, Managing, and Reviewing Products","href":"/guides/creating-and-managing-products"},"expanded":false,"pages":[{"title":"Working with Custom Fields","href":"/guides/creating-and-managing-products/working-with-custom-fields"}]},{"group":"Usage Data: Meters","root":{"title":"Usage Data: Meters","href":"/guides/usage-data-meters"},"expanded":false,"pages":[{"title":"Reviewing Meter Options","mode":"default","href":"/guides/usage-data-meters/reviewing-meter-options"},{"title":"Creating Product Meters","href":"/guides/usage-data-meters/creating-meters"},{"title":"Creating Global Meters","href":"/guides/usage-data-meters/creating-global-meters"},{"title":"Working in Meter Details","href":"/guides/usage-data-meters/working-in-meter-details"},{"title":"Working with Meter Derived Fields and Examples","href":"/guides/usage-data-meters/derived-fields-for-meters-examples-and-supported-syntax"}]},{"group":"Pricing Metrics: Aggregations","root":{"title":"Pricing Metrics: Aggregations","href":"/guides/usage-data-aggregations"},"expanded":false,"pages":[{"title":"Reviewing Aggregation Options","href":"/guides/usage-data-aggregations/reviewing-aggregation-options"},{"title":"Creating Product Aggregations","href":"/guides/usage-data-aggregations/creating-aggregations"},{"title":"Creating Global Aggregations","description":null,"href":"/guides/usage-data-aggregations/creating-global-aggregations"},{"title":"Compound Aggregations","href":"/guides/usage-data-aggregations/compound-aggregations"},{"title":"Working with Compound Aggregation Calculations","description":null,"href":"/guides/usage-data-aggregations/compound-aggregation-calculations"},{"title":"Compound Aggregations - Examples","href":"/guides/usage-data-aggregations/compound-aggregations-examples"},{"title":"Segmented Aggregations","href":"/guides/usage-data-aggregations/segmented-aggregations"},{"title":"Custom SQL Aggregations","href":"/guides/usage-data-aggregations/custom-sql-aggregations"},{"title":"Reviewing Aggregation Details","href":"/guides/usage-data-aggregations/reviewing-aggregation-details"}]},{"group":"Recurring Charges: Counters","root":{"title":"Recurring Charges: Counters","href":"/guides/recurring-charges-counters"},"expanded":false,"pages":[{"title":"Creating Counters and Pricing Plans","href":"/guides/recurring-charges-counters/creating-counters"},{"title":"Understanding and Creating Counter Adjustments for Accounts","href":"/guides/recurring-charges-counters/creating-counter-adjustments-for-accounts"},{"title":"Recurring Charges Billing: Seat-Based Pricing","href":"/guides/recurring-charges-counters/reviewing-bills-for-recurring-charges"},{"title":"Recurring Charges Billing: Hybrid Pricing","href":"/guides/recurring-charges-counters/recurring-charges-example-2-hybrid-pricing"}]},{"group":"Plans and Pricing","root":{"title":"Plans and Pricing","href":"/guides/plans-and-pricing"},"expanded":false,"pages":[{"group":"Creating and Working with Plan Templates, Plans, and Plan Groups","root":{"title":"Creating and Working with Plan Templates, Plans, and Plan Groups","href":"/guides/plans-and-pricing/working-with-plan-templates-and-plans"},"expanded":false,"pages":[{"title":"Reviewing Options for Plans and Plan Templates","href":"/guides/plans-and-pricing/working-with-plan-templates-and-plans/reviewing-configuration-options-for-plans-and-plan-templates"},{"title":"Understanding Billing Options for Plan Templates/Plans","href":"/guides/plans-and-pricing/working-with-plan-templates-and-plans/understanding-billing-options-for-plan-templates-plans"},{"title":"Creating Plan Templates","href":"/guides/plans-and-pricing/working-with-plan-templates-and-plans/creating-plan-templates"},{"title":"Creating Plans","href":"/guides/plans-and-pricing/working-with-plan-templates-and-plans/creating-plans"},{"title":"Working in Plan Template and Plan Details","href":"/guides/plans-and-pricing/working-with-plan-templates-and-plans/working-in-plan-details"},{"title":"Editing and Deleting Plan Templates and Plans","href":"/guides/plans-and-pricing/working-with-plan-templates-and-plans/editing-plan-templates-and-plans"},{"title":"Working with Plan Groups","href":"/guides/plans-and-pricing/working-with-plan-templates-and-plans/working-with-plan-groups"}]},{"group":"Pricing and Managing Plans and Plan Templates","root":{"title":"Pricing and Managing Plans and Plan Templates","href":"/guides/plans-and-pricing/pricing-plans"},"expanded":false,"pages":[{"title":"Reviewing Pricing Options for Plans and Plan Templates","href":"/guides/plans-and-pricing/pricing-plans/reviewing-pricing-options-and-pricing-plans"},{"title":"Pricing Plans and Plan Templates","href":"/guides/plans-and-pricing/pricing-plans/pricing-plans"},{"title":"Pricing Plans Using Segmented Aggregations","href":"/guides/plans-and-pricing/pricing-plans/pricing-plans-using-segmented-aggregations"},{"title":"Managing and Editing Priced Plans and Plan Templates","href":"/guides/plans-and-pricing/pricing-plans/managing-and-editing-priced-plans-or-plan-templates"},{"title":"Duplicating Priced Plans and Plan Templates","href":"/guides/plans-and-pricing/pricing-plans/duplicating-priced-plans-or-plan-templates"}]}]},{"group":"End-Customer Accounts","root":{"title":"End-Customer Accounts","href":"/guides/end-customer-accounts"},"expanded":false,"pages":[{"title":"Managing Accounts - Best Practices","href":"/guides/end-customer-accounts/managing-accounts-best-practices"},{"title":"Creating and Managing Accounts","href":"/guides/end-customer-accounts/creating-an-account"},{"title":"Attaching Plans to an Account","href":"/guides/end-customer-accounts/attaching-plans-to-an-account"},{"title":"Creating Custom Plans for Accounts","href":"/guides/end-customer-accounts/creating-custom-account-plans"},{"title":"Attaching Plan Groups to an Account","href":"/guides/end-customer-accounts/attaching-plan-groups-to-an-account"},{"title":"Creating Custom Plan Groups for Accounts","href":"/guides/end-customer-accounts/creating-custom-plan-groups-for-accounts"},{"title":"Creating Prepayments for Accounts","href":"/guides/end-customer-accounts/creating-prepayments-for-accounts"},{"group":"Working with Contracts for Accounts","root":{"title":"Working with Contracts for Accounts","href":"/guides/end-customer-accounts/creating-contracts-for-accounts"},"expanded":false,"pages":[{"title":"Creating and Managing Contracts","href":"/guides/end-customer-accounts/creating-contracts-for-accounts/creating-and-managing-contracts"},{"title":"Setting Up Contract Billing","href":"/guides/end-customer-accounts/creating-contracts-for-accounts/setting-up-contract-billing"},{"title":"Reviewing Organization Contracts","href":"/guides/end-customer-accounts/creating-contracts-for-accounts/reviewing-organization-contracts"}]},{"group":"Working with Balances for Accounts","root":{"title":"Working with Balances for Accounts","href":"/guides/end-customer-accounts/creating-balances-for-accounts"},"expanded":false,"pages":[{"title":"Understanding and Managing Billing for Balances","href":"/guides/end-customer-accounts/creating-balances-for-accounts/understanding-billing-for-balances"},{"title":"Creating and Managing Account Balances","href":"/guides/end-customer-accounts/creating-balances-for-accounts/creating-and-managing-account-balances"},{"title":"Creating and Managing Transactions for Balances","href":"/guides/end-customer-accounts/creating-balances-for-accounts/creating-and-managing-transactions-for-balances"},{"title":"Setting Up Transaction Schedules for Balances","href":"/guides/end-customer-accounts/creating-balances-for-accounts/setting-transaction-schedules-for-balances"},{"title":"Creating Charges for Balances","href":"/guides/end-customer-accounts/creating-balances-for-accounts/creating-charges-for-balances"},{"title":"Setting Up Charge Schedules for Balances","href":"/guides/end-customer-accounts/creating-balances-for-accounts/setting-charge-schedules-for-balances"},{"title":"Running and Viewing Bills for Balance Charges","href":"/guides/end-customer-accounts/creating-balances-for-accounts/runnning-viewing-bill-for-balance-charges"},{"title":"Reviewing Account Balances Summary","href":"/guides/end-customer-accounts/creating-balances-for-accounts/reviewing-account-balances-summary"},{"title":"Grants","href":"/guides/end-customer-accounts/creating-balances-for-accounts/balance-grants"}]},{"title":"Creating Charges for Accounts","href":"/guides/end-customer-accounts/creating-charges-for-accounts"},{"title":"Creating Counter Adjustments for Accounts","href":"/guides/end-customer-accounts/creating-counter-adjustments-for-accounts"},{"title":"Submitting Usage Data for an Account","href":"/guides/end-customer-accounts/submitting-usage-data-for-an-account"},{"title":"Working in Account Overview","href":"/guides/end-customer-accounts/working-in-account-overview"},{"title":"Reviewing and Recalculating Bills for an Account","href":"/guides/end-customer-accounts/reviewing-bills-for-an-account"},{"group":"Working with Parent/Child Accounts","root":{"title":"Working with Parent/Child Accounts","href":"/guides/end-customer-accounts/creating-and-working-with-child-accounts"},"expanded":false,"pages":[{"title":"Billing Hierarchy Modes for Parent/Child Accounts","href":"/guides/end-customer-accounts/creating-and-working-with-child-accounts/billing-for-parent-child-accounts"}]},{"title":"End Dating Account Billing Entities","href":"/guides/end-customer-accounts/end-dating-account-billing-entities"},{"title":"Creating and Managing External Mappings for Accounts","href":"/guides/end-customer-accounts/creating-and-managing-external-mappings-for-accounts"}]},{"group":"Billing and Usage Data","root":{"title":"Billing and Usage Data","href":"/guides/billing-and-usage-data"},"expanded":false,"pages":[{"group":"Submitting Usage Data","root":{"title":"Submitting Usage Data","href":"/guides/billing-and-usage-data/submitting-usage-data"},"expanded":false,"pages":[{"title":"API Calls for Data Ingest","href":"/guides/billing-and-usage-data/submitting-usage-data/api-calls-for-data-ingest"},{"title":"File Upload Service API","href":"/guides/billing-and-usage-data/submitting-usage-data/file-upload-service-api"},{"title":"Submitting and Checking Test Usage Data","href":"/guides/billing-and-usage-data/submitting-usage-data/submitting-test-usage-data"},{"title":"File Uploads for Usage Data by Meter","href":"/guides/billing-and-usage-data/submitting-usage-data/file-uploads-for-usage-data-by-meter"},{"title":"Submitting Usage Data Adjustments Using Timestamp","href":"/guides/billing-and-usage-data/submitting-usage-data/submitting-usage-data-adjustments-using-timestamp"},{"title":"Submitting Usage Data for Non-Existent Accounts","href":"/guides/billing-and-usage-data/submitting-usage-data/submitting-usage-data-for-non-existent-accounts"},{"title":"Reviewing and Resolving Ingest Events","href":"/guides/billing-and-usage-data/submitting-usage-data/reviewing-and-resolving-ingest-events"}]},{"group":"Running, Viewing, and Managing Bills","root":{"title":"Running, Viewing, and Managing Bills","href":"/guides/billing-and-usage-data/running-viewing-and-managing-bills"},"expanded":false,"pages":[{"title":"Running Bills and Viewing Bill Details","href":"/guides/billing-and-usage-data/running-viewing-and-managing-bills/running-bills-and-viewing-bill-details"},{"title":"Working with Bills in Bill Management","href":"/guides/billing-and-usage-data/running-viewing-and-managing-bills/managing-bills"},{"title":"Approving and Locking Bills - Managing Bill Lifecycle","href":"/guides/billing-and-usage-data/running-viewing-and-managing-bills/approving-and-locking-bills-managing-bill-lifecycle"},{"title":"Adding Credit Line Items to Bills","href":"/guides/billing-and-usage-data/running-viewing-and-managing-bills/adding-credit-line-items-to-bills"},{"title":"Adding Debit Line Items to Bills","href":"/guides/billing-and-usage-data/running-viewing-and-managing-bills/adding-debit-line-items-to-bills"},{"title":"Viewing Bill History","href":"/guides/billing-and-usage-data/running-viewing-and-managing-bills/viewing-bill-history"},{"title":"Scheduling Billing","href":"/guides/billing-and-usage-data/running-viewing-and-managing-bills/scheduling-billing"},{"title":"Working with Bill Statements","href":"/guides/billing-and-usage-data/running-viewing-and-managing-bills/working-with-bill-statements"},{"title":"Bill Line Item Types","href":"/guides/billing-and-usage-data/running-viewing-and-managing-bills/bill-line-item-types"},{"title":"Bill Line Items - Default Descriptions","href":"/guides/billing-and-usage-data/running-viewing-and-managing-bills/bill-line-items-default-descriptions"},{"title":"Bill Line Items - Mapping to Accounting Products","href":"/guides/billing-and-usage-data/running-viewing-and-managing-bills/bill-line-items-mapping-accounting-products"},{"title":"Troubleshooting Bills","href":"/guides/billing-and-usage-data/running-viewing-and-managing-bills/troubleshooting-bills"}]}]},{"group":"m3sh","root":{"title":"m3sh","href":"/guides/m3sh-automation"},"expanded":false,"pages":[{"group":"m3sh Workflows","root":{"title":"m3sh Workflows","href":"/guides/m3sh-workflows/m3sh-workflows"},"pages":[{"title":"m3sh Workflows - Key Concepts and Options","href":"/guides/m3sh-workflows/m3sh-workflows-key-concepts-and-options"},{"title":"Exploring m3sh Workflows","href":"/guides/m3sh-automation/exploring-m3sh-workflows"},{"title":"Reviewing m3sh Workflow Runs","href":"/guides/m3sh-automation/reviewing-m3sh-workflow-runs"},{"title":"Getting to Know the Workflow Builder","href":"/guides/m3sh-workflows/getting-to-know-the-workflow-builder"},{"title":"Creating Event Notification Workflows","href":"/guides/m3sh-workflows/creating-event-notification-workflows"},{"title":"Creating Incoming Webhook Workflows","href":"/guides/m3sh-workflows/creating-incoming-webhook-workflows"},{"title":"Working with Global Parameters","href":"/guides/m3sh-workflows/working-with-global-parameters"},{"title":"Utilizing Workflow Managed Templates","href":"/guides/m3sh-workflows/utilizing-workflow-managed-templates"},{"title":"Testing and Troubleshooting Workflows","href":"/guides/m3sh-workflows/testing-and-troubleshooting-workflows"},{"title":"Exporting and Importing Workflows","href":"/guides/m3sh-workflows/exporting-and-importing-workflows"}]},{"group":"Utilizing Events and Notifications","root":{"title":"Utilizing Events and Notifications","href":"/guides/alerts-events-and-notifications/utilizing-events-and-notifications"},"expanded":false,"pages":[{"title":"Key Concepts and Relationships","href":"/guides/alerts-events-and-notifications/utilizing-events-and-notifications/key-concepts-and-relationships"},{"title":"Object Definitions and API Calls","href":"/guides/alerts-events-and-notifications/utilizing-events-and-notifications/object-definitions-and-api-calls"},{"title":"Creating, Managing, and Reviewing Notifications","href":"/guides/alerts-events-and-notifications/utilizing-events-and-notifications/creating-managing-and-reviewing-notifications"},{"title":"Example - Notification Setup for Commitment Updated Event","href":"/guides/alerts-events-and-notifications/utilizing-events-and-notifications/example-1-commitment-updated-event"},{"title":"Working with Scheduled Events","href":"/guides/alerts-events-and-notifications/utilizing-events-and-notifications/working-with-scheduled-events"}]},{"group":"Creating and Managing Credentials","root":{"title":"Creating and Managing Credentials","href":"/guides/integrations/setting-up-integrations/managing-integration-credentials"},"expanded":false,"pages":[{"title":"Creating Stripe Integration Credentials","href":"/guides/integrations/setting-up-integrations/_managing-integration-credentials-legacy/creating-stripe-integration-credentials"},{"title":"Creating NetSuite Integration Credentials","href":"/guides/integrations/setting-up-integrations/_managing-integration-credentials-legacy/creating-netsuite-integration-credentials"},{"title":"Creating Paddle Integration Credentials","href":"/guides/integrations/setting-up-integrations/_managing-integration-credentials-legacy/creating-paddle-integration-credentials"},{"title":"Creating Chargebee Integration Credentials","href":"/guides/integrations/setting-up-integrations/_managing-integration-credentials-legacy/creating-chargebee-integration-credentials"},{"title":"Creating QuickBooks Integration Credentials","href":"/guides/integrations/setting-up-integrations/_managing-integration-credentials-legacy/creating-quickbooks-integration-credentials"},{"title":"Creating Xero Integration Credentials","href":"/guides/integrations/setting-up-integrations/_managing-integration-credentials-legacy/creating-xero-integration-credentials"},{"title":"Creating Salesforce Integration Credentials","href":"/guides/integrations/setting-up-integrations/_managing-integration-credentials-legacy/creating-salesforce-integration-credentials"},{"title":"Creating AWS Marketplace Integration Credentials","href":"/guides/integrations/setting-up-integrations/_managing-integration-credentials-legacy/creating-aws-marketplace-integration-credentials"},{"title":"Creating Azure Marketplace Integration Credentials","href":"/guides/integrations/setting-up-integrations/_managing-integration-credentials-legacy/creating-azure-marketplace-integration-credentials"}]},{"group":"Integrations","root":{"title":"Integrations","href":"/guides/integrations"},"expanded":false,"pages":[{"title":"m3ter Integrations - Overview","sidebarTitle":"m3ter Integrations","href":"/guides/integrations/m3ter-integrations"},{"group":"Setting Up and Managing Integrations","root":{"title":"Setting Up and Managing Integrations","href":"/guides/integrations/setting-up-integrations"},"expanded":false,"pages":[{"title":"Creating and Managing Integrations","href":"/guides/integrations/setting-up-integrations/creating-and-managing-integration-configurations"},{"title":"Configuring Stripe Integrations","href":"/guides/integrations/setting-up-integrations/configuring-stripe-integrations"},{"title":"Configuring NetSuite Integrations","href":"/guides/integrations/setting-up-integrations/configuring-netsuite-integrations"},{"title":"Configuring Paddle Integrations","href":"/guides/integrations/setting-up-integrations/configuring-paddle-integrations"},{"title":"Configuring Chargebee Integrations","href":"/guides/integrations/setting-up-integrations/configuring-chargebee-integrations"},{"title":"Configuring QuickBooks Integrations","href":"/guides/integrations/setting-up-integrations/configuring-quickbooks-integrations"},{"title":"Configuring Xero Integrations","href":"/guides/integrations/setting-up-integrations/configuring-xero-integrations"},{"title":"Configuring Salesforce Entity Data Sync Integrations","href":"/guides/integrations/setting-up-integrations/configuring-sf-entity-data-integrations"},{"title":"Configuring AWS Marketplace Integrations","href":"/guides/integrations/setting-up-integrations/configuring-aws-integrations"},{"title":"AWS Marketplace Integrations - Reconciliation Features","href":"/guides/integrations/setting-up-integrations/aws-marketplace-integrations-reconciliation-features"},{"title":"Configuring Azure Marketplace Integrations","href":"/guides/integrations/setting-up-integrations/configuring-azure-marketplace-integrations"},{"title":"Azure Marketplace Integrations - Reconciliation Features","href":"/guides/integrations/setting-up-integrations/azure-marketplace-integrations-reconciliation-features"},{"title":"Managing Multiple Third Party Destinations for Integrations","href":"/guides/integrations/setting-up-integrations/managing-multiple-destinations-for-integrations"},{"title":"Reviewing Integration Run Details","href":"/guides/integrations/setting-up-integrations/reviewing-integration-run-details"}]}]},{"title":"Creating and Managing Outgoing Webhooks","href":"/guides/integrations/setting-up-integrations/creating-and-managing-destinations"},{"title":"Reviewing and Resolving Integration Events","href":"/guides/integrations/setting-up-integrations/reviewing-and-resolving-integration-events"},{"title":"Creating and Managing External Mappings","href":"/guides/integrations/setting-up-integrations/creating-and-managing-external-mappings"},{"title":"Creating and Managing Transformations","href":"/guides/m3sh-workflows/creating-and-managing-transformations"}]},{"group":"m3ter APIs","root":{"title":"m3ter APIs","href":"/guides/m3ter-apis"},"expanded":false,"pages":[{"title":"Config API Limits","href":"/guides/m3ter-apis/config-api-limits"},{"title":"Ingest API Limits and Optimizing Measurement Submissions","href":"/guides/m3ter-apis/ingest-api-limits"},{"title":"WAF Rules for HTTP Requests","href":"/guides/m3ter-apis/waf-rules-for-http-requests"},{"title":"Getting Started with API Calls","href":"/guides/m3ter-apis/getting-started-with-api-calls"},{"title":"HTTP Error Codes","href":"/guides/m3ter-apis/http-error-codes"}]},{"title":"m3ter Calculation Engine","href":"/guides/m3ter-calculation-engine"},{"group":"Lookup Tables","root":{"title":"Lookup Tables (Beta)","href":"/guides/lookup-tables"},"tag":"Beta","expanded":false,"pages":[{"title":"Creating and Managing Lookup Tables","href":"/guides/lookup-tables/creating-and-managing-lookup-tables"},{"title":"Adding Data to, Publishing, and Managing Lookup Table Revisions","href":"/guides/lookup-tables/adding-data-to-and-publishing-table-revisions"},{"title":"Worked Example - Variable Usage Discounting","href":"/guides/lookup-tables/worked-example-variable-usage-discounting"},{"title":"Worked Example - Variable Usage Discounting by Account","href":"/guides/lookup-tables/worked-example-variable-usage-discouting-by-account"},{"title":"Lookup Functions","href":"/guides/lookup-tables/lookup-functions"}]},{"title":"System Alerts","href":"/guides/alerts-events-and-notifications/viewing-and-managing-alerts"},{"group":"Organization and Access Management","root":{"title":"Organization and Access Management","href":"/guides/organization-and-access-management"},"expanded":false,"pages":[{"group":"Managing your Organization","root":{"title":"Managing your Organization","href":"/guides/organization-and-access-management/viewing-and-editing-organization"},"expanded":false,"pages":[{"title":"Viewing and Editing Organization Configuration","href":"/guides/organization-and-access-management/viewing-and-editing-organization/viewing-and-editing-organization-configuration"},{"title":"Timezone Settings - Notes and Recommendations","href":"/guides/organization-and-access-management/viewing-and-editing-organization/timezone-settings-notes-and-recommendations"},{"title":"Creating and Managing Currencies","href":"/guides/organization-and-access-management/viewing-and-editing-organization/creating-and-managing-currencies"},{"title":"Creating Credit Reasons","href":"/guides/organization-and-access-management/viewing-and-editing-organization/creating-credit-reasons"},{"title":"Creating Debit Reasons","href":"/guides/organization-and-access-management/viewing-and-editing-organization/creating-debit-reasons"},{"title":"Creating Transaction Types","href":"/guides/organization-and-access-management/viewing-and-editing-organization/creating-transaction-types"},{"title":"Adding and Editing Custom Fields","href":"/guides/organization-and-access-management/viewing-and-editing-organization/adding-and-editing-custom-fields"}]},{"title":"Understanding, Creating, and Managing Permission Policies","href":"/guides/organization-and-access-management/creating-and-managing-permissions"},{"group":"Managing Access and Users","root":{"title":"Managing Access and Users","href":"/guides/organization-and-access-management/managing-users"},"expanded":false,"pages":[{"title":"Managing Users and Assigning Permission Policies","href":"/guides/organization-and-access-management/managing-users/managing-users-and-assigning-permission-policies"},{"title":"Creating and Configuring Service Users","href":"/guides/organization-and-access-management/managing-users/creating-and-configuring-service-users"},{"title":"Creating and Managing User Groups","href":"/guides/organization-and-access-management/managing-users/creating-and-managing-user-groups"},{"title":"Inviting Users to Organization","href":"/guides/organization-and-access-management/managing-users/inviting-users-to-organization"},{"title":"Tracking User Activity in Organization","href":"/guides/organization-and-access-management/managing-users/tracking-user-activity-in-organization"},{"title":"Granting m3ter Support Access to Organization","href":"/guides/organization-and-access-management/managing-users/granting-m3ter-support-access-to-organization"},{"title":"Viewing and Managing Permission Policies","href":"/guides/organization-and-access-management/managing-users/viewing-and-managing-permission-policies"}]}]},{"group":"m3ter Connector for Salesforce","root":{"title":"m3ter Connector for Salesforce","href":"/guides/m3ter-connector-for-salesforce"},"expanded":false,"pages":[{"title":"Overview - Functional Scope and Limitations","href":"/guides/m3ter-connector-for-salesforce/overview-functional-scope-and-limitations"},{"title":"Configuring the m3ter Connector for Salesforce","href":"/guides/m3ter-connector-for-salesforce/configuring-m3ter-salesforce-connector"},{"title":"Reviewing and Managing Metadata Mappings","href":"/guides/m3ter-connector-for-salesforce/reviewing-and-managing-metadata-mappings"},{"title":"Creating Custom Metadata Mappings","href":"/guides/m3ter-connector-for-salesforce/creating-metadata-mappings"},{"title":"Testing Sync Setup from Salesforce to m3ter","href":"/guides/m3ter-connector-for-salesforce/testing-sync-setup-from-salesforce-to-m3ter"},{"title":"Setting Up and Using Sync to m3ter Invocable Action","href":"/guides/m3ter-connector-for-salesforce/setting-up-invocable-action-for-event-driven-sync"},{"title":"Setting Up Sync for End Dating m3ter Account Billing Entities","href":"/guides/m3ter-connector-for-salesforce/setting-up-sync-for-end-dating-m3ter-account-billing-entities"},{"title":"Enabling Two-Way Automated Sync for m3ter Objects","href":"/guides/m3ter-connector-for-salesforce/enabling-two-way-automated-sync-for-m3ter-objects"},{"title":"Mapping Custom Fields on m3ter Entities","href":"/guides/m3ter-connector-for-salesforce/mapping-custom-fields-on-m3ter-entities"},{"title":"Mapping Segment Attributes for Pricing","href":"/guides/m3ter-connector-for-salesforce/mapping-segment-attributes-for-pricing"},{"title":"Setting Up m3sh Webhook Triggers","href":"/guides/m3ter-connector-for-salesforce/setting-up-m3sh-webhook-triggers"},{"title":"CRUD for Metering Entities","href":"/guides/m3ter-connector-for-salesforce/crud-for-metering-entities"},{"title":"Usage Design Targets","href":"/guides/m3ter-connector-for-salesforce/usage-design-targets"},{"title":"Generic m3ter API Invocable Action","href":"/guides/m3ter-connector-for-salesforce/generic-m3ter-api-invocable-action"},{"title":"Product Mapping Resolution","href":"/guides/m3ter-connector-for-salesforce/product-mapping-resolution"},{"title":"Checking Sync Logs and Troubleshooting","href":"/guides/m3ter-connector-for-salesforce/checking-sync-logs-and-troubleshooting"},{"group":"m3ter Connector - Sample Mappings","root":{"title":"m3ter Connector - Sample Mappings","href":"/guides/m3ter-connector-for-salesforce/m3ter-connector-sample-mappings"},"expanded":false,"pages":[{"title":"Sample Mappings 1 - Account","href":"/guides/m3ter-connector-for-salesforce/m3ter-connector-sample-mappings/sample-mapping-1-account"},{"title":"Sample Mappings 2 - Commitment","href":"/guides/m3ter-connector-for-salesforce/m3ter-connector-sample-mappings/sample-mappings-2-commitment"},{"title":"Sample Mappings 3 - Contract","href":"/guides/m3ter-connector-for-salesforce/m3ter-connector-sample-mappings/sample-mappings-3-contract"},{"title":"Sample Mappings 4 - AccountPlan","href":"/guides/m3ter-connector-for-salesforce/m3ter-connector-sample-mappings/sample-mappings-4-accountplan"},{"title":"Sample Mappings 5 - Plan","href":"/guides/m3ter-connector-for-salesforce/m3ter-connector-sample-mappings/sample-mappings-5-plan"},{"title":"Sample Mappings 6 - Pricing","href":"/guides/m3ter-connector-for-salesforce/m3ter-connector-sample-mappings/sample-mappings-6-pricing"},{"title":"Sample Mappings 7 - Pricing Bands","href":"/guides/m3ter-connector-for-salesforce/m3ter-connector-sample-mappings/sample-mappings-7-pricing-bands"}]},{"title":"m3ter Connector for Salesforce - Changelog","href":"/guides/m3ter-connector-for-salesforce/m3ter-connector-for-salesforce-changelog"}]},{"group":"Data Explorers","root":{"title":"Data Explorers","href":"/guides/data-explorer"},"expanded":false,"pages":[{"title":"Usage Data Explorer","href":"/guides/data-explorer/performing-usage-queries-and-reviewing-results"},{"title":"Usage Data Explorer (v2)","href":"/guides/data-explorer/usage-data-explorer-v2"},{"title":"Billing Data Explorer","href":"/guides/data-explorer/performing-billing-queries-and-reviewing-results"},{"title":"Prepayments Data Explorer","href":"/guides/data-explorer/performing-commitments-queries-and-reviewing-results"},{"title":"Data Explorers: Saving, Updating, and Re-Using Queries","href":"/guides/data-explorer/saving-queries"},{"title":"Data Explorers: Exporting Query Results","href":"/guides/data-explorer/exporting-usage-query-results"}]},{"group":"Data Exports","root":{"title":"Data Exports (Preview)","href":"/guides/data-exports"},"tag":"Preview","expanded":false,"pages":[{"title":"Creating and Managing Export Destinations","href":"/guides/data-exports/creating-data-export-destinations"},{"group":"Creating Usage Data Export Schedules","root":{"title":"Creating Usage Data Export Schedules","href":"/guides/data-exports/creating-export-schedules"},"expanded":false,"pages":[{"title":"Creating Legacy Usage Data Export Schedules","href":"/guides/data-exports/creating-export-schedules/creating-legacy-usage-export-schedules"}]},{"title":"Creating Operational Data Export Schedules","href":"/guides/data-exports/creating-operational-data-export-schedules"},{"title":"Reviewing and Managing Export Schedules","href":"/guides/data-exports/reviewing-and-managing-export-schedules"},{"group":"Running Ad-Hoc Usage Data Exports","root":{"title":"Running Ad-Hoc Usage Data Exports","href":"/guides/data-exports/running-ad-hoc-data-exports"},"expanded":false,"pages":[{"title":"Running Ad-Hoc Legacy Usage Data Exports","href":"/guides/data-exports/running-ad-hoc-data-exports/running-ad-hoc-legacy-data-exports"}]},{"title":"Running Ad-Hoc Operational Data Exports","href":"/guides/data-exports/running-ad-hoc-operational-data-exports"},{"title":"Downloading Data Export Files Locally","href":"/guides/data-exports/downloading-data-export-files-locally"},{"title":"Reviewing Export Jobs","href":"/guides/data-exports/reviewing-export-jobs"},{"title":"Data Export - Entity Schema and Relationship Diagram","href":"/guides/data-exports/data-export-object-relationship-diagram"}]}]}]},{"tab":"Glossary","pages":[{"title":"Glossary","href":"/glossary-of-terms"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api/introduction"}]},{"tab":"m3sh Function Reference","pages":[{"title":"m3sh Function Reference","href":"/m3sh-function-reference/m3ter/introduction"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Compound Aggregations - m3ter Documentation","buildId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","deploymentId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","dynamics":["a74be98ba7"],"chunks":["zoom-image-lightbox-B4-wUcHm.js","lightbox-handle-r17bVUz3.js"]}