Creating and using product attributes

How do product attributes work and how can I get the most out of them?

Most customers compare products and make purchasing decisions by the product’s attributes. A car’s horsepower, a computer’s processing speed, or a phone’s battery life – these are all attributes. Different products naturally have different specification values for each of these attributes, and we will discuss how you can create them and tips to using them to compare your products against the competition.

Different Types of Product Attributes

There are two main types of product attributes in Gocious:

  1. Static – which means you can enter a number or text value for the product, and every single product variant will have the literal specification value.
  2. Calculated – where you can enter a formula to determine the specification value of a product, the formula can reference attributes attached to one or more features on the products. It can also reference static values or a combination of both feature attributes and literal values.

Calculated Product Attribute Example – Calculating a Drone’s Max Flight Time

Let’s assume we are building a new product line of consumer drones and it contains one product which has the following features:

2 Battery Options:

  1. 1500 Battery, with Battery Capacity of 1500mAh
  2. 3300 Battery, with a Battery Capacity of 3300mAh

2 motor options:

  1. Motor A, with an Amp Draw of 2 Amps
  2. Motor B, with an Amp Draw of 3 Amps

These features have been captured in the system with the attributes and their specification values entered. They are associated with the product as options and now we want to calculate the Max Flight Time because of these features.

The Max Flight Time can be calculated with the following formula:

Max Flight Time = ((Battery Capacity/1000) * 0.8 /Amp Draw) * 60

First, we need to create a Product Attribute for Max Flight Time. To do this, we must be in a draft plan, and on the Product Matrix.

  1. Then, click on a Product’s Name to edit the product’s details.
  2. In the Specifications section, click on the “+” button.
  3. We will now create a new Attribute for Max Flight Time with a unit of measure set to minutes
  4. Now, click the Create & Add button to create the attribute and add it to the product
  5. Set the Value Type to Calculated value
  6. And enter the formula as follows

( (Spec(“Battery Capacity”:”Battery”)/ 1000) * 0.8 / Spec(“Amp Draw”:”Motor”) ) * 60

The formula entered above is telling the system where to find “Battery Capacity” and “Amp Draw” they are attributes of the “Battery” and “Motor” feature families.

Spec(“Battery Capacity”:”Battery”)

Spec(“Amp Draw”:”Motor”)

Now when you analyze your product line, Gocious will then build every permitted product variant and calculate the Max Flight Time for each.

In this Example, we would get the following results:

Product 1




Max Flight Time (min)


1500 Battery

Motor A

36 min


1500 Battery

Motor B

24 min


3300 Battery

Motor A

79.2 min


3300 Battery

Motor B

52.8 min

They would be presented against the Max Flight Time attribute as a range of specification values as they are dependent on what product variant you choose from the product.


Drone Product

Max Flight Time       (min)

24 – 79.2

Building Your Own Formula with Aggregations

You can use the following aggregations to build your own formulas:

  • SUM() - This returns the sum of whatever is contained inside the brackets
  • AVG() - This returns the average value of whatever is contained inside the brackets
  • MIN() - This returns the minimum value for what is contained inside the brackets
  • MAX() - This returns the maximum value for what is contained inside the brackets

Aggregations allow for traditional math models:
Formula Example: SUM(1 + 2) Result: (3-3)

Aggregations allow for a sequence
Example: SUM(1, 2, 3) Result: (6-6)

Aggregations can be nested
Example: AVG(SUM(1, 2, 3), SUM(4, 5, 6)) Result: (10.5-10.5)

Nesting can have a sequence of single values and constants
Example: SUM(Spec("Weight": "Chassis"), 42, Spec("Weight": "Tire"))

Order of operations is supported
Example: SUM(Spec("Weight": "Chassis") / 2, (2 + 7), 3) + (Spec("Weight": "Chassis") + Spec("Weight": "Engine"))

Getting Specification Values with Spec( )

Features have their own attributes and specification values associated with them. These are important to use in the formulas. In our example above

Get the specification values from ALL feature families:

{Aggregation}(Spec("{attribute name}":"*"))

Example: SUM(Spec("Weight": "*"))

*Please note the * in the formula above represents all feature families.

Get the specification values from MULTIPLE feature families:

{Aggregation}(Spec("{attribute name}":"{feature family 1}" , "{feature family 2}" , "{feature family 3}"))

Example: SUM(Spec("Weight": "Chassis" , "Engine" , "Transmission"))

Access a single spec value from ONE feature family:

Spec("{attribute name}":"{feature family name}")

Example: Spec("Weight": "Chassis")

*Please note, no aggregation is needed as it will return a single value

Handling Attributes and Feature Families that have Quotes

Since quotes are used to write the formula, any Attribute name, or Feature Family name that has a quote in it, must have the quote escaped with a “\”.

For example, a Feature family of: 4” Chassis should expressed like this:

SUM ( Spec("Length": "4\" Chassis"))

Summary List of Functions, Operators or Special Characters

SUM ( ) - Will sum what is inside the brackets per variant

AVG ( ) - Will return the average of what is inside the brackets per variant

MIN ( )  - Will return the minimum value of what is inside the brackets per variant

MAX ( ) - Will return the maximum value of what is inside the brackets per variant

Spec ( ) - Will find the specification values of what is inside the brackets per variant

+             - Add

-              - Subtract

*             - Multiply

/              - Divide

( )           

“*”         - Wildcard that can be used to specify all feature families in spec() function

Example:   spec(“Attribute name” : “*”)

:               - Used as a separator between attribute and feature family within spec( ) function

Example:  spec(“Attribute name” : “Feature Family name”)