Make it easy to read.
Eight rules that cut the work a reader does to get the numbers right: honest axes, a sensible order, labels where the data is, a tidy grid and plain words.
Honest axes. Bars start at zero, one unit gets one scale.
Presentations and dashboards
A bar's length is its value. Start the axis at $28 instead of $0 and a bar twice as long no longer means twice as much. Zelazny and IBCS agree: bars and columns start at zero. Line charts may zoom in, because they show change through slope, not length, but say so on the axis.
- Men's column looks four times as tall as women's.
- The real difference is 13%.
- Both columns in proportion: $32.91 against $29.12 an hour.
- The subtitle says what the average doesn't adjust for, so nobody reads it as pay for the same job.
The second trap is the dual axis. Power BI's line and clustered column chart can give each measure its own scale. Where the line crosses the columns then depends only on the two scales Power BI picked, but readers read it as meaning something.
- 1 Exits seem to overtake hires in 2015. They didn't: 26 people left and 36 were hired.
- The reader has to check which axis each series uses.
- Both charts run from 0 to 90, so their heights compare directly.
- Hires beat exits every year, but the gap fell from 70 in 2011 to 10 in 2015.
In Power BI
- Bars from zero: Format visual > Visual > Y-axis > Range > Minimum: 0 (X-axis on a bar chart). Column and bar charts usually start at zero on their own, so check this whenever someone has typed a minimum.
- Same unit, same scale: type the same Minimum and Maximum on every chart of that unit on the page. Or use Small multiples, which share one axis.
- Combo charts: if both measures share a unit, turn the Secondary y-axis off so they share one scale. If they don't, build two charts and line them up.
Sort deliberately. By value, unless the order is built in.
Presentations and dashboards
Sorted bars make the ranking instant: the reader sees first, second and last without reading a number. Alphabetical order hides it. Below, the highest rate sits ninth of ten.
The exception is categories with a natural order: time, ratings, size bands, pay bands. Those keep their order. Months sorted A to Z (April, August, December) break the year apart.
- The highest rate, search engine at 60%, is ninth in the list.
- Finding the lowest means reading every bar.
- First and last sit where the eye expects them, and the title names both.
- Only sources with 15 or more hires. Smaller sources rest on a handful of people.
- April comes first, then August. The two spikes look unrelated.
- Labels with two decimals, in thousands.
- The February and August spikes, six months apart, line up with the Diversity Job Fair's two payments of $5,129 and $4,892.
In Power BI
- Sort by value: More options (...) > Sort axis, pick the measure, then Sort descending.
- Months and other ordered text: in Table view, select the Month column, then Column tools > Sort by column and pick Month Number.
- No number column yet? Add one in Power Query (Add column > Custom column) or with DAX:
Month Number = MONTH ( Calendar[Date] ). The same trick orders pay bands and tenure buckets.
Label the data directly. Put each name where its data is.
Presentations and dashboards
A legend sends the eye on a round trip: find the colour in the legend, find the line, come back for the next one. With five lines in five colours, readers lose track. Knaflic's fix is to write each series name at the end of its line, in the line's colour, and drop the legend.
- Five colours to match against a legend at the top.
- Markers and gridlines add 25 dots and four lines. Nothing says which line matters.
- Each line is named where it ends, with its 2015 value.
- Referrals in blue, the rest grey: from 8 hires in 2011, the fewest, to 14 in 2015, the most.
In Power BI
- Format visual > Visual > Legend: Off.
- Line charts: turn on Series labels and set the position to Right. Each name sits at the end of its line, in its colour.
- Bar and column charts: Data labels On, and put the category on the axis rather than in the Legend well.
- If a legend must stay, move it to the top left and order it like the lines.
Data labels or axis, not both. Say each number once.
Presentations and dashboards
With labels on every bar, the value axis repeats the same numbers less precisely, and gridlines exist only to help read values off that axis. IBCS puts it plainly: labels on the data make the axis unnecessary. Keep one or the other.
It works the other way too. A line with 60 points can't carry 60 labels. Keep the axis there and label only the latest point, or the high and the low. Dense dashboard charts and small multiples can keep light gridlines for the same reason.
- Every value appears twice: exactly on the column, roughly on the axis.
- Gridlines cross columns that already carry their number.
- The same numbers with less ink.
- The title does the comparison: $56 against $23, more than twice.
In Power BI
- Data labels: On. Under Values, set Display units to None and Value decimal places to 0.
- Value axis Off: Y-axis on a column chart, X-axis on a bar chart. Keep the category axis; it names the bars.
- Gridlines: Off.
- Long line charts: keep the Y-axis, turn data labels off, and label the last point with a measure that returns a value only for the latest date.
Align to a real grid. Equal gaps, edges in line.
Presentations and dashboards
Readers notice a crooked page before they read it. A gap that is 4 to 8 px off already looks wrong, and a page that looks careless gets its numbers trusted less. Edges that line up also let the eye travel in straight lines from card to chart to table.
Pick one outer margin and one gap, then calculate widths instead of dragging: width = (content width − gap × (n − 1)) ÷ n.
- 1 Cards of four widths, with gaps of 8, 22 and 14 px and tops that step up and down.
- 2 The two charts start 10 px apart and end at different right edges.
- 3 The table is indented 14 px from everything above it.
- One 16 px margin and one 16 px gap everywhere.
- Two cards plus a gap equal one chart, so the gap between the charts lines up with the gap between cards two and three.
In Power BI
- Turn on View > Gridlines and Snap to grid.
- Type sizes and positions: Format visual > General > Properties > Size (Height, Width) and Position (Horizontal, Vertical).
- Work the widths out. On a 1280 × 720 page with 24 px margins and 16 px gaps, four cards are (1232 − 3 × 16) ÷ 4 = 296 px wide.
- To line up several visuals at once, select them and use Format > Align: Align top, then Distribute horizontally.
Fewer visuals, bigger main visual. White space is fine; clutter isn't.
Presentations and dashboards
Each visual is a question the reader has to ask and answer. Nine small charts give nine half-answers, each too small to read, with no hint which one matters. When a page has spare room, make the main visual bigger rather than adding another one.
Rough limits: one or two visuals on a presentation page. On a dashboard, six to ten data visuals, three to five cards and up to three slicers. Anything more goes to a drillthrough page or a tooltip.
- Nine field-name titles, mixed colours, values too small to read.
- Nothing on the page says where to look.
- The title states the finding. Three cards give the numbers it rests on.
- One big chart proves it, with the company rate as the yardstick.
In Power BI
- Size the main visual first, then fit the rest around it. Give it at least half the page.
- Replace three near-identical visuals with one that switches measure: Modeling > New parameter > Fields, add the measures, and use the parameter's slicer.
- Move detail out to a drillthrough page or a report-page tooltip (see rule 2).
Format numbers for people. Round to what matters, and give the unit.
Presentations and dashboards
Power BI shows whatever the model holds: 30.72, 0.3389, 84.46K. The reader then has to guess the unit and round in their head. Barbara Minto's point holds for every visual: $4.9 million is easier to grasp than $4,876,987.
Keep three or four significant digits ($3.4M, not $3,412,887), zero or one decimal on percentages, the same decimals across a row, and a unit on every number. Tables are the exception: readers go there for exact values, so keep full precision.
- 30.72 what? Dollars an hour, but nothing says so.
- A rate shown as a decimal, to four places. 84.46K: Auto display units with two decimals nobody needs.
- $31/hr, 34%, $84K, 3.0 yrs: every number has its unit.
- Bar labels in whole percentages: 40%, not 0.3990.
| Power BI shows | Format string | Shows |
|---|---|---|
| Average pay: 30.72 | \$#,0"/hr" | $31/hr |
| Turnover rate: 0.3389 | 0% | 34% |
| Recruiting spend: 84460 | \$#,0,"K" | $84K |
| Average tenure: 3.04 | 0.0" yrs" | 3.0 yrs |
| Men's pay vs. women's: 0.1301 | +0.0%;-0.0%;0.0% | +13.0% |
In Power BI
- Format the measure once, and every visual follows: select it in the Data pane, then in Measure tools > Format choose Custom and type the format string.
- On visuals, set Display units to None, never Auto, once the measure carries its own format. Auto is what turns 84,460 into 84.46K.
- Cards: Format visual > Callout value sets display units and decimal places.
Plain words, no field names. Write for people, not for the model.
Presentations and dashboards
"Count of Employee Source by Performance Score and Left" tells the reader a machine made the chart and nobody checked it. Field names are written for the data model. "Left: True" and "PIP" mean nothing to someone who has never opened it.
The test: hand the visual to a stranger for five seconds. Every word they see (title, axis, legend, slicer header) should be one they'd say out loud.
- Field names in the title, both axis titles and the legend, where "Left" means True or False.
- Raw rating codes, cut off. Counts, so the big Fully Meets group dwarfs the rest.
- Seven rating codes grouped into four that anyone can read.
- The share who left instead of True and False counts. The subtitle flags the small group: only 24 people.
| Power BI shows | Write instead |
|---|---|
| Count of Employee Source | Hires |
| Sum of Left | People who left |
| Left: True / False | Left / Stayed |
| PIP, Needs Improvement | Below expectations |
| N/A- too early to review | Too early to rate |
| Average of Pay Rate | Average pay ($/hr) |
In Power BI
- Rename for one visual: in the Visualizations pane, double-click the field in its well (or right-click, Rename for this visual).
- Rename for every visual: give measures plain names, such as
People who left = SUM ( Employees[Left] ), and rename columns in the Data pane. - Plain categories: in Power Query, Add column > Conditional column to map rating codes to groups like Below expectations, or Transform > Replace values.
- Type the title yourself in Format visual > General > Title, and turn axis titles off when the title already says it. More on Titles.
Spot the broken rule before you open the answer.
A column chart of pay by sex starts its axis at $28, and men's column looks four times as tall. Fair?
No (rule 8). Column length is the value, so the axis must start at zero. From zero, $32.91 against $29.12 is a 13% gap, not four times.
A chart of spend by month runs April, August, December, February. What's the fix?
Sort the Month column by a month-number column (rule 9): Column tools > Sort by column. Months have a natural order, so they never sort by name or by value.
A line chart has five channels in five colours and a legend underneath. What would you change?
Turn the legend off and name each line at its end (rule 10). Then grey every line except the one the title is about.
A bar chart has data labels on every bar, plus a value axis and gridlines. What goes?
The value axis and the gridlines (rule 11). The labels already give exact values. Keep the category axis, since it names the bars.
A card shows "0.3389" under the label "Sum of Turnover Rate". Which two rules does it break?
Number formatting (rule 14): show it as 34%. Plain words (rule 15): "Sum of" is Power BI's default aggregation, and summing a rate means nothing. Label it "Turnover" or "Employees who left", and add a comparison.