# KPI Plume: 11 how-to guides (prior year, budget, targets, icons…)

> Step by step: compare with the prior year and budget, set a target per card, color cards green, amber or red, pick each KPI's icon and back content, add a link…

- Language: English
- Web page: https://plumevisuals.com/en/tutorials/kpi-plume-cas-pratiques
- Published: 2026-10-14
- Visual: KPI Plume, technical reference: https://plumevisuals.com/ai/visuals/kpi-card.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 KPI Plume visual that is already set up, with the `Revenue`, `Order count`, `Average basket` and `Margin rate` measures in **Values (one KPI per measure)**, `Revenue target` in **Target** and `Month` in **Trend axis (date)**. If that's not the case, begin with [getting started](/en/tutorials/cartes-kpi-qui-se-retournent): the examples reuse its data (the `Sales` table). Features marked ★ are premium: they work without a license, with a watermark.

Several recipes use the **Per-KPI settings** card of the **Format** pane: first pick, in the **Apply settings to** list at the top of the card, *All KPIs* (the general setting) or a measure (an exception for that KPI only).

## How do I compare each KPI with the prior year?

The change from the previous month is useful, but management often thinks in terms of "vs. prior year."

1. Create a date table (**Modeling › New table**):

   ```dax
   -- One row per day over two years, with the month (1st day of the month) and the year
   Calendar =
   ADDCOLUMNS (
       CALENDAR ( DATE ( 2024, 1, 1 ), DATE ( 2025, 12, 31 ) ),
       "Month", DATE ( YEAR ( [Date] ), MONTH ( [Date] ), 1 ),
       "Year", YEAR ( [Date] )
   )
   ```

2. Select the table, then **Table tools › Mark as date table** (`Date` column). In **Model** view, relate `Calendar[Date]` to `Sales[Month]`.
3. Create a prior-year measure for each KPI you want to compare:

   ```dax
   -- Revenue for the same period, one year earlier
   Revenue PY = CALCULATE ( [Revenue], SAMEPERIODLASTYEAR ( 'Calendar'[Date] ) )

   -- Same idea for orders
   Order count PY = CALCULATE ( [Order count], SAMEPERIODLASTYEAR ( 'Calendar'[Date] ) )
   ```

4. In **Trend axis (date)**, replace `Sales[Month]` with `Calendar[Month]`. In the **Filters** pane, limit the page to `Calendar[Year]` = 2025.
5. Drag `Revenue PY`, then `Order count PY`, into **Comparison (previous year…)**: rank 1 for `Revenue`, rank 2 for `Order count`, as in **Values (one KPI per measure)**.
6. **Comparison** card: set **Compare with** to *“Comparison” field*.
7. **Per-KPI settings** card, with *All KPIs*: type `vs PY` in **Comparison label**. This text replaces the whole label; left empty, it would read "vs Revenue PY."

**Result:** the `Revenue` and `Order count` cards show their change from the prior year, followed by "vs PY." The other two cards show no change, since there is no comparison measure at their rank.

> **Warning:** **Warning**: the sample data starts in July 2025, so `Revenue PY` stays blank and no change is displayed. Add 2024 rows to `Sales` or apply the recipe to your own data.

> **Tip:** **Tip**: for monthly rather than yearly tracking, keep `Sales[Month]` and set **Value › Displayed value (with a trend axis)** to *Last period* and **Compare with** to *Previous period (trend axis)*. Each card then shows December (€165,200 for revenue) compared with November. Type `{period}` in **Note under the value** to show the month under the figure.

## How do I compare with the budget and the prior year at the same time? ★

The executive committee wants two changes on the revenue card, one against the budget and one against the prior year, plus a color that sums it all up.

1. Start from the previous recipe (`Revenue PY` in **Comparison (previous year…)**) and create the budget measure:

   ```dax
   -- Revenue budget: €120,000 per month in the context
   Budget = 120000 * DISTINCTCOUNT ( Sales[Month] )
   ```

2. Drag `Budget` into **Comparison 2 (budget…)**, at rank 1 (like `Revenue`).
3. **Comparison** card: leave **Comparison 2 (“Comparison 2” field)** on.
4. **Per-KPI settings** card, with `Revenue`: type `vs budget` in **Comparison 2 label**.
5. **Comparison** card: set **Card status (good, warning, bad)** to *Target and comparison (green, amber, red) ★*.
6. **Card** card: set **KPI color** to *By status (good / bad)* and **Accent bar (status)** to *Left*.

**Result:** under the prior-year change, the `Revenue` card shows a second change, ▲ +7.6% vs budget (€774,900 against €720,000). It is green because the target is reached (117%). The rule: green when the target is reached, amber when it isn't but at least one comparison is favorable, red otherwise. A KPI without a target takes the color of its comparison. The second change also appears on the back of the card and in the tooltip.

## How do I give each card a different target?

Revenue and orders have their own target measures; average basket and margin rate have a fixed target, set once for the year.

1. Create the orders target measure:

   ```dax
   -- Order count target: 950 orders per month in the context
   Order count target = 950 * DISTINCTCOUNT ( Sales[Month] )
   ```

2. Drag it into **Target**, after `Revenue target`.
3. **Per-KPI settings** card, with `Revenue`: set **“Target” field number (0 = same rank, -1 = none)** to 1. With `Order count`: to 2. Targets no longer depend on the order of the measures in **Values (one KPI per measure)**.
4. With `Average basket`: type 140 in **Fixed target (0 = “Target” field)**.
5. With `Margin rate`: type 0.46 in **Fixed target (0 = “Target” field)**. Enter the target in the measure's unit: 0.46 for 46%.

**Result:** each card has its own progress bar: `Revenue` 117%, `Order count` 103% (5,860 against 5,700), `Average basket` 94% (about €132 against €140), `Margin rate` 98% (45.1% against 46%). To remove a KPI's target, set its **“Target” field number (0 = same rank, -1 = none)** to -1.

## How do I color cards green, amber or red based on the target?

You want to see at a glance which KPIs are on target, which are close and which are falling behind.

1. Start from the targets of the previous recipe.
2. **Comparison** card: set **Card status (good, warning, bad)** to *Target (thresholds)*.
3. Set **Warning from (% of target)** to 95.
4. **Card** card: set **KPI color** to *By status (good / bad)* and **Accent bar (status)** to *Left*.
5. To color the figure too, turn on **Value › Color by status (good / bad)**. If needed, change **“Good” color**, **“Warning” color** and **“Bad” color** in the **Comparison** card.

**Result:** `Revenue` (117%) and `Order count` (103%) are green, `Margin rate` (98%) is amber, `Average basket` (94%, below the 95% threshold) is red. The badge of each change keeps the color of its own direction.

> **Tip:** **Tip**: for a cost, a lead time or a return rate, going down is good news. Pick the measure in **Per-KPI settings** and turn on **Lower is better**: the card is green up to 100% of the target, amber up to 105% with a threshold of 95, and red beyond. For changes, **Comparison › Neutral zone (± %)** set to 2 keeps changes under 2% neutral.

## How do I choose the icon of each card?

The automatic icon is picked from the measure name. You'd rather choose your own, or have an icon that changes with the region.

1. **Per-KPI settings** card, with `Revenue`: set **Icon** to *Finance · Coins*. The list offers 134 Lucide icons sorted into 11 themes (Finance, Sales, People, Performance, Time, Operations…), plus *Automatic (from the name)* and *None*.
2. With `Margin rate`: set **Icon** to *Performance · Gauge*. To remove the icon of a single KPI, choose *None*; for a character of your own, type it in **Or symbol / emoji (replaces the icon)**.
3. **Icon** card: set **Icon background** to *Solid badge* and **Position** to *Before the title*.
4. For a calculated icon, with **One KPI per… (category)** = `Region`, create a text measure:

   ```dax
   -- Icon of the Revenue card by region: icon name, emoji or embedded SVG image
   Revenue icon =
   SWITCH (
       SELECTEDVALUE ( Sales[Region] ),
       "Wales", "waves",
       "North West", "☀️",
       "trending-up"
   )
   ```

5. Drag `Revenue icon` into the **Icon (text measure)** field, at rank 1 (like `Revenue`).

**Result:** the Wales card shows waves, the North West card a sun, and a card without a region (the total, for instance) a rising arrow. The icon given by the measure takes precedence over the **Icon** setting.

> **Tip:** **Tip**: the measure accepts the name of one of the visual's icons (`trending-up`, `shopping-cart`, `euro`…), an emoji, or an embedded SVG image starting with `data:image/svg+xml`, for example `"data:image/svg+xml;utf8,…"` built in DAX. Web addresses are never loaded. Unrecognized text is shown as is, like a symbol: check the spelling of the name.

## How do I show the same KPIs for each region, with a total?

A strip per region lets you compare teams at a glance, with no empty cards when a region has nothing to show.

1. Create a measure that stays blank when there is nothing to count:

   ```dax
   -- Number of months when revenue exceeds €80,000 (blank if none)
   Record months = COUNTROWS ( FILTER ( VALUES ( Sales[Month] ), [Revenue] > 80000 ) )
   ```

2. In **Values (one KPI per measure)**, keep only `Revenue` and `Record months`.
3. Drag `Region` into **One KPI per… (category)**.
4. **Layout** card: turn on **“Total” card (with “One KPI per…”)** and type "All regions" in **Total label**.
5. Still in **Layout**, turn on **Hide blank KPIs**.
6. **Flip** card: set **Flip the card** to *On click on the ↻ icon*, so a single click on a card filters the report.

**Result:** two "All regions" cards (€774,900 and 6 months), then `Revenue` for Wales (€362,400) and North West (€412,500), and `Record months` for North West (2). Wales's `Record months` card, which is blank, isn't drawn. Clicking a region filters the page and dims the other cards.

## How do I choose what the back shows, KPI by KPI?

On the back of the revenue card, you want the margin as a figure, then a definition; on the back of the other cards, only the comparison and the target, without minimum or maximum.

1. Create the measure `Total margin = SUM ( Sales[Margin] )` and drag it into **Back of the card: figures**. A measure in this field only appears on the back, with its format.
2. **Per-KPI settings** card, with `Revenue`: type the definition in **Back of the card text**, for example `**Revenue**: amount invoiced excluding tax, net of returns.` (double asterisks make text bold).
3. **Back of the card** card: set **Content** to *Text and key figures* and **Key figures** to *All available*. Measures from **Back of the card: figures** only appear with this last choice.
4. **Back of the card: content per KPI** card, with *All KPIs*: turn off **Minimum**, **Maximum**, **Average** and the `Total margin` switch (each measure of the **Back of the card: figures** field has its own, under its name).
5. In the same card, with `Revenue`: turn on `Total margin` and **Text after the figures**.

**Result:** on the back of the `Revenue` card, the total margin (€349,600), then the comparison, the target, its achievement (117%) and the period, and finally the definition. On the back of the other cards, the comparison, the target and the period, without minimum, maximum or average. The **Back of the card: content per KPI** card only appears when **Flip › Flip the card** isn't set to *Never*.

A variant, text that follows the filters: typed text doesn't change with filters, a text measure does.

```dax
-- Name of the region with the highest revenue, in the current context
Revenue back =
"Best region: "
    & MAXX ( TOPN ( 1, VALUES ( Sales[Region] ), [Revenue] ), Sales[Region] )
```

Drag `Revenue back` into **Back of the card (text)**, at rank 1, then clear **Back of the card text** for `Revenue`: text typed for a measure takes precedence over the field. The back then reads "Best region: North West."

> **Tip:** **Tip**: to check every back without clicking each card, turn on **Flip › Show the back (preview in edit mode)**, then turn it off once formatting is done.

## How do I write a title and a note that follow the filters?

The title "Revenue" doesn't say which year it is: you want "Revenue 2025", and below the value a note that recalls the comparison.

1. **Modeling › New measure**, twice:

   ```dax
   Revenue title = "Revenue " & MAX ( Calendar[Year] )
   Revenue note = "vs " & ( MAX ( Calendar[Year] ) - 1 ) & ": {delta}"
   ```

2. Drag `Revenue title` into **Title (text measure)** and `Revenue note` into **Note (text measure)**. They are the first measures in these fields: they go with the 1st KPI, `Revenue`.
3. Pick another year in the year slicer.

**Result:** the card is called "Revenue 2025", then "Revenue 2024", and the note writes the change in place of `{delta}` (with the prior-year comparison from the first recipe). The other KPIs keep their title. To give the same note to every KPI, name the measure `kpiFormat.note` and drag it into **Dynamic format**.

> **Tip:** **Tip**: the number is written in full when it fits in the card ("$412,300"), otherwise abbreviated ("$412K"): this is the new default of **Per-KPI settings › Display units**, *Automatic (full value when it fits)*. Choose *Abbreviated (K, M, bn)* to always abbreviate.

## How do I add a link to a card?

From the revenue card, readers should be able to open the detailed report; from the margin rate card, email the finance team.

1. **Per-KPI settings** card, with `Revenue`: type the address of the page to open in **Link (web address)**, for example `https://www.example.com/reports/sales`.
2. With `Margin rate`: type `mailto:finance@example.com`.

**Result:** a ↗ button appears after the title of these two cards. A click opens the address after Power BI asks for confirmation; it doesn't flip the card or filter the report. Only addresses starting with `https://` or `mailto:` are accepted. With **One KPI per… (category)**, all cards of the same measure share the same link.

## How do I highlight the main KPI? ★

Revenue deserves more room than the secondary indicators.

1. Put `Revenue` first in **Values (one KPI per measure)**.
2. **Layout** card: set **Arrangement** to *First one large, on the left ★*.
3. Set **First KPI size (%)** to 50.

**Result:** the `Revenue` card takes up the left half of the visual; the other three share the other half.

> **Tip:** **Tip**: for a more visible target on the large card, set **Target › Shape** to *Ring ★* and **Thickness** to 8, then **Card › Content layout** to *Centered*. The ring shows the percentage reached (117%).

## How do I keep cards readable and scroll?

With one card per region and several measures, cards shrink in a small frame. By default, KPI Plume shrinks them so everything stays visible, with no scroll bar; you'd rather have fixed-size cards, even if that means scrolling.

1. **Layout** card: set **When the cards do not fit** to *Keep the minimum sizes and scroll*.
2. Set **Minimum card width (px)** to 180 and **Minimum card height (px)** to 110.
3. Choose the scroll direction with **Arrangement**: *Automatic grid* to scroll down, *One row* to scroll right.

**Result:** each card stays at least 180 × 110 pixels. A scroll bar appears only in the direction that overflows, and only when the cards don't fit in the frame.

## Learn more

- [Getting started with KPI Plume](/en/tutorials/cartes-kpi-qui-se-retournent): the data to prepare and a first visual, step by step.
- [KPI Plume fields and settings](/en/tutorials/kpi-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 shared settings.
- The visual's page: [KPI Plume](/en/visuals/kpi-card). A question? [Support](/en/support).
