All your bar and column charts in one Power BI visual: Bar Plume
Get started with Bar Plume in Power BI: prepare your data and measures, then build a stacked column chart with data labels and totals in about 10 minutes.
Lire en françaisAt a glance
What the visual does. Bar Plume draws bars (horizontal) or columns (vertical) to compare numbers across categories: revenue for each region, the number of cases per department, sales for each month. Picture a bookshelf: each category has its own spot, and the height of each book tells you how much it weighs. On its own, Bar Plume replaces Power BI's 5 bar charts (stacked, clustered, 100%, as bars or as columns), and adds small multiples, hierarchy drill-down, targets and variance arrows.
When to use it:
- compare a value across categories (regions, products, teams);
- show the composition of each total (revenue by channel within each region);
- compare two periods, or actuals and a target, bar by bar;
- repeat the same chart for each value of a field (one chart per year, per country).
When to use something else:
- for a trend over many dates, a line is easier to read (Line Plume);
- to explain how one total turns into another (bridge, waterfall), use Waterfall Plume.
By the end, you will know how to:
- prepare the data and write the useful DAX measures;
- choose between Category, Legend (series) and several measures, and understand what each one produces;
- switch from clustered to stacked bars, to 100%, then to small multiples;
- sort the bars, order the series, show values, shares and totals;
- add a target, variance arrows and reference lines.
What you need:
- Power BI Desktop (recent version);
- the Bar Plume visual installed (see the shared basics, "Installing a Plume visual");
- a table with at least one category column (text or date) and a number to add up (amount, quantity).
The data you need
The expected shape
Bar Plume draws one bar per value of the column placed in Category. For each bar, it calculates one or more measures. A measure is a DAX formula that calculates a number based on what is visible (see the glossary): Revenue = SUM ( Sales[Amount] ) gives the revenue of the bar's region, or of the whole table if no filter applies.
- What you slice by (region, channel, year, product) is a text or date column.
- What you measure (revenue, quantity, target) is a measure. Power BI also accepts a numeric column in Values: it then creates an automatic sum (implicit measure). A real measure is safer and can be reused.
- Your table can have one row per order, per day or per region: the granularity (the level of detail of a row) doesn't matter, Power BI adds things up for you.
The sample dataset
A home goods retailer (fictitious data) sells in stores and online, in three regions, over two years. One row = one region, one channel, one year.
| Region | Channel | Year | Amount | Target |
|---|---|---|---|---|
| London | Store | 2024 | 820000 | 800000 |
| London | Web | 2024 | 410000 | 400000 |
| London | Store | 2025 | 845000 | 850000 |
| London | Web | 2025 | 520000 | 450000 |
| North West | Store | 2024 | 360000 | 350000 |
| North West | Web | 2024 | 140000 | 150000 |
| North West | Store | 2025 | 372000 | 380000 |
| North West | Web | 2025 | 188000 | 170000 |
| Wales | Store | 2024 | 255000 | 260000 |
| Wales | Web | 2024 | 95000 | 100000 |
| Wales | Store | 2025 | 248000 | 270000 |
| Wales | Web | 2025 | 131000 | 115000 |
To create it without a file: Modeling › New table, paste the formula below, then confirm.
Sales =
DATATABLE (
"Region", STRING,
"Channel", STRING,
"Year", STRING,
"Amount", INTEGER,
"Target", INTEGER,
{
{ "London", "Store", "2024", 820000, 800000 },
{ "London", "Web", "2024", 410000, 400000 },
{ "London", "Store", "2025", 845000, 850000 },
{ "London", "Web", "2025", 520000, 450000 },
{ "North West", "Store", "2024", 360000, 350000 },
{ "North West", "Web", "2024", 140000, 150000 },
{ "North West", "Store", "2025", 372000, 380000 },
{ "North West", "Web", "2025", 188000, 170000 },
{ "Wales", "Store", "2024", 255000, 260000 },
{ "Wales", "Web", "2024", 95000, 100000 },
{ "Wales", "Store", "2025", 248000, 270000 },
{ "Wales", "Web", "2025", 131000, 115000 }
}
)
The year is deliberately text (STRING): it is a label used to slice, not a number to add up.
The measures to create
Select the Sales table, then Modeling › New measure. Create one measure at a time.
// Revenue: adds up the Amount column
// over the rows visible for the bar (one region, one channel…)
Revenue = SUM ( Sales[Amount] )
// Target: same idea on the Target column
Target = SUM ( Sales[Target] )
// 2024 revenue only: CALCULATE recomputes [Revenue]
// keeping only the rows where the year is "2024"
Revenue 2024 = CALCULATE ( [Revenue], Sales[Year] = "2024" )
// 2025 revenue only, same idea
Revenue 2025 = CALCULATE ( [Revenue], Sales[Year] = "2025" )
// Growth between the two years, as a share of 2024
// DIVIDE avoids the divide-by-zero error (it returns blank)
Growth = DIVIDE ( [Revenue 2025] - [Revenue 2024], [Revenue 2024] )
Give Growth the Percentage format: select the measure, then Measure tools › Format: Percentage.
Data preparation pitfalls
- A year or a code stored as a number: dragged into Values, it would be added up (2024 + 2025 = 4049). Keep it as text, or only place it in Category, Legend (series) or Small multiples.
- Months sorted alphabetically (April, August, December…): in the model, sort the month column by a month number column (Column tools › Sort by column), then choose Sort › Sort by: Model order.
- A blank measure for a category: the category gets no bar. Check the relationships between tables and the spelling of the keys.
- A rate or an average (margin rate, average basket): don't stack it. A stack adds up its segments, and the Top N "Others" bar also computes a sum.
Step by step: your first Bar Plume chart in 10 minutes
Goal: a stacked column chart of revenue by region, split by channel, with the values and the total of each column.
-
On the report page, click the Bar Plume icon in the Visualizations pane. A frame appears, with the visual's welcome screen.
-
Drag the
Regioncolumn into Category. The regions will be the categories: one bar per region. -
Drag the
Revenuemeasure into Values. One bar per region appears, sorted from largest to smallest. -
In the Format pane, Layout card: Orientation = Columns (vertical). The bars become columns, from left to right.
-
Drag the
Channelcolumn into Legend (series). Each region now has two columns side by side, Store and Web, and a legend appears at the top. -
Layout card: Series = Stacked. The two columns of each region sit on top of each other; the total of each stack shows at its end.
-
Data labels card: turn on Show. The revenue of each channel is written on its segment, in a color that stays readable on the bar.
-
Still in Data labels, Display units = Thousands, then Suffix (e.g. €) =
€(a space, then the symbol). The labels show "930K €" instead of "930,000". -
Value axis card: Display units = Thousands. The axis ticks use the same unit.
-
Title card: in Text, type "Revenue by region and channel". This title replaces the automatic title.
Result: a stacked column chart, identical to Power BI's native visual, but with totals, readable labels and the Plume look. Click a column: the rest of the page filters on that region.
Tip: to get any of the 5 native bar charts, just change Layout › Series and Layout › Orientation (see the how-to guide "How do I reproduce a native bar chart?").
Troubleshooting
| What you see | Likely cause | Fix |
|---|---|---|
| A single bar, or one bar per measure | Category is empty | Drag a column into Category |
| Power BI won't accept a 2nd measure when Legend (series) is filled | Bar Plume version earlier than 1.3 | Install version 1.3, which accepts a Legend and several measures |
| No target marker | Target is empty, or the measure returns blank for these categories | Check the measure, the relationships and the spelling of the keys |
| "Others" shows an absurd number | "Others" is the sum of the remaining categories | For a rate or an average, turn off Group the rest into "Others" |
| Months are sorted by value or alphabetically | Sort by = Value, descending (default) | Sort by = Model order, with a sort-by column on the month number; for codes like "M2", "M10", Category A → Z with Natural sort (2 before 10) |
| Gap between series (%) or Total at the end of stacks can't be found | These settings only appear for some layouts | Check Layout › Series (clustered for the gap, stacked for the totals) |
| The bars scroll instead of showing everything | The bars would be thinner than Minimum thickness before scrolling (px) | Lower this setting, or use a Top N ★ |
| Labels on small segments disappear | Hide overlapping labels or Hide below (% of the category) | Turn off hiding, or turn on Overflow text |
| Categories with no data show up again | A measure in the Dynamic format field is never blank | Make it return BLANK() when the main measure is blank |
| The "Plume Visuals · Premium preview" watermark appears | A ★ feature is on without a license key | Remove the ★ feature or paste your key (see the shared basics) |
Key takeaways
- Category places the bars, Legend (series) splits each bar by a column, several measures compare different calculations; the target goes in Target.
- Layout › Series and Orientation are all you need to recreate Power BI's 5 bar charts.
- Small multiples repeats the chart for each value of a field, with a shared axis for a fair comparison.
- Sort arranges the bars and the series, down to a custom order (
Web; Store). - Target, variance arrows, Top N and analytics are ★: they work without a key, with a watermark.
Learn more
- Bar Plume how-to guides: recipes for common needs.
- Bar Plume fields and settings: every field well and every setting.
- Getting started with Plume visuals: installation, license, styles and shared settings.
- The visual's page: Bar Plume. A question? Support.