Skip to main content

Importing Choices and Plan Metrics into Assortment Plan

Build your plan from two files — a choice file that owns choices and offerings, and a metrics file that fills them with plan numbers.

Your New Assortment Plan can be built from files instead of by hand. Two imports do that work together: a choice file, which owns the choices and offerings in your plan, and the Variant Location Plan Metrics file, which fills those offerings with plan numbers at SKU × location × date.

These used to be one job. The metrics file created a choice whenever it met a SKU whose choice was not in the plan yet, and decided on its own which choice each row belonged to. Splitting the work in two means you decide which choices exist, and any metrics row that cannot be placed is reported with a reason instead of disappearing.

💡 The new metrics behavior is gated by the variantLocationImportExistingOfferingsOnly feature flag, which is off by default. Reach out to your Customer Success Manager to have it enabled for your organization, and see Feature Flags in Toolio for how flags work. The choice file does not depend on the flag — you can start sending it before the switch.

Use Cases

  • You plan at SKU × store × week in another system and want those numbers to land in New Assortment Plan.

  • You want to control which choices exist in the plan, instead of letting an import create them as a side effect.

  • You plan the same style in two seasons and need it to stay two separate choices.

  • You want to know why a row did not land, rather than reconciling totals to find out.

  • You maintain launch and end dates, unit economics, or store exclusions for many choices at once.

What Each File Owns

Responsibility

Choice file

Variant Location Plan Metrics file

Creating and updating choices

Yes

No (new workflow)

Creating offerings, one per cluster

Yes

No (new workflow)

Launch Date and End Date

Yes

No

Unit Cost, Unit Retail, Unit Ticket

Yes

No

Choice attributes, curves, profiles, size range

Yes

No (new workflow)

Excluded and manually included stores

Yes

No

Plan metrics at offering level

No

Yes

Plan metrics at size level

No

Yes

The grain is different in each file. The choice file is one row per choice. The metrics file is one row per SKU × location × date, exactly as it is today — see Importing Variant Location Plan Metrics into Assortment Plan for how those rows roll up to choice and cluster.

How the Two Workflows Differ

Legacy workflow (flag off)

New workflow (flag on)

Who creates choices

The metrics import, for every new Actual Choice + Automated Cluster Group pair it meets

The choice file only

Who creates offerings

The metrics import, using the earliest and latest date in your file

The choice file, one offering per cluster, using the dates on the row

Choice attributes

Mapped on the metrics file, plus Copy from Past attributes inherited from the Actual Choice at creation

Set on the choice file; choice columns are no longer offered when you map the metrics file

Placing a row on an offering

The closest matching window

A single matching offering takes the row; when several match, the one whose window covers the row's retail week

Rows that cannot be placed

Dropped, visible only as a difference in totals

Counted by reason on the import

When the plan is written

A separate background task, queued after the import finishes

Inside the same import job, before it completes

Turning On the New Workflow

  1. Build and send your choice file for every choice that should exist in the plan. You can do this while the flag is still off — the choice file works either way.

  2. Confirm in New Assortment Plan that the choices and offerings you expect are there, with the launch and end dates you sent.

  3. Ask your Customer Success Manager to enable variantLocationImportExistingOfferingsOnly.

  4. Keep sending both files. Send the choice file first whenever a planning period introduces new choices.

❗ Once the flag is on, the metrics import creates nothing. A metrics row for a choice that does not exist yet is skipped and reported, not planned. If you send a metrics file for a new season before its choice file, every row for the new choices is skipped.

The Choice File

One row describes one choice, keyed on a Choice External Id that you control. An unknown id creates a choice, a known id updates it, and re-sending the same file changes nothing — so a full file is always safe to resend.

Toolio creates one offering per cluster in the Automated Cluster Group you name, and applies the row's dates and unit economics to each of them. Ids and names are matched ignoring case, accents, and surrounding spaces.

In Import History this import appears with the type Choice. If you deliver files over SFTP or another automated feed, the file name must contain choice or offering, and must not contain plm.

Required Columns

Column

What it does

Choice External Id

Your key for the choice. An unknown value creates a choice, a known one updates it.

Automated Cluster Group

The cluster group by name, exactly as it appears in the app. Toolio creates one offering per cluster in it.

Launch Date

Applied to every offering created for the row.

End Date

Applied to every offering created for the row. Must not be before the launch date.

What Else You Can Set

Column

Notes

Actual Choice External Id

Links the choice to its Actual Choice. Can be set on a choice that has none; cannot be changed once set.

Assortment Group

Derived from the cluster group. If you send it, it must agree with the group, or the row is rejected.

Product Id, Title, Color

Descriptive fields on the choice.

Choice Count Multiplier

Same field planners edit in the grid.

Size Range

By name.

Sales Curve, Launch Curve, Size Curve, Sell Down Curve

By name.

Presentation Profile, Return Profile

By name.

Unit Cost, Unit Retail, Unit Ticket

Written to every offering on the row. A missing unit retail defaults to the unit ticket, as it does in the app.

Custom choice attributes

Any custom attribute column, except ones that are hidden, read-only, long text, or part of the choice definition.

A blank cell leaves the stored value as it is. To clear a value, change it in the app — the file only writes what it carries.

Choices created by the import do not pick up New Assortment Plan defaults, so send the attributes you want on them in the file.

Excluded and Manual Included Locations

Excluded Locations and Manual Included Locations take store ids separated by a pipe (|), for example STORE-01|STORE-02|STORE-07.

Each store is written to the offering of the cluster it belongs to, so a list spanning two clusters lands on two offerings. A manually included store only restores one that a rule or a location list had removed.

A filled column replaces that list on every offering of the group's clusters. A blank column leaves the existing lists untouched. Offerings kept for clusters that have since left the group are not changed.

The lists are never written partly. If a store on the row has no offering to land on, or the write fails, the choice itself is still saved and the row reports that its lists were not.

How Toolio Matches a Row to an Existing Choice

If the Choice External Id already exists, that choice is updated. If it does not, Toolio looks for a choice to adopt before creating a new one — a choice that was created without an external id, by the legacy metrics flow or in the app.

A choice is adopted when the Actual Choice and Automated Cluster Group on your row identify exactly one of them. If more than one candidate remains, the row is rejected and the candidates are listed, so you can resolve it rather than end up with a duplicate.

Rows the Choice File Rejects

Every rejected row is reported with a reason you can act on. The rest of the file still loads.

Reason

What to fix

Automated Cluster Group "X" does not exist

Check the name against the app. Only published cluster groups match — a draft sharing the name is not a match.

Automated Cluster Group "X" matches N cluster groups

Two groups share that name. Rename one, or ask your Customer Success Manager which to use.

Automated Cluster Group "X" has no clusters

Add clusters to the group before importing choices against it.

Automated Cluster Group cannot change from "X" to "Y"

A choice cannot move between cluster groups. Use a new Choice External Id for the new group.

Actual Choice cannot change once a choice is linked to one

Relinking is not allowed. Correct the file, or fix the link in the app.

Actual Choice "X" does not exist

The actual choice has to reach Toolio on your product feed first.

Choice External Id X appears more than once in the file

One row per choice. Merge the duplicates.

End Date ... is before Launch Date ...

Correct the dates.

Assortment Group "X" does not match Automated Cluster Group "Y"

Remove the column, or send the group that the cluster group derives.

Location "X" does not exist / Location "X" is not in Automated Cluster Group "Y"

Fix the store list on the row. Stores must exist and sit in a cluster the group offers.

<Reference> "X" does not exist / matches N records

A curve, profile, or size range name does not resolve to exactly one record.

How Plan Metrics Reach an Offering

With the flag on, every metrics row is placed through its variant's Actual Choice. For each choice of that actual choice, Toolio looks up the row's store in that choice's own cluster group and partition, and the choice's offering for the store's cluster becomes a candidate.

  • One candidate. It takes the row, whatever the row's date. A single offering is unambiguous, so a date outside its window is not a reason to drop the number.

  • Several candidates. The one whose window covers the row's retail week takes it. Windows are compared by retail week, so an offering launching mid-week still covers that week's rows.

  • No candidate covers the date, or several do. The row is skipped and counted, because the date is the only thing that tells those offerings apart.

Rows that land on the same offering and date are summed, and the result is written to the plan scenario — the same scenario that powers the Plan columns in New Assortment Plan. Size-level metrics are written the same way, at choice × size × date.

Why a Metrics Row Was Skipped

Skipped rows are counted by reason on the import, and the total appears in the import's skipped line count.

Reason on the import

What it means

The variant does not exist or has no actual choice

The SKU is missing from Toolio, or its variant carries no choiceId.

No choice exists for the variant's actual choice

Nothing in the plan to write to. Send the choice file for it.

The choice has no Automated Cluster Group

The choice was created without one. Fix it in the app or through the choice file.

The choice's partition in its Automated Cluster Group could not be resolved

The choice's cluster configuration is incomplete. Raise it with support.

The location is in no cluster of the choice's Automated Cluster Group

The store is not clustered in the group the choice plans against.

The choice has no offering for the location's cluster

The cluster exists but the choice has no offering for it.

Several offerings match the location and none of them covers the date

Your dates fall outside every offering window. Extend a window, or correct the dates.

Several offerings match the location and cover the date

Two offerings overlap for that store. Separate their windows.

Size metrics not written: the variant has no size, or its size or inventory group is not set up

The offering-level numbers did land. Only the size breakdown is missing, so this is reported but not counted as skipped.

Reviewing an Import

Open Import History and select the run to see its details page, where the skipped counts above appear alongside the row counts and any rejected rows. See Viewing & Managing Data Imports for the grid, the details page, and how to share a link to a specific run.

[Screenshot: Import Details page for a Variant Location Plan Metrics run, showing skipped reasons with their line counts]

Choices and offerings the choice file writes carry the import job that last changed them, so you can trace any row in the plan back to the file it came from.

FAQs

Do I have to send a choice file?

Only if the flag is on — and then yes, for every choice you expect to plan. With the flag off, the metrics import still creates choices as it always has.

What happens to the choices the old flow already created?

They stay and keep their plan. The first time your choice file names one of them, Toolio adopts it rather than creating a duplicate, as long as the actual choice and cluster group identify exactly one.

Can I still map choice attributes on the metrics file?

With the flag off, yes — the mapper still offers importable choice attribute columns. With the flag on, those columns are no longer offered, because the new flow writes nothing to the choice. Send them in the choice file instead.

Why does my Automated Cluster Group name not match?

Names are matched against published cluster group snapshots, the same list the grid's dropdown shows. A draft with the same name is not a match, and a name shared by two snapshots is rejected rather than guessed.

Does the choice file ever delete anything?

No. It creates and updates choices and offerings, and replaces store lists on the clusters of the group it names. It never deletes a choice or an offering, and it leaves offerings for clusters that have left the group alone.

What does a blank cell do?

Nothing. A blank leaves the stored value as it is, which is what makes a full resend safe. Change a value by sending the new value, or edit it in the app.

Why did every row in my metrics file get skipped?

Usually because the choices do not exist yet. Check the skipped reason on the import — "No choice exists for the variant's actual choice" means the choice file has not run for those products.

Can a choice move to a different Automated Cluster Group?

No. That change is rejected, because the cluster group is part of the choice's identity. Use a new Choice External Id to plan the same product against a different group.

Did this answer your question?