# Filter a numeric range on a histogram

> Get started with Range Plume: pick a range of prices, areas or lead times while seeing their distribution, from preparing the data to a fully configured slicer.

- Language: English
- Web page: https://plumevisuals.com/en/tutorials/filtrer-une-plage-numerique
- Published: 2026-10-01
- Visual: Range Plume, technical reference: https://plumevisuals.com/ai/visuals/range-pulse.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).

## At a glance

- **What the visual does.** Range Plume is a slicer (a visual that filters the rest of the page) for **number** columns: price, area, age, lead time… It draws the column's **histogram** (how many rows fall into each band of values) and places two handles on it. Picture the size gauge in a shoe store, with the number of customers for each shoe size above it: you can see where most customers are before you choose "from size 7 to 10". A summary box puts numbers on what the range keeps: row count, share of the total, median.
- **When to use it:**
  - filter listings, orders or customers by price band, amount or age;
  - remove outliers from an analysis in one click;
  - offer named business ranges ("Studio", "Family"…) ★;
  - see right away how many rows and what share of revenue the range keeps.
- **When to use something else:** to check specific values in a list (categories, or several non-adjacent bands), use Bar Slicer Plume. For **dates**, use Period Plume or Date Picker Plume (see the table below).
- **By the end, you will know how to:**
  - prepare a numeric column and a count measure;
  - set up the histogram, the handles and the presets;
  - read the range impact box;
  - create named ranges ★;
  - fix the most common problems (column rejected, all bars the same height, slowness).
- **What you need:** Power BI Desktop (recent version), the Range Plume visual installed (see [the common basics](/en/tutorials/bien-demarrer-visuels-plume)), and a column of type **number** (whole or decimal).

**Range, Period or Date Picker: which of the three slicers should you choose?**

| What you need | Slicer to choose | Why |
|---|---|---|
| Filter **numbers** between a minimum and a maximum (price, area, age, lead time) | **Range Plume** | It reads a numeric column and shows the distribution of values (histogram). It rejects dates. |
| Choose a **period** while seeing the **trend** of a measure, with **rolling** periods ("last 30 days", which moves forward every day) and a previous-year comparison ★ | **Period Plume** | It draws a timeline of the measure and sends relative date filters. It also accepts monthly or yearly data. |
| Pick **specific days in a calendar**: one date, a week, a month, several dates ★, or only certain days (Fridays, month ends), with days without data dimmed | **Date Picker Plume** | It shows a real month-by-month calendar and selectable date rules. Its shortcuts send fixed dates. |

## The data to provide

**The expected shape.** Range Plume receives **one row per distinct value** of the column to filter. If 12 listings cost exactly €185,000, the visual receives a single "185,000" row, along with the number of listings concerned. Hence three elements:

- **a numeric column**: this is what gets filtered. It must be a **column** (data stored row by row in a table), not a **measure** (a DAX calculation computed on the fly, see the [glossary](/en/tutorials/bien-demarrer-visuels-plume#glossary)), because Power BI can only filter columns;
- **a count measure** (`COUNTROWS`): it tells how many rows have each value. Without it, each distinct value counts as 1 and the histogram bars are wrong;
- an optional **additive measure** (sum of an amount, a volume): the summary box will show what share of this total the range keeps.

**Sample dataset**: 12 fictitious real estate listings in Gironde, France, table `Listings`.

| City | Rooms | Area (m²) | Price |
|---|---|---|---|
| Bordeaux | 2 | 45 | 215000 |
| Bordeaux | 3 | 68 | 312000 |
| Bordeaux | 4 | 92 | 445000 |
| Mérignac | 3 | 72 | 289000 |
| Mérignac | 5 | 118 | 468000 |
| Pessac | 2 | 41 | 172000 |
| Pessac | 4 | 88 | 335000 |
| Talence | 1 | 24 | 128000 |
| Talence | 3 | 63 | 258000 |
| Bègles | 4 | 95 | 318000 |
| Bègles | 6 | 160 | 590000 |
| Arcachon | 5 | 140 | 1150000 |

The same dataset, ready to paste into **Modeling › New table**:

```dax
Listings =
DATATABLE (
    "City", STRING,
    "Rooms", INTEGER,
    "Area (m²)", INTEGER,
    "Price", INTEGER,
    {
        { "Bordeaux", 2, 45, 215000 },
        { "Bordeaux", 3, 68, 312000 },
        { "Bordeaux", 4, 92, 445000 },
        { "Mérignac", 3, 72, 289000 },
        { "Mérignac", 5, 118, 468000 },
        { "Pessac", 2, 41, 172000 },
        { "Pessac", 4, 88, 335000 },
        { "Talence", 1, 24, 128000 },
        { "Talence", 3, 63, 258000 },
        { "Bègles", 4, 95, 318000 },
        { "Bègles", 6, 160, 590000 },
        { "Arcachon", 5, 140, 1150000 }
    }
)
```

**The measures to create** (**Modeling › New measure**, one measure at a time):

```dax
// Counts the rows of the Listings table in the current context:
// for the value 185,000, it returns the number of listings at that price.
// Drag it into "Row count (weight)".
Listing count = COUNTROWS ( Listings )

// Adds up the prices: this is the "additive" measure whose share kept
// by the range the summary box will show. Drag it into "Measure (impact)".
Volume (total price) = SUM ( Listings[Price] )

// Optional: a measure to show in a card next to the slicer.
// It follows the range chosen in Range Plume.
Median price = MEDIAN ( Listings[Price] )

// Optional: share of listings kept by the range.
// REMOVEFILTERS removes the filter on the Price column
// to get the "no range" total as the denominator.
Listing share =
DIVIDE (
    [Listing count],
    CALCULATE ( [Listing count], REMOVEFILTERS ( Listings[Price] ) )
)
```

**Preparation pitfalls**

- **Column type.** Only **Whole number** or **Decimal number** columns go into the **Numeric field** well. A text column ("215,000 €" typed as text) or a date column is rejected. Check the type in **Table view › Column tools › Data type**.
- **Too many distinct values.** The visual loads at most **100,000 distinct values**. Amounts with cents quickly create tens of thousands of them. Filter a rounded column (calculated column) instead:

  ```dax
  // -3 rounds to the nearest thousand, 0 to the unit, 1 to one decimal place
  Rounded price = ROUND ( Listings[Price], -3 )
  ```

- **Blank values or zero weight.** Values whose count measure is blank or equal to 0 are ignored.
- **Negative values?** The slider accepts them, but the logarithmic scale only applies to positive values, and **Custom ranges ★** can't express a negative bound.

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

1. In **Modeling › New table**, paste the `DATATABLE` code from the ["The data to provide"](#the-data-to-provide) section and confirm. The `Listings` table appears in the **Data** pane with 12 rows.
2. Select the `Listings` table, then in **Modeling › New measure**, create `Listing count` and `Volume (total price)`. Both measures appear under the table, with a calculator icon.
3. In the **Visualizations** pane, click the **Range Plume** icon. An empty frame is added to the page, with its field wells.
4. Drag the `Price` column into the **Numeric field** well. The histogram appears with two handles, the **Minimum** and **Maximum** boxes, preset buttons and the impact box. A small ⓘ indicates that the count measure is missing.
5. Drag `Listing count` into **Row count (weight)**. The ⓘ disappears: the bar heights now show the real number of listings.
6. Drag `Volume (total price)` into **Measure (impact)**. The summary box also shows the share of volume kept.
7. In the **Format** pane, **Number format** card: set **Display units** to *Thousands*, then type ` €` (a space, then the symbol) in **Suffix (e.g. €)**. Values now read "250k €".
8. **Range impact** card: type `listings` in **Row name (e.g. orders)**. The summary box now talks about "listings" instead of "rows".

9. Next to it, add a native Power BI **Card** visual with the `Listing count` measure. It shows 12.
10. In Range Plume, type `150k` in the **Minimum** box, press **Enter**, then `350k` in **Maximum** and **Enter**. The filter is applied: the card shows 7, and the summary box shows 7 listings kept (58% of rows) and about 41% of the volume.

11. Click **Clear** in the visual's header. The filter is removed: the card goes back to 12.

## Troubleshooting

| What you see | Likely cause | Fix |
|---|---|---|
| The column won't go into **Numeric field** | The column is of type text or date | Change its type to a number (Power Query or **Column tools › Data type**), or create a numeric calculated column |
| All bars have the same height, or there is an ⓘ in the summary box | The **Row count (weight)** well is empty | Add a `COUNTROWS` measure |
| Warning icon "The visual loads at most 100,000 values…" / slow visual | Too many distinct values (amounts with cents) | Filter a rounded column |
| Histogram squashed to the left | A few very high values | **Horizontal scale** *Logarithmic* or **Bar height** *Square root* |
| The scale doesn't start at 0 | It follows the data | Fill in **Fixed lower bound** / **Fixed upper bound** |
| Values beyond a handle stay in the report | The handle is at the end of the scale and **Open-ended at the extremes** is on | Turn this setting off |
| A preset no longer follows new data | Presets are sent as a fixed range | Click the button again after the refresh |
| An entry is flagged as not recognized | Badly formed text | Type a plain number ("250000") |
| A "Premium preview" watermark appears | **Custom ranges ★**, a style, a palette or a Theme JSON ★ without a valid key | Clear the ★ setting or paste a key (common section) |

## Key takeaways

- A numeric column and a `COUNTROWS` measure are all you need for an accurate histogram.
- One distinct value = one row received: round columns that are too precise.
- Presets and the impact box tell you right away what the range keeps.
- Presets are fixed when you click them; **Open-ended at the extremes** keeps values beyond a handle placed at the end of the scale.
- For dates, use Period Plume (periods, trend) or Date Picker Plume (calendar).

## Learn more

- [Range Plume: 9 how-to guides (named ranges, outliers…)](/en/tutorials/range-plume-cas-pratiques): recipes for common needs.
- [Range Plume: all fields and settings explained](/en/tutorials/range-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 settings shared by all visuals.
- The visual's page: [Range Plume](/en/visuals/range-pulse). A question? [Support](/en/support).
