Build brilliant Power BI reports with a disciplined schematicLesson 3 of 8
Choosing KPIs: outcome, drivers and guardrail
Build contextual KPI cards with valid comparisons, trends and explicit polarity.
What you'll do
Choose a synthetic outcome, two drivers and a guardrail from an existing model. Write a complete KPI card contract, calculate valid deltas and explain polarity. Do not create new DAX to fill an empty slot; this lesson selects and reviews existing measures.
Select meaning before cards
Begin with explicit governed choices. Otherwise inspect cited measure descriptions, annotations, folders, dependencies, format strings and names. Eligible candidates are visible explicit numeric business measures. Raw numeric columns, IDs and hidden helper measures do not become headline metrics because they are easy to aggregate.
For Sales, the documented candidate priorities are net sales, order count, average order value and gross margin percentage. They are selection guidance, not universal targets or automatic good/bad directions. Without a governed outcome designation, label the first card Primary metric rather than claiming a corporate North Star.
| Slot | Job | Review risk |
|---|---|---|
| Outcome | Summarise the page's decision | Wrong population or units |
| Driver 1 | Actionable supporting measure | Repeated lineage |
| Driver 2 | Different useful contribution | Association presented as causation |
| Guardrail | Keep a risk or constraint visible | Invented threshold or polarity |
Actual, previous-year, YTD and YoY versions of one measure are not four independent outcomes. Retain selection reasons and rejected candidates. If a required semantic tie cannot be resolved, stop for review; a stable identifier makes selection repeatable, not meaningful.
Complete one logical card
Each card needs a concise name, formatted value and unit; selected period or snapshot; named baseline and value; absolute and valid relative variance; governed status; and a valid trend window or an explicit unavailable state. Distinguish data-through date from refresh timestamp.
Synthetic current value: 105
Named baseline: 100
Absolute variance: +5
Relative change: +5%
Polarity: explicitly lower-is-better
Visible status: +5% / UnfavourableKeep the arithmetic sign. Sentiment follows the approved business polarity: higher-is-better, lower-is-better, target-band or neutral. A name such as Cost or Headcount does not supply that authority. Unknown polarity remains neutral, and target bands require approved limits.
If the baseline is zero or negative, show absolute change and relative change N/A unless a governed formula exists. A missing baseline is Baseline unavailable, with no invented difference. A rate rising from 32% to 35% changes by +3 percentage points; its relative increase is about 9.4%. Keep those units distinct.
Match time and aggregation
Pair comparisons only within the same metric, population, units, calendar and date grain. An elapsed month-to-date result cannot be compared as though it were a complete month. A trend needs a real chronological field, valid sort key, relationship path and qualified observations. Up to twelve points is the default maximum, not permission to interpolate missing history.
Flows may sum across time when their semantics support it. AP balances, inventory snapshots and headcount cannot simply be added across dates. Re-evaluate ratios and distinct counts at total scope instead of averaging displayed percentages or adding overlapping populations.
Review the native implementation
The fallback order is native kpi, then cardVisual using Data, then classic card using Values. A new card has no universal built-in sparkline role. Companion native labels or detail may be necessary; separately rendered data visuals count toward the cap. If a composite cannot be supported, keep the limitation visible instead of claiming its trend was rendered.
Write one complete card specification and test three failures: missing baseline, blank actual and unknown polarity. Blank remains unknown, not zero. Your expected output is a selection rationale and a truthful availability matrix. Preview v2 integration may implement these contracts; inspect the installed schema before using its authoring route.
Check your understanding
- Why can a positive delta be unfavourable without changing its sign?
- What should a card show when its baseline is zero or missing?
- Why might native KPI disagree with a selected-period total even when both measures are valid?