Power BI Course
Visual Formatting
Formatting is not decoration — it is communication. The same data presented with inconsistent colours, unlabelled axes, crowded data labels, and default fonts produces a report that looks like a draft. The same data with a deliberate colour system, clear hierarchy, well-placed labels, and consistent spacing produces a report that feels authoritative and is trusted. This lesson covers every Format pane section, the professional settings that separate polished reports from rough ones, and the formatting decisions that affect whether the data is correctly perceived.
The Format Pane Structure
The Format pane is split into two tabs: Visual (settings specific to that chart type — axes, data labels, legend) and General (settings that apply to any visual — title, background, border, shadow, size, position). Every visual has both tabs. A consistent workflow is to configure Visual settings first, then General settings last.
Themes — Consistent Colour Across the Whole Report
A theme is a JSON file that sets the default colours, fonts, and visual formatting for every chart in the report. Instead of setting colours individually on each visual, define them once in a theme. When the brand changes, update the theme file and every visual updates simultaneously.
// Power BI theme JSON structure — save as yourtheme.json
// Import via: View tab → Themes → Browse for themes
{
"name": "Dataplexa Corporate",
"dataColors": [
"#0369a1", // Primary blue
"#7c3aed", // Purple
"#16a34a", // Green
"#ea580c", // Orange
"#dc2626", // Red
"#0891b2", // Teal
"#92400e", // Brown
"#475569" // Slate
],
"background": "#ffffff",
"foreground": "#0f172a",
"tableAccent": "#0369a1",
"visualStyles": {
"*": { // applies to ALL visual types
"*": {
"fontFamily": [{ "value": "Segoe UI" }],
"fontSize": [{ "value": 12 }],
"labelColor": [{ "value": { "solid": { "color": "#475569" } } }]
}
},
"barChart": {
"*": {
"dataPoint": [{ "fill": { "solid": { "color": "#0369a1" } } }]
}
}
}
}
Axes — The Most Commonly Mis-configured Element
Axis configuration has the single biggest impact on whether a chart is read correctly or misread. The most dangerous mistake is truncating the Y axis — starting it at a value other than zero makes small differences look large. This is the most common source of misleading charts.
| Axis setting | Best practice |
|---|---|
| Y axis minimum | Always 0 for bar/column charts. Only deviate for line charts showing narrow-range variation (e.g. exchange rates) and only with explicit label noting "axis does not start at zero." |
| Axis title | Remove if the unit is obvious from the data labels or chart title. Keep it when the unit is ambiguous ("Revenue" — is it thousands? dollars? units?). Use the title to include the unit: "Revenue ($000s)". |
| Label rotation | Avoid 90° rotation — it forces the reader to tilt their head. Use a horizontal bar chart instead when labels are long, or abbreviate the labels. |
| Number format | Set axis number format to match the measure format: "$#,##0" for currency, "0%" for percentages, "#,##0" for integers. The axis format overrides the measure's model format string on that visual. |
| Gridlines | Light grey (#e2e8f0 or similar), thin (1px). Remove them entirely on simple charts with few data points — they add ink without adding information. Keep them on dense time series where reading exact values matters. |
Data Labels — When and How
Data labels add precision but also add clutter. The rule is: if the audience needs the exact value, add a label. If they only need to see the relative size or trend, leave them off. Never add labels to a chart that already has a tooltip — the tooltip gives precision on hover without cluttering the visual.
Titles — The Most Underused Formatting Element
Every visual should have a title that describes the insight, not just the data. "Revenue by Region" tells you what is on the chart. "North Leads Revenue Despite Flat Q2" tells you what to look for. Insight-driven titles transform visuals from data displays into communication. Use the dynamic title pattern (a DAX measure in the title field) to make titles respond to slicer selections.
// Dynamic chart title measure — updates when slicer changes
Chart Title =
VAR SelectedYear = SELECTEDVALUE(Calendar[Year], "All Years")
VAR SelectedRegion = SELECTEDVALUE(Orders[Region], "All Regions")
RETURN
"Revenue: " & SelectedYear & " · " & SelectedRegion
// In Report View: select the visual → Format pane → General →
// Title → Title text → click the fx button → select the measure
// The title now reads:
// "Revenue: 2024 · North" when slicer = 2024 and North
// "Revenue: All Years · All Regions" when no slicer selected
Colours — The Four Rules
The Professional Formatting Checklist
| Element | Professional standard |
|---|---|
| Chart title | Present on every visual. Insight-driven where possible. 14–16px, bold. Remove "Title" default text and replace with the actual content. |
| Font consistency | One font family throughout — Segoe UI is the Power BI default and works well. Never mix more than two font families in a report. Set in the theme to apply everywhere at once. |
| Background | White (#ffffff) or very light grey (#f8fafc) for the page. White for visuals. Avoid dark backgrounds for printed/exported reports. Dark mode requires a full colour retheme — do not mix dark visuals on a white page. |
| Border and shadow | Light 1px border (#e2e8f0) on each visual to define the boundary. Shadow: off unless the design explicitly uses card-style elevation. Both borders and shadows add ink — use only one or the other. |
| Alignment and spacing | Use the Format → Align tools to align visual edges. Equal spacing between visuals. A 10–16px gutter between visuals. Consistent left margin. Nothing should appear "approximately" aligned — use the alignment tools. |
| Number format | Currency values: "$#,##0" or "$#,##0K" for thousands. Percentages: "0.0%". Counts: "#,##0". Decimals in KPI cards: one decimal place maximum. Set on the measure in Model View so it applies everywhere, not per visual. |
Teacher's Note: The formatting decision that has the highest return for the least effort is removing the visual border on every chart and replacing it with consistent spacing. Default Power BI charts have no border and generous padding — but many developers add borders and reduce padding to fit more charts on the page. The result looks cramped and amateur. The professional approach is fewer, larger charts with generous whitespace. A report with five well-spaced, clearly titled visuals communicates better than one with ten small, cluttered visuals where you need to zoom in to read anything.
Practice
Practice 1 of 3
To apply a consistent font, colour palette, and default visual formatting across every chart in a report with one action rather than configuring each visual individually, you import a ___ file via the View tab.
Practice 2 of 3
Starting the Y axis of a bar chart at $90,000 rather than $0 makes a 7.5% revenue increase look like a dramatic spike. This is the most common example of a ___ axis, which distorts the perceived magnitude of differences between bars.
Practice 3 of 3
To make a chart title automatically display the currently selected year and region from slicers — for example "Revenue: 2024 · North" — you create a DAX measure that returns a text string, then connect it to the title field using the ___ button in the Format pane Title section.
Lesson Quiz
Quiz 1 of 3
A line chart shows monthly revenue for 24 months. You enable data labels and the chart becomes unreadable — 24 overlapping numbers obscure the trend line. What is the correct solution?
Quiz 2 of 3
A report uses green for "above target" and red for "below target" in a performance table. A colleague who is colour blind cannot distinguish the colours. What is the most accessible fix that preserves the colour coding for sighted users?
Quiz 3 of 3
You set the number format "$#,##0" on the Revenue measure in Model View. A specific bar chart then shows values like "1,234" without the dollar sign. What is the most likely cause?
Next up — Lesson 43 covers Slicers and Filters in depth, including every slicer type, the difference between slicer and filter panel filters, sync slicers across pages, and the interaction settings that control how visuals respond to each other.