# What a Dimension is

> Dimensions are the typed fields Dimension Labs extracts from every conversation. What they are, the types, and how to read them.

A **Dimension** is a structured field extracted from a conversation. Sentiment is one question you can ask of text. Dimensions let you ask many: why did this customer get in touch, did they mention a competitor, how much effort did it take, what would they rate it, what exactly did they say about the delivery.


## Sentiment is a question

You probably know **sentiment analysis**, which sorts text into `positive`, `negative` and `neutral`. Think of it as one simple research question asked of every conversation:

- **Question:** What is the tone of the conversation?
- **Answer:** `positive`, `negative` or `neutral`

Asked across thousands of conversations, the answers add up to a share, which is how sentiment is usually reported. For example, a finding could read "X% of support conversations in March had a negative tone."

## Dimensions answer new questions

A Dimension works the same way, but the question can be anything the text can answer. Because a language model reads the conversation, you classify with a prompt instead of training a machine learning model.

- **Question:** What was the outcome of the conversation?
- **Answer:** `complete`, `escalated` or `abandoned`

Across thousands of support conversations, the share of escalations becomes clear. For example: "X% of live chat support conversations in June were escalated to a manager."

Sentiment tells you the tone of an interaction. Dimensions can also tell you what happened, why it happened, and what to do about it.

## Kinds of questions

| Kind | Example Dimension | The question it asks | What it's good for |
|---|---|---|---|
| Annotation | Products | Which products were mentioned? | Finding the products, services or features behind the most contacts |
| Scoring | Predicted Rating | How would the customer rate this interaction from 1 to 10? | A satisfaction signal on every conversation, without a survey. See [Predicted scores](/dimensions/predicted-scores). |
| Summarization | Predicted Feedback | How would the customer describe this conversation? | Seeing the service from the customer's side, and the gap between your metrics and their experience |
| Recommendation | Predicted Solution | What could be done to resolve this issue next time? | A running list of fixes drawn from real conversations |

## Open-ended questions and dynamic labels

Keyword searches, trained models and fixed segmentations all decide the categories in advance. A Dimension doesn't have to. It can generate a label from what the conversation says, so themes you didn't plan for still show up.

- **Reason:** what is the reason the customer reached out to support?
- **Category:** what is the overall theme of the conversation?

Labels written this way are called **dynamic labels**, for example `order tracking inquiry` or `refund request`.

### Clustering answers into levels

Some Dimensions come in pairs: a detailed answer and a cluster that groups similar answers. Reason and Category work like this, and so do Predicted Solution and Solution Cluster:

- **Predicted Solution:** what is the potential resolution to the customer's issue?
- **Solution Cluster:** what are the themes across those resolutions?

The pair gives you two levels of analysis: the cluster to count, the detailed answer to read. You can also ask the agent to group dynamic labels into themes for you.

## How a Dimension gets made

1. A **prompt** defines a set of Dimensions: a name, instructions, and for each Dimension its type and allowed values.
2. Enrichment reads each conversation in full (all the messages that share a `sessionId`; see [Sessions and conversations](/data/sessions-and-conversations)) and fills in every Dimension of the prompt.
3. The results land in a table named after the prompt, one row per conversation, one column per Dimension.


Dimensions are read from the conversation's **text only**. The model doesn't see your extra columns (rating, region, plan). Those are already structured, so you join them in afterwards.

For the ideas behind this, see [How enrichment works](/dimensions/how-enrichment-works).

## Standard and custom Dimensions

There are two kinds, and the platform uses its own names for each:

| | Standard Dimensions | Custom Dimensions |
|---|---|---|
| Called in the platform | System Prompts | Custom Prompts, or Prompts |
| Where to find them | The **Prompts** tab | The **Prompts** tab, once saved |
| Who defines them | Dimension Labs | You, or Dimension Labs with you |
| Covers | General questions that work on most text: Reason, Category, Predicted Rating, Summary and more | The signals specific to your business, in your own terms |
| When they run | Every day only if Dimension Labs turns on daily enrichment for your workspace; otherwise by backfill | Every day on live integrations they're applied to; by backfill on uploads and history |
| Level of analysis | Session and section | Session |
| Page | [Standard Dimensions](/dimensions/standard) | [Design custom Dimensions](/dimensions/custom) |

Start with the standard set for a baseline, then add custom prompts to go deeper where it matters.

## Output types

Every Dimension has one of five output types. The same names are used on every page; the JSON for each is on the [config reference](/dimensions/config-reference).

| Output type | Use for | Example values |
|---|---|---|
| Fixed category | Classifying into a list you define | `billing`, `delivery`, `product_quality`, `none_detected` |
| Dynamic label | Short labels the model writes from the text, with no list | `order tracking inquiry` |
| Verbatim quote | The customer's exact words on a topic | `"the app logged me out twice"` |
| Score | A whole number on a defined scale | `1` to `5` |
| Boolean | Present or not | `true`, `false` |

Decimal numbers aren't supported. Use a whole-number scale instead.

## none_detected and empty values

- **`none_detected`** means the model read the conversation and found nothing for that Dimension. It's an answer: "this customer didn't mention a competitor".
- **An empty value** means nothing came back for that conversation. For a score, an empty value is the right answer when there isn't enough signal: see [Predicted scores](/dimensions/predicted-scores#leave-it-empty-never-zero).

Count them separately. A Dimension that is mostly `none_detected` isn't broken: a signal that appears in 5% of conversations can be the most important one you have.

## Reading Dimension values

- Everything is stored as text, including scores and booleans. Ask the agent to treat a score as a number when you want an average.
- The model can occasionally return a value outside the list you defined, or a spelling variant (`none detected` with a space). The agent can group these, and a cluster of unexpected values is sometimes a real signal worth a look.

## Next

- [How enrichment works](/dimensions/how-enrichment-works)
- [Standard Dimensions](/dimensions/standard)
- [Design custom Dimensions](/dimensions/custom)
- [When enrichment runs](/dimensions/when-enrichment-runs)
- [Predicted scores](/dimensions/predicted-scores)
