Follow a worked example using a Compound Aggregation for pricing.
Suppose your SaaS company provides a “build-and-host” application service, one which allows customers to develop and run software applications and host these applications on your service:
You’ll charge customers by total number of requests made to all of their applications being hosted with your service in any given billing period.
However, you want to offer customers a sign-up bonus for the first three months of using your service. 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.
The sign-up bonus will be generous in this sense - if a new customer reaches a maximum of 5 applications hosted in a billing period, but by the end of the billing period has taken down 2 of them, their bonus will be calculated for the maximum number of hosted applications reached in the billing period at 500 free requests.
This topic provides a worked example to illustrate how you can use a Compound Aggregation to provide a suitable metric for pricing Product Plans and easily satisfy this SaaS UBP use case - the pricing metric the Compound Aggregation provides will ensure the sign-up bonus is allowed for when billing is run for Accounts placed on the priced Product Plans.The example goes on to show how to submit some test data against a test Account and then generate a Bill for the test Account and check billed amounts against submitted usage.
Products represent a product or service that you offer to your end customers. A Meter, Aggregation, Plan Template, Plan, or Pricing typically all belong to a Product.To create a Product:
In the Console, select Products. The Products page opens.
Select Create product. We’ll create a single Product called App Hosting Standard:
Select Create product.
The App Hosting Standard Product can now serve as a container for any Meters, Aggregations, Plan Templates, Plans, or Pricings we’ll need to create and configure for the example.
Meters define the Data Fields that your system will use to submit usage data to the m3ter platform:
As well as simple Data Fields, which collect raw usage data, you can define Derived Fields that reference and apply calculations to simple fields. For this example, we’ll create two Meters each with a single simple Data Field.
You can create Product-specific Meters or Global Meters. For the example, we’ll create two Meters for the App Hosting Standard Product.
To create Meters:
Select Metering. The Meters page opens.
In the Product drop-down, select App Hosting Standard.
Select Create meter.
Here’s the set up for the first Meter to support the pricing model we want to use in the example:For the example, we’ve set up App Hosting Meter 1 and added the single Data Field called Number Apps to capture usage data.
Select Create meter.
Return to the Meters pages and repeat steps 2 and 3 to set up a second Meter:
We’ve set up a second App Hosting Meter 2 and added a single Data Field called Number Requests to capture usage data.
Select Create meter.
We now have a two Meters for the example, which we can use to collect usage data on any Account that consumes the App Hosting Standard Product. This metered usage data will serve as the basis for the Compound Aggregation pricing metric we want to apply to rate Product consumption yet allow for a sign-up bonus.
Aggregations define how to transform into a single number the individual measurements submitted to a Meter Data Field as usage data. For example, you may choose to simply SUM the submitted usage data values. In this way, Aggregations define the usage-based pricing metrics you’ll use to set up pricing for your products and services.For the usage-based pricing model we want to implement in our example, we’ll need to create two simple Aggregations based on the usage data collected by our two Meters - App Hosting Meter 1 and App Hosting Meter 2. Each simple Aggregation will target a different Meter and field to define a metric:
For the maximum number of hosted applications, we’ll target the Number Apps Data Field on App Hosting Meter 1.
For the total number of requests made to hosted applications, we’ll target the Number Requests Data Field on App Hosting Meter 2.
We’ll then create a Compound Aggregation that references these two simple Aggregations and uses a calculation to ensure the sign-up bonus is factored into the pricing metric it provides.To create two simple Aggregations:
Select Metering>Aggregations:
The Aggregations page opens.
In the Product drop-down, select App Hosting Standard.
Select Create aggregation.
Here’s the setup for the first simple Aggregation:
Aggregation details:
Meter settings:
Aggregation settings:
The Max Apps Hosted Aggregation targets the Number Apps Data Field on App Hosting Meter 1 and uses the Maximum value of the field.
Select Create aggregation.
Repeat steps 3. and 4. to create a second Aggregation.
Here’s the setup for the second Aggregation:
Aggregation details:
Meter settings:
Aggregation settings:
The Number App Requests Aggregation targets the Number Requests Data Field on App Hosting Meter 2 and uses the Sum of values of the field.
Select Create aggregation.
We can now use these two simple Aggregations to set up a Compound Aggregation that provides the pricing metric we need to meet the sign-up bonus UBP use case.To create a Compound Aggregation:
Select Metering>Compound aggregations:
The Compound aggregations page opens.
In the Product drop-down, select App Hosting Standard.
Select Create compound aggregation.
Here’s the setup for the Compound Aggregation:
Compound aggregation details:
Compound aggregation settings:
Note that for the Calculation:
We’ve switched to Advanced.
Entered a valid expression that references our two simple Aggregations using the format: aggregation.<<aggregation Code>>. The Calculation will ensure that the pricing metric the Compound Aggregation provides subtracts the appropriate numbers of requests for the promised sign-up bonus.
Plans represent a pricing plan for one of your products or services. A Plan is always derived from a Plan Template and inherits settings from the Plan Template which control billing operations, such as billing frequency and currency. You can override some of these settings when you create a Plan from a Plan Template. To meet the example requirements:
First, we’ll need a Plan Template for the App Hosting Standard Product. We’ll configure the Plan Template:
For monthly billing using a specific billing currency.
Omit any Standing charge or Minimum spend amounts to be applied for each billing period.
Second, we’ll create a Product Plan based on the Plan Template.
To create a Product Plan Template:
Select Pricing>Plan templates:
The Plan templates page opens.
In the Product drop-down, select App Hosting Standard.
Select Create plan template. The Create page opens.
Here’s the setup for our Product Plan Template:For the App Hosting Plan Template 1 we’ve:
Chosen US dollars as the billing currency.
Note that if US Dollar doesn’t appear for selection in the Currency drop-down when you are creating your Plan Template, you’ll need to create it for your Organization:
Select Settings>Organization and open the Currencies tab.
Click Create currency and on the Create page add USD - US Dollar ($) as a Standard currency. You can define the Maximum decimal places for the currency also. Click Create - US Dollar will now be available for selection across your Organization.
Selected a monthly Bill frequency with a Bill interval of 1, which means Accounts put on the Plan will receive a Bill each month for a month’s period of usage.
Ignore the settings Standing charge and Minimum spend, which allow you to set up amounts for billing, neither of which are required for the example pricing model.
Select Create plan template. You are returned to the Plan template details page.
We can now create a Product Plan for the example based on this template.To create a Product Plan:
Select Pricing>Plans. The Plans page opens.
In the Product drop-down, select App Hosting Standard.
Select Create plan. The Create page opens.
Here’s the setup for our Product Plan:
Note that no Standing charge or Minimum spend amounts are required for the example.
Select Create plan. The Plan details page opens for our new Product Plan.
We can now price this Plan using our App Requests Minus Free Compound Aggregation.
Pricing allows you to configure the cost of usage data under a specific Plan you apply to an Account, and is used to calculate bills.We can use the Pricing editor in the m3ter Console to quickly price up our Product Plan to meet the pricing requirements for the example.To price Product Plan:
Select Pricing>Pricing editor:
The Pricing editor page opens.
In the Product drop-down, select App Hosting Standard.
Select Add plans. The Select plans dialog opens and lists all Plans created for the App Hosting Standard Product.
Check App Hosting Plan 1 and select Confirm. The dialog closes and the Plan is added to the Pricingeditor page.
We’ll use the Compound Aggregation we created at Step 3 for the usage-based metric to price the Plan in accordance with the requirements set out in the example.
Click Add compound aggregations. A Select compound aggregations dialog appears and lists all Compound Aggregations created for the App Hosting Standard Product.
Note that you might also see global Compound Aggregations listed for selection. Global Compound Aggregations are not tied to any specific Product and can be used to price Plans across all Products.
On the Select compound aggregations dialog check App Requests Minus Free.
Click Confirm. The dialog closes and the selected Compound Aggregation is added to the Pricing editor page for the added Plan. You’ll see that no Active pricing has been configured for the Plan using this Compound Aggregation.
In the pricing grid, select Create Plan pricing for App Requests Minus Free. The Create pricing page opens:
You can read off details of the Compound Aggregation being used to create the pricing at the top of the page.
You can Switch to wizard to follow an alternative streamlined pricing workflow by Pricing type. For the example workflow, we’ll continue with the default advanced pricing format.
Under Pricing settings enter:
Start and End dates for the period the pricing is active for the Plan.
An Accounting product to link any Bill line items resulting from the pricing to a specific product line for your accounting purposes.
A Description that will appear for any usage charge line items on Bills, such as Requests Charges.
Ignore the Minimum spend settings, which are not required for the current example.
Under Pricing settings:
Leave the Apply as setting as the default - Debit.
Pricing type:
The pricing requirement was to charge at a flat rate by number of requests minus the free requests per billing period under the sign-up bonus offer. We have set things up carefully to ensure the Compound Aggregation factors in the appropriate number of free requests.
We can therefore implement this pricing, using a Tiered pricing structure with a single pricing band configured:
Ignore the Prepayment/Balance overage pricing settings. We are not setting up any Prepayments or Balances on Accounts in the current example.
Select Create pricing. The Create pricing page closes and you are returned to the Pricing editor page:
We now have a Product Plan priced according to the pricing requirements.
Step 6: Create Test Account and Attach Priced Plan
An Account represents one of your end-customers, and contains the end-customer name and contact details:
When you attach a priced Plan to an Account, this creates a link between them to create an Account Plan. Attaching priced Plans to an Account determines the charges incurred by customers who are put on the Plan when they consume one of your Products.
For this step, we’ll create a test Account for the example and attach our priced Plan to it.To create a test Account and attach Plan:
In the main Console navigation, select Accounts. The Accounts page opens.
Select Create account. The Create page opens.
Enter the details of the new Account:
Name and Code. Required fields.
Note that when you enter a Name and click in the Code field, a default code is entered based on the name you’ve entered, which you can then edit as required.
Email Address. In addition to Name and Code, this is also a required field.
Other settings. These are optional fields, such as physical address settings, which you can add later by editing the Account.
Select Create account. The Account details page for the new Account opens with the Overview tab selected:
For the worked example, we’ve created the App Hosting Customer 1 test Account.
Select the Attached plans tab.
On the Active and pending attached plans panel, select Create plan attachment. The Create page opens.
When you attach a Plan to an Account, you create an Account Plan, which lets you define the specific way in which you want the Plan to be applied to the individual Account. Note that the Account Plan you create when you attach the Plan to an Account is distinct from the Plan itself - you may want to attach the Plan to another Account but to configure the way the Plan is applied to that other Account differently.
On the Create page, leave the radio button for Plan as the default setting and enter the Plan attachment details for the Account Plan:
Use the Product drop-down to select the Product, which is App Hosting Standard for the example. The Plan drop-down selection field is enabled.
Use the Plan drop-down to select the Plan, which is App Hosting Plan 1 for the example.
Use the pop-up calendars to enter Start date and End date, which will define the period the Account Plan is active for the Account.
Ignore the Plan attachment settings - these can be left as the defaults for the current example.
Select Create plan attachment. Back on the Attached plans tab, the Account Plan is shown on the Active and pending attached plans panel:
We now have a test Account set up that will be billed according to the pricing schema we’ve configured for the Plan for any metered usage of the Product.
Step 7: Submit Data to Test Account and Check Bill
We’ll now submit some test data to our test account for App Hosting Meter 1 and App Hosting Meter 2, which will allow us to generate a Bill for the test Account and check that the usage charges on the Bill for the submitted test data are correct.
Select Accounts. On the Accounts page, select the Name hotlink text of the App Hosting Customer 1 test Account we created at Step 6. The Account details page opens with the Overview tab selected.
Select Submit usage:
A Submit usage data dialog appears. To submit usage data measurements for the Account, you must complete two stages using the dialog.
Under stage 1: Select a meter, use the Meter drop-down to select App Hosting Meter 1 and then select Next. The dialog adjusts to show stage 2: Define measurements and send:
Note that you can complete stage 2 using either a Simple or Advanced format, where the default is Simple.
For the example, we’ll use the Simple format to submit our test usage data measurements:
UID. This field is automatically populated with a unique id for the measurement. For the example, we’ll use this as our measurement id.
Timestamp. The timestamp field is also automatically populated using the date/time the dialog was opened, and again for the example we’ll use this as the timestamp for the measurement.
Meter. The Meter Code is automatically entered.
Account. The Code of the Account we’re submitting the data measurement for is automatically entered.
Data fields. The single Data Field we set up for the Meter is shown with an empty Value field.
Enter a test data Value for the Number Apps Data Field:
Select Submit usage. If the measurement is ingested successfully, under Log you’ll see a {"result" : "accepted"} message under the Log section of the Submit usage data dialog.
Note that the Submit usage data dialog refreshes with a new measurement UID and readied for another data submission.
For the example, repeat steps 3. to 5. to submit two more measures for the App Hosting Meter 1>Number Apps Data Field:
7
5
Tip: Record the Test Data Values! Keep a record of the test Values you’ve submitted. You can then calculate manually what the respective charges should be when you generate a sample Bill for the Account.
Close the Submit usage data dialog.
Repeat Steps 2 to 7, to re-open the Submit usage data dialog, but this time select App Hosting Meter 2 and submit a series of measures for the Number Requests Data Field we set up on that Meter:
250
270
120
750
Go to the test Account details page and select the Bills tab.
On the Bills tab, select Run billing. The Run billing dialog appears.
In the example, we are using monthly billing and the test data was submitted in May 2025, so we select:
June 1st2025 for Invoice date.
Note - before running bills, it can be worth double-checking that your Organization configuration has the Month Epoch set to run Bills from the 1st of a month.
Monthly for Bill Frequency.
Select Run billing. The dialog closes and your Bill job is queued.
You can select the Running tasks button at top-right in the Console, whic:
This opens the Running tasks panel and you can follow the status of your Bill job.
When the Bill has generated, it will be listed on the Bills tab for the Account. Select the Reference hotlink text to open the Bill in Bill management.
Before checking a sample Bill we’ve generated for the Account, we can calculate manually what the cumulative usage charges should be for the usage-based pricing we’ve implemented:
Number Apps. We submitted 3 values - 8, 7, and 5 - for this Data Field and configured the Max Apps Hosted simple Aggregation to target this field and give the Maximum = 8.
Number Requests. We submitted 4 values - 250, 270, 120, and 750 - for this Data Field and configured the Number App Requests simple Aggregation to target this field and give the Sum = 1390.
Our App Request Minus Free Compound Aggregation references these two simple Aggregations and applies a calculation to yield a value that allows for the sign-up bonus discount. For the test data this should mean the Account is charged for 1390 - (8 x 100) = 590 requests at the rate of $0.50 per request = $295.
For the example, we can see that the Bill based on test usage data we submitted has been calculated correctly in accordance with our usage-based pricing schema:Deploying to Production: Having submitted some metered test data against a test Account, generated a Bill for the Account, and confirmed that charges are in accordance with our pricing requirements for consumption of our Product, we can be comfortable deploying our usage-based pricing implementation to live production.
Tip: Billing beyond the first three months after sign-up bonus period expires? To ensure billing is adjusted from the fourth month of service forward, you can create a new Pricing for the same Plan that uses the Number App Requests simple Aggregation, and set a Start date for this Pricing at the 1st of the fourth month of service for the Account.
{"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":"6ae4b3832e4c4b8ea8e5ac1c","collectionId":"f4691807-992d-43f9-aab2-d179e798824c","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae4b3832e4c4b8ea8e5ac1c"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae9a09c36175fbf7124961d","clientVersion":"0.0.4045","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}],"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"guides/getting-started/metering-for-production-worked-examples/example-2-compound-aggregation-for-sign-up-bonus","slug":"/guides/getting-started/metering-for-production-worked-examples/example-2-compound-aggregation-for-sign-up-bonus","pageMetadata":{"title":"Example 2: Compound Aggregation for Sign-Up Bonus","description":"Follow a worked example using a Compound Aggregation for pricing.","href":"/guides/getting-started/metering-for-production-worked-examples/example-2-compound-aggregation-for-sign-up-bonus"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Follow a worked example using a Compound Aggregation for pricing.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,blockquote:`blockquote`,code:`code`,em:`em`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Heading,OptimizedImage,Tip}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Suppose your SaaS company provides a “build-and-host” application service, one which allows customers to develop and run software applications and host these applications on your service:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`You’ll charge customers by total number of requests made to all of their applications being hosted with your service in any given billing period.`}),`\n`,_jsx(_components.li,{children:`However, you want to offer customers a sign-up bonus for the first three months of using your service. 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.li,{children:`The sign-up bonus will be generous in this sense - if a new customer reaches a maximum of 5 applications hosted in a billing period, but by the end of the billing period has taken down 2 of them, their bonus will be calculated for the maximum number of hosted applications reached in the billing period at 500 free requests.`}),`\n`]}),`\n`,_jsx(_components.p,{children:`This topic provides a worked example to illustrate how you can use a Compound Aggregation to provide a suitable metric for pricing Product Plans and easily satisfy this SaaS UBP use case - the pricing metric the Compound Aggregation provides will ensure the sign-up bonus is allowed for when billing is run for Accounts placed on the priced Product Plans.`}),`\n`,_jsx(_components.p,{children:`The example goes on to show how to submit some test data against a test Account and then generate a Bill for the test Account and check billed amounts against submitted usage.`}),`\n`,_jsx(Heading,{level:`2`,id:`step-1-create-product`,children:`Step 1: Create Product`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.em,{children:`Products`}),` represent a product or service that you offer to your end customers. A Meter, Aggregation, Plan Template, Plan, or Pricing typically all belong to a Product.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`To create a Product:`})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In the Console, select `,_jsx(_components.strong,{children:`Products`}),`. The `,_jsx(_components.strong,{children:`Products`}),` page opens.`]}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Create product`}),`. We’ll create a single Product called `,_jsx(_components.strong,{children:`App Hosting Standard`}),`:`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746183864-wex2screen1.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=67ede06121c446656d3f0f01684a5de5`,style:{maxWidth:`min(400px, 100%)`},\"data-og-width\":`647`,width:`647`,\"data-og-height\":`509`,height:`509`,\"data-path\":`images/1746183864-wex2screen1.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746183864-wex2screen1.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=2f010adfe13ba66b9623c2273b41e351 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746183864-wex2screen1.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=48a27a56e7c35dc02790c3d282b910d7 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746183864-wex2screen1.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=27a06b3d5456f6f08a9e0b4847926c39 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746183864-wex2screen1.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=505e4eeec40076619bc9c5cf8f39f89e 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746183864-wex2screen1.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=5e9eeb814746f046a44f6dd61d698ae5 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746183864-wex2screen1.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=448bf42ebc29cdb5192f56c91344e77f 2500w`}),`\n`,_jsxs(_components.ol,{start:`3`,children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Create product`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`App Hosting Standard`}),` Product can now serve as a container for any Meters, Aggregations, Plan Templates, Plans, or Pricings we’ll need to create and configure for the example.`]}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`More Details:`}),` `,_jsx(_components.a,{href:`/guides/creating-and-managing-products`,children:`Creating and Managing Products`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`step-2-set-up-meters`,children:`Step 2: Set up Meters`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.em,{children:`Meters`}),` define the Data Fields that your system will use to submit usage data to the m3ter platform:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`As well as `,_jsx(_components.em,{children:`simple Data Fields`}),`, which collect raw usage data, you can define `,_jsx(_components.em,{children:`Derived Fields`}),` that reference and apply calculations to simple fields. For this example, we’ll create two Meters each with a single simple Data Field.`]}),`\n`,_jsxs(_components.li,{children:[`You can create Product-specific Meters or Global Meters. For the example, we’ll create two Meters for the `,_jsx(_components.strong,{children:`App Hosting Standard`}),` Product.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`To create Meters:`})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Metering`}),`. The `,_jsx(_components.strong,{children:`Meters`}),` page opens.`]}),`\n`,_jsxs(_components.li,{children:[`In the `,_jsx(_components.strong,{children:`Product`}),` drop-down, select `,_jsx(_components.strong,{children:`App Hosting Standard`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Create meter`}),`.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Here’s the set up for the first Meter to support the pricing model we want to use in the example:`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746184241-wex2screen2.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=66e01e017ab75888b8635283d8e1c564`,style:{maxWidth:`min(750px, 100%)`},\"data-og-width\":`1076`,width:`1076`,\"data-og-height\":`841`,height:`841`,\"data-path\":`images/1746184241-wex2screen2.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746184241-wex2screen2.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=a70d68699123e0bf32592f11b1edb2de 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746184241-wex2screen2.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=6986666d002ef3946b7ebdd3a81bd5cb 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746184241-wex2screen2.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=f6ec1d17197d6edc3ed76e5e1833ad94 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746184241-wex2screen2.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=69b6745eaabe72b18b9e43b28a8fb3b4 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746184241-wex2screen2.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=f4407ce5a7e38e9932c4e0857c3e871d 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746184241-wex2screen2.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=57bb11ccebf5de4e700ca24255898e55 2500w`}),`\n`,_jsxs(_components.p,{children:[`For the example, we’ve set up `,_jsx(_components.strong,{children:`App Hosting Meter 1`}),` and added the single Data Field called `,_jsx(_components.strong,{children:`Number Apps`}),` to capture usage data.`]}),`\n`,_jsxs(_components.ol,{start:`4`,children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Create meter`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Return to the `,_jsx(_components.strong,{children:`Meters`}),` pages and repeat steps `,_jsx(_components.strong,{children:`2`}),` and `,_jsx(_components.strong,{children:`3`}),` to set up a second Meter:`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746184702-wex2screen3.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=92537960288a7905d27cc320249bed55`,style:{maxWidth:`min(750px, 100%)`},\"data-og-width\":`1078`,width:`1078`,\"data-og-height\":`839`,height:`839`,\"data-path\":`images/1746184702-wex2screen3.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746184702-wex2screen3.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=8545e7903ee32c4d25328f4860916420 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746184702-wex2screen3.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=9b4e7a1b911feb426a6bbc7cce1c7248 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746184702-wex2screen3.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=271ca640f5da0e9c33a78585d1189c8e 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746184702-wex2screen3.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=b4f997e6719e90fb264a6e39e286b4dc 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746184702-wex2screen3.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=432083ff97a622b017182580e7bee013 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746184702-wex2screen3.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=4f1fabadef1b05448a1ce335054da412 2500w`}),`\n`,_jsxs(_components.p,{children:[`We’ve set up a second `,_jsx(_components.strong,{children:`App Hosting Meter 2`}),` and added a single Data Field called `,_jsx(_components.strong,{children:`Number Requests`}),` to capture usage data.`]}),`\n`,_jsxs(_components.ol,{start:`6`,children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Create meter`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`We now have a two Meters for the example, which we can use to collect usage data on any Account that consumes the `,_jsx(_components.strong,{children:`App Hosting Standard`}),` Product. This metered usage data will serve as the basis for the Compound Aggregation pricing metric we want to apply to rate Product consumption yet allow for a sign-up bonus.`]}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`More Details:`}),` `,_jsx(_components.a,{href:`/guides/usage-data-meters/reviewing-meter-options`,children:`Reviewing Meter Options`}),` and `,_jsx(_components.a,{href:`/guides/usage-data-meters/creating-meters`,children:`Creating Meters`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`step-3-define-aggregations`,children:`Step 3: Define Aggregations`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.em,{children:`Aggregations`}),` define how to transform into a single number the individual measurements submitted to a Meter Data Field as usage data. For example, you may choose to simply SUM the submitted usage data values. In this way, Aggregations define the usage-based pricing metrics you’ll use to set up pricing for your products and services.`]}),`\n`,_jsxs(_components.p,{children:[`For the usage-based pricing model we want to implement in our example, we’ll need to create two simple Aggregations based on the usage data collected by our two Meters - `,_jsx(_components.strong,{children:`App Hosting Meter 1`}),` and `,_jsx(_components.strong,{children:`App Hosting Meter 2`}),`. Each simple Aggregation will target a different Meter and field to define a metric:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`For the maximum number of hosted applications, we’ll target the `,_jsx(_components.strong,{children:`Number Apps`}),` Data Field on `,_jsx(_components.strong,{children:`App Hosting Meter 1`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`For the total number of requests made to hosted applications, we’ll target the `,_jsx(_components.strong,{children:`Number Requests`}),` Data Field on `,_jsx(_components.strong,{children:`App Hosting Meter 2`}),`.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`We’ll then create a Compound Aggregation that references these two simple Aggregations and uses a calculation to ensure the sign-up bonus is factored into the pricing metric it provides.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`To create two simple Aggregations:`})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Metering>Aggregations`}),`:`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186124-wex2screen4.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=2e11e01bee67122d72f39bda4579c2db`,style:{maxWidth:`min(130px, 100%)`},\"data-og-width\":`120`,width:`120`,\"data-og-height\":`49`,height:`49`,\"data-path\":`images/1746186124-wex2screen4.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186124-wex2screen4.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=84be3cdb0d2f8e5ed95d00207c244741 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186124-wex2screen4.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=333ce4fdb32bb72dc697e7b31a42bbfe 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186124-wex2screen4.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=8a58c706303bddd52cc13f93eac763e6 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186124-wex2screen4.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=618c2a6d71795c9b876577e524118f94 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186124-wex2screen4.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=643623a932c3e738f716a9ef2eeb1fc2 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186124-wex2screen4.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=e5bc94bb5b5a7044b0f2b7760c98feff 2500w`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Aggregations`}),` page opens.`]}),`\n`,_jsxs(_components.ol,{start:`2`,children:[`\n`,_jsxs(_components.li,{children:[`In the `,_jsx(_components.strong,{children:`Product`}),` drop-down, select `,_jsx(_components.strong,{children:`App Hosting Standard`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Create aggregation`}),`.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Here’s the setup for the first simple Aggregation:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Aggregation details`}),`:`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186565-wex2screen5.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=e9194eec0c04ce94b612b3ac1d81f3f2`,style:{maxWidth:`min(450px, 100%)`},\"data-og-width\":`538`,width:`538`,\"data-og-height\":`361`,height:`361`,\"data-path\":`images/1746186565-wex2screen5.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186565-wex2screen5.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=36a62d976c0d8618124a967051a1163a 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186565-wex2screen5.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=7e03dc9a221df166df9451825908c3ee 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186565-wex2screen5.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=f8f34196be73662c9c25314301bef47f 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186565-wex2screen5.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=1e4dd02953089c71fbd0ef4f2bf91446 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186565-wex2screen5.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=eb75468fdd00b1a746ba8d89a05a466e 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186565-wex2screen5.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=cb49e7a3a5bab575a697a42322419921 2500w`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Meter settings`}),`:`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186675-wex2screen6.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=027a2deb637ed71086b332bed590284d`,style:{maxWidth:`min(450px, 100%)`},\"data-og-width\":`538`,width:`538`,\"data-og-height\":`218`,height:`218`,\"data-path\":`images/1746186675-wex2screen6.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186675-wex2screen6.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=fd7e87da911a6bcdb7ac065d46ce3d57 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186675-wex2screen6.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=7db9cd2f31319481e54c74998e7ca0df 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186675-wex2screen6.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=b67b2c7050feadbc4d47f1bfcad55442 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186675-wex2screen6.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=6ca82165e64274759f1c51fb1da3124e 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186675-wex2screen6.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=9c0f6f3ee654117c2b0f0351029f5a70 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186675-wex2screen6.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=6b685c09a08c6c0680fd95e5397cf2ab 2500w`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Aggregation settings`}),`:`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186815-wex2screen7.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=cca4605b66658715a2e459e2dfb856e4`,style:{maxWidth:`min(450px, 100%)`},\"data-og-width\":`540`,width:`540`,\"data-og-height\":`551`,height:`551`,\"data-path\":`images/1746186815-wex2screen7.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186815-wex2screen7.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=9eb2eeea89475bacee68a969c438d202 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186815-wex2screen7.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=a23d00a6a3ec9431d1c442e0339991e7 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186815-wex2screen7.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=4f12b6c35e882303dff1b28989505bb2 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186815-wex2screen7.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=9ad489577b0a3c59e96d6ae71531bb53 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186815-wex2screen7.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=9e2e6034940434f8c23f421f13c470ce 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746186815-wex2screen7.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=89085ebee1b0885d236e75652a8fba6a 2500w`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Max Apps Hosted`}),` Aggregation targets the `,_jsx(_components.strong,{children:`Number Apps`}),` Data Field on `,_jsx(_components.strong,{children:`App Hosting Meter 1`}),` and uses the `,_jsx(_components.strong,{children:`Maximum`}),` value of the field.`]}),`\n`,_jsxs(_components.ol,{start:`4`,children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Create aggregation`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Repeat steps `,_jsx(_components.strong,{children:`3.`}),` and `,_jsx(_components.strong,{children:`4.`}),` to create a second Aggregation.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Here’s the setup for the second Aggregation:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Aggregation details`}),`:`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746187736-wex2screen8.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=e21855aaa949ac84375e69433bafb638`,style:{maxWidth:`min(450px, 100%)`},\"data-og-width\":`540`,width:`540`,\"data-og-height\":`359`,height:`359`,\"data-path\":`images/1746187736-wex2screen8.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746187736-wex2screen8.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=96339abc9bb3e0a3b2b4d9faedf6ef0f 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746187736-wex2screen8.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=8192c61ead4ab0db122482bc041077d5 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746187736-wex2screen8.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=74f87c5f2a3c47ed35dede5aa5ab10d6 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746187736-wex2screen8.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=845e90ae6036f7caefb142f9120bc2d5 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746187736-wex2screen8.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=1d0cac91e67ec1886aa6709a018f869a 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746187736-wex2screen8.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=9d1094d431058ada2cf4001a161619c1 2500w`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Meter settings`}),`:`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746187826-wex2screen9.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=9ddecce169470f1e0bc0103fe9c7454b`,style:{maxWidth:`min(450px, 100%)`},\"data-og-width\":`538`,width:`538`,\"data-og-height\":`220`,height:`220`,\"data-path\":`images/1746187826-wex2screen9.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746187826-wex2screen9.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=a51f13038ea8211af746b461e2900fea 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746187826-wex2screen9.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=e81bc7675f4212dfe98246b011d54620 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746187826-wex2screen9.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=ea3551657b36e3690da35403a74f7cb8 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746187826-wex2screen9.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=6dd37eb655a71039d0ea12edb93417f3 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746187826-wex2screen9.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=ac4f2837b2d1b6ce5bce13000af86c23 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746187826-wex2screen9.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=bced2ff6a76e271d814cffcfb731895c 2500w`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Aggregation settings`}),`:`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746187934-wex2screen10.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=0b290659bce688bece719db1e88e0420`,style:{maxWidth:`min(450px, 100%)`},\"data-og-width\":`539`,width:`539`,\"data-og-height\":`549`,height:`549`,\"data-path\":`images/1746187934-wex2screen10.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746187934-wex2screen10.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=ccedf162e0b9e51edf6051767cde2118 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746187934-wex2screen10.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=4c61405c95b9ee1f5eaaf4b5ad220ce1 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746187934-wex2screen10.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=0a1012e600ff0d49d20799847cee72b4 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746187934-wex2screen10.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=e9d439f15b1726e582412dfa5e089231 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746187934-wex2screen10.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=1d9dd533bbd260ac763ca004127bcb10 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746187934-wex2screen10.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=c80e705e72f8b3d45365866eb2ed4bec 2500w`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Number App Requests`}),` Aggregation targets the `,_jsx(_components.strong,{children:`Number Requests`}),` Data Field on `,_jsx(_components.strong,{children:`App Hosting Meter 2`}),` and uses the `,_jsx(_components.strong,{children:`Sum`}),` of values of the field.`]}),`\n`,_jsxs(_components.ol,{start:`6`,children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Create aggregation`}),`.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`We can now use these two simple Aggregations to set up a Compound Aggregation that provides the pricing metric we need to meet the sign-up bonus UBP use case.`}),`\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`}),`:`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746189013-wex2screen11.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=d77564d0c4658c3b0c59406a1cf78286`,style:{maxWidth:`min(140px, 100%)`},\"data-og-width\":`186`,width:`186`,\"data-og-height\":`48`,height:`48`,\"data-path\":`images/1746189013-wex2screen11.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746189013-wex2screen11.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=a44db88c2318b5d3b7491d7d34855010 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746189013-wex2screen11.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=5e6afe860a15f19d403190fe37150c11 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746189013-wex2screen11.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=00f56201d64710f43d3caf0bd7539eac 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746189013-wex2screen11.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=aa7a3bdc84286c2e960899a90b573c7d 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746189013-wex2screen11.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=1ce20da1148f5bb10fc5c7e4119a8aae 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746189013-wex2screen11.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=90d37047217621b4ee25b6593a76003f 2500w`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Compound aggregations`}),` page opens.`]}),`\n`,_jsxs(_components.ol,{start:`2`,children:[`\n`,_jsxs(_components.li,{children:[`In the `,_jsx(_components.strong,{children:`Product`}),` drop-down, select `,_jsx(_components.strong,{children:`App Hosting Standard`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Create compound aggregation`}),`.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Here’s the setup for the Compound Aggregation:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Compound aggregation details`}),`:`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746189303-wex2screen12.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=1eadc34dd51202fe14af7e7b8b7e45c6`,style:{maxWidth:`min(450px, 100%)`},\"data-og-width\":`540`,width:`540`,\"data-og-height\":`360`,height:`360`,\"data-path\":`images/1746189303-wex2screen12.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746189303-wex2screen12.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=edc1de6caeac842d66b74f57bdfc8efd 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746189303-wex2screen12.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=8dad2ba6b353a8f41ab78153c606cc2e 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746189303-wex2screen12.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=f4088b6f33587a5dd79917872bf1e405 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746189303-wex2screen12.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=2e1fdf71f13e1433f77e55323888aebe 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746189303-wex2screen12.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=ceb3ebe9fc1572415f4f1e09eb0a8d85 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746189303-wex2screen12.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=785ea35ece445e83e0132a34c5d97532 2500w`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Compound aggregation settings`}),`:`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746189706-wex2screen13.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=05d28b36b34cea985835fe28325d4413`,style:{maxWidth:`min(450px, 100%)`},\"data-og-width\":`538`,width:`538`,\"data-og-height\":`629`,height:`629`,\"data-path\":`images/1746189706-wex2screen13.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746189706-wex2screen13.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=1d3dce207f0478fd180fec9f249ac3ca 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746189706-wex2screen13.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=0b4d0d151b91a84571b6dc28fc8d8b03 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746189706-wex2screen13.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=c24c2c7275ef8ec7f6b091679c5b07fa 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746189706-wex2screen13.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=b2f1e2e48567582de59405eeb5f016d5 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746189706-wex2screen13.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=cfba80c755bbb2a1663596d333e1868b 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746189706-wex2screen13.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=41ae62e7f393af2696916424260020f4 2500w`}),`\n`,_jsx(_components.p,{children:`Note that for the Calculation:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`We’ve switched to `,_jsx(_components.strong,{children:`Advanced`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Entered a valid expression that references our two simple Aggregations using the format: `,_jsx(_components.code,{children:`aggregation.\u003c\u003caggregation Code>>`}),`. The Calculation will ensure that the pricing metric the Compound Aggregation provides subtracts the appropriate numbers of requests for the promised sign-up bonus.`]}),`\n`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Tip: Working with Calculations?`}),` For more details on working with calculations for Compound Aggregations, see `,_jsx(_components.a,{href:`/guides/usage-data-aggregations/compound-aggregations#compound-aggregations-referencing-values-and-fields-and-supported-syntax`,children:`Compound Aggregations - Referencing Values and Fields and Supported Syntax`}),`.`]})}),`\n`,_jsxs(_components.ol,{start:`4`,children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Create compound aggregation`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`We can now use the `,_jsx(_components.strong,{children:`App Requests Minus Free`}),` Compound Aggregation to price a Plan for the `,_jsx(_components.strong,{children:`App Hosting Standard`}),` Product.`]}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`More Details:`}),` `,_jsx(_components.a,{href:`/guides/usage-data-aggregations/reviewing-aggregation-options`,children:`Reviewing Aggregation Options`}),`, `,_jsx(_components.a,{href:`/guides/usage-data-aggregations/creating-aggregations`,children:`Creating Aggregations`}),`, and `,_jsx(_components.a,{href:`/guides/usage-data-aggregations/compound-aggregations`,children:`Compound Aggregations`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`step-4-create-product-plan`,children:`Step 4: Create Product Plan`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.em,{children:`Plans`}),` represent a pricing plan for one of your products or services. A Plan is always derived from a Plan Template and inherits settings from the Plan Template which control billing operations, such as billing frequency and currency. You can override some of these settings when you create a Plan from a Plan Template. To meet the example requirements:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`First, we’ll need a Plan Template for the `,_jsx(_components.strong,{children:`App Hosting Standard`}),` Product. We’ll configure the Plan Template:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`For monthly billing using a specific billing currency.`}),`\n`,_jsxs(_components.li,{children:[`Omit any `,_jsx(_components.strong,{children:`Standing charge`}),` or `,_jsx(_components.strong,{children:`Minimum spend`}),` amounts to be applied for each billing period.`]}),`\n`]}),`\n`]}),`\n`,_jsx(_components.li,{children:`Second, we’ll create a Product Plan based on the Plan Template.`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`To create a Product Plan Template:`})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Pricing>Plan templates`}),`:`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746190725-wex2screen14.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=c3c650797159ac2ca0748f3984f3cfab`,style:{maxWidth:`min(130px, 100%)`},\"data-og-width\":`131`,width:`131`,\"data-og-height\":`47`,height:`47`,\"data-path\":`images/1746190725-wex2screen14.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746190725-wex2screen14.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=7f88ef4636a6aa37ae5df9bf0e88e548 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746190725-wex2screen14.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=429a83b11e9254b051028c1c70fb88f6 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746190725-wex2screen14.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=34b980af14d577f87646fba5757de669 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746190725-wex2screen14.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=3916f8dc06377fee51e386fccf1ce6b9 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746190725-wex2screen14.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=0bf00bb4f7da4794b976bb236da7c40a 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746190725-wex2screen14.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=05f02813ea2aa0a1685b14463c3ad8dd 2500w`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Plan templates`}),` page opens.`]}),`\n`,_jsxs(_components.ol,{start:`2`,children:[`\n`,_jsxs(_components.li,{children:[`In the `,_jsx(_components.strong,{children:`Product`}),` drop-down, select `,_jsx(_components.strong,{children:`App Hosting Standard`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Create plan template`}),`. The `,_jsx(_components.strong,{children:`Create`}),` page opens.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Here’s the setup for our Product Plan Template:`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746190947-wex2screen15.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=5bea98f9c1d0b82b2fed769aee928cda`,style:{maxWidth:`min(450px, 100%)`},\"data-og-width\":`542`,width:`542`,\"data-og-height\":`519`,height:`519`,\"data-path\":`images/1746190947-wex2screen15.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746190947-wex2screen15.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=223d2dc3226a0cdef9a5b480c1f59cc4 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746190947-wex2screen15.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=8961d7e3c1065bf4ca37b1b84660d81d 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746190947-wex2screen15.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=015cb105640c1dea465059d08a181fc0 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746190947-wex2screen15.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=243a4ec4ab4440f5e843f14dc70067d3 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746190947-wex2screen15.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=f759b36afec3f729678bd9eae781fd60 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746190947-wex2screen15.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=8c44fffa1f09596a70e4749ff065ae86 2500w`}),`\n`,_jsxs(_components.p,{children:[`For the `,_jsx(_components.strong,{children:`App Hosting Plan Template 1`}),` we’ve:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Chosen `,_jsx(_components.strong,{children:`US dollars`}),` as the billing currency.`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Note that if `,_jsx(_components.strong,{children:`US Dollar`}),` doesn’t appear for selection in the `,_jsx(_components.strong,{children:`Currency`}),` drop-down when you are creating your Plan Template, you’ll need to create it for your Organization:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Settings>Organization`}),` and open the `,_jsx(_components.strong,{children:`Currencies`}),` tab.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Create currency`}),` and on the `,_jsx(_components.strong,{children:`Create`}),` page add `,_jsx(_components.strong,{children:`USD - US Dollar ($)`}),` as a `,_jsx(_components.strong,{children:`Standard currency`}),`. You can define the `,_jsx(_components.strong,{children:`Maximum decimal places`}),` for the currency also. Click `,_jsx(_components.strong,{children:`Create`}),` - `,_jsx(_components.strong,{children:`US Dollar`}),` will now be available for selection across your Organization.`]}),`\n`]}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Selected a monthly `,_jsx(_components.strong,{children:`Bill frequency`}),` with a `,_jsx(_components.strong,{children:`Bill interval`}),` of `,_jsx(_components.strong,{children:`1`}),`, which means Accounts put on the Plan will receive a Bill each month for a month’s period of usage.`]}),`\n`,_jsxs(_components.li,{children:[`Ignore the settings `,_jsx(_components.strong,{children:`Standing charge`}),` and `,_jsx(_components.strong,{children:`Minimum spend`}),`, which allow you to set up amounts for billing, neither of which are required for the example pricing model.`]}),`\n`]}),`\n`,_jsxs(_components.ol,{start:`4`,children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Create plan template`}),`. You are returned to the `,_jsx(_components.strong,{children:`Plan template details`}),` page.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`We can now create a Product Plan for the example based on this template.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`To create a Product Plan:`})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Pricing>Plans`}),`. The `,_jsx(_components.strong,{children:`Plans`}),` page opens.`]}),`\n`,_jsxs(_components.li,{children:[`In the `,_jsx(_components.strong,{children:`Product`}),` drop-down, select `,_jsx(_components.strong,{children:`App Hosting Standard`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Create plan`}),`. The `,_jsx(_components.strong,{children:`Create`}),` page opens.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Here’s the setup for our Product Plan:`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746191310-wex2screen16.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=13274516519c66402d3d83cf418f6bbd`,style:{maxWidth:`min(450px, 100%)`},\"data-og-width\":`540`,width:`540`,\"data-og-height\":`540`,height:`540`,\"data-path\":`images/1746191310-wex2screen16.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746191310-wex2screen16.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=6b2a61ecbbc259fc4303ae773b3c9e3f 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746191310-wex2screen16.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=13ffc8bee949e77207bd20c551051229 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746191310-wex2screen16.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=fda200a85183074cf1cac1ec8e91bb44 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746191310-wex2screen16.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=38238c2824cba934e646b9404754dfc7 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746191310-wex2screen16.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=242f265f2828a7768c0094baf4a75b4f 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746191310-wex2screen16.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=359cef5d6dd10dec70de3fe903f62e95 2500w`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Note that no `,_jsx(_components.strong,{children:`Standing charge`}),` or `,_jsx(_components.strong,{children:`Minimum spend`}),` amounts are required for the example.`]}),`\n`]}),`\n`,_jsxs(_components.ol,{start:`4`,children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Create plan`}),`. The `,_jsx(_components.strong,{children:`Plan details`}),` page opens for our new Product Plan.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`We can now price this Plan using our `,_jsx(_components.strong,{children:`App Requests Minus Free`}),` Compound Aggregation.`]}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`More Details:`}),` `,_jsx(_components.a,{href:`/guides/plans-and-pricing/working-with-plan-templates-and-plans/reviewing-configuration-options-for-plans-and-plan-templates`,children:`Reviewing Options for Plan Templates and Plans`}),` and `,_jsx(_components.a,{href:`/guides/plans-and-pricing/working-with-plan-templates-and-plans/creating-plans`,children:`Creating Plans`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`step-5-price-product-plan`,children:`Step 5: Price Product Plan`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.em,{children:`Pricing`}),` allows you to configure the cost of usage data under a specific Plan you apply to an Account, and is used to calculate bills.`]}),`\n`,_jsxs(_components.p,{children:[`We can use the `,_jsx(_components.strong,{children:`Pricing editor`}),` in the m3ter Console to quickly price up our Product Plan to meet the pricing requirements for the example.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`To price Product Plan:`})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Pricing>Pricing editor`}),`:`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746191545-wex2screen17.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=769aa3a21fc7d9f6ed89cde93ee589da`,style:{maxWidth:`min(130px, 100%)`},\"data-og-width\":`124`,width:`124`,\"data-og-height\":`50`,height:`50`,\"data-path\":`images/1746191545-wex2screen17.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746191545-wex2screen17.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=84d40fa3149793aaa15cbba9e186acea 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746191545-wex2screen17.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=c340ac290e4a226948714af9fe1d4073 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746191545-wex2screen17.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=bc2eee189010caccab572989490bb647 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746191545-wex2screen17.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=4a88fe1122d4ba784adf5baa370ea9ac 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746191545-wex2screen17.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=f661a77d5911cf65383bee3fac5085d1 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746191545-wex2screen17.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=c15b6893c7b0e29f02b2a111cf008281 2500w`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Pricing editor`}),` page opens.`]}),`\n`,_jsxs(_components.ol,{start:`2`,children:[`\n`,_jsxs(_components.li,{children:[`In the `,_jsx(_components.strong,{children:`Product`}),` drop-down, select `,_jsx(_components.strong,{children:`App Hosting Standard`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Add plans`}),`. The `,_jsx(_components.strong,{children:`Select plans`}),` dialog opens and lists all Plans created for the `,_jsx(_components.strong,{children:`App Hosting Standard`}),` Product.`]}),`\n`,_jsxs(_components.li,{children:[`Check `,_jsx(_components.strong,{children:`App Hosting Plan 1`}),` and select `,_jsx(_components.strong,{children:`Confirm`}),`. The dialog closes and the Plan is added to the `,_jsx(_components.strong,{children:`Pricing`}),` `,_jsx(_components.strong,{children:`editor`}),` page.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`We’ll use the Compound Aggregation we created at `,_jsx(_components.strong,{children:`Step 3`}),` for the usage-based metric to price the Plan in accordance with the requirements set out in the example.`]}),`\n`,_jsxs(_components.ol,{start:`5`,children:[`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Add compound aggregations`}),`. A `,_jsx(_components.strong,{children:`Select compound aggregations`}),` dialog appears and lists all Compound Aggregations created for the `,_jsx(_components.strong,{children:`App Hosting Standard`}),` Product.`]}),`\n`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Note that you might also see `,_jsx(_components.em,{children:`global`}),` Compound Aggregations listed for selection. Global Compound Aggregations are not tied to any specific Product and can be used to price Plans across all Products.`]}),`\n`]}),`\n`,_jsxs(_components.ol,{start:`6`,children:[`\n`,_jsxs(_components.li,{children:[`On the `,_jsx(_components.strong,{children:`Select compound aggregations`}),` dialog check `,_jsx(_components.strong,{children:`App Requests Minus Free`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Confirm`}),`. The dialog closes and the selected Compound Aggregation is added to the `,_jsx(_components.strong,{children:`Pricing editor`}),` page for the added Plan. You’ll see that no `,_jsx(_components.strong,{children:`Active pricing`}),` has been configured for the Plan using this Compound Aggregation.`]}),`\n`,_jsxs(_components.li,{children:[`In the pricing grid, select `,_jsx(_components.strong,{children:`Create Plan pricing`}),` for `,_jsx(_components.strong,{children:`App Requests Minus Free`}),`. The `,_jsx(_components.strong,{children:`Create`}),` pricing page opens:`]}),`\n`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`You can read off details of the Compound Aggregation being used to create the pricing at the top of the page.`}),`\n`,_jsxs(_components.li,{children:[`You can `,_jsx(_components.strong,{children:`Switch to wizard`}),` to follow an alternative streamlined pricing workflow by `,_jsx(_components.strong,{children:`Pricing type`}),`. For the example workflow, we’ll continue with the default `,_jsx(_components.em,{children:`advanced pricing format`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.ol,{start:`9`,children:[`\n`,_jsxs(_components.li,{children:[`Under `,_jsx(_components.strong,{children:`Pricing settings`}),` enter:`]}),`\n`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Start`}),` and `,_jsx(_components.strong,{children:`End`}),` dates for the period the pricing is active for the Plan.`]}),`\n`,_jsxs(_components.li,{children:[`An `,_jsx(_components.strong,{children:`Accounting product`}),` to link any Bill line items resulting from the pricing to a specific product line for your accounting purposes.`]}),`\n`,_jsxs(_components.li,{children:[`A `,_jsx(_components.strong,{children:`Description`}),` that will appear for any usage charge line items on Bills, such as `,_jsx(_components.strong,{children:`Requests Charges`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.ol,{start:`10`,children:[`\n`,_jsxs(_components.li,{children:[`Ignore the `,_jsx(_components.strong,{children:`Minimum spend settings`}),`, which are not required for the current example.`]}),`\n`,_jsxs(_components.li,{children:[`Under `,_jsx(_components.strong,{children:`Pricing settings`}),`:`]}),`\n`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Leave the `,_jsx(_components.strong,{children:`Apply as`}),` setting as the default - `,_jsx(_components.strong,{children:`Debit`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Pricing type`}),`:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`The pricing requirement was to charge at a flat rate by number of requests minus the free requests per billing period under the sign-up bonus offer. We have set things up carefully to ensure the Compound Aggregation factors in the appropriate number of free requests.`}),`\n`,_jsxs(_components.li,{children:[`We can therefore implement this pricing, using a `,_jsx(_components.strong,{children:`Tiered`}),` pricing structure with a single pricing band configured:`]}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746192982-wex2screen18.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=3faea6d1ead58b74e91eee4cf278c9e9`,style:{maxWidth:`min(600px, 100%)`},\"data-og-width\":`805`,width:`805`,\"data-og-height\":`530`,height:`530`,\"data-path\":`images/1746192982-wex2screen18.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746192982-wex2screen18.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=f3b63c5af88c2716f00df5f9d77a0fc5 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746192982-wex2screen18.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=8f2673de97bc67f003c77cacb7b8518a 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746192982-wex2screen18.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=8448cd8c0286348297b7dda2624638eb 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746192982-wex2screen18.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=2437ef9ba28eb4135ea15bd80bc8138a 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746192982-wex2screen18.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=c5745d2085d481d6d37e280838af677d 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746192982-wex2screen18.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=181a9b3d114cce016246d919a469982a 2500w`}),`\n`,_jsxs(_components.ol,{start:`12`,children:[`\n`,_jsxs(_components.li,{children:[`Ignore the `,_jsx(_components.strong,{children:`Prepayment/Balance overage pricing settings`}),`. We are not setting up any Prepayments or Balances on Accounts in the current example.`]}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Create pricing`}),`. The `,_jsx(_components.strong,{children:`Create`}),` pricing page closes and you are returned to the `,_jsx(_components.strong,{children:`Pricing editor`}),` page:`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746193268-wex2screen19.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=a758ff92aa45b09fb24236b29e1cf9d9`,style:{maxWidth:`min(450px, 100%)`},\"data-og-width\":`540`,width:`540`,\"data-og-height\":`601`,height:`601`,\"data-path\":`images/1746193268-wex2screen19.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746193268-wex2screen19.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=7f61f69c65d7a679e6820064891bbb11 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746193268-wex2screen19.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=3a4195d2115e0b659da8423775347974 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746193268-wex2screen19.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=5ef4cb053b9130a2c285b1fb067dab7c 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746193268-wex2screen19.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=8919ce19515f6ba09d3c90b138303a66 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746193268-wex2screen19.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=d8573b4c3e901e169d8304b878ac7b29 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746193268-wex2screen19.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=52e136fcaea7fc720377eb221ab6e32e 2500w`}),`\n`,_jsx(_components.p,{children:`We now have a Product Plan priced according to the pricing requirements.`}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`More Details:`}),` `,_jsx(_components.a,{href:`/guides/plans-and-pricing/pricing-plans/reviewing-pricing-options-and-pricing-plans`,children:`Reviewing Pricing Options for Plans and Plan Templates`}),` and `,_jsx(_components.a,{href:`/guides/plans-and-pricing/pricing-plans/pricing-plans`,children:`Pricing Plans and Plan Templates`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`step-6-create-test-account-and-attach-priced-plan`,children:`Step 6: Create Test Account and Attach Priced Plan`}),`\n`,_jsxs(_components.p,{children:[`An `,_jsx(_components.em,{children:`Account`}),` represents one of your end-customers, and contains the end-customer name and contact details:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`When you attach a priced Plan to an Account, this creates a link between them to create an `,_jsx(_components.em,{children:`Account Plan`}),`. Attaching priced Plans to an Account determines the charges incurred by customers who are put on the Plan when they consume one of your Products.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`For this step, we’ll create a test Account for the example and attach our priced Plan to it.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`To create a test Account and attach Plan:`})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In the main Console navigation, select `,_jsx(_components.strong,{children:`Accounts`}),`. The `,_jsx(_components.strong,{children:`Accounts`}),` page opens.`]}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Create account`}),`. The `,_jsx(_components.strong,{children:`Create`}),` page opens.`]}),`\n`,_jsx(_components.li,{children:`Enter the details of the new Account:`}),`\n`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Name`}),` and `,_jsx(_components.strong,{children:`Code`}),`. Required fields.`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Note that when you enter a `,_jsx(_components.strong,{children:`Name`}),` and click in the `,_jsx(_components.strong,{children:`Code`}),` field, a default code is entered based on the name you’ve entered, which you can then edit as required.`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Email Address`}),`. In addition to `,_jsx(_components.strong,{children:`Name`}),` and `,_jsx(_components.strong,{children:`Code`}),`, this is also a required field.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Other settings`}),`. These are optional fields, such as physical address settings, which you can add later by editing the Account.`]}),`\n`]}),`\n`,_jsxs(_components.ol,{start:`4`,children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Create account.`}),` The `,_jsx(_components.strong,{children:`Account details`}),` page for the new Account opens with the `,_jsx(_components.strong,{children:`Overview`}),` tab selected:`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746193908-wex2screen20.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=bf23feee5af15a8ccc2472fb84f97a22`,alt:``,\"data-og-width\":`1186`,width:`1186`,\"data-og-height\":`357`,height:`357`,\"data-path\":`images/1746193908-wex2screen20.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746193908-wex2screen20.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=6f11b4cf4057d0da754bb253e6daf576 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746193908-wex2screen20.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=e6053de894caa595bdc64a61dd27f81e 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746193908-wex2screen20.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=3c18da17ec86917b1b8f84aa031c0828 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746193908-wex2screen20.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=04d8dc9f381ba2da4c6c4b234e1ee272 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746193908-wex2screen20.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=d0c716d96938230e2f544a92cf9407bf 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746193908-wex2screen20.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=4d384301a42d2103961556f9b710f5e0 2500w`}),`\n`,_jsxs(_components.p,{children:[`For the worked example, we’ve created the `,_jsx(_components.strong,{children:`App Hosting Customer 1`}),` test Account.`]}),`\n`,_jsxs(_components.ol,{start:`5`,children:[`\n`,_jsxs(_components.li,{children:[`Select the `,_jsx(_components.strong,{children:`Attached plans`}),` tab.`]}),`\n`,_jsxs(_components.li,{children:[`On the `,_jsx(_components.strong,{children:`Active and pending attached plans`}),` panel, select `,_jsx(_components.strong,{children:`Create plan attachment`}),`. The `,_jsx(_components.strong,{children:`Create`}),` page opens.`]}),`\n`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`When you attach a Plan to an Account, you create an `,_jsx(_components.em,{children:`Account Plan`}),`, which lets you define the specific way in which you want the Plan to be applied to the individual Account. Note that the Account Plan you create when you attach the Plan to an Account `,_jsx(_components.em,{children:`is distinct from`}),` the Plan itself - you may want to attach the Plan to another Account but to configure the way the Plan is applied to that other Account differently.`]}),`\n`]}),`\n`,_jsxs(_components.ol,{start:`7`,children:[`\n`,_jsxs(_components.li,{children:[`On the `,_jsx(_components.strong,{children:`Create`}),` page, leave the radio button for `,_jsx(_components.strong,{children:`Plan`}),` as the default setting and enter the `,_jsx(_components.strong,{children:`Plan attachment details`}),` for the Account Plan:`]}),`\n`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Use the `,_jsx(_components.strong,{children:`Product`}),` drop-down to select the Product, which is `,_jsx(_components.strong,{children:`App Hosting Standard`}),` for the example. The Plan drop-down selection field is enabled.`]}),`\n`,_jsxs(_components.li,{children:[`Use the `,_jsx(_components.strong,{children:`Plan`}),` drop-down to select the Plan, which is `,_jsx(_components.strong,{children:`App Hosting Plan 1`}),` for the example.`]}),`\n`,_jsxs(_components.li,{children:[`Use the pop-up calendars to enter `,_jsx(_components.strong,{children:`Start date`}),` and `,_jsx(_components.strong,{children:`End date`}),`, which will define the period the Account Plan is active for the Account.`]}),`\n`]}),`\n`,_jsxs(_components.ol,{start:`8`,children:[`\n`,_jsxs(_components.li,{children:[`Ignore the `,_jsx(_components.strong,{children:`Plan attachment settings`}),` - these can be left as the defaults for the current example.`]}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Create plan attachment`}),`. Back on the `,_jsx(_components.strong,{children:`Attached plans`}),` tab, the Account Plan is shown on the `,_jsx(_components.strong,{children:`Active and pending attached plans`}),` panel:`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746194317-wex2screen21.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=15aa6256355a229d02d344165582e1dd`,style:{maxWidth:`min(800px, 100%)`},\"data-og-width\":`888`,width:`888`,\"data-og-height\":`140`,height:`140`,\"data-path\":`images/1746194317-wex2screen21.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746194317-wex2screen21.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=d853b2140c1faee37088026e5f921c2a 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746194317-wex2screen21.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=21fba3dc41c89ddc67873d195674f253 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746194317-wex2screen21.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=65704aba15908d81ab748ce7482af57b 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746194317-wex2screen21.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=6bed3d1c51a133d8a187b55643bb1414 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746194317-wex2screen21.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=ec9b1c8f54929d84429ae0ad054ed517 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746194317-wex2screen21.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=32b79a12f68be83b70616f1234b0a74d 2500w`}),`\n`,_jsx(_components.p,{children:`We now have a test Account set up that will be billed according to the pricing schema we’ve configured for the Plan for any metered usage of the Product.`}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`More Details:`}),` `,_jsx(_components.a,{href:`/guides/end-customer-accounts/creating-an-account`,children:`Creating an Account`}),` and `,_jsx(_components.a,{href:`/guides/end-customer-accounts/attaching-plans-to-an-account`,children:`Attaching Plans to an Account`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`step-7-submit-data-to-test-account-and-check-bill`,children:`Step 7: Submit Data to Test Account and Check Bill`}),`\n`,_jsxs(_components.p,{children:[`We’ll now submit some test data to our test account for `,_jsx(_components.strong,{children:`App Hosting Meter 1`}),` and `,_jsx(_components.strong,{children:`App Hosting Meter 2`}),`, which will allow us to generate a Bill for the test Account and check that the usage charges on the Bill for the submitted test data are correct.`]}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Accounts`}),`. On the `,_jsx(_components.strong,{children:`Accounts`}),` page, select the `,_jsx(_components.strong,{children:`Name`}),` hotlink text of the `,_jsx(_components.strong,{children:`App Hosting Customer 1`}),` test Account we created at `,_jsx(_components.strong,{children:`Step 6`}),`. The `,_jsx(_components.strong,{children:`Account details`}),` page opens with the `,_jsx(_components.strong,{children:`Overview`}),` tab selected.`]}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Submit usage`}),`:`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746194749-wex2screen22.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=6915fa288a577f7411a988e628394e0a`,style:{maxWidth:`min(200px, 100%)`},\"data-og-width\":`287`,width:`287`,\"data-og-height\":`314`,height:`314`,\"data-path\":`images/1746194749-wex2screen22.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746194749-wex2screen22.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=c7fa4239c4939d22fd99353415c2891f 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746194749-wex2screen22.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=fb6ed8649d6f015abf3ce872f9587e85 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746194749-wex2screen22.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=2e794184ae00e337a881fb4919bb9303 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746194749-wex2screen22.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=158ed429702f8e21e21fc4782a0f99be 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746194749-wex2screen22.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=55cd207e956d221eccbb767973fd4b14 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746194749-wex2screen22.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=576ca72a2d0f3055816e8122976573cb 2500w`}),`\n`,_jsxs(_components.p,{children:[`A `,_jsx(_components.strong,{children:`Submit usage data`}),` dialog appears. To submit usage data measurements for the Account, you must complete two stages using the dialog.`]}),`\n`,_jsxs(_components.ol,{start:`3`,children:[`\n`,_jsxs(_components.li,{children:[`Under stage `,_jsx(_components.strong,{children:`1: Select a meter`}),`, use the `,_jsx(_components.strong,{children:`Meter`}),` drop-down to select `,_jsx(_components.strong,{children:`App Hosting Meter 1`}),` and then select `,_jsx(_components.strong,{children:`Next`}),`. The dialog adjusts to show stage `,_jsx(_components.strong,{children:`2: Define measurements and send:`})]}),`\n`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Note that you can complete stage 2 using either a `,_jsx(_components.strong,{children:`Simple`}),` or `,_jsx(_components.strong,{children:`Advanced`}),` format, where the default is `,_jsx(_components.strong,{children:`Simple`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`For the example, we’ll use the `,_jsx(_components.strong,{children:`Simple`}),` format to submit our test usage data measurements:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`UID`}),`. This field is automatically populated with a unique id for the measurement. For the example, we’ll use this as our measurement id.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Timestamp`}),`. The timestamp field is also automatically populated using the date/time the dialog was opened, and again for the example we’ll use this as the timestamp for the measurement.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Meter`}),`. The Meter `,_jsx(_components.strong,{children:`Code`}),` is automatically entered.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Account`}),`. The `,_jsx(_components.strong,{children:`Code`}),` of the Account we’re submitting the data measurement for is automatically entered.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Data fields`}),`. The single Data Field we set up for the Meter is shown with an empty `,_jsx(_components.strong,{children:`Value`}),` field.`]}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.ol,{start:`4`,children:[`\n`,_jsxs(_components.li,{children:[`Enter a test data `,_jsx(_components.strong,{children:`Value`}),` for the `,_jsx(_components.strong,{children:`Number Apps`}),` Data Field:`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746195054-wex2screen23.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=691317c29f9a7e1532e0953834274c9b`,style:{maxWidth:`min(650px, 100%)`},\"data-og-width\":`931`,width:`931`,\"data-og-height\":`745`,height:`745`,\"data-path\":`images/1746195054-wex2screen23.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746195054-wex2screen23.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=b6ba33b6e42ce21ea6aa3115bf62de0a 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746195054-wex2screen23.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=a8984d9a343b47b531a26b01134229da 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746195054-wex2screen23.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=2e94845195c6a33233d3b10cb47b6cd7 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746195054-wex2screen23.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=b48ce98fe1a6fc3105c9ef0c70413276 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746195054-wex2screen23.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=06f977f80e96979860ebc741170de839 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746195054-wex2screen23.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=f604442d99fbbabc6e7f90ed4f9f39c5 2500w`}),`\n`,_jsxs(_components.ol,{start:`5`,children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Submit usage`}),`. If the measurement is ingested successfully, under `,_jsx(_components.strong,{children:`Log`}),` you’ll see a `,_jsx(_components.code,{children:`{\"result\" : \"accepted\"}`}),` message under the `,_jsx(_components.strong,{children:`Log`}),` section of the `,_jsx(_components.strong,{children:`Submit usage data`}),` dialog.`]}),`\n`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Note that the `,_jsx(_components.strong,{children:`Submit usage data`}),` dialog refreshes with a new measurement `,_jsx(_components.strong,{children:`UID`}),` and readied for another data submission.`]}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/ntmr935RNY-8c51a/images/WEx2Screen27.png?fit=max\u0026auto=format\u0026n=ntmr935RNY-8c51a\u0026q=85\u0026s=0bbc037ede3d7e17aa7e8f59ed04de5c`,alt:`W Ex2screen27`,\"data-og-width\":`930`,width:`930`,\"data-og-height\":`745`,height:`745`,\"data-path\":`images/WEx2Screen27.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/ntmr935RNY-8c51a/images/WEx2Screen27.png?w=280\u0026fit=max\u0026auto=format\u0026n=ntmr935RNY-8c51a\u0026q=85\u0026s=3bdfb227c9ce7ceaa2208812059e70df 280w, https://mintcdn.com/m3ter/ntmr935RNY-8c51a/images/WEx2Screen27.png?w=560\u0026fit=max\u0026auto=format\u0026n=ntmr935RNY-8c51a\u0026q=85\u0026s=3dd10da3b9ab38f5422cfe6198e8c6e3 560w, https://mintcdn.com/m3ter/ntmr935RNY-8c51a/images/WEx2Screen27.png?w=840\u0026fit=max\u0026auto=format\u0026n=ntmr935RNY-8c51a\u0026q=85\u0026s=08be2f0c58c34bb616fed1dd7b95ac48 840w, https://mintcdn.com/m3ter/ntmr935RNY-8c51a/images/WEx2Screen27.png?w=1100\u0026fit=max\u0026auto=format\u0026n=ntmr935RNY-8c51a\u0026q=85\u0026s=fa4442d9153a1026cffd2fe4386bbd76 1100w, https://mintcdn.com/m3ter/ntmr935RNY-8c51a/images/WEx2Screen27.png?w=1650\u0026fit=max\u0026auto=format\u0026n=ntmr935RNY-8c51a\u0026q=85\u0026s=434fe00057b9c54e009e45f40f2937df 1650w, https://mintcdn.com/m3ter/ntmr935RNY-8c51a/images/WEx2Screen27.png?w=2500\u0026fit=max\u0026auto=format\u0026n=ntmr935RNY-8c51a\u0026q=85\u0026s=4a2218fa5c3d58b86b16a1f073c561ea 2500w`}),`\n`,_jsxs(_components.ol,{start:`6`,children:[`\n`,_jsxs(_components.li,{children:[`For the example, repeat steps `,_jsx(_components.strong,{children:`3`}),`. to `,_jsx(_components.strong,{children:`5`}),`. to submit two more measures for the `,_jsx(_components.strong,{children:`App Hosting Meter 1>Number Apps`}),` Data Field:`]}),`\n`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`7`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`5`})}),`\n`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Tip: Record the Test Data Values!`}),` Keep a record of the test `,_jsx(_components.strong,{children:`Values`}),` you’ve submitted. You can then calculate manually what the respective charges should be when you generate a sample Bill for the Account.`]})}),`\n`,_jsxs(_components.ol,{start:`7`,children:[`\n`,_jsxs(_components.li,{children:[`Close the `,_jsx(_components.strong,{children:`Submit usage data`}),` dialog.`]}),`\n`,_jsxs(_components.li,{children:[`Repeat Steps `,_jsx(_components.strong,{children:`2`}),` to `,_jsx(_components.strong,{children:`7`}),`, to re-open the `,_jsx(_components.strong,{children:`Submit usage data`}),` dialog, but this time select `,_jsx(_components.strong,{children:`App Hosting Meter 2`}),` and submit a series of measures for the `,_jsx(_components.strong,{children:`Number Requests`}),` Data Field we set up on that Meter:`]}),`\n`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`250`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`270`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`120`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`750`})}),`\n`]}),`\n`,_jsxs(_components.ol,{start:`9`,children:[`\n`,_jsxs(_components.li,{children:[`Go to the test Account details page and select the `,_jsx(_components.strong,{children:`Bills`}),` tab.`]}),`\n`,_jsxs(_components.li,{children:[`On the `,_jsx(_components.strong,{children:`Bills`}),` tab, select `,_jsx(_components.strong,{children:`Run billing`}),`. The `,_jsx(_components.strong,{children:`Run billing`}),` dialog appears.`]}),`\n`,_jsx(_components.li,{children:`In the example, we are using monthly billing and the test data was submitted in May 2025, so we select:`}),`\n`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`June 1st`}),` `,_jsx(_components.strong,{children:`2025`}),` for `,_jsx(_components.strong,{children:`Invoice date`}),`.`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Note - before running bills, it can be worth double-checking that your Organization configuration has the `,_jsx(_components.strong,{children:`Month Epoch`}),` set to run Bills from the 1st of a month.`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Monthly`}),` for `,_jsx(_components.strong,{children:`Bill Frequency`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.ol,{start:`12`,children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Run billing`}),`. The dialog closes and your Bill job is queued.`]}),`\n`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`You can select the `,_jsx(_components.strong,{children:`Running tasks`}),` button at top-right in the Console, whic:`]}),`\n`,_jsxs(_components.li,{children:[`This opens the `,_jsx(_components.strong,{children:`Running tasks`}),` panel and you can follow the status of your Bill job.`]}),`\n`]}),`\n`,_jsxs(_components.ol,{start:`13`,children:[`\n`,_jsxs(_components.li,{children:[`When the Bill has generated, it will be listed on the `,_jsx(_components.strong,{children:`Bills`}),` tab for the Account. Select the `,_jsx(_components.strong,{children:`Reference`}),` hotlink text to open the Bill in `,_jsx(_components.strong,{children:`Bill management`}),`.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Before checking a sample Bill we’ve generated for the Account, we can calculate manually what the cumulative usage charges should be for the usage-based pricing we’ve implemented:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Number Apps`}),`. We submitted 3 values - `,_jsx(_components.strong,{children:`8`}),`, `,_jsx(_components.strong,{children:`7`}),`, and `,_jsx(_components.strong,{children:`5`}),` - for this Data Field and configured the `,_jsx(_components.strong,{children:`Max Apps Hosted`}),` simple Aggregation to target this field and give the `,_jsx(_components.strong,{children:`Maximum`}),` = `,_jsx(_components.strong,{children:`8`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Number Requests`}),`. We submitted `,_jsx(_components.strong,{children:`4`}),` values - `,_jsx(_components.strong,{children:`250`}),`, `,_jsx(_components.strong,{children:`270`}),`, `,_jsx(_components.strong,{children:`120`}),`, and `,_jsx(_components.strong,{children:`750`}),` - for this Data Field and configured the `,_jsx(_components.strong,{children:`Number App Requests`}),` simple Aggregation to target this field and give the `,_jsx(_components.strong,{children:`Sum`}),` = `,_jsx(_components.strong,{children:`1390`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Our `,_jsx(_components.strong,{children:`App Request Minus Free`}),` Compound Aggregation references these two simple Aggregations and applies a calculation to yield a value that allows for the sign-up bonus discount. For the test data this should mean the Account is charged for `,_jsx(_components.strong,{children:`1390`}),` - `,_jsx(_components.strong,{children:`(8 x 100)`}),` = `,_jsx(_components.strong,{children:`590`}),` requests at the rate of `,_jsx(_components.strong,{children:`$0.50`}),` per request = `,_jsx(_components.strong,{children:`$295`}),`.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`For the example, we can see that the Bill based on test usage data we submitted has been calculated correctly in accordance with our usage-based pricing schema:`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746199466-wex2screen26a.png?fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=1518c9bd93b193782ef448db4fbbb18e`,style:{maxWidth:`min(850px, 100%)`},\"data-og-width\":`1186`,width:`1186`,\"data-og-height\":`783`,height:`783`,\"data-path\":`images/1746199466-wex2screen26a.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746199466-wex2screen26a.png?w=280\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=40edc4ed3b8265ac426378e7df0e462a 280w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746199466-wex2screen26a.png?w=560\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=9cd6832ac00d16918910a077d07303ac 560w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746199466-wex2screen26a.png?w=840\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=3c4442974746758bef47a9278e56dba3 840w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746199466-wex2screen26a.png?w=1100\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=29c5183d0063153e35c427b4818baa16 1100w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746199466-wex2screen26a.png?w=1650\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=3beb17c0b63bbf7335dce13fe1f7784e 1650w, https://mintcdn.com/m3ter/f13HbMnZJAPh4iYI/images/1746199466-wex2screen26a.png?w=2500\u0026fit=max\u0026auto=format\u0026n=f13HbMnZJAPh4iYI\u0026q=85\u0026s=37b0dd40d493d182f7a6dfb9775274b0 2500w`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Deploying to Production`}),`: Having submitted some metered test data against a test Account, generated a Bill for the Account, and confirmed that charges are in accordance with our pricing requirements for consumption of our Product, we can be comfortable deploying our usage-based pricing implementation to live production.`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Tip: Billing beyond the first three months after sign-up bonus period expires?`}),` To ensure billing is adjusted from the fourth month of service forward, you can create a new Pricing for the same Plan that uses the `,_jsx(_components.strong,{children:`Number App Requests`}),` simple Aggregation, and set a `,_jsx(_components.strong,{children:`Start date`}),` for this Pricing at the 1st of the fourth month of service for the Account.`]})}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`More Details:`}),` `,_jsx(_components.a,{href:`/guides/billing-and-usage-data/submitting-usage-data/submitting-test-usage-data`,children:`Submitting Test Usage Data`}),` and `,_jsx(_components.a,{href:`/guides/billing-and-usage-data/running-viewing-and-managing-bills/running-bills-and-viewing-bill-details#running-bills-manually`,children:`Running Bills Manually`})]}),`\n`]})]})}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":"Example 2: Compound Aggregation for Sign-Up Bonus","description":"Follow a worked example using a Compound Aggregation for pricing.","href":"/guides/getting-started/metering-for-production-worked-examples/example-2-compound-aggregation-for-sign-up-bonus"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Step 1: Create Product","slug":"step-1-create-product","depth":2,"children":[]},{"title":"Step 2: Set up Meters","slug":"step-2-set-up-meters","depth":2,"children":[]},{"title":"Step 3: Define Aggregations","slug":"step-3-define-aggregations","depth":2,"children":[]},{"title":"Step 4: Create Product Plan","slug":"step-4-create-product-plan","depth":2,"children":[]},{"title":"Step 5: Price Product Plan","slug":"step-5-price-product-plan","depth":2,"children":[]},{"title":"Step 6: Create Test Account and Attach Priced Plan","slug":"step-6-create-test-account-and-attach-priced-plan","depth":2,"children":[]},{"title":"Step 7: Submit Data to Test Account and Check Bill","slug":"step-7-submit-data-to-test-account-and-check-bill","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"m3ter","siteName":"m3ter Documentation","title":"Example 2: Compound Aggregation for Sign-Up Bonus - m3ter Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-02-17T10:43:09.920Z","originalFileLocation":"guides/getting-started/metering-for-production-worked-examples/example-2-compound-aggregation-for-sign-up-bonus.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=\"description\" content=\"Follow a worked example using a Compound Aggregation for pricing.\">\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=\"Example 2: Compound Aggregation for Sign-Up Bonus - m3ter Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Follow a worked example using a Compound Aggregation for pricing.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"m3ter Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.m3ter.com/guides/getting-started/metering-for-production-worked-examples/example-2-compound-aggregation-for-sign-up-bonus\">\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=Worked+Examples\u0026amp;title=Example+2%3A+Compound+Aggregation+for+Sign-Up+Bonus\u0026amp;description=Follow+a+worked+example+using+a+Compound+Aggregation+for+pricing.\u0026amp;theme=a12cf6d8598fbb808e7ba8a7\u0026amp;signature=2113485e061af8b29249643e8a4a70e47533cbc5c2f218a83e5967f40531b155\">\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=\"Example 2: Compound Aggregation for Sign-Up Bonus - m3ter Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Follow a worked example using a Compound Aggregation for pricing.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://m3ter.mintlify.app/_mintlify/api/og/v2?division=Worked+Examples\u0026amp;title=Example+2%3A+Compound+Aggregation+for+Sign-Up+Bonus\u0026amp;description=Follow+a+worked+example+using+a+Compound+Aggregation+for+pricing.\u0026amp;theme=a12cf6d8598fbb808e7ba8a7\u0026amp;signature=2113485e061af8b29249643e8a4a70e47533cbc5c2f218a83e5967f40531b155\">\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/getting-started/metering-for-production-worked-examples/example-2-compound-aggregation-for-sign-up-bonus\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/guides/getting-started/metering-for-production-worked-examples/example-2-compound-aggregation-for-sign-up-bonus.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/getting-started/metering-for-production-worked-examples/example-2-compound-aggregation-for-sign-up-bonus#webpage\",\"url\":\"https://docs.m3ter.com/guides/getting-started/metering-for-production-worked-examples/example-2-compound-aggregation-for-sign-up-bonus\",\"name\":\"Example 2: Compound Aggregation for Sign-Up Bonus\",\"description\":\"Follow a worked example using a Compound Aggregation for pricing.\",\"dateModified\":\"2026-02-17T10:43:09.920Z\",\"isPartOf\":{\"@id\":\"https://docs.m3ter.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.m3ter.com/guides/getting-started/metering-for-production-worked-examples/example-2-compound-aggregation-for-sign-up-bonus#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.m3ter.com/guides/getting-started/metering-for-production-worked-examples/example-2-compound-aggregation-for-sign-up-bonus#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\":\"Getting Started\",\"item\":\"https://docs.m3ter.com/guides/getting-started\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Worked Examples\",\"item\":\"https://docs.m3ter.com/guides/getting-started/metering-for-production-worked-examples\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Example 2: Compound Aggregation for Sign-Up Bonus\",\"item\":\"https://docs.m3ter.com/guides/getting-started/metering-for-production-worked-examples/example-2-compound-aggregation-for-sign-up-bonus\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.m3ter.com/guides/getting-started/metering-for-production-worked-examples/example-2-compound-aggregation-for-sign-up-bonus#article\",\"headline\":\"Example 2: Compound Aggregation for Sign-Up Bonus\",\"name\":\"Example 2: Compound Aggregation for Sign-Up Bonus\",\"description\":\"Follow a worked example using a Compound Aggregation for pricing.\",\"url\":\"https://docs.m3ter.com/guides/getting-started/metering-for-production-worked-examples/example-2-compound-aggregation-for-sign-up-bonus\",\"mainEntityOfPage\":{\"@id\":\"https://docs.m3ter.com/guides/getting-started/metering-for-production-worked-examples/example-2-compound-aggregation-for-sign-up-bonus#webpage\"},\"dateModified\":\"2026-02-17T10:43:09.920Z\",\"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","description":"Follow a detailed example with step-by-step instructions on how to set up the pricing metrics, submit test data, generate bills, and verify billing amounts against usage.","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","description":"Detailed example using a segmented Aggregation for pricing.","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","href":"/guides/usage-data-aggregations/creating-global-aggregations"},{"title":"Compound Aggregations","href":"/guides/usage-data-aggregations/compound-aggregations"},{"title":"Working with Compound Aggregation Calculations","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":"Example 2: Compound Aggregation for Sign-Up Bonus - m3ter Documentation","buildId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","deploymentId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","dynamics":["a74be98ba7"],"chunks":["zoom-image-lightbox-eHyQ0tlO.js","lightbox-handle-r17bVUz3.js"]}