Line Plume: 8 how-to guides (dual axis, forecast, moving average…)
Two axes, solid and dashed lines, moving average, forecast, dashed future part, target line, one series highlighted: step-by-step recipes for Line Plume.
Lire en françaisThese recipes start from a Line Plume chart that is already set up. If that's not the case, begin with getting started: the examples reuse its data. Features marked ★ are premium: they work without a license, with a watermark.
How do I compare revenue and margin rate on the same chart?
An amount in euros and a percentage don't share the same scale: on a single axis, the rate would stay flattened against zero.
- Start from the step-by-step chart (X axis
Month, LegendChannel, Y axis valuesRevenue). - Drag
Margin Rateinto Secondary Y axis values. A dashed line per channel appears, read on a second axis on the right. - In Format › Secondary Y axis, turn on Axis title › Show, then Text:
Margin Rate. - In Format › Y axis, turn on Axis title › Show, then Text:
Revenue.
Result: the solid lines are read on the left axis (revenue), the dashed lines on the right axis (rate). The vertical guide's tooltip gives all four values for the month.
Tip: for a single overall rate rather than one rate per channel, remove the Legend and use the Store Revenue and Online Revenue measures in Y axis values: the margin rate becomes a single dashed line.
How do I show actuals as a solid line and another series as a dashed line?
The budget, the prior year or a secondary channel read better as dashed lines, next to the actuals as a solid line. The Per-series settings card does this without touching the other lines.
- Remove
Channelfrom Legend (series), then putStore RevenueandOnline Revenuein Y axis values. Two lines, named after the measures. - In Format › Per-series settings, Apply settings to list: choose Online Revenue.
- Line style: Dashed.
- Width (0 = Lines card):
1. - Markers: None.
Result: Store Revenue keeps the solid line from the Lines card; Online Revenue switches to thin dashes, with no markers. These settings are free.
How do I explain a peak with an annotation? ★
Readers see the June peak, not its explanation. An annotation pinned to the point stays in place when you filter or resize. There are three ways to create one; they can be combined.
Method 1: the "Annotate" button (the fastest)
- In edit mode (in Power BI Desktop, see the glossary), hover over the chart. An Annotate button appears.
- Click Annotate, then the Online point for June 2025.
- Type
Online sale, then confirm with Enter (Esc cancels). The bubble appears, and the visual writes the line itself in Annotations ★ › Annotations (one per line). - To adjust: drag the bubble to move it (the position is saved), double-click to edit the text, click × to delete it.
With the keyboard: Tab to the chart, Annotate (Enter), ← → to change the date, ↑ ↓ to change the line, Enter to type the text.
Method 2: the list
-
In Format › Annotations ★ › Annotations (one per line), type one line per annotation:
# Lines starting with # are comments 2025-03 | Online | Spring campaign 2025-06 | Store | Mérignac store opening 2025-02 | February dip -
The format is
x | textorx | series | text:- x: a date (
2025-06-01,2025-06,2025,06/15/2025), a number or a category as displayed. A date missing from the data goes to the nearest point, as long as it stays within the axis range; - series: optional, the name as it appears in the legend (case and accents are ignored). Without a series: the first line that has a value at x;
- text: up to 4 lines, with automatic wrapping. Write a vertical bar in the text as
\|; a text that starts with#is written\#.
- x: a date (
This is the ideal method to review and fix all annotations at once.
Method 3: a measure based on the data
-
Create an
Eventstable (Home › Enter data) with aMonthcolumn (date) and aTextcolumn, with no relationship toSales. -
Create the measure:
// For each point on the line, looks up the month in the Events table // and returns its text (several texts separated by " · "), or nothing. Event = VAR m = MAX ( Sales[Month] ) RETURN CONCATENATEX ( FILTER ( Events, Events[Month] = m ), Events[Text], " · " ) -
Drag
Eventinto the Annotations (text) ★ field. Each non-blank value becomes an annotation. -
With a Legend, restrict the annotation to one series, otherwise it appears on every line:
Event (Online only) = IF ( SELECTEDVALUE ( Sales[Channel] ) = "Online", [Event] )
These annotations can be moved with the mouse, but you edit them in the Events table, not in the visual.
To finish, set the look in the Annotations ★ card: Displayed content Text and value, Style Bubble, Default position Automatic (no overlap).
Result: bubbles connected to their point by a line. Filter on February: only the February annotations remain; they come back when you remove the filter.
How do I smooth a jagged line? ★
On daily or highly variable data, the overall direction gets lost in the ups and downs. A moving average brings it out.
- Open the Analytics pane, Moving average ★ card, turn on Show.
- Number of points:
3(three months on our monthly axis; use7for a week on a daily axis). - Average: Simple; Window: Previous points (trailing).
- Original line opacity (%):
30. - To smooth only Online: Series: Named series, then Series names (separated by ;):
Online.
Result: a thick, steady line that starts at the 3rd month (March), on top of the faded original line. Turn on From the first points to start it in January, on an incomplete window.
How do I extend the line with a forecast? ★
To estimate the next months from the past trend, without DAX or an external tool.
- Analytics pane, Trend ★ card, turn on Show.
- Type: Exponential smoothing (Holt).
- Forecast periods:
3. The X axis extends to September 2025. - Forecast interval: 80%.
- Turn on Value at the end of the forecast.
- For a single series, for example Online: in Format › Per-series settings, Apply settings to All series, Trend: No; then Apply settings to Online, Trend: Yes ★.
Result: a dashed trend over January-June, extended as a dotted line to September, surrounded by a light band (the 80% interval). The forecast value for September is written at the end. When you hover over the forecast area, the tooltip gives the period, each series' forecast and the interval.
Warning: a trend needs at least 3 points. With monthly data that repeats every year, Seasonal (Holt-Winters) requires at least two full years; otherwise the visual computes a simple Holt.
How do I show actuals as a solid line, then the forecast as a dashed line? ★
You have a measure that returns actuals up to the last closed month, then your forecast (budget, business estimate). You want the line style to change at the switchover, without creating a second series.
-
Example of a measure that chains actuals and forecast (
[Forecast Revenue]is your forecast measure):Revenue Actual then Forecast = VAR currentMonth = MAX ( Sales[Month] ) RETURN IF ( currentMonth <= DATE ( 2025, 4, 1 ), [Revenue], [Forecast Revenue] ) -
In Format › Lines, Future part dashed ★ group, turn on Show.
-
Starting from: A date or a value.
-
Date or value:
2025-05. -
Line style: Dotted.
Result: each line is solid through April, then dotted from May 2025, with a single entry in the legend. With Starting from Today, the switchover follows the date the report is viewed: nothing to update each month.
Tip: for a switchover specific to one series (Online dotted after May, Store solid throughout), leave the group turned off and use Per-series settings: Apply settings to Online, Future part dashed Yes ★, Starting from (date or value) 2025-05.
How do I show a target and color the line below it? ★
Readers should spot the months below target at a glance.
- Drag the
Targetmeasure into the Reference lines (measures) ★ field. A dashed line appears at 45,000, labeled "Target" with its value. - In Format › Lines, Color by threshold ★ group, turn on Show.
- Threshold: Fixed value; Value:
45000. - Keep Color above (green) and Color below (red).
- To color only Store: Per-series settings › Apply settings to All series, Color by threshold No; then Store, Color by threshold Yes ★.
Result: the Store line is red below 45,000 (January, February, April) and green above (March, May, June). The color changes exactly at the crossing point, not from one month to the next.
Tip: without a measure, type the target in the Analytics pane › Reference lines ★ › Line 1 (Value Constant, Constant value 45000, Label Target), then choose Threshold: First reference line.
How do I highlight one series and gray out the others? ★
With five regions on the same chart, the message gets lost. Put yours in color and name the lines at their ends.
- In Format › Data colors, Coloring: Highlight series ★.
- Highlighted series: Named series; Series names (separated by ;):
Online. - Leave Highlight color (empty = accent, or palette if several) and Other series color (empty = style gray) empty.
- End-of-line labels ★ card: turn on Show, Content Name and last value.
Result: Online is in the accent color, Store in gray; each line carries its name and its June value at its end, and the legend disappears.
How do I draw one series as columns under the lines (combo chart)?
The native combo chart (lines and columns) can be rebuilt in Line Plume, series by series.
- Start from the step-by-step chart, without a Legend: Y axis values =
Store RevenueandOnline Revenue. - In Format › Per-series settings, Apply settings to = Store Revenue.
- Type = Columns (combo chart).
Result: store revenue is drawn as columns, under the Online line, on the same axis. A series placed in Secondary Y axis values can also switch to columns: it is then read on the right-hand axis.
How do I keep the same scale when filtering?
When a slicer filters the report (a channel, a region), the Y axis refits to the remaining lines: two selections can no longer be compared at a glance. Pin the axis maximum with a measure that ignores filters.
- Create the measure:
Axis max =
CALCULATE (
MAXX ( VALUES ( Sales[Month] ), [Revenue] ), -- the highest point…
REMOVEFILTERS ( Sales ) -- …computed without any filter
)
- Drag
Axis maxinto the Dynamic format field, then rename it for this visualyAxis.max(the Y axis › Maximum setting). - Filter with a slicer: the axis keeps the same bound.
Don't use ALLSELECTED (): it follows slicers and cross-filters, so the scale would still move. REMOVEFILTERS ( Sales ) (or ALL ( Sales )) ignores every filter; to ignore just one, remove only the filtered column, for example REMOVEFILTERS ( Sales[Channel] ). Same idea for yAxis.min, and y2Axis.max for the secondary axis.
Learn more
- Getting started with Line Plume: the data to prepare and a first visual, step by step.
- Line Plume: every field and setting explained: each field well and each setting.
- Annotating a line: comments pinned to points: annotations in detail.
- Getting started with Plume visuals: installation, license, styles and settings shared by all visuals.
- The visual's page: Line Plume. A question? Support.