Skip to main content

Configuring & Managing Metrics

Toolio allows customizing metric formulas, display names and even spreading behaviors.

Updated in the last hour

Overview

Toolio comes with hundreds of built-in metrics, using best-in-class formulas, display names, and formatting rules. That said, you still have the flexibility to configure and customize these metrics to better align with your specific needs. You can manage all metric settings by navigating to Settings > Metrics.

User Configurable Metric Settings

Display Name

To update the Display Name for any metric, just double click on the cell holding the display name and add the new value you would like. Once you've made the change, you can hit save.

Formula

You can customize the formula, the same way you'd be customizing the Display Name. Just double click on the cell you want to customize and hit save after making changes.

Metric Formatting

In the Format column you can customize how different metrics are formatted. Example use cases for this are:

  • Whether to display percentages as % or BP (Basis Points)

  • Customizing the number of decimal points to have for each metric

Spread Method

You can customize the Spread Method to use for each metric. The Default Method for each metric is spreading proportionally; however, you can update the metrics to Set Leaves Evenly as well. The workflow for updating these is the same as above.

Toolio Configurable Metric Settings

Below is the documentation of the configuration available to the implementation team. More of these settings will be available for users to configure in the future.

Common Configurations

options.common.timeAggregation

Time aggregation is especially important for derived metrics, since non-derived metrics are typically just summed over time.

Controls how the metric is aggregated up over time periods. If no time aggregation is provided, a derived metric would just be calculated at the appropriate time group level. Let's take the example of AUR.

Metric

WK1

WK2

WK3

WK4

M1

Sales

$50

$100

$150

$50

350

Units

1

1

2

1

5

AUR (Sales / Units)

$50

$100

$150

$50

$70

M1 would calculate AUR as $70, since it doesn't aggregate and calculates AUR at the M1 time group.

SUM

Totals a derived metric over weeks.

You can see how this would apply to AUR in the example below. Though this wouldn't be a desired behavior, it is useful for demonstration.

Metric

WK1

WK2

WK3

WK4

M1

Sales

$50

$100

$150

$50

350

Units

1

1

2

1

5

AUR (Sales / Units)

$50

$100

$150

$50

$350

AVERAGE

Averages over weeks. Can be useful for metrics like Average Weekly Sales.

You can see how this would apply to AUR in the example below. Though this wouldn't be a desired behavior, it is useful for demonstration.

Metric

WK1

WK2

WK3

WK4

M1

Sales

$50

$100

$150

$50

350

Units

1

1

2

1

5

AUR (Sales / Units)

$50

$100

$150

$50

$87.5

FIRST

Uses the first available value (e.g., Inventory at EOP)

LAST

Uses the last available value (e.g., Inventory at EOP)

options.common.attributeAggregation

Determines how data aggregates across non-time dimensions like products or stores.
Possible Values:

  • SUM (empty is treated as SUM, i.e. this is the default behavior)

  • AVG

Example:

  • Units → SUM

  • ROS → AVG


options.common.setActToZero

Ensures displaying actuals as 0. Can be used to set On Order Values in the past to 0


options.common.actualizationTimeRule

Defines whether to display current week's actual values when looking at act/plan
Example:

  • pastOrCurrent: Ensures that for current week Toolio displays the actualized value. This is used for inventory metrics.


options.common.nonNegative

Prevents storing negative values. Any negative calculation result is rounded up to zero.
Example:
Receipts can never be negative, so a WOS input that results with non-negative calculation will be adjusted so that receipts are set to 0


options.common.noHoldValues

This is set in the array format, e.g. [0] or [0,1].

Example:

Do not hold the value of 0 for AUR. This enables inputting a Gross Sales Retail value without making Gross Sale Units go to infinity, if Gross Sales AUR is at $0


options.common.divByZeroValue

Specifies what value Toolio should display when a division by zero occurs in a formula.

Example:
If Return Rate Retail = 1, would show 100% if there are no Gross Sales, but there are -50 Net Sales and 50 Returns


options.common.zeroIfFollowingTrue

This can be relevant to handle rulesets where there is a hold against ratios like Sales AUR, that cannot be held at 0.

This setting is only relevant when applying rulesets that include metrics with noHoldValues = 0.

It helps handle situations where a metric like Sales AUR (Average Unit Retail) cannot logically be held at zero.

For example, holding Sales AUR = 0 while Retail has a non-zero value would make Units approach infinity — which isn’t valid.

When zeroIfFollowingTrue is enabled, Toolio instead holds the Retail metric at zero in such cases, preventing invalid or infinite results.

Example Configuration

options.common.zeroIfFollowingTrue = [['gross_sales_aur']]

In this example, if Gross Sales AUR is held at 0 in a ruleset, Toolio will automatically set Gross Sales Retail to 0 in that calculation — ensuring consistent and valid results.

​Importer Configurations

options.importer.aggregationLocation

Typically Toolio leverages the location column for aggregation. However, if you want to generate metrics based on fulfillment_location, e.g. a metric to capture, web fulfillment vs. store fulfillment, you could use this configuration


options.importer.disabledFor

Defines which modules or contexts a metric should not be imported into.

  • Example:
    MfpBudget - would disable actualizing the metric for Merchandise Plan since it will imported manually by the user.


options.importer.context

Specifies the source data table or context for the metric.
Example:
sale for sales metrics or inventory for inventory metrics.


options.importer.formula

Maps the imported data field used to populate this metric.
Example:
{sale__sales_units} imports sales units from the sales dataset.


options.importer.formulaAgg

Defines how imported values aggregate, e.g. SUM or MAX.

Example:
Sales Units imported daily can aggregate to weekly totals via SUM.


options.importer.ignoreNoHoldList

Is a per-metric config that lets a “root” edit tell the derived-metric hold logic to ignore any noHoldValues (including zero) for specific derived metrics while that edit is being applied.

Example:

["gross_sales_aur"]

Typically gross_sales_aur has a noHoldCondition around 0, so that if retail is set to a non-zero value, we don't try to set gross_sales_units to inf. However, for an edit that is impacting gross_sales_units, we might want to respect the hold on gross_sales_aur, since an edit on gross_sales_units is safe and wouldn't set another value to inf.


Module Specific Configurations


options.itemPlan.formula / options.choicePlan.formula / options.allocationPlan.formula

Overrides the default formula for specific modules.
Example:
If Gross Margin is defined differently in the Item Plan than in the Allocation Plan, you can customize the formula for each.


Did this answer your question?