# Power BI scatter chart: sort your items into four families

> Get started with Scatter Plume: prepare your data, build a bubble chart, label the useful points, split the cloud into quadrants and animate it over time.

- Language: English
- Web page: https://plumevisuals.com/en/tutorials/nuage-de-points-quadrants
- Published: 2026-10-04
- Visual: Scatter Plume, technical reference: https://plumevisuals.com/ai/visuals/scatter-chart.md
- If an option name in this tutorial differs from the technical reference, the reference is right (it is generated from the visual's code).

## In short

**What the visual does.** Scatter Plume places each item (a product, a customer, a city) as a point on a two-dimensional map: the further right, the higher its first measure; the higher up, the higher its second one. A third measure can inflate each point into a bubble. You see at a glance which items are alike, which stand out and how the two measures are related.

**When to use it:**
- compare volume and profitability (orders and margin rate per product);
- sort items into four families with quadrants (drivers, niches, to review…);
- check whether two measures move together (trend and R²);
- find outliers;
- show how each item moves from one year or month to the next (play axis).

**When to use something else:**
- to compare one measure across categories, a bar chart reads better (Bar Plume);
- to follow one measure over time, use a line chart (Line Plume); Scatter Plume shows time differently: the play axis moves the points from one date to the next.

**What you will be able to do:**
- prepare a "one point per value" column and two or three measures;
- build a scatter chart, then a bubble chart colored by category;
- label the useful points without cluttering the chart;
- split the cloud into four named quadrants and add a trend;
- select a group of points to filter the report;
- animate the cloud over time with the play axis.

**What you need:**
- a recent Power BI Desktop;
- the Scatter Plume visual installed (see [Getting started with Plume visuals](/en/tutorials/bien-demarrer-visuels-plume), "Installing a Plume visual");
- a column that identifies each item (product, customer…) and two numeric measures.

## The data to provide

### The expected shape

Scatter Plume draws **one point per value of the column placed in Details (one point each)**. For each point it computes two **measures** (DAX formulas that return a number, see the [glossary](/en/tutorials/bien-demarrer-visuels-plume#glossary)): one gives the horizontal position (**X axis**), the other the vertical position (**Y axis**).

- What **identifies** a point (product, customer, store) is a text **column**.
- What **places** it (orders, margin rate, revenue) is a **measure**.
- Your table can have one row per order or one row per product: Power BI aggregates for each point.
- A rate (margin rate, conversion rate) must be a measure that divides two sums, never a sum of rates.

### The sample dataset

A home goods retailer (fictitious data): one row per product, with its number of orders, its revenue and its margin.

| Product | Category | Orders | Amount | Margin |
|---|---|---|---|---|
| Linen sofa | Furniture | 412 | 366680 | 124671 |
| Cedar candle | Decor | 1105 | 24310 | 14829 |
| Oak table | Furniture | 236 | 283200 | 110448 |
| Wool throw | Textiles | 780 | 46800 | 24336 |
| Brass lamp | Decor | 318 | 47700 | 21465 |
| Bedding set | Textiles | 640 | 76800 | 32256 |
| Rattan armchair | Furniture | 154 | 61600 | 17248 |
| Stoneware vase | Decor | 905 | 31675 | 18372 |
| Velvet cushion | Textiles | 1240 | 37200 | 17112 |
| Wall shelf | Furniture | 520 | 46800 | 12636 |

To create it without a file: **Modeling › New table**, paste the formula below, then confirm.

```dax
Products =
DATATABLE (
    "Product", STRING,
    "Category", STRING,
    "Orders", INTEGER,
    "Amount", INTEGER,
    "Margin", INTEGER,
    {
        { "Linen sofa", "Furniture", 412, 366680, 124671 },
        { "Cedar candle", "Decor", 1105, 24310, 14829 },
        { "Oak table", "Furniture", 236, 283200, 110448 },
        { "Wool throw", "Textiles", 780, 46800, 24336 },
        { "Brass lamp", "Decor", 318, 47700, 21465 },
        { "Bedding set", "Textiles", 640, 76800, 32256 },
        { "Rattan armchair", "Furniture", 154, 61600, 17248 },
        { "Stoneware vase", "Decor", 905, 31675, 18372 },
        { "Velvet cushion", "Textiles", 1240, 37200, 17112 },
        { "Wall shelf", "Furniture", 520, 46800, 12636 }
    }
)
```

### The measures to create

Select the `Products` table, then **Modeling › New measure**. Create one measure at a time.

```dax
// Number of orders: adds up the Orders column
// of the rows visible for the point (here, a product)
Orders = SUM ( Products[Orders] )

// Revenue: adds up the Amount column
Revenue = SUM ( Products[Amount] )

// Gross margin in dollars
Gross margin = SUM ( Products[Margin] )

// Margin rate: the margin divided by revenue
// DIVIDE returns blank instead of an error when revenue is zero
Margin rate = DIVIDE ( [Gross margin], [Revenue] )
```

Give `Margin rate` the Percentage format: select the measure, then **Measure tools › Format**: *Percentage*. Axes, labels and tooltips use the format of each measure.

With a real sales table (one row per order), replace `Orders` with `COUNTROWS ( Sales )`: the number of rows of the table.

### Preparation pitfalls

- **A summed rate**: dragging a rate column into **Y axis** creates an automatic sum of rates, which makes no sense. Create the `Margin rate` measure.
- **A blank X or Y value**: the point is not drawn.
- **Zero or negative values** on a *Logarithmic* axis: these points are left out.
- **The same product drawn several times**: it belongs to several values of the **Legend** (for example Legend = Channel: one point for the web, one for the store).
- **A date in the play axis**: drag the date column itself (right-click the field › choose the column name, not the *Date Hierarchy*), or a Month or Year column. A date hierarchy only keeps its first level.

## Step by step: your first Scatter Plume in 10 minutes

Goal: a bubble chart of products, volume on X, margin rate on Y, revenue as size, one color per category, the largest products labeled.

1. On the report page, click the **Scatter Plume** icon in the **Visualizations** pane. A frame appears with the visual's landing page.
2. Drag the `Product` column into **Details (one point each)**. Each product will become a point.
3. Drag the `Orders` measure into **X axis**.
4. Drag the `Margin rate` measure into **Y axis**. Ten points appear: high volumes on the right, high margins at the top.


5. Drag the `Category` column into **Legend (series)**. Points take one color per category (Furniture, Decor, Textiles) and a legend appears at the top.
6. Drag the `Revenue` measure into **Size**. Points become bubbles: their area follows revenue. The sofa and the table, with high revenue, are the largest.
7. In the **Format** pane, **Points** card: **Opacity (%)** = 60. Overlapping bubbles stay visible.
8. **Data labels** card: turn on **Show**. The names of the N largest points appear (**Labeled points** = *Largest (N)*, **N** = 10 by default).
9. In the same card, **N** = 5. Only the five largest points keep their name.
10. **X axis** card: turn on **Axis title**. Do the same in the **Y axis** card. Readers know what each axis measures.


**Result**: a bubble chart that shows at a glance that small decor and textile items often sell with a high margin, and that furniture brings revenue with a lower margin. Drag the mouse over a group of points: they are selected and filter the rest of the page.

## Troubleshooting

| What you see | Likely cause | Solution |
|---|---|---|
| A single point | **Details (one point each)** is empty: one point per series | Drag the item column into **Details (one point each)** |
| Points are missing | Blank X or Y value, or zero or negative value on a *Logarithmic* axis | Check the measures; switch the axis back to *Linear* |
| The same product appears several times | It belongs to several values of the **Legend** | Choose a legend with one value per product, or remove it |
| The fixed quadrant value cuts nothing | The value is not in the unit of the measure | Type 0.45 for 45%, not 45 |
| The quadrant average looks wrong | It is computed on the displayed points, each counting once, and follows filters | Use *Fixed value* for a business threshold |
| The tinted quadrant is not the winners' one | The tint follows the on-screen position; an axis is inverted | Turn off **Invert axis**, or rename the quadrants |
| Points do not fade when clicking another visual | Scatter Plume is filtered by other visuals, it does not draw partial highlighting | Normal behavior: points outside the selection disappear |
| Margin rate shows as 0.43 | The measure does not have the Percentage format | **Measure tools › Format**: *Percentage* |
| The "Plume Visuals · Premium preview" watermark appears | A ★ feature is on without a key (quadrants, gradient, analytics, small multiples, highlight, density, marginals, ★ style…) | Remove the ★ feature or paste your key (see [Getting started with Plume visuals](/en/tutorials/bien-demarrer-visuels-plume)) |
| The play axis shows only one frame or mixed-up years | A *Date Hierarchy* was dragged, or the column is badly sorted text | Drag the date column itself; sort the month column by a number (**Sort by column**) |
| Identical points hide each other | Several items have exactly the same X and Y | **Points › Jitter overlapping points (px)** = 4 to 8 px |
| Arrow keys no longer go through the points | More than 5,000 points: they are drawn in one block | Filter the page, or select with a rectangle |
| The play bar shows "04/01/2025" instead of the month | The date column has a short date format | Give it the `mmm yyyy` format (**Column tools › Format**): "Apr 2025" |
| The point shows no image and a message mentions base64 (edit mode) | The **Image ★** measure returns a web address, which is never loaded | Convert the image to base64 (Power Query `Binary.ToText`) and return `data:image/png;base64,…` |
| "Loading data…" then a warning | More than 100,000 rows: only the first 100,000 are read | Filter the page or use a less detailed Details field |

## Key takeaways

- **Details** gives one point per value, **X axis** and **Y axis** place it, **Size** makes it a bubble, **Legend** colors it.
- A rate is computed in a measure (`DIVIDE`), never by summing a rate column.
- **Quadrants ★** sort points into four families, at the average, the median or a fixed threshold in the unit of the measure.
- Label only the useful points: **Largest (N)**, **Selected**, or the **Label (text)** field.
- Draw a rectangle (or a lasso) to select a group of points and filter the report; Shift + drag to zoom.
- A date in **Play axis** animates the cloud; click a bubble to follow its trail. The column format decides how dates are written.
- The **Image ★** field accepts only base64 images: never a web address.

## Learn more

- [Scatter Plume how-to guides](/en/tutorials/scatter-plume-cas-pratiques): recipes for common needs.
- [Scatter Plume fields and settings](/en/tutorials/scatter-plume-champs-et-reglages): every field well and every setting.
- [Getting started with Plume visuals](/en/tutorials/bien-demarrer-visuels-plume): installation, license, styles and shared settings.
- The visual's page: [Scatter Plume](/en/visuals/scatter-chart). A question? [Support](/en/support).
