KPIs, targets & trends
This is what separates the Org Chart from a plain hierarchy diagram: every card can carry a number, a comparison against a benchmark, a colour-coded status, and its own history.
The KPI row
Bind a numeric measure to KPI values and every card gains a KPI row:
Revenue: 1.24M ✔ 112.0%
- On the left: the measure's name and its value, formatted with the model's format string (currency, percent, decimals) plus any display units you choose.
- On the right: the comparison pill, when a comparison is possible.
If the measure returns blank or a non-numeric value for a card, that card simply has no KPI row. The rest of the card renders normally.
The two comparison modes
The pill can be produced two different ways.
% of target
Bind a measure to KPI Target. The pill shows attainment — the KPI divided by its target, as a percentage:
attainment % = KPI value ÷ target × 100
112.0% means the card is 12% above its target. 88.0% means it fell 12% short. The number is unsigned and self-anchors on 100%.
Requires the target to be greater than zero — attainment against a zero or negative benchmark isn't meaningful.
Change vs. previous
Bind a column to KPI Period. The pill shows the signed change from the card's previous period:
change % = (KPI value − previous value) ÷ previous value × 100
+12.0% means the card grew 12% since the last period; -8.0% means it shrank.
The "previous" value is the most recent earlier point that is also visible on the sparkline — so the tooltip's Previous (May 2026) always names a point you can see. Rows with a blank period, or a previous value of exactly zero, are skipped.
Choosing between them
Format → KPI Configuration → General → Comparison mode
| Mode | Behaviour |
|---|---|
| Auto — target when available (default) | Uses the target when one is bound and usable; otherwise falls back to the previous period. |
| % of target | Always uses the target. Cards without a usable target show no pill. |
| Change vs. previous | Always uses the previous period. Cards without a usable previous point show no pill. |
Auto is decided per card, so a dataset where only some cards have targets will show attainment on those and previous-period change on the rest. Forcing a mode makes the chart consistent at the cost of leaving some cards without a pill — which is often what you want when the two numbers shouldn't sit side by side.
Status colours and thresholds
Each pill is judged against thresholds and coloured accordingly. Because the two modes measure different things, they have separate threshold pairs, and the format pane only shows the one that applies.
Thresholds — % of target
| Setting | Default | Meaning |
|---|---|---|
| Good at or above (%) | 110 | Attainment at or above this is good (green). |
| Bad at or below (%) | 90 | Attainment at or below this is bad (red). |
Anything in between is neutral (blue) — on target.
Thresholds — change vs. previous
| Setting | Default | Meaning |
|---|---|---|
| Good at or above (%) | 10 | Growth at or above this is good (green). |
| Bad at or below (%) | −10 | A drop at or beyond this is bad (red). |
Thresholds are how you encode your own performance policy. A 110/90 band is deliberately wide — tighten it to 105/95 for tightly-managed KPIs, or invert the logic for "lower is better" metrics by swapping the numbers (set good to 90 and bad to 110 — the pill still reads correctly, and the legend labels can be renamed to match).
Colours
| Setting | Default |
|---|---|
| Positive color | Green #40B56C |
| Neutral color | Blue #118DFF |
| Negative color | Red #D64550 |
The status colour is used for the pill, the KPI value text, and the sparkline. The pill's background is the same colour at 20% opacity.
Status is also encoded by icon shape, not only colour, so it survives high-contrast mode and colour-blindness:
| Status | % of target | Change vs. previous |
|---|---|---|
| Good | ✔ check | ↗ trending up |
| Neutral | ≈ approximately-equal | ≈ approximately-equal |
| Bad | ✖ cross | ↘ trending down |
In dark mode these three pickers are hidden and the dark palette's colours are used instead. Your chosen colours are kept and come straight back when dark mode is turned off. In high-contrast mode, Power BI's system colours take over.
Number formatting
Format → KPI Configuration → General
| Setting | Options | Default |
|---|---|---|
| Font size | 8 – 36 | 12 |
| Display units | Auto · None · Thousands · Millions · Billions · Trillions | None |
| Decimal places | 0 – 10 | 1 |
- Display units shorten the KPI on the card only —
1,240,000becomes1.24M. The tooltip always shows the full value. - Auto picks one shared unit for the whole chart, based on the largest value actually displayed on a card. (Historical values inside a sparkline can't drag every card into a smaller unit.)
- Decimal places applies to the pill percentage, not to the KPI value — the KPI value follows your measure's model format string.
- Font size sizes the pill (icon and text together).
Set the KPI's decimals, currency symbol and percentage sign on the measure in your model, not here. The visual respects the model format string everywhere, so the same measure looks identical in a card, a table, and the Org Chart.
Sparklines
Bind KPI Period and each card gets a small chart of its KPI history, drawn under the KPI row.
Format → Sparkline → Chart Type: Line or Area (default Area).
Behaviour worth knowing:
- The sparkline needs at least two points; cards with fewer simply don't show one.
- It's coloured by the card's KPI status, so the trend and the pill agree at a glance.
- Points with a blank KPI value create a gap rather than a false zero.
- The x-axis is proportional for dates and numbers, and evenly spaced for text period labels.
- Each card's sparkline is scaled to its own values, with 10% headroom — it shows shape, not comparable magnitude between cards.
- Sparklines always run left to right, even in a right-to-left layout — time still reads left to right.
Text period labels are ordered alphabetically. "2025-Q1", "2025-Q2" sorts correctly; "April", "May" does not. Set Sort by column on the dimension in your model, or use a real date column.
The legend
Format → Legend (off by default)
The legend explains the three KPI statuses and doubles as a filter.
| Setting | Options | Default |
|---|---|---|
| Show Legend | On · Off | Off |
| Position | Top · Bottom · Top Center · Bottom Center | Top Center |
| Show Title | On · Off | On |
| Title Text | Any text | KPI Status |
| "Target Not Met" Label | Any text | Target not met |
| "Target Met" Label | Any text | Target met |
| "Target Exceeded" Label | Any text | Target exceeded |
| Font Size | 8 – 20 | 10 |
| Font Color | Any colour | Black |
- Clicking a legend item cross-filters the report to every card with that status. Ctrl+click adds a second status to the selection. Click again (or click empty canvas) to clear.
- Hovering an item shows the thresholds actually in force, e.g.
Target attainment >= 110%orVariance <= -10%. When any card in the chart is using target mode, the legend describes the attainment thresholds; otherwise it describes the variance thresholds. - The three labels are free text, so you can rename them to your own vocabulary — Below plan / On plan / Above plan, or At risk / On track / Ahead.
The legend is a compact status filter. On a large chart, turn it on and let people click "Target not met" to jump straight to the cards that need attention.
Related
- Data fields — KPI values, KPI Target and KPI Period.
- Use cases — building a KPI tree with targets at every level.
- Troubleshooting — why a pill or sparkline might not appear.