# Dumbbell chart in Power BI: the gap between two values

> Get started with Dumbbell Plume: prepare the data, create two measures, insert the visual, sort by gap, read the ▲▼ gap and color by direction.

- Language: English
- Web page: https://plumevisuals.com/en/tutorials/dumbbell-plume-prise-en-main
- Published: 2026-10-21
- Visual: Dumbbell Plume, technical reference: https://plumevisuals.com/ai/visuals/dumbbell.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 is a dumbbell?** Two points on the same row joined by a bar: the first point is a starting value (last year, plan, before), the second one the ending value (this year, actual, after). The length of the bar is the **gap**. You compare dozens of categories at a glance, without placing two bars side by side.

Mini example. The Manchester store made $498K in 2024 and $541K in 2025: one point at 498, one at 541, a bar between them, and the gap "▲ +$43K" written on the right.

- **What the visual does.** Dumbbell Plume draws one dumbbell per category, writes the gap as a value or a percentage with ▲ ▼, colors it by direction (favorable or unfavorable), sorts by gap, horizontally or vertically. Premium (★): animated play axis, stability threshold, averages, logarithmic scale, more than two points, arrows, images, targets, ranges, groups and small multiples.
- **When to use it.** Before / after, plan / actual, last year / this year, men / women, two scenarios, two regions: whenever you want to read the gap between two values across many categories.
- **When to use something else.** A trend over many periods: Line Plume. Breaking a total gap down into contributions: Waterfall Plume.
- **What you will learn.** Prepare a table, create two measures, insert the visual, sort, read the gap, color by direction, filter the page by clicking.
- **What you need:** Power BI Desktop, the Dumbbell Plume visual installed (see [the common basics](/en/tutorials/bien-demarrer-visuels-plume)), a table with a category and two values. The **PlumeDumbbell-Sample-EN** sample report, in your ["Downloads"](/en/account/downloads) area, shows the sales of 12 stores (page 1), an animated pay gap and a budget (page 2), and the ★ features (page 3).

## The data to provide

**The shape.** One row per category (a store, a product, a country), with the two values to compare. They can be in two columns, or in one column with a "Year" column (see the [use cases](/en/tutorials/dumbbell-plume-cas-pratiques)).

| Store | Region | Sales 2024 | Sales 2025 |
|---|---|---|---|
| Bristol | South West | 412,000 | 468,000 |
| Bath | South West | 386,000 | 352,000 |
| Manchester | North | 498,000 | 541,000 |
| York | North | 178,000 | 151,000 |
| Cambridge | East | 356,000 | 402,000 |
| Norwich | East | 201,000 | 188,000 |
| Cardiff | Wales | 318,000 | 377,000 |
| Newport | Wales | 109,000 | 97,000 |

To try it without a file: **Modeling › New table**, then paste:

```dax
Stores =
DATATABLE (
    "Store", STRING, "Region", STRING, "Sales 2024", INTEGER, "Sales 2025", INTEGER,
    {
        { "Bristol", "South West", 412000, 468000 },
        { "Bath", "South West", 386000, 352000 },
        { "Manchester", "North", 498000, 541000 },
        { "York", "North", 178000, 151000 },
        { "Cambridge", "East", 356000, 402000 },
        { "Norwich", "East", 201000, 188000 },
        { "Cardiff", "Wales", 318000, 377000 },
        { "Newport", "Wales", 109000, 97000 }
    }
)
```

**The measures.** The **Start** and **End** wells expect **measures** (a calculation Power BI recomputes for each filter, written in DAX; see the [glossary](/en/tutorials/bien-demarrer-visuels-plume#glossary)):

```dax
Sales 2024 = SUM ( Stores[Sales 2024] )   -- one row per store: the sum is the store's value
Sales 2025 = SUM ( Stores[Sales 2025] )
```

Give them a format (**Measure tools › Format**: *Currency*, *Whole number*…): the visual uses it for labels, the axis and the gap.

**Pitfalls.**
- The gap is always **End − Start**: put the starting value in Start.
- With a single dated sales table, write both measures with a year filter, for example `Sales 2025 = CALCULATE ( [Sales], 'Calendar'[Year] = 2025 )`.
- A category whose two values are blank is not drawn; with only one value, a single point is shown, without bar or gap.

## Step by step: your first dumbbell chart in 10 minutes

1. In the **Visualizations** pane, click the **Dumbbell Plume** icon. An empty frame appears with a landing page that lists the fields to drop.
2. Drop `Store` into **Category (one dumbbell each)**.
3. Drop `Sales 2024` into **Start (first point)**, then `Sales 2025` into **End (last point)**. One dumbbell per store appears, sorted from the largest 2025 sales to the smallest, with a legend and the **Gap** column on the right.
4. Hover a dumbbell: the tooltip gives both values, the gap and the gap in %.
5. Open **Format › Gap › Content** and choose *Value and percentage*: the column shows "▲ +$43K (+8.6%)".
6. Open **Format › Sort › Sort by** and choose *Gap (end − start)*: the largest increases go to the top, the decreases to the bottom.
7. Open **Format › Data colors › Coloring** and choose *By direction of the gap*; in **Format › Dumbbells › Connector › Color**, also choose *By direction of the gap*. Increases turn green, decreases red, the first point lighter.
8. For costs or delays, turn on **Format › Gap direction › A decrease is favorable**: decreases turn green. The ▲ or ▼ stays written: the direction never depends on color alone.
9. Turn on **Format › Dumbbells › Points › Hollow first point**: the starting point becomes a ring, the eye goes from the ring to the full point.
10. Click a dumbbell: the other visuals on the page filter on that store (cross-filtering, see the [glossary](/en/tutorials/bien-demarrer-visuels-plume#glossary)). Click an empty area to clear.

**Expected result:** one dumbbell per store, sorted by gap, green or red by direction, with the gap as a value and a percentage in the right-hand column.

## Troubleshooting

| What you see | Likely cause | Fix |
|---|---|---|
| "Add fields to get started" landing page | No measure in Start, End or Values | Add at least one measure |
| A single dumbbell | No field in Category | Drop the category column into Category |
| Single points, no bar or gap | Only one measure | Add the second one in Start or End |
| Gap with the wrong sign | The measures are swapped | Put the starting value in Start |
| "No dumbbell to show" | All values are blank (filter) | Check the filters and the measures |
| The chart scrolls | Many categories | Expected: lower **Format › Dumbbells › Layout › Minimum row height**, or **Format › Sort › Show the first N** |
| "Premium preview" watermark | A ★ feature is used without a key | Key in Format › Plume Studio License, or a free setting |
| Gap in "pp" instead of % | The measure has a percentage format | Expected: the gap between two rates is in percentage points; *Percentage* in **Format › Gap › Content** for the relative gap |

## Key takeaways

- One row per category; Start = from, End = to; gap = End − Start.
- The default sort follows the last point; sort by gap to see the largest changes.
- The direction of the gap is always written (▲ ▼); color only underlines it.
- Two points, the gap direction, the gap as a value or a % and sorting are free; the play axis, the stability threshold, averages, the logarithmic scale and the ratio gap are ★.

## Learn more

- [Dumbbell Plume use cases](/en/tutorials/dumbbell-plume-cas-pratiques): recipes for common needs.
- [Dumbbell Plume fields and settings](/en/tutorials/dumbbell-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 common settings.
- The visual page: [Dumbbell Plume](/en/visuals/dumbbell). A question: [support](/en/support).
