> For the complete documentation index, see [llms.txt](https://www.analytics-docs.laplacetec.com/guide/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://www.analytics-docs.laplacetec.com/guide/en/startguide/connect/columns/cogs_relation.md).

# Base product option matching columns

Uploading cost alone doesn't produce margins. You also need to tell Laplace **which base products, and how many of each, make up each option sold** before that option's cost can be calculated. This page covers the fields that go into that matching data and what to watch for when you fill them in.

{% hint style="info" %}
**You can add matching data in two ways.** Pick whichever is easiest.

* **Match directly in the app**: the **Workbench** tab in **Data management** › **Matching · cost** › **Option ↔ base product matching**
* **Upload a template file in one go**: on the **Workbench** tab of the same screen, download the file from **Upload / download files**, fill it in, and upload it with **Upload file** ([Learn more](/guide/en/datamanage/matching/option_sku.md#bulk-matching))

This data can't be added through a spreadsheet connection.
{% endhint %}

{% hint style="warning" %}
**Register base products before matching.** If the `Base product brand` · `Base product ID` · `Base product name` you enter aren't registered in [Base product](/guide/en/datamanage/matching/sku.md), that row isn't matched. Finish registering base products first, then add the matches.
{% endhint %}

## What identifies a record (identifier keys)

`Brand` + `Sales channel` + `Product ID` + `Product name` + `Option ID` + `Option name` + `Base product brand` + `Base product ID` + `Base product name`

**All nine are keys.** The first six point to the option sold, and the last three point to the base product it contains.

The three base product fields are part of the key because **it's normal for one option to contain several base products.** For example, a "Lunchbox set" option made up of gimbap and spicy pork. The gimbap row and the spicy pork row share the same six option fields but differ in the three base product fields, so **they're matched together as separate components.**

## Field list (11)

All except `Gift` are required (ten fields), and nine of them are the identifier keys above.

| Screen label          | Type    | Required                  |
| --------------------- | ------- | ------------------------- |
| Brand                 | Text    | Required (identifier key) |
| Sales channel         | Text    | Required (identifier key) |
| Product ID            | Text    | Required (identifier key) |
| Product name          | Text    | Required (identifier key) |
| Option ID             | Text    | Required (identifier key) |
| Option name           | Text    | Required (identifier key) |
| Base product brand    | Text    | Required (identifier key) |
| Base product ID       | Text    | Required (identifier key) |
| Base product name     | Text    | Required (identifier key) |
| Base product quantity | Integer | Required                  |
| Gift                  | Text    | -                         |

`Base product quantity` is the number of base products in **one** unit of this option. For `Gift`, enter `Y` if it's a gift; otherwise leave it empty. What to enter in the nine identifier keys is explained in the section **The first six fields must match your order data character for character** below.

{% hint style="warning" %}
**Enter `Base product quantity` as a whole number of 0 or more.** If the quantity is empty or negative, Laplace can't tell how many times to multiply the cost, and that option's margin looks empty.
{% endhint %}

{% hint style="info" %}
For `Gift`, enter `Y` (case-insensitive) to mark it as a gift. Any other value, or an empty value, is treated as not a gift.
{% endhint %}

## The first six fields must match your order data character for character

`Brand` · `Sales channel` · `Product ID` · `Product name` · `Option ID` · `Option name` are matched only if they **exactly match the same values in the order data already in Laplace**. If even one space, special character, or letter differs, Laplace treats it as a different option and doesn't match it.

When these six fields are wrong, there are two kinds of symptoms.

* If `Product ID` · `Product name` · `Option ID` · `Option name` are wrong, **only that one option** isn't matched.
* If `Brand` · `Sales channel` are wrong: Laplace first uses these two fields to **find the store.** If it can't, the matches you added for that store are **all** left unmatched. If all the rows you added look empty, not just one or two, check these two fields first.

```
Laplace Food  ≠  LaplaceFood
Laplace(Lunchbox)  ≠  Laplace_Lunchbox
```

Likewise, `Base product brand` · `Base product ID` · `Base product name` must exactly match the values you registered in [Base product](/guide/en/datamanage/matching/sku.md).

{% hint style="info" %}
If you're not sure what values to enter, the safest approach is to download the current option list from **Data management** › **Matching · cost** › **Option ↔ base product matching**, **Workbench** tab › **Upload / download files** › **Download all**, and use those values as they are.
{% endhint %}

## Adding several base products to one option

**Each component is one row.** If a "Lunchbox set" option consists of 20 gimbap and 10 spicy pork, add **two rows**.

| Product name           | Option name              | Base product name | Base product quantity |
| ---------------------- | ------------------------ | ----------------- | --------------------- |
| DELICIOUS Lunchbox SET | 20 gimbap, 10 spicy pork | Gimbap            | 20                    |
| DELICIOUS Lunchbox SET | 20 gimbap, 10 spicy pork | Spicy pork        | 10                    |

The two rows share the same six option fields and differ only in the three base product fields, so two components are matched to one option.

The payment amount is split across components by their share of cost. See [Option ↔ base product (SKU) matching](/guide/en/datamanage/matching/option_sku.md) for how it's calculated.

{% hint style="warning" %}
**To remove a component**, edit the match on the **Option ↔ base product matching** screen. If you upload a template file with **Replace**, all manual matches for options not in the file are deleted, so be careful. If it's hard to fix yourself, ask your [dedicated manager](#contact).
{% endhint %}

## When values change

### When the product name or option name changes

Sometimes the product ID stays the same but the product name changes. Because the product name is part of the matching key, Laplace treats this as a **different option**. What you need to do depends on which point in time's product name comes in with your order data.

**If order data comes in with the value at the time of the order:** past orders stay matched. Add one more row with the same composition for orders that come in under the new name.

| Order             | Product name in order data | Matching to add                       |
| ----------------- | -------------------------- | ------------------------------------- |
| Before the rename | `DELICIOUS Lunchbox SET`   | Keep the existing row as is           |
| After the rename  | `DELICIOUS Lunchbox Set`   | Add one row with the same composition |

If you delete the existing row, cost disappears for orders placed before the rename. Rows with the old name apply only to old orders and don't affect new ones, so it's normal for rows to pile up each time a name changes.

**If order data comes in with the current value:** product names on past orders change to the new name too. Until you add matching based on the new name, those orders' cost looks empty, so add the matching too when a product name changes.

The same rule applies when `Option name` changes. Keeping the same `Product ID` and `Option ID` doesn't carry the match over.

### When you change the matched base product

To replace the base product matched to an option, change it on the **Option ↔ base product matching** screen, or write the option's new composition in the template file and upload it with **Add**. **Add** replaces each option in the file with the file's composition as a whole, so for options with several components, include **every component row**. Any components you leave out are removed from the match.

### Matching has no effective date

[Base product cost](/guide/en/startguide/connect/columns/cogs.md) takes `Payment date/time` and applies different costs for different periods. Matching doesn't. It has no date field, and **the single set currently registered is applied retroactively to past orders as well**.

So you can't express "this composition changes starting this month" with matching alone. If the composition changed but past orders must keep the old composition, at least one of the six option fields has to differ.

## Ask your dedicated manager <a href="#contact" id="contact"></a>

Have more questions about base product matching?

> 💬 [Contact us on our website](https://www.analytics.laplacetec.com/contact)

**Email:** [**product@laplacetec.com**](mailto:product@laplacetec.com)
