> For the complete documentation index, see [llms.txt](https://library.zoom.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://library.zoom.com/business-services/zoom-contact-center/expert-insights/custom-measures.md).

# Custom Measures

## Introduction

{% embed url="<https://zoom.us/clips/share/yoIoOU0_REijt30t7Obvgg>" %}

In fast-paced contact center environments, one size rarely fits all when it comes to performance tracking. **Custom Measures** empower supervisors, administrators, and decision-makers to define the metrics that matter most to their operations.

By combining existing data fields (such as handle time, or wait time) with built-in functions (such as aggregation, arithmetic, comparison, or logical operations), you can define new measures that reflect your unique business goals and reporting needs.

With Custom Measures, teams gain the flexibility to take predefined reports to the next level and focus on the insights that drive continuous improvement. Whether it’s aligning metrics with strategic objectives, comparing agent performance across tailored benchmarks, or uncovering new operational trends, this feature provides the tools to measure success on your own terms.

## Prerequisites

Custom Measures is available for users with either a Premium or Elite Zoom Contact Center license.Users must be granted **Edit** permissions for Custom Measures in their Zoom Contact Center role. To set this permission:

1. Navigate to **Contact Center Management** → **Roles**.
2. Select the role you wish to edit.
3. Click the **CX Analytics** tab.
4. In the **Permissions** section, locate and enable the **Custom Measures** permission.

<div data-with-frame="true"><figure><img src="/files/JHP3htdZsC6G9pzrWqPc" alt=""><figcaption></figcaption></figure></div>

5. Click the **Save** button.

## Creating a Custom Measure

1. Log in to the Zoom admin portal.
2. Navigate to **Analytics & Reports** → **CX Analytics** → **Custom Measures**.
3. You will find a list of data sets categorized as follows:

   1. **Dashboard intraday** datasets (real time)
   2. **Report datasets** (historical)

   <div data-with-frame="true"><figure><img src="/files/AOjRd12y4ZwBIwBiNgt2" alt=""><figcaption></figcaption></figure></div>
4. Select a dataset in which you would like to create a custom measure.

{% hint style="info" %}
To create an effective custom measure, start by choosing the dataset that best fits your needs. Keep in mind:

1. Custom measures are unique to the dataset you select and won't appear in reports built from other datasets.
2. When you build formulas, you'll have access to all metrics available within your chosen dataset.

Selecting the right dataset ensures your custom measures are accurate, relevant, and fully aligned with your reporting goals.
{% endhint %}

5. Click the **Add** button and select **New measure**.
6. Give the custom measure a name, select a folder, and then click **Add**.

<div data-with-frame="true"><figure><img src="/files/gjivF37N5O2af3HhFPNS" alt="" width="563"><figcaption></figcaption></figure></div>

{% hint style="info" %}
If you would like to organize your custom measures, you can optionally create folders from the Add menu. Once your folders have been created, you can select an appropriate folder when creating a custom measure.
{% endhint %}

## Custom Measures Editor

### Function Editor vs. Formula Editor

When creating a new custom measure you will have two options: the **Function Editor** and the **Formula Editor**. By default, the Function Editor will appear first. To switch to the Formula Editor, click the Formula Editor toggle.

<div data-with-frame="true"><img src="https://file-paa.zoom.us/file/SxS_GNBkQiarISxAtN_hxA?filename=image.png&#x26;jwt=eyJrIjoidnQvK3BVSSsiLCJhbGciOiJFUzI1NiJ9.eyJpYXQiOjE3ODE1NTIyMTIsImhkaWciOmZhbHNlLCJpaWMiOiJhdzEiLCJkaWciOiI2ZDA1NjE0ZjkyMTYxZmUyZjdkMWRhMmZlYTcxM2EwMTIyMDIyNzhjMTZkOGVmZTYxNGQxM2Y0NjI0ZTM4ZDdhIiwib3JpIjoibHlueC1pbnRlcmFjdGlvbiIsImlzcyI6ImZpbGUiLCJhdWQiOiJ6ZnMiLCJleHAiOjE3ODE1NTMxMTJ9.ZgkemX8eyODNFwPMJXCY28bmSC8PPZphZ_zQVmIGkTXYN6-xN1gc5_D1tk_mkmKSE9E9UW7HGIGRKok3YNYZ1g&#x26;response-cache-control=public%2C%20max-age%3D7776000%2C%20immutable&#x26;response-no-vary-search=key-order%2C%20params%3D%28%22jwt%22%20%22Policy%22%20%22Signature%22%20%22Key-Pair-Id%22%20%22verify%22%29&#x26;Policy=eyJTdGF0ZW1lbnQiOlt7IkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTc4MTU1MzExMn19LCJSZXNvdXJjZSI6Imh0dHBzOi8vZmlsZS1wYWEuem9vbS51cy9maWxlL1N4U19HTkJrUWlhcklTeEF0Tl9oeEE~ZmlsZW5hbWU9aW1hZ2UucG5nJmp3dD1leUpySWpvaWRuUXZLM0JWU1NzaUxDSmhiR2NpT2lKRlV6STFOaUo5LmV5SnBZWFFpT2pFM09ERTFOVEl5TVRJc0ltaGthV2NpT21aaGJITmxMQ0pwYVdNaU9pSmhkekVpTENKa2FXY2lPaUkyWkRBMU5qRTBaamt5TVRZeFptVXlaamRrTVdSaE1tWmxZVGN4TTJFd01USXlNREl5Tnpoak1UWmtPR1ZtWlRZeE5HUXhNMlkwTmpJMFpUTTRaRGRoSWl3aWIzSnBJam9pYkhsdWVDMXBiblJsY21GamRHbHZiaUlzSW1semN5STZJbVpwYkdVaUxDSmhkV1FpT2lKNlpuTWlMQ0psZUhBaU9qRTNPREUxTlRNeE1USjkuWmdrZW1YOGV5T0RORndQTUpYQ1kyOGJtU0M4UFBacGhaX3pRVm1JR2tUWFlONi14TjFnYzVfRDF0a19ta21LU0U5RTlVVzdIR0lHUktvazNZTllaMWcmcmVzcG9uc2UtY2FjaGUtY29udHJvbD1wdWJsaWMlMkMlMjBtYXgtYWdlJTNENzc3NjAwMCUyQyUyMGltbXV0YWJsZSZyZXNwb25zZS1uby12YXJ5LXNlYXJjaD1rZXktb3JkZXIlMkMlMjBwYXJhbXMlM0QlMjglMjJqd3QlMjIlMjAlMjJQb2xpY3klMjIlMjAlMjJTaWduYXR1cmUlMjIlMjAlMjJLZXktUGFpci1JZCUyMiUyMCUyMnZlcmlmeSUyMiUyOSJ9XX0_&#x26;Signature=MqiAhXJtHTZ~3FP32-d3Qy87~ZnxPtvvBwkvq-j3O5aY8-E-LWNxrUcSUG1XvzteOUT7Lv~-p5JWJtPbeqCIXju-n2HCN~wO7wcP2WES7eJ~PA7oHV4J5RKwI579rGnnQL5TA4xDcPbZTbwFCrR89JPWg2D4-lp3v6cQDVqj33LjLVq-CCgcVYNpsl97nGd-4nIHEbIWclYj1ufcpn7vCArfpkhQsqTUmClFYUnStl6-oBt8mpmohE8FEcHDuY2ZmV4HMRyl7k5QrVX0Mn5GrR-UEXrwpJPHlg6rc0nXSfSTvil06y5NlP4TJvS75P8Hix4xjxI9Dx5Awg~BjbSZvw__&#x26;Key-Pair-Id=KL18RPQB3R725" alt=""></div>

{% hint style="info" %}
The Function Editor provides a quick way to build custom measures using simple functions and filters. The Formula Editor provides access to a broader set of functions and arithmetic operators and is recommended for creating more complex measures.
{% endhint %}

### Using the Function Editor

{% embed url="<https://zoom.us/clips/share/idBYj4oUQcG4Du1_HqVveg>" %}

The layout of the function editor and a description of each section is shown below.

<div data-with-frame="true"><figure><img src="/files/qtfLHlMT048ZZn95SEDG" alt=""><figcaption></figcaption></figure></div>

#### Measure Type

This will define the type of value generated by the custom measure. Select from the following:

* **Count**: Counts occurrences (e.g., 'Total holds')
* **Duration**: Calculates time length (e.g., 'Hold duration')

{% hint style="info" %}
Percentage measures require a formula. Please refer to the Formula Editor section for more information on how to create a custom measure using a formula.
{% endhint %}

#### Function (Calculation Logic)

When multiple values are present, use this setting to define how the custom measure should be calculated; whether it returns the average (avg), maximum (max), minimum (min), or total sum (sum) of those values.After selecting your preferred function, use the drop-down menu to choose the reporting metric. For example, if you were to select the `Hold duration`, the function types would operate as follows:

* **avg**: Calculates the average of hold duration across all engagements.
* **max**: Identifies the highest hold duration among all engagements.
* **min**: Identifies the lowest hold duration among all engagements.
* **sum**: Calculates the total combined hold duration for all engagements.

#### Filter (Optional)

The filter will narrow down the scope of the metric available to the function, making the measure more precise.For example, if you need to see the total number of calls that lasted more than a given duration, use the Count of `Handled` calls, but only where the `Conversation duration` was more than a given timeframe. In this scenario, configure the custom measure as follows:

<div data-with-frame="true"><figure><img src="/files/FxIJ2tLJtHtQpEYESC5k" alt=""><figcaption></figcaption></figure></div>

In this example, only `Handled` calls with a `Conversation duration` longer than 1 hour will be captured by the custom measure.

#### Validate, Save, Publish

Once you have defined your measure, function, and filter, you can validate the setup by selecting a dimension using the drop-down on the right-hand side of the editor. This will provide a live preview of the custom measure based on the last 24-hours of CX Analytics data from your contact center.

<div data-with-frame="true"><figure><img src="/files/buyTn1DeArfdiw8VeLpl" alt=""><figcaption></figcaption></figure></div>

Once you have completed the setup of the custom measure, click **Save** followed by **Publish**.

{% hint style="warning" %}
Your custom measure will not be available in your dataset until it has been Published.
{% endhint %}

### Using the Formula Editor

{% embed url="<https://zoom.us/clips/share/9w7c35nlSjSVaBtmGCZxHA>" %}

Switch to the formula editor to create more complex calculations for situations such as combining multiple fields, conditional logic, and custom business formulas.

<div data-with-frame="true"><figure><img src="/files/kqped3iNfKTBfQ4oR3fx" alt=""><figcaption></figcaption></figure></div>

#### Measure Type

The **Measure Type** defines the type of value generated by the custom measure. Select from the following:

* **Count**: Counts occurrences (e.g., 'Total holds')
* **Duration**: Calculates time length (e.g., 'Hold duration')
* **Percentage**: Calculate a percentage value (e.g., '94%')

#### Measure Editor

The Measure Editor provides you with a space to create your formulas. The following sections provide more detailed instructions to achieve this.

**Functions and Operators**

The **Functions and Operators** section provides a list of functions and operators organized into the following categories:

| Aggregation Functions | sum(), min(), max(), avg(), sumIf(), minIf(), maxIf(), avgIf()                                  |
| --------------------- | ----------------------------------------------------------------------------------------------- |
| Date Functions        | today(), now(), year(), month(), day(), hour(), minute(), weekDay(), dateDiff(), dateTruncate() |
| Control Functions     | if(), ifNull(), multiIf()                                                                       |
| Arithmetic Operators  | +, -, \*, /                                                                                     |
| Comparison Operators  | =, !=, >, >=, <, <=, in, not in                                                                 |
| Logical Operators     | and, or                                                                                         |

To insert a function or operator into your formula you can either type it manually, or click the desired item from the list and it will be entered directly into the measure editor at your cursor's current location.

{% hint style="info" %}
Hovering over any function or operator will reveal a tooltip with a description of the item and examples of how it can be used.
{% endhint %}

<div data-with-frame="true"><figure><img src="/files/35C9Tew6MTAqrlT9b1oQ" alt=""><figcaption></figcaption></figure></div>

A function must be populated using a combination of dimensions, metrics, and other conditional logic (which may include other functions). The requirements for each function or operator vary,  so check the help and associated examples to view the specific requirements.

{% hint style="warning" %}
Functions can be nested, for example you might use the output of a function as a conditional statement within another function, but your final formula must be wrapped in an aggregate function, for example: sum(Measure 1 + Measure 2).
{% endhint %}

**Inserting an Argument**

Once you've added a function into your formula you must add the appropriate arguments. To add a dimension, measure, or timestamp into a function:

1. Click the **Insert Argument** button or press the '@' key on your keyboard.
2. A popup menu will appear where you can search for and select the desired dimension, measure, or timestamp.
3. Select the required dimension, measure, or timestamp. It will appear inside your function in <mark style="color:green;">`GREEN`</mark> lettering.

<div data-with-frame="true"><figure><img src="/files/89XdyI8s9J8Iedcj8nNh" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/KXe8pL096fJeHGl6f4gy" alt=""><figcaption></figcaption></figure></div>

4. Continue to build your formula, repeating the steps above as required, and ensuring all arguments and conditions have been entered.

**Conditions**

Some functions have conditional statements that control the return value. Depending on the function you choose, you may see the following:

* condition: A condition that will evaluate to true or false
* result\_if\_true: The return value of the function if the condition evaluates to true
* result\_if\_false: The return value of the function if the condition evaluates to false

Below are some examples of functions that contain these parameters:

sumIf()

<div align="left" data-with-frame="true"><figure><img src="/files/njGxDxd6MMNjQEnJ6eWs" alt=""><figcaption></figcaption></figure></div>

if()

<div align="left" data-with-frame="true"><figure><img src="/files/w9hVX4YZO6AkJBXpNazM" alt=""><figcaption></figcaption></figure></div>

multiIf()

<div align="left" data-with-frame="true"><figure><img src="/files/wGCM0pTXg1Wk7G55Xns8" alt=""><figcaption></figcaption></figure></div>

**Example Use Case**

Imagine you want to return the total sum of abandoned calls (the result\_if\_true) but only if the wait time of those abandoned calls was between 30 and 60 seconds (the condition). In this case, use the following logic:

* function: `sumIf(result_if_true, condition)`
* result\_if\_true = <mark style="color:green;">`Abandoned`</mark>
* condition = <mark style="color:green;">`Abandon duration`</mark>` ``> 30000 and`` `<mark style="color:green;">`Abandon duration`</mark>` ``<= 60000`

Therefore, the formula would appear as follows:`sumIf(`<mark style="color:green;">`Abandoned`</mark>`,`` `<mark style="color:green;">`Abandon duration`</mark>` ``> 30000 and`` `<mark style="color:green;">`Abandon duration`</mark>` ``<= 60000)`

#### Validate, Save, Publish

Once you have defined your formula, click the **Validate** button to check its validity. Any errors will be highlighted.

Once validated, you will be presented with a **Live Preview** window on the right-hand side of the formula editor. Select a dimension from the drop-down list to view sample results from the last 7 days of actual contact center data to see a preview of what will be produced by the custom measure.

<div data-with-frame="true"><figure><img src="/files/DvnLwzSWGJiwS4l8Zbd5" alt=""><figcaption></figcaption></figure></div>

<div align="center" data-with-frame="true"><figure><img src="/files/NVx9pBa42GRksCvQo4Cj" alt=""><figcaption></figcaption></figure></div>

Once you have completed the setup of the custom measure, click **Save** followed by **Publish**.

## Organizing Custom Measures

{% embed url="<https://zoom.us/clips/share/ASl4IdkOSxa50Gr5fwzRsw>" %}

### Using Folders

Organizing your Custom Measures into folders makes them easier to locate when using them in the report editor. Here is an example of several Custom Measures organized into folders in the report editor:

<div data-with-frame="true"><figure><img src="/files/Ab3pd2YmtoMK3xpOzrJF" alt=""><figcaption></figcaption></figure></div>

To create a folder, locate the dataset that you'd like to organize, then click Add followed by **New folder**. Give your folder a name and click **Add**.

<div data-with-frame="true"><figure><img src="/files/M9yXeB6yNIgAnCBMAB5x" alt=""><figcaption></figcaption></figure></div>

To move an existing Custom Measure into your folder, locate the Custom Measure, click the ellipsis, and select **Move to another folder**. Select the appropriate folder and click **Move**.

<div data-with-frame="true"><figure><img src="/files/mSBBHgRZ5vtCCYrbbUCX" alt=""><figcaption></figcaption></figure></div>

### Data Dictionary

Custom Measures can be found in the CX Analytics data dictionary. To access the data dictionary, click the link located in the bottom left corner of the CX Analytics interface. When performing searches in the data dictionary, your Custom Measures will be included along with the default metrics.

<div data-with-frame="true"><figure><img src="/files/pcyJ39ayJmX0hGfjDUpA" alt=""><figcaption></figcaption></figure></div>

When viewing the documentation for a dataset, scroll to the bottom of the page to find the Custom Measures associated with that dataset.

<div data-with-frame="true"><figure><img src="/files/amZh4LyHKtNjkPNpSLrR" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}
If you search for a Custom Measure you will also find the associated formula.
{% endhint %}

<div data-with-frame="true"><figure><img src="/files/75hroRRLbxnwny6c2ZuC" alt=""><figcaption></figcaption></figure></div>

## Using a Custom Measure

{% embed url="<https://zoom.us/clips/share/w1N43vZ3ThGdjBSWjo1skw>" %}

Custom Measures can be applied to a report in the same way as a standard CX Analytics measure.

1. Log in to the Zoom admin portal.
2. Navigate to **Analytics & Reports** → **CX Analytics**. Select either **Dashboards** or **Reports** depending on where you're adding the Custom Measure.

{% hint style="info" %}
Remember, custom measures are unique to the dataset you select and won't appear in reports built from other datasets.
{% endhint %}

3. Create a new report or edit an existing report.
4. Select a widget to which you'd like to add the custom measure(s). The configuration of the widget will appear on the right-hand side of the editor.
5. Scroll down through the dimensions and measures to find a section containing all custom measures created within that dataset.

<div align="center" data-with-frame="true"><figure><img src="/files/FIUjyqBFxR3p8VIlc2lU" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}
**Pro Tip**: Make your custom measures easier to identify in the report editor by giving them a meaningful name and description. This will be visible in the editor (as shown in the screenshot, via the tool tip) and in CX Analytics' data dictionary. Further organization can also be achieved using folders within each dataset.
{% endhint %}

6. Drag and drop the measure into the fields section of the widget's configuration.

<div align="center" data-with-frame="true"><figure><img src="/files/APwJcnQxDmLQzQ1iq6s7" alt=""><figcaption></figcaption></figure></div>

7. Repeat the process for other custom measures and widgets, and click **Save** when done.

## Deleting a Custom Measure

{% embed url="<https://zoom.us/clips/share/cJBlTOHZTDKHpvKIRPbIow>" %}

To delete an existing Custom Measure:

1. Navigate **CX Analytics** → **Custom Measures**
2. Select the appropriate dataset and folder
3. Click the ellipsis, and select **Delete measure** from the drop-down menu

{% hint style="info" %}
When you delete a custom measure it will be removed from all reports. In some situations, the reporting widget will remain in the report with a messaging letting you know that a new measure must be selected. An example of a metrics card is shown below.
{% endhint %}

<div data-with-frame="true"><figure><img src="/files/9gDXP6xN68Sf66EWywpO" alt="" width="513"><figcaption></figcaption></figure></div>

## Example Use Cases

### Custom Naming

A simple use case that can be implemented using Custom Measures is to customize the naming of existing metrics. This enables you to add a metric to a tabular widget, for example, and the column heading has a name that is more tailored to your requirements.

#### Shortest/Longest Engagement

{% embed url="<https://zoom.us/clips/share/V8SOeQINRkmP8s4zCiq59g>" %}

The `Inbound conversation duration` metric tells you how long agents spent handling inbound engagements. By displaying the MIN and MAX values you can see the longest and shortest duration, however when these metrics are displayed within a tabular widget the column names will be displayed as follows:

* Inbound conversation duration (MIN)
* Inbound conversation duration (MAX)

<div data-with-frame="true"><figure><img src="/files/VZMCNfiirUm1YCSJnqdp" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}
While this example is related to Inbound conversation duration, this methodology applies to many different metrics.
{% endhint %}

Custom Measures provides a convenient way to create fields that display the same data using names that you define.

Complete the following steps:

1. Navigate to **CX Analytics** → **Custom Measures**.
2. Select the **Queue Performance** dataset, followed by the **Default Folder**.
3. Click **Add Measure**, enter the name "Shortest Inbound", then click **Add**.
4. Select the toggle to enable the Formula Editor.
5. Select **Duration** from the Measure Type drop-down.
6. Click the **Templates** button, then select the **Duration** category.
7. Scroll down and locate the **Inbound conversation duration** template.
8. Select 'min' from the aggregation method drop-down menu, then click **Use**.

<div data-with-frame="true"><figure><img src="/files/w9YYsuETHInD5weyx7CF" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}
This will automatically generate the formula `min(Inbound conversation duration)` in the Measure Editor.
{% endhint %}

9. Click **Validate**, then select the **Entry channel** dimension in the Live Preview window to check the results.

<div data-with-frame="true"><figure><img src="/files/IJpDiW9cITcHymyunMlS" alt=""><figcaption></figcaption></figure></div>

10. Click **Save** followed by **Publish**.
11. Repeat the steps above for another metric named "Longest Inbound", this time selecting 'max' as the aggregation method.

When you add these metrics to your report, they will be displayed with your custom naming. You can use this method with many different metrics.

<div data-with-frame="true"><figure><img src="/files/cgUbPckEZHHeBBLHyS1c" alt=""><figcaption></figcaption></figure></div>

### Data Bucketing

Data bucketing transforms raw contact center data into structured, actionable insights. By organizing metrics into meaningful intervals or "buckets", contact centers can more easily monitor performance trends, improve operational efficiency, and make informed decisions that enhance both agent productivity and customer satisfaction.

Instead of viewing individual data points, contact centers categorize metrics into logical intervals, such as time ranges or score bands, to make large datasets easier to interpret and compare.

{% hint style="info" %}
This powerful capability allows you to define custom buckets according to your own contact center's preferences. You can also define different buckets for different channels. For example, you might want to see 0-30 seconds for voice, but 0-180 seconds for email.
{% endhint %}

Benefits of Data Bucketing include:

* Trend Identification: Spot recurring issues such as long wait times or recurring low satisfaction scores.
* Focused Improvement: Target specific performance ranges that require attention (e.g., calls longer than 5 minutes).
* Benchmarking: Compare performance across teams, time periods, or customer segments using consistent categories.
* Strategic Planning: Inform staffing, training, and process optimization decisions with clearer aggregated insights.

Next, we will guide you through a couple of examples of how to create data buckets using the Function and Formula Editors.

#### Abandoned Call Timeframes

{% embed url="<https://zoom.us/clips/share/EYUfh_LKT5SvzJLy0yt9qQ>" %}

The abandoned calls duration is the time the consumer waited before they abandoned the engagement. Data bucketing can group the abandoned calls into categories like those that abandoned in 0–15 seconds, 15-30 seconds, and 30–45 seconds etc.

{% hint style="info" %}
While this example is related to Abandoned Calls, this methodology applies to any duration metric. Some examples of Queue and Agent Performance durations include:

* Hold duration
* In-queue Wait Duration
* Handle Duration
* Inbound conversation duration
* Agent First Response Duration
  {% endhint %}

For this configuration we will create four data buckets:

1. Abandoned 0-15 seconds
2. Abandoned 15–30 seconds
3. Abandoned 30–45 seconds
4. Abandoned >45 seconds

Complete the following steps to create your first data bucket.

1. Navigate to **CX Analytics** → **Custom Measures**.
2. Select the **Queue Performance** dataset, followed by the **Default Folder**.
3. Click **Add Measure**, enter the name "Abandoned 0-15s", then click **Add**.
4. Click the pencil icon next to the name in the upper part of the interface.
5. Enter the description "Total abandoned engagements, where consumers waited <15s", then click **Save**.
6. Select the toggle to enable the Formula Editor.
7. Select **Count** from the Measure Type drop-down.

{% hint style="info" %}
The default measure type is **Count** so you do not need to explicitly select it when creating a new measure.
{% endhint %}

8. Enter the following formula and click **Validate**.

   `sumIf(Abandoned, Abandon duration <= 15000)`

{% hint style="info" %}
This formula can be broken down as follows:

* Return the total number of `Abandoned` engagements
* But only those where the `Abandon duration` is <= 15000ms (15s)
  {% endhint %}

9. Select the Entry channel dimension in the Live Preview window to check the results.

<div data-with-frame="true"><figure><img src="/files/UsXY3FtpXfAO6C2d8ltr" alt=""><figcaption></figcaption></figure></div>

10. Click **Save** followed by **Publish**.
11. Repeat the steps above for the remaining buckets. The table below contains the required formulas.

| Custom Measure Name | Measure Type | Formula                                                                    |
| ------------------- | ------------ | -------------------------------------------------------------------------- |
| Abandoned 0-15s     | Count        | `sumIf(Abandoned, Abandon duration <= 15000)`                              |
| Abandoned 15-30s    | Count        | `sumIf(Abandoned, Abandon duration > 15000 and Abandon duration <= 30000)` |
| Abandoned 30-45s    | Count        | `sumIf(Abandoned, Abandon duration > 30000 and Abandon duration <= 45000)` |
| Abandoned >45s      | Count        | `sumIf(Abandoned, Abandon duration > 45000)`                               |

{% hint style="success" %}
**Pro Tip**! Create this type of Custom Measure in the Queue Performance dashboard intraday dataset for a real-time view of the same buckets.
{% endhint %}

<div data-with-frame="true"><figure><img src="/files/wMlVrEXFgVlxsPGuvEFB" alt=""><figcaption></figcaption></figure></div>

#### Engagement Volume by Day of Week

{% embed url="<https://zoom.us/clips/share/Dkr6HQI0R_29ydY1vU1SzQ>" %}

CX Analytics provides a metric that shows the number of handled engagements in a given timeframe with the option of using dimensions to show this based on day (single date), week (7-day date range), month, etc.

The tabular report shows the total number of incoming engagements handled in the given timeframe, but does not tell us how many of these engagements occurred on Mondays, Tuesdays, Wednesdays, etc.

<div data-with-frame="true"><figure><img src="/files/WNKuZELVJutZsBSMSb4b" alt=""><figcaption></figcaption></figure></div>

In this example we will create a data bucket per day of week to identify trends and patterns based on the day of the week, or weekdays vs. weekends.

Complete the following steps to create your first data bucket.

1. Navigate to **CX Analytics** → **Custom Measures**.
2. Select the **Queue Inbound** dataset, followed by the **Default Folder**.
3. Click **Add Measure**, enter the name "Mondays", then click **Add**.
4. Click the pencil icon next to the name in the upper part of the interface.
5. Enter the description "Total engagements handled on Mondays" then click **Save**.
6. Select the toggle to enable the Formula Editor.
7. Select **Count** from the Measure Type drop-down.
8. Enter the following formula and click **Validate**.

`sumIf(Inbound handled, weekDay(Queue enter time, 2) = 1)`

{% hint style="info" %}
This formula can be broken down as follows:

* Return the total number of `Inbound handled` engagements
* Where the engagement's `Queue enter time` falls on a Monday
* And Monday = 1

This formula uses a date function (`weekDay()`) which takes a date (the `Queue enter time`) and returns a numeric value representing the day of the week associated with the date. By setting the return type to '2' it means that the value of Monday = 1, Tuesday = 2, Wednesday = 3, etc.
{% endhint %}

<div data-with-frame="true"><figure><img src="/files/iEq6ji2fUD2FVRPKz7Sw" alt=""><figcaption></figcaption></figure></div>

9. Select the **Entry channel** dimension in the Live Preview window to check the results.

<div data-with-frame="true"><figure><img src="/files/yR3vc0Zf5GWTJpXZzFsb" alt=""><figcaption></figcaption></figure></div>

10. Click **Save** followed by **Publish**.
11. Repeat the steps above to create a Custom Measure for each day of the week. The table below contains the required formulas.

| Mondays    | `sumIf(Inbound handled, weekDay(Queue enter time, 2) = 1)`\` |
| ---------- | ------------------------------------------------------------ |
| Tuesdays   | `sumIf(Inbound handled, weekDay(Queue enter time, 2) = 2)`   |
| Wednesdays | `sumIf(Inbound handled, weekDay(Queue enter time, 2) = 3)`   |
| Thursdays  | `sumIf(Inbound handled, weekDay(Queue enter time, 2) = 4)`   |
| Fridays    | `sumIf(Inbound handled, weekDay(Queue enter time, 2) = 5)`   |
| Saturdays  | `sumIf(Inbound handled, weekDay(Queue enter time, 2) = 6)`   |
| Sundays    | `sumIf(Inbound handled, weekDay(Queue enter time, 2) = 7)`   |

The volume report now shows the total number of inbound handled engagements per channel, broken down by day of week, allowing you to identify which is the busiest day of the week in the contact center.

<div data-with-frame="true"><img src="https://file-paa.zoom.us/file/PcimVQ1IQJiKLaO4ZysSbA?filename=image.png&#x26;jwt=eyJhbGciOiJFUzI1NiIsImsiOiJ2dC8rcFVJKyJ9.eyJpc3MiOiJmaWxlIiwiYXVkIjoiemZzIiwiaGRpZyI6ZmFsc2UsImlhdCI6MTc4MTYzMTQxMiwiZGlnIjoiYTU0NGY1NTI2OGQzZWI1Nzg4MzJmMWYyNGVhZGM1NDAyMzczNjUxYzQwMmU1ZmM3MTdiZTkxZDMwMjkzMGE1NiIsIm9yaSI6Imx5bngtaW50ZXJhY3Rpb24iLCJleHAiOjE3ODE2MzIzMTIsImlpYyI6ImF3MSJ9.Nbf1hiVDy_q6PxIMU4GSOwp6OBc43uLZkerVXkM9Z-z5IuwD4cuvfN2wrLW7LxSWfHQpJYlPvIng1qs459Fxaw&#x26;response-cache-control=public%2C%20max-age%3D7776000%2C%20immutable&#x26;response-no-vary-search=key-order%2C%20params%3D%28%22jwt%22%20%22Policy%22%20%22Signature%22%20%22Key-Pair-Id%22%20%22verify%22%29&#x26;Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9maWxlLXBhYS56b29tLnVzL2ZpbGUvUGNpbVZRMUlRSmlLTGFPNFp5c1NiQT9maWxlbmFtZT1pbWFnZS5wbmcmand0PWV5SmhiR2NpT2lKRlV6STFOaUlzSW1zaU9pSjJkQzhyY0ZWSkt5SjkuZXlKcGMzTWlPaUptYVd4bElpd2lZWFZrSWpvaWVtWnpJaXdpYUdScFp5STZabUZzYzJVc0ltbGhkQ0k2TVRjNE1UWXpNVFF4TWl3aVpHbG5Jam9pWVRVME5HWTFOVEkyT0dRelpXSTFOemc0TXpKbU1XWXlOR1ZoWkdNMU5EQXlNemN6TmpVeFl6UXdNbVUxWm1NM01UZGlaVGt4WkRNd01qa3pNR0UxTmlJc0ltOXlhU0k2SW14NWJuZ3RhVzUwWlhKaFkzUnBiMjRpTENKbGVIQWlPakUzT0RFMk16SXpNVElzSW1scFl5STZJbUYzTVNKOS5OYmYxaGlWRHlfcTZQeElNVTRHU093cDZPQmM0M3VMWmtlclZYa005Wi16NUl1d0Q0Y3V2Zk4yd3JMVzdMeFNXZkhRcEpZbFB2SW5nMXFzNDU5RnhhdyZyZXNwb25zZS1jYWNoZS1jb250cm9sPXB1YmxpYyUyQyUyMG1heC1hZ2UlM0Q3Nzc2MDAwJTJDJTIwaW1tdXRhYmxlJnJlc3BvbnNlLW5vLXZhcnktc2VhcmNoPWtleS1vcmRlciUyQyUyMHBhcmFtcyUzRCUyOCUyMmp3dCUyMiUyMCUyMlBvbGljeSUyMiUyMCUyMlNpZ25hdHVyZSUyMiUyMCUyMktleS1QYWlyLUlkJTIyJTIwJTIydmVyaWZ5JTIyJTI5IiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzgxNjMyMzEyfX19XX0_&#x26;Signature=MVimk-x9k~n248l2WeqZieccAYQY6-kRFw-YvUSrhfAskkolnfGsq8660biYQHZMEqcGW-KdfqpxAsG0hESm5pMhauD3pRI05QdNe7yYDUbOGKRn1ajoAUTHOn6ObJfO4GNqGM~o4QQyWwX1WkLYJRS3H22fseT3WNgRoe6NpL16Hx0~rfWq5N3sZLtXaN6OfhgsWg27E~uPvYxG2OpuVjcNnLaofJutOivUM-NA6V4vAjiQNKeXo6brGE7DR~AWCY3wO1LRjILcd2d2cfWjy-SiC2I50X8Mo286mqab~A5Any6i5MQ8NPjenPXU2aEktTQqSs2T7WWCW2FYhKabbg__&#x26;Key-Pair-Id=KL18RPQB3R725" alt=""></div>

{% hint style="info" %}
**Pro Tip**! You could also view weekdays and weekends by creating Custom Measures using the following formulas:

Weekdays: `sumIf(Inbound handled, weekDay(Queue enter time, 2) <= 5)`

Weekends: `sumIf(Inbound handled, weekDay(Queue enter time, 2) >= 6)`
{% endhint %}

<div data-with-frame="true"><figure><img src="/files/yaQVRWVnqx8BSpxI4StO" alt=""><figcaption></figcaption></figure></div>

### Modifying Existing Metrics

In some cases you may want to slightly modify an existing metric based on your organization's specific requirements. Custom Measures allows you to use arithmetic operators (+, -, \*, /) to make changes to an existing metric.

#### Custom Handling Duration

{% embed url="<https://zoom.us/clips/share/qhY7A2XWQVe4VgUyryvWnQ>" %}

In CX Analytics, `Handle duration` is the sum of the following metrics:

* Conversation duration
* Hold duration
* Wrap duration

In your organization, you may consider 'Handle Duration' to be only a subset of these metrics. Let's say that you do not want to include the wrap duration as part of your handle duration, in this case you can simply subtract one from the other as follows:

1. Navigate to **CX Analytics** → **Custom Measures**.
2. Select the **Engagement** dataset, followed by the **Default Folder**.
3. Click **Add Measure**, enter the name "Custom handle duration", then click **Add**.
4. Click the pencil icon next to the name in the upper part of the interface.
5. Enter the description "Handle duration, not including wrap-up time" then click Save.
6. Select the toggle to enable the Formula Editor.
7. Select **Duration** from the Measure Type drop-down.
8. Enter the following formula and click **Validate**.

`sum(Handle duration - Wrap-up duration)`

{% hint style="info" %}
This formula can be broken down as follows:

* Take the `Handle duration`
* Subtract the `Wrap-up duration`
* Return the result
  {% endhint %}

9. Select the **Entry channel** dimension in the Live Preview window to check the results.

<div data-with-frame="true"><figure><img src="/files/xa2S1OuXl72enIaZF4Kb" alt=""><figcaption></figcaption></figure></div>

10. Click **Save** followed by Publish.

Now you can show the default **Handle duration** and see your own customized version of the metric that is better aligned with your organization's KPIs.

<div data-with-frame="true"><figure><img src="/files/2DJpSHIJTpKB8BpIQSc9" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}
**Pro Tip**! Use the `multiIf()` control function to provide more granular control when you need to adjust the metric differently based on the channel.

`sum(multiIf(Entry channel = "VOICE", Handle duration - Wrap-up duration, Entry channel in ("VIDEO", "MESSAGING"), Handle duration - Hold duration, Handle duration))`

This formula can be broken down as follows:

* If the channel = voice, return the `Handle duration - Wrap-up duration`
* If the channel = video/messaging, return the `Handle duration - Hold duration`
* Otherwise, simply return the `Handle duration`in its default form
  {% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://library.zoom.com/business-services/zoom-contact-center/expert-insights/custom-measures.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
