Expand my Community achievements bar.

Join us for the next Community Q&A Coffee Break on Tuesday April 23, 2024 with Eric Matisoff, Principal Evangelist, Analytics & Data Science, who will join us to discuss all the big news and announcements from Summit 2024!
SOLVED

Mapping concatenated SKUs in a product string via Classification to Product Name

Avatar

Level 2

I have a scenario where we have products grouped together in a single product string. You can imagine a watch store where the watch body and the watch strap have their dedicated SKUs.

 

In an ideal world, our engineers would've split the information in a format as such:

 

product = watch accessory;SKUBAND;1;60,watch body;SKUBODY;1;400

Unfortunately, what I have instead is something like this:

product = watch;SKUBAND+SKUBODY;1;460

I first considered building a .tab file to feed into the SAINT classification tool. I know this is a combinatorics exercise, where I can create a .tab file of all possible combinations.

However, if SKU is the 'index'/'key' of the .tab file for classification, then I cannot map multiple keys to the same product name.

For example, the following is not an acceptable data entry:

 

+-----------------+-----------------+
| Key | PRODUCT NAME |
+-----------------+-----------------+
| SKUBAND+SKUBODY | WATCH BODY NAME |
+-----------------+-----------------+
| SKUBAND+SKUBODY | WATCH BAND NAME |
+-----------------+-----------------+

Any recommendations on how I can map concatenated SKUs to product names?

1 Accepted Solution

Avatar

Correct answer by
Community Advisor

What about having two Product Classifications set up... one for Body and one for the Band.

 

Jennifer_Dungan_0-1691533488101.png

 

 

So let's say your SKU is passed as 12345+67890 (where 12345 is the band "black leather" and 67890 is the body "silver face")

 

Now when you create your mappings, you can use Regex:

(12345)\+(\d)+

// or

(\d)+\+(67890)

Note: your SKU will likely be more than just digits (\d), but for example this... you will notice that I use Regex Groups for the first and second SKU with a literal "+" as the delimiter.... and now I am looking to match the first or last group.

 

For items matching "12345+[some SKU]" you can map into the Band Classification

For item matching "[some SKU]+67890" you can map into the Body Classification

 

So that:

12345+67890 will have classification "Band" with a value of "black leather" and a classification of "Body" with a value of "silver face"
and 12345+62672 will have classification "Band" still be "black leather" but will have a different Body Classification, maybe "gold face", etc 

View solution in original post

3 Replies

Avatar

Correct answer by
Community Advisor

What about having two Product Classifications set up... one for Body and one for the Band.

 

Jennifer_Dungan_0-1691533488101.png

 

 

So let's say your SKU is passed as 12345+67890 (where 12345 is the band "black leather" and 67890 is the body "silver face")

 

Now when you create your mappings, you can use Regex:

(12345)\+(\d)+

// or

(\d)+\+(67890)

Note: your SKU will likely be more than just digits (\d), but for example this... you will notice that I use Regex Groups for the first and second SKU with a literal "+" as the delimiter.... and now I am looking to match the first or last group.

 

For items matching "12345+[some SKU]" you can map into the Band Classification

For item matching "[some SKU]+67890" you can map into the Body Classification

 

So that:

12345+67890 will have classification "Band" with a value of "black leather" and a classification of "Body" with a value of "silver face"
and 12345+62672 will have classification "Band" still be "black leather" but will have a different Body Classification, maybe "gold face", etc 

Avatar

Level 2

This is a great approach, though I may need a bit of clarification on how can I map the SKU to product name if I'm using Classification Rule builder which uses Regex.

 

Would this be the correct line of thinking:

  • Create a classification rule builder to split the SKU into watch band and watch face
  • Pass a SAINT file to map the SKUs collected in watch band to their respective product name
  • Pass a SAINT file to map the SKUs collected in watch face to their respective product name

Does this sound right?

Avatar

Community Advisor

Technically you aren't really splitting the SKUs, but you are creating groups so that you can match either the first or second SKU against your import file.

 

So starting with a simple example, a single SKU approach...

 

You have an import file with a list of SKUs... doing a 1 to 1 matching.

12345 = X

12346 = Y

12347 = Z

etc

 

But you have 2 SKUs combined...

So you can use Regex and look at either Group A ($1) or Group B ($2)

 

When matching Group A, you will have the literal SKU you want to match in the first set of () then in the second you have a regex that will match any SKU. So for your Watch Bands, it doesn't matter what Body is paired, you are only matching against the first part and placing that into the Band Classification.

 

Then you have a second set of matching rules for Group B, where you use a regex that will match any SKU in the first set of () and then you use the literal SKU of the Watch Body to match no matter what band is paired... then you enter those values into the Body Classification.

 

So let's say bands are letter SKUs and bodies are number SKUs:

 

Combined SKU Band Classification Band Classification Regex Body Classification Body Classification Regex
X+1 Band X (X)\+(\w)+ Body 1 (\w)+\+(1)
X+2 Band X (X)\+(\w)+ Body 2 (\w)+\+(2)
X+3 Band X (X)\+(\w)+ Body 3 (\w)+\+(3)
Y+1 Band Y (Y)\+(\w)+ Body 1 (\w)+\+(1)
Y+2 Band Y (Y)\+(\w)+ Body 2 (\w)+\+(2)
Y+3 Band Y (Y)\+(\w)+ Body 3 (\w)+\+(3)

 

If you look, there are really only 5 unique regex for these combinations (two for either Band X or Y; and three for Body 1, 2 or 3)

 

Basically the Regex for both Bands and Bodies will be in one Classification Import, you will just have a unique regex for each potential band, and a unique regex for each potential face.