# SmartVisuals Bullet Chart for Power BI

> Actual vs target, forecast and prior year in Power BI: status bands, lower-is-better KPIs, pace to target, KPI tiles and IBCS variance. No DAX needed.

- Page: https://www.smartvisuals.io/visuals/bullet-chart
- Fields and settings: https://www.smartvisuals.io/visuals/bullet-chart/settings
- Microsoft Marketplace: https://marketplace.microsoft.com/en-us/product/smartvisuals.smartvisuals-bullet?tab=overview
- Package: https://www.smartvisuals.io/downloads/smartvisuals-bullet-chart-1.0.1.0.pbiviz
- Sample report (zipped .pbip): https://www.smartvisuals.io/samples/smartvisuals-bullet-chart-sample-1.0.1.0.zip
- Price: Free tier for every viewer; premium $1.99 per user per month or $19 per user per year on Microsoft Marketplace, with a 30-day free trial. Premium works in edit mode without a licence; unlicensed viewers see the free tier, never a blocked visual.
- Certified by Microsoft: yes
- Version: 1.0.1.0
- GUID (visualType and publicCustomVisuals): `bulletChart51B8721E840648AA92DA8EB0B9053DBC`

## What is free

- **Actual vs target, unlimited rows**: Horizontal rows, vertical columns or KPI tiles, with bands from % of target (80/100 by default) or from your own measures, plus an optional stretch band.
- **Lower-is-better KPIs**: For costs, scrap or lead time the bands, colours, variance sign and gap flip, for the whole visual or per row from a field.
- **Status and variance**: Status icons with distinct shapes, absolute and % variance labels, a variance bar, target labels and a target marker drawn as a line, full-height line, line with arrows or triangle.
- **Groups, sorting and Top N**: Group sections or side-by-side group panels with an on-target count per group; sort worst first, best first or by largest gap; Top N with Others.
- **Mixed-unit scorecards and IBCS notation**: Per-row units or format strings (96.1 %, 12.6 days, 0.42 per 200k h, variance in percentage points), and AC/PL labels with absolute and relative variance columns.
- **Four themes and every cosmetic option**: Four themes with their own personality, report theme colours, per-category colours and rules, display units and decimals, and a format pane labelled with your real field names. A legend (its own Legend card, on by default, with Legend position Top or Bottom) names the actual bar and the target, forecast and prior-year markers by your measure names, plus the band levels and the run-rate projection and expected-by-now markers when they are on; it steps aside on a visual narrower than 300 px or shorter than 240 px, where the tooltip still names every marker.
- **Native Power BI behaviour**: Cross-filtering, tooltips and report-page tooltips, keyboard navigation, high contrast and 20 languages.

## What premium adds

- **Forecast and prior year**: AC, PL, FC and PY in the same row, with prior year as a dot or as a bar behind the actual.
- **Pace to target**: Run-rate projection and where each row should be by today: year, quarter or month to date, a fixed % or an Elapsed % field.
- **Trend sparklines**: A sparkline per row or tile, with the target line, from a Trend period field.
- **% of target scale**: KPIs in different units on one axis with a shared 100 % line.
- **IBCS variance pins**: A variance pin column next to the rows, IBCS style.
- **Smart insight**: A summary sentence that says what the chart shows: "9 of 15 off target. Largest gap: Scrap rate (+31.8%)".

## Fields

| Field | Internal name | Takes | Needed | What it is for |
| --- | --- | --- | --- | --- |
| Category | `category` | Column | Optional | One bullet per category: region, product, KPI name, plant line. |
| Group | `group` | Column | Optional | Optional sections: rows are grouped under a header with an on-target count. |
| Trend period | `period` | Column | Optional | Optional date or period field: draws a sparkline per row and aggregates the periods into the bullet. |
| Actual | `value` | Measure | Optional | The measured value (AC). |
| Target | `target` | Measure | Optional | Plan, budget or goal (PL). Drives attainment, variance and status. |
| Forecast | `forecast` | Measure | Optional | Forecast or latest estimate (FC), drawn as a diamond. |
| Prior year | `priorYear` | Measure | Optional | Prior year or previous period (PY), drawn as a dot. |
| Axis min | `minValue` | Measure | Optional | Optional start of the axis per row. |
| Axis max | `maxValue` | Measure | Optional | Optional end of the axis per row. |
| Band boundary 1 | `band1` | Measure | Optional | Absolute boundary between the poor and satisfactory bands, per row. |
| Band boundary 2 | `band2` | Measure | Optional | Absolute boundary between the satisfactory and good bands, per row. |
| Lower is better | `lowerIsBetter` | Measure | Optional | Per-row polarity: 1/true where a lower value is better (costs, defects, lead time). |
| Elapsed % | `elapsed` | Measure | Optional | Share of the period already elapsed (0 to 1) for the run-rate projection. |
| Unit or format | `unit` | Measure | Optional | Per-row unit (%, days, kWh, €) or format string (0.0%) for mixed-unit scorecards. Use First or Max on a text column. |
| Tooltips | `tooltips` | Measure | Optional, up to 5 | Extra measures shown in the tooltip. |

## Format pane

Each card is a key under `visual.objects` in a PBIR visual.json; each setting is a property of it. Toggles take `true`/`false`, choices and text a value in single quotes (`'auto'`), numbers a `D` suffix (`12D`).

### Theme (`theme`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Theme | `selectedTheme` | `smartvisuals` (SmartVisuals), `dark` (Dark), `clean` (Clean (White)), `slate` (Slate) |
| Font | `fontFamily` | `inter` (Inter), `segoe` (Segoe UI), `arial` (Arial), `georgia` (Georgia) |
| Transparent background | `transparentBg` | On / off |
| Use report theme colors | `useReportTheme` | On / off |

### Layout (`layout`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Layout | `mode` | `rows` (Rows), `tiles` (KPI tiles) |
| Orientation | `orientation` | `horizontal` (Horizontal), `vertical` (Vertical) |
| Axis scale | `scale` | `row` (Per row), `shared` (Shared axis), `percent` (% of target) |
| Groups as | `groupLayout` | `sections` (Stacked sections), `panels` (Side-by-side panels) |
| Sort | `sortBy` | `data` (Data order), `worst` (Worst first), `best` (Best first), `gap` (Largest gap first), `valueDesc` (Value, high to low), `valueAsc` (Value, low to high), `name` (Name, A to Z) |
| Show top N (0 = all) | `topN` | Number |
| Others row | `showOthers` | On / off |
| Row height (0 = fit) | `rowHeight` | Number |
| Label width (0 = auto) | `labelWidth` | Number |
| Tile columns (0 = auto) | `tileColumns` | Number |
| Column headers | `showHeader` | On / off |
| Legend | `showLegend` | On / off |
| Legend position | `legendPosition` | `top` (Top), `bottom` (Bottom) |

### Legend (`legend`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Legend | `show` | On / off |
| Legend position | `position` | `top` (Top), `bottom` (Bottom) |

### Bars (`bars`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Color by status | `colorByStatus` | On / off |
| Bar color | `barColor` | Colour |
| Good | `goodColor` | Colour |
| Satisfactory | `warnColor` | Colour |
| Poor | `badColor` | Colour |
| Bar thickness % (0 = theme) | `barThickness` | Number |

### Category colors (`dataPoint`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Color | `fill` | Colour |

### Bands (`bands`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Show bands | `show` | On / off |
| Direction | `polarity` | `higher` (Higher is better), `lower` (Lower is better) |
| Band boundaries from | `source` | `percent` (% of target), `measures` (Band boundary fields) |
| Poor below (% of target) | `threshold1` | Number |
| Good from (% of target) | `threshold2` | Number |
| Stretch band from (% of target, 0 = off) | `threshold3` | Number |
| Stretch band | `excellentColor` | Colour |
| Poor band | `poorColor` | Colour |
| Satisfactory band | `fairColor` | Colour |
| Good band | `goodBandColor` | Colour |

### Comparisons (`comparisons`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Measure status against | `primary` | `target` (Target), `forecast` (Forecast), `priorYear` (Prior year) |
| Target marker shape | `targetShape` | `line` (Line), `full` (Full-height line), `arrows` (Line with arrows), `triangle` (Triangle) |
| Target marker | `targetColor` | Colour |
| Forecast marker | `forecastColor` | Colour |
| Prior-year marker | `priorYearColor` | Colour |
| Prior-year style | `priorYearStyle` | `dot` (Dot), `bar` (Bar behind actual) |
| Target label | `showTargetLabel` | On / off |
| Marker size | `markerSize` | Number |

### Values & variance (`variance`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Value | `showValue` | On / off |
| Variance | `mode` | `none` (Off), `pct` (Percent), `abs` (Absolute), `both` (Absolute and percent) |
| Notation | `notation` | `standard` (Standard), `ibcs` (IBCS (AC, PL, FC, PY)) |
| Variance bar | `showVarianceBar` | On / off |
| Variance pins column | `showPins` | On / off |
| Status icons | `showStatusIcon` | On / off |
| Display units | `displayUnits` | `auto` (Auto), `none` (None), `thousands` (Thousands), `millions` (Millions), `billions` (Billions) |
| Decimal places | `decimals` | Number |

### Pace & projection (`pace`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Period elapsed | `period` | `none` (Off), `year` (Year to date (today)), `quarter` (Quarter to date (today)), `month` (Month to date (today)), `fixed` (Fixed %), `measure` (Elapsed % field) |
| Elapsed % | `fixedElapsed` | Number |
| Run-rate projection | `showProjection` | On / off |
| Expected-to-date marker | `showExpected` | On / off |
| Pace marker color | `projectionColor` | Colour |

### Trend (`trend`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Sparkline | `show` | On / off |
| Bullet shows | `aggregation` | `auto` (Auto), `latest` (Latest period), `sum` (Sum of periods), `average` (Average of periods) |
| Sparkline color | `color` | Colour |
| Target line in sparkline | `showTargetLine` | On / off |

### Labels (`labels`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Font size | `fontSize` | Number |
| Font color | `fontColor` | Colour |
| Category labels | `showCategory` | On / off |
| Secondary text color | `secondaryColor` | Colour |

### Axis & grid (`axis`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Axis labels | `showAxis` | On / off |
| Tick labels on every row | `rowTicks` | On / off |
| Gridlines | `showGrid` | On / off |
| Grid color | `gridColor` | Colour |
| Round axis end | `niceAxis` | On / off |

### Smart insights (`insights`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Summary sentence | `show` | On / off |

### Accessibility (`accessibility`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Focus outline color | `focusColor` | Colour |
| Focus outline width (0 = theme) | `focusWidth` | Number |
| Minimum text size (0 = off) | `minFontSize` | Number |
