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.
Lire en françaisAt 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), 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), 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:
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):
// 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:
// -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
-
In Modeling › New table, paste the
DATATABLEcode from the "The data to provide" section and confirm. TheListingstable appears in the Data pane with 12 rows. -
Select the
Listingstable, then in Modeling › New measure, createListing countandVolume (total price). Both measures appear under the table, with a calculator icon. -
In the Visualizations pane, click the Range Plume icon. An empty frame is added to the page, with its field wells.
-
Drag the
Pricecolumn 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. -
Drag
Listing countinto Row count (weight). The ⓘ disappears: the bar heights now show the real number of listings. -
Drag
Volume (total price)into Measure (impact). The summary box also shows the share of volume kept. -
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 €". -
Range impact card: type
listingsin Row name (e.g. orders). The summary box now talks about "listings" instead of "rows". -
Next to it, add a native Power BI Card visual with the
Listing countmeasure. It shows 12. -
In Range Plume, type
150kin the Minimum box, press Enter, then350kin 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. -
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
COUNTROWSmeasure 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…): recipes for common needs.
- Range Plume: all fields and settings explained: every field well and every setting.
- Getting started with Plume visuals: installation, license, styles and settings shared by all visuals.
- The visual's page: Range Plume. A question? Support.