# 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.

- Language: English
- Web page: https://plumevisuals.com/en/tutorials/line-plume-cas-pratiques
- Published: 2026-10-14
- Visual: Line Plume, technical reference: https://plumevisuals.com/ai/visuals/line-chart.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).

These recipes start from a Line Plume chart that is already set up. If that's not the case, begin with [getting started](/en/tutorials/line-plume-prise-en-main): 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.

1. Start from the step-by-step chart (X axis `Month`, Legend `Channel`, Y axis values `Revenue`).
2. Drag `Margin Rate` into **Secondary Y axis values**. A dashed line per channel appears, read on a second axis on the right.
3. In **Format › Secondary Y axis**, turn on **Axis title › Show**, then **Text**: `Margin Rate`.
4. 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:** **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.

1. Remove `Channel` from **Legend (series)**, then put `Store Revenue` and `Online Revenue` in **Y axis values**. Two lines, named after the measures.
2. In **Format › Per-series settings**, **Apply settings to** list: choose *Online Revenue*.
3. **Line style**: *Dashed*.
4. **Width (0 = Lines card)**: `1`.
5. **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)

1. In edit mode (in Power BI Desktop, see the [glossary](/en/tutorials/bien-demarrer-visuels-plume#glossary)), hover over the chart. An **Annotate** button appears.
2. Click **Annotate**, then the *Online* point for June 2025.
3. 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)**.
4. 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**

1. In **Format › Annotations ★ › Annotations (one per line)**, type one line per annotation:

   ```text
   # Lines starting with # are comments
   2025-03 | Online | Spring campaign
   2025-06 | Store | Mérignac store opening
   2025-02 | February dip
   ```

2. The format is `x | text` or `x | 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 `\#`.

This is the ideal method to review and fix all annotations at once.

**Method 3: a measure based on the data**

1. Create an `Events` table (Home › **Enter data**) with a `Month` column (date) and a `Text` column, with no relationship to `Sales`.
2. Create the measure:

   ```dax
   // 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], " · " )
   ```

3. Drag `Event` into the **Annotations (text) ★** field. Each non-blank value becomes an annotation.
4. With a Legend, restrict the annotation to one series, otherwise it appears on every line:

   ```dax
   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.

1. Open the **Analytics** pane, **Moving average ★** card, turn on **Show**.
2. **Number of points**: `3` (three months on our monthly axis; use `7` for a week on a daily axis).
3. **Average**: *Simple*; **Window**: *Previous points (trailing)*.
4. **Original line opacity (%)**: `30`.
5. 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.

1. **Analytics** pane, **Trend ★** card, turn on **Show**.
2. **Type**: *Exponential smoothing (Holt)*.
3. **Forecast periods**: `3`. The X axis extends to September 2025.
4. **Forecast interval**: *80%*.
5. Turn on **Value at the end of the forecast**.
6. 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:** **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.

1. Example of a measure that chains actuals and forecast (`[Forecast Revenue]` is your forecast measure):

   ```dax
   Revenue Actual then Forecast =
   VAR currentMonth = MAX ( Sales[Month] )
   RETURN
       IF ( currentMonth <= DATE ( 2025, 4, 1 ), [Revenue], [Forecast Revenue] )
   ```

2. In **Format › Lines**, **Future part dashed ★** group, turn on **Show**.
3. **Starting from**: *A date or a value*.
4. **Date or value**: `2025-05`.
5. **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:** **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.

1. Drag the `Target` measure into the **Reference lines (measures) ★** field. A dashed line appears at 45,000, labeled "Target" with its value.
2. In **Format › Lines**, **Color by threshold ★** group, turn on **Show**.
3. **Threshold**: *Fixed value*; **Value**: `45000`.
4. Keep **Color above** (green) and **Color below** (red).
5. 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:** **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.

1. In **Format › Data colors**, **Coloring**: *Highlight series ★*.
2. **Highlighted series**: *Named series*; **Series names (separated by ;)**: `Online`.
3. Leave **Highlight color (empty = accent, or palette if several)** and **Other series color (empty = style gray)** empty.
4. **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.

1. Start from the step-by-step chart, without a Legend: Y axis values = `Store Revenue` and `Online Revenue`.
2. In **Format › Per-series settings**, **Apply settings to** = *Store Revenue*.
3. **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.

1. Create the measure:

```dax
Axis max =
CALCULATE (
    MAXX ( VALUES ( Sales[Month] ), [Revenue] ),  -- the highest point…
    REMOVEFILTERS ( Sales )                       -- …computed without any filter
)
```

2. Drag `Axis max` into the **Dynamic format** field, then rename it for this visual `yAxis.max` (the **Y axis › Maximum** setting).
3. 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](/en/tutorials/line-plume-prise-en-main): the data to prepare and a first visual, step by step.
- [Line Plume: every field and setting explained](/en/tutorials/line-plume-champs-et-reglages): each field well and each setting.
- [Annotating a line: comments pinned to points](/en/tutorials/courbes-annotations): annotations in detail.
- [Getting started with Plume visuals](/en/tutorials/bien-demarrer-visuels-plume): installation, license, styles and settings shared by all visuals.
- The visual's page: [Line Plume](/en/visuals/line-chart). A question? [Support](/en/support).
