Visuals/Pl. XV

    Bullet Chart

    The bullet chart for review meetings

    Actual next to target, forecast and prior year: see at a glance which lines are on target, by how much, and whether you will make the year. Bands, status and variance computed in the visual, no DAX.

    Datasheet
    Status
    Available on Microsoft Marketplace
    Price
    $1.99 /user/mo · $19 /user/yr
    Licensing
    Per user, assigned in the Microsoft 365 admin center. Unlicensed viewers see the free tier, never a blocked visual.
    Data
    Computed inside Power BI. No external calls, no API keys, no telemetry.
    Visuals API
    5.11
    Accessibility
    Status by icon shape, WCAG contrast-tested themes, single-tab-stop keyboard navigation, high-contrast mode
    Languages
    20 languages, including English, Czech, German, French, Spanish and Portuguese
    Works in
    Power BI Desktop, Service, Embedded
    Pl. XV  ·  Bullet Chart  ·  the product spotrecorded from the shipped visual
    Power BI bullet chart with actual vs plan, forecast and prior year per region, bands, status icons and sparklines
    Pl. XV  ·  Bullet Chart  ·  Actual vs plan, forecast and prior year per region: bands, icons, variance and sparklines, with zero setup.rendered from the shipped visual
    What it does

    SmartVisuals Bullet Chart answers the three questions of every review meeting in one visual: are we on target, against which plan, and will we make it? Each row shows the actual against its target with qualitative bands, a status icon and the variance, and the rows can be sorted by how far they are off. Lower-is-better KPIs such as costs, scrap and lead time flip automatically, for the whole visual or per row.

    Rows, vertical columns or KPI tiles, group sections or side-by-side panels, per-row units for mixed scorecards and four themes with their own personality are all free. Premium adds forecast and prior-year comparisons, pace to target, trend sparklines, a % of target scale, an IBCS variance pin column and a summary sentence. Everything is computed inside Power BI; the visual makes no external calls.

    Search all visuals

    Free and premium

    Where the line is, exactly.

    Report authors see the full premium set in edit mode, so you can evaluate every feature on your own data before assigning a single licence. Unlicensed viewers always get a working chart.

    Free tierevery viewer
    • Actual vs target, unlimited rowsHorizontal 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 KPIsFor 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 varianceStatus 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 NGroup 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 notationPer-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 optionFour 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 (Layout > Legend, 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 behaviourCross-filtering, tooltips and report-page tooltips, keyboard navigation, high contrast and 20 languages.
    Premium$1.99 /user/mo · first month free
    • Forecast and prior yearAC, PL, FC and PY in the same row, with prior year as a dot or as a bar behind the actual.
    • Pace to targetRun-rate projection and where each row should be by today: year, quarter or month to date, a fixed % or an Elapsed % field.
    • Trend sparklinesA sparkline per row or tile, with the target line, from a Trend period field.
    • % of target scaleKPIs in different units on one axis with a shared 100 % line.
    • IBCS variance pinsA variance pin column next to the rows, IBCS style.
    • Smart insightA summary sentence that says what the chart shows: "9 of 15 off target. Largest gap: Scrap rate (+31.8%)".

    How do you show actual vs target in Power BI without DAX?

    Map a category to Category, a measure to Actual and a measure to Target. Each row becomes a bullet: the actual bar, the target marker, qualitative bands behind them and a status icon beside them. The bands default to 80 % and 100 % of target and can come from your own measures instead, with an optional stretch band above target. Variance in absolute terms and in percent, the status of every row and the colour of every bar are computed inside the visual, so there is no variance or status measure to write and maintain.

    The free tier draws unlimited rows, horizontally or as vertical columns, and the same data can be shown as KPI tiles for a landing page. Sort worst first, best first or by largest gap, keep the Top N and group the rest into Others, and share one axis across rows when the measures are comparable.

    Plan, forecast and prior year in one bullet

    The monthly business review asks more than whether a line hit plan. It asks how the line compares with the latest forecast and with last year. Add a Forecast or a Prior year field next to the Target and every row carries all four scenarios: actual, plan, forecast and prior year, with prior year drawn as a dot or as a bar behind the actual. The labels follow IBCS notation (AC, PL, FC, PY), with absolute and relative variance columns and an optional variance pin column next to the rows.

    Forecast and Prior year comparisons are premium features. They are fully unlocked while you edit the report, so you can build and judge the whole review page before buying.

    What about KPIs where lower is better?

    Costs, scrap rate, lead time and incident rates are good when they fall. Switch lower-is-better on for the whole visual, or map a Lower is better field to set it per row, and the bands, colours, variance sign and gap all flip for those rows. A plant scorecard can mix on-time delivery, where higher is better, with scrap rate, where lower is better, in one visual without any sign tricks in DAX.

    Mixed units are handled the same way. A Unit or format field gives each row its own unit or format string, so one scorecard reads 96.1 %, 12.6 days and 0.42 per 200k h, with percentage variances shown in percentage points. The premium % of target scale then puts KPIs in different units on one axis with a shared 100 % line.

    Will we make the year? Pace to target

    A year-to-date actual at 70 % of the annual target can be ahead or behind, depending on the date. Pace to target draws a run-rate projection of where each row will land and marks where it should be by today. Elapsed time comes from the viewer's clock as year, quarter or month to date, from a fixed percentage or from an Elapsed % field, and the status of each row is judged against the expected-to-date value rather than the full-year target.

    Pace is a premium feature, together with a trend sparkline per row or tile with the target line, and a summary sentence such as "9 of 15 off target. Largest gap: Scrap rate (+31.8%)" that tells the reader what the chart shows.

    Is the bullet chart accessible?

    Status never depends on colour alone: each status has its own icon shape (a circle with a tick, a triangle with an exclamation mark, a diamond with a cross) as well as its own colour. Every meaningful colour pair in all four themes is checked against WCAG contrast in the test suite. In Windows high-contrast mode the visual uses the host palette only and draws bands as outlines.

    The whole visual is one keyboard tab stop: arrow keys move between rows, Home and End jump to the ends, Enter or Space selects and cross-filters, and Shift+F10 or the context-menu key opens the context menu. The format pane and labels ship in 20 languages.

    Who uses it

    Controllers and FP&A teams for plan, forecast and prior-year reviews; sales operations for quota attainment and pace; plant and quality managers for safety, quality, delivery and cost scorecards; and HR and operations dashboards that need KPI tiles on a landing page. Group sections or side-by-side group panels split the rows by region, market or plant, each with an on-target count in its header.

    Use cases

    Where Bullet Chart earns its place.

    Regional sales against plan in the monthly review

    A controller maps Region to Category, a Sales YTD measure to Actual and a Plan YTD measure to Target. Every region becomes one row with the bar, the plan marker, the 80 % and 100 % bands and a status icon, and Layout > Sort set to Worst first puts the regions that need discussion at the top. With a premium licence, a Forecast and a Prior year measure add the FC and PY markers to the same rows.

    Plant scorecard with mixed units and lower-is-better KPIs

    A plant manager maps a KPI Name column to Category, the KPI actual and target measures to Actual and Target, a 1/0 column to Lower is better and a text column (First) to Unit or format. On-time delivery, scrap rate and lead time then sit in one visual, each with its own unit, and scrap and lead time turn green when they fall. The premium % of target scale under Layout > Axis scale puts them all on one axis with a shared 100 % line.

    Quota attainment and pace for a sales team

    Sales operations maps Sales Rep to Category, Bookings QTD to Actual and the quarterly quota to Target. With the premium Pace & projection card set to Quarter to date (today), each row shows a run-rate projection and an Expected by now marker, and the status judges each rep against where they should be today rather than against the full quota.

    KPI tiles on a landing page

    An operations dashboard switches Layout > Layout to KPI tiles and maps a handful of headline measures by KPI name. Each tile shows the big number, a status icon, the variance and a small bullet against the target. Adding a Month column to Trend period draws a premium sparkline with the target line in every tile.

    One visual per market with side-by-side panels

    A commercial team maps Market to Group and Product line to Category. Layout > Groups as set to Side-by-side panels draws one panel per market, each header carrying its on-target count such as 3 of 5 on target. Group sections and panels are free.

    Service levels with absolute thresholds

    A support team whose service levels are fixed numbers rather than a percentage of target maps a warning-level measure to Band boundary 1 and an agreed-level measure to Band boundary 2, then sets Bands > Band boundaries from to Band boundary fields. Each row gets its own band boundaries, and the status follows those boundaries instead of the 80 % and 100 % default.

    Getting started

    From empty canvas to first chart.

    1. 01

      Map a category to Category, a measure to Actual and a measure to Target. Bands, status icons and variance appear immediately.

    2. 02

      Choose rows, vertical columns or KPI tiles, pick a theme, and set sorting, Top N and the band thresholds in the format pane.

    3. 03

      Mark lower-is-better KPIs for the whole visual or per row, and add a Unit or format field for mixed-unit scorecards; add a Group field for sections or side-by-side panels.

    4. 04

      Add Forecast, Prior year, a Trend period or pace settings for the premium review view; all of it previews free while you edit.

    Get Bullet Chart

    Two ways in.

    Installation instructions for both paths are on the download page.

    Microsoft Marketplace (recommended)

    Reviewed by Microsoft, updates automatically, licences assigned in the Microsoft 365 admin center.

    Open Microsoft Marketplace
    Accessibility

    Readable and usable for everyone.

    Tab
    Moves into the chart. The whole visual is one tab stop, and focus returns to the same row after a selection.
    Arrow keys
    Move between rows, columns or KPI tiles. In a tile grid, Up and Down go to the nearest tile in the row above or below.
    Home / End
    Jumps to the first or the last row.
    Enter or Space
    Selects the focused row and cross-filters the page. Hold Ctrl or Shift to add it to the selection.
    Esc
    Clears the selection.
    Shift+F10 or the context-menu key
    Opens the Power BI context menu for the focused row.
    • Screen readers

      The chart is announced as a bullet chart with its number of rows. Each row is a selectable option that reads its group and category, then the same values as the tooltip: actual, target and any forecast or prior year, % of target, variance, status, lower is better where it applies, and the pace projection when pace is on. Each row also says whether it is selected.

    • Not colour alone

      Every status has its own icon shape as well as its own colour: a circle with a tick for on target, a triangle with an exclamation mark for near target, and a diamond with a cross for off target.

    • High contrast

      In Windows high contrast mode every mark uses the colours of the contrast theme. Bands become an outline with dashed boundary lines, custom bar, band and marker colours are set aside, and status stays readable through the icon shapes.

    • Contrast-checked themes

      The colour pairs that carry meaning in the SmartVisuals, Dark, Clean (White) and Slate themes are checked against WCAG contrast ratios in the visual's test suite.

    • Languages

      The format pane, notes, tooltips and screen-reader text are available in 20 languages: English, Czech, Danish, Dutch, French, German, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, Portuguese (Brazil), Portuguese (Portugal), Slovak, Spanish, Swedish, Turkish, Chinese (Simplified) and Chinese (Traditional).

    Release notes

    What changed, and when.

    Updates install automatically from Microsoft Marketplace. Full history.

    1. 1.0.0.0

      First release on Microsoft Marketplace.

      • Actual against target for unlimited rows, with status, variance and lower-is-better KPIs.
      • Forecast, prior year, pace to target, trend sparklines and IBCS variance pins (premium).
    Questions

    Asked before you did.

    More questions? See support or write to hello@smartvisuals.io.

    Actual vs one target for unlimited rows, bands, lower-is-better, status icons, variance, groups, sorting, Top N, per-row units, KPI tiles, all four themes, tooltips, keyboard access and high contrast are free. Forecast and prior-year comparisons, pace to target, trend sparklines, the % of target scale, the IBCS variance pin column and the summary sentence are premium: $1.99 per user per month or $19 per user per year, first month free, through Microsoft Marketplace.

    Only Actual. Category, Target, Forecast and Prior year are optional; without a Category the visual draws one row named after the measure. Group adds sections or side-by-side panels, Trend period adds sparklines, and Axis min, Axis max, Band boundary 1, Band boundary 2, Lower is better, Elapsed % and Unit or format set those per row. Tooltips takes up to 5 extra measures.

    Never. Viewers without a licence always see a working chart in the free tier: actual against target with bands, status, variance, groups and sorting, and the % of target scale falls back to Per row. The visual is never blocked or watermarked, and your settings are never reset. Power BI's own licence banner explains what is gated.

    Yes. Every premium feature is fully unlocked while you edit, so you can build and evaluate the whole report first.

    Yes, for the whole visual or per row from a Lower is better field. Bands, colours, variance sign and gap flip for those rows, so costs, scrap and lead time sit correctly next to revenue and delivery KPIs.

    Yes. Map a text column (aggregation First) or a measure to Unit or format, and each row uses its own unit or format string, so one scorecard reads 96.1 %, 12.6 days and 0.42 per 200k h, with percentage variances in percentage points. The premium % of target scale then puts all rows on one axis with a shared 100 % line.

    The free tier has no row limit of its own. Power BI sends the visual up to 1,000 categories and up to 60 trend periods; beyond that a warning icon appears. Layout > Show top N with an Others row keeps large lists readable.

    Yes. The whole visual is one tab stop: the arrow keys move between rows, columns or tiles, Home and End jump to the ends, Enter or Space selects (Ctrl or Shift adds), Esc clears and Shift+F10 opens the context menu. Screen readers hear each row's category, values, variance and status. Every status has its own icon shape, so it never depends on colour, and Windows high contrast mode is supported.

    20 languages for the format pane, notes, tooltips and screen-reader text: English, Czech, Danish, Dutch, French, German, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, Portuguese (Brazil and Portugal), Slovak, Spanish, Swedish, Turkish and Chinese (Simplified and Traditional). Power BI picks the language from the report or user settings.

    Yes. Reading view in the Power BI Service works like Power BI Desktop: licensed viewers see the full chart, others see the free tier. Where Power BI tells the visual that licences cannot be checked, for example in Power BI Embedded, Publish to web or Power BI Report Server, the visual shows the full premium chart rather than lock anyone out.

    No. The visual makes no external calls and requests no privileges; every calculation runs inside your report.

    Use the Report a bug block on the support page (smartvisuals.io/support) or email hello@smartvisuals.io. A screenshot, the fields you mapped and what you expected to see help most. Sample data is welcome but never required.
    Troubleshooting

    When it does not look right.

    Found a bug or missing something? Post it on the requests board or vote for what others asked; the developer answers within two business days.

    The visual says Add an Actual measure, or every row shows the same target
    The bullet needs a measure in Actual before it draws anything; Category, Target, Forecast and Prior year are optional, and without a Category the visual draws one row named after the measure. If every row shows the same target, the target table is not filtered by the field in Category: Power BI then returns the grand total for each row. Relate the target table to the same dimension table you use in Category, or write the Target measure so it responds to that column.
    I mapped Band boundary 1 and Band boundary 2 but the bands did not change
    Bands are drawn from % of target until you switch them. Open Bands and set Band boundaries from to Band boundary fields; the option appears only once at least one band field is mapped. If only one of the two fields has a value for a row, the visual uses that value for both boundaries on that row.
    Some rows have no status icon, no colour and no bands
    Status and bands are measured against a comparison value, and those rows have none: the Target is blank for that category. The visual never treats a blank as zero. When the scenario chosen in Comparisons > Measure status against is blank for a row, it falls back to Target, then Forecast, then Prior year. A target of exactly zero is a separate case: there is no ratio to compute, so the row is good or off target depending on which side of zero the actual lies. Categories with a blank name are labelled (Blank).
    The numbers in the bullets changed after I added a Trend period field
    With a Trend period field the visual receives one value per period and has to combine them into the bullet. Trend > Bullet shows controls this: Auto adds the periods together, except for a percentage-formatted Actual, where it takes the latest period; you can also choose Latest period, Sum of periods or Average of periods. For year-to-date or balance measures, set it to Latest period. Up to 60 periods are used.
    Viewers do not see the forecast, prior year, pace or sparklines that I see in edit mode
    Forecast and prior-year comparisons, pace to target, trend sparklines, the % of target scale, the variance pins column and the summary sentence are premium. Every premium feature previews in edit mode so you can build the page first. A viewer without a licence sees the free tier: actual against target, bands, status, variance, groups and sorting, with the % of target scale falling back to Per row, never a blocked or empty visual, and your settings are kept. Power BI's own licence banner names the features it held back. To give a viewer the premium view, assign them a SmartVisuals Bullet Chart licence in the Microsoft 365 admin center under Billing > Licenses.
    Pace marks every row behind, or ahead, on a past year
    Year to date (today), Quarter to date (today) and Month to date (today) under Pace & projection > Period elapsed use the viewer's clock, so a report filtered to last year is still judged as if today were inside that period. For a closed or historical period, choose Fixed % and set Elapsed %, or choose Elapsed % field and map a measure to Elapsed %. The field accepts 0 to 1 and also reads values above 1 as a percentage, so 75 and 0.75 mean the same.
    My colours are ignored in high-contrast mode, or I cannot reach the rows with the keyboard
    In Windows high-contrast mode the visual uses only the colours of the high-contrast theme: custom bar, band and marker colours are set aside, bands become outlines, and status stays readable through the icon shapes. Your colours return when high contrast is switched off. For keyboard use, the whole visual is one tab stop: Tab into it, then use the arrow keys to move between rows, Home and End to jump to the first or last row, Enter or Space to select and cross-filter, Escape to clear the selection, and Shift+F10 or the context-menu key for the context menu.
    A Not all data is shown warning appears, or the Others row looks wrong
    Power BI sends a custom visual at most 1,000 categories and 60 trend periods; beyond that the warning icon appears and some rows are left out. Filter the page or the visual to choose which rows appear, or use Layout > Show top N with Sort to keep the rows that matter. The Others row adds the remaining rows together, which suits sales or costs but not percentages or rates; switch Layout > Others row off to drop the rest instead. An Others row that mixes directions or units shows no status.
    For developers & AI agents

    Add this visual programmatically.

    Use the GUID and data roles below to add Bullet Chart to a Power BI report via PBIR or the Report Authoring agent. Full catalog (JSON)

    Visual GUID
    bulletChart51B8721E840648AA92DA8EB0B9053DBC
    RoleDisplay nameKind
    categoryCategoryGrouping
    groupGroupGrouping
    periodTrend periodGrouping
    valueActualMeasure
    targetTargetMeasure
    forecastForecastMeasure
    priorYearPrior yearMeasure
    minValueAxis minMeasure
    maxValueAxis maxMeasure
    band1Band boundary 1Measure
    band2Band boundary 2Measure
    lowerIsBetterLower is betterMeasure
    elapsedElapsed %Measure
    unitUnit or formatMeasure
    tooltipsTooltipsMeasure
    Missing something?

    Tell us what is missing.

    A feature you need, a bug you hit, a visual that does not exist yet. Every message reaches the person who builds these visuals, and feature requests shape what ships next. We also build visuals to order.

    Also in the family