# SmartVisuals NPS for Power BI

> SmartVisuals NPS shows the Net Promoter Score in Power BI with the statistics behind it: margin of error, promoter / passive / detractor split, 0 to 10 histogram, trend over waves with a significance test on every change, segment letters, weighted NPS and a target line.

- Page: https://www.smartvisuals.io/visuals/nps
- Fields and settings: https://www.smartvisuals.io/visuals/nps/settings
- Microsoft Marketplace: https://marketplace.microsoft.com/en-us/product/smartvisuals.smartvisuals-nps?tab=overview
- Package: https://www.smartvisuals.io/downloads/smartvisuals-nps-1.0.1.0.pbiviz
- Sample report (zipped .pbip): https://www.smartvisuals.io/samples/smartvisuals-nps-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): `npsChartBAC1A083FCF3471CB82882A8EB97F109`

## What is free

- **The headline**: Score as a number, a badge or a face, coloured by band, placed left, centre or right, counting up when it changes, with its margin of error and the change against the previous wave or the first wave.
- **Split, histogram and trend**: The 0 to 10 histogram, the split bar with shares, bases, the wave trend with a confidence band and a three-wave rolling average, an NPS / eNPS / tNPS label and remappable cut-offs.
- **Says the finding**: A smart caption with the score, the change and the split, offline, in your language; with the premium tier it also says whether the change is significant, the best and worst segment and the gap to target; an agency footnote; Quick Styles.
- **Every cosmetic option**: Four themes, fonts, bar shapes and three fills of your own. Cross-filtering, tooltips, keyboard navigation and high contrast.

## What premium adds

- **Change you can defend**: A z-test on the NPS variance behind every wave-over-wave delta: the headline says significant or (n.s.), and how big a wave a non-significant change would need.
- **Segments with letters and movement**: A split bar, score and tested change since the previous wave per segment, lettered against the others and sortable by movement; low bases hatched and flagged; optional Bonferroni.
- **Weighted NPS**: Map Sum of Weight and Sum of Weight squared and the score, its standard error and every test use effective bases.
- **Target line**: Your target drawn on the trend, the change measured against it, and the gap written as an action: "To reach +45: 60 more promoters or 60 fewer detractors".

## Fields

| Field | Internal name | Takes | Needed | What it is for |
| --- | --- | --- | --- | --- |
| Score (0–10) | `score` | Column | Required | The likelihood-to-recommend answer, 0–10 |
| Wave / Period | `wave` | Column | Optional | Optional: track the score over waves in model sort order |
| Segment | `segment` | Column | Optional | Optional: compare the score across banner segments, with significance letters |
| Value | `value` | Measure | Required | Respondent count — or Sum of Weight for weighted results |
| Sum of Weight² (significance) | `weightsq` | Measure | Optional | Optional: SUM(weight²) enables effective bases for weighted significance |

## 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) |
| Transparent Background | `transparentBg` | On / off |
| Quick Style | `stylePreset` | `custom` (Custom (keep my settings)), `agency` (Agency deck), `executive` (Executive summary), `compact` (Compact tracker) |

### Score Mapping (`mapping`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Detractors Up To | `detractorMax` | Number |
| Promoters From | `promoterMin` | Number |

### Display (`display`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Show Headline Score | `showHeadline` | On / off |
| Show Split Bar | `showSplit` | On / off |
| Show Wave Trend | `showTrend` | On / off |
| Score Decimal Places | `scoreDecimals` | Number |
| Score Style | `scoreStyle` | `number` (Number), `badge` (Badge), `face` (Face) |
| Score Position | `scorePosition` | `left` (Left), `center` (Center), `right` (Right) |
| Change vs | `deltaReference` | `previous` (Previous wave), `first` (First wave), `target` (Target) |
| Colour Score by Band | `colorByBand` | On / off |
| Good from | `bandGood` | Number |
| Poor below | `bandPoor` | Number |
| Score Label | `scoreLabel` | Text |
| Animate Score | `animateScore` | On / off |
| Show 0–10 Histogram | `showHistogram` | On / off |
| Trend Smoothing | `rollingWaves` | `1` (None), `3` (3-wave rolling average) |
| Sort Segments | `segmentSort` | `data` (Data order), `score` (By score), `change` (By change vs previous wave) |
| Show Margin of Error (±) | `showMarginOfError` | On / off |
| Show Confidence Band on Trend | `showConfidenceBand` | On / off |

### Colors (`colorSettings`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Detractors | `detractorColor` | Colour |
| Passives | `passiveColor` | Colour |
| Promoters | `promoterColor` | Colour |

### Bars (`barSettings`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Corner Radius | `cornerRadius` | Number |
| Bar Thickness (%) | `thickness` | Number |
| Gap Between Segments | `segmentGap` | Number |

### Labels (`labelSettings`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Font Size | `fontSize` | Number |
| Font | `fontFamily` | `inter` (Inter), `segoe` (Segoe UI), `arial` (Arial), `georgia` (Georgia) |
| Font Color | `fontColor` | Colour |
| Show Split % | `showShares` | On / off |
| Show Base (n=) | `showBase` | On / off |

### Significance (Premium) (`significance`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Test Change vs Previous Wave | `enabled` | On / off |
| Confidence Level | `confidence` | `90` (90 %), `95` (95 %), `99` (99 %) |
| Min Base for Testing | `minBase` | Number |
| Multiple-Comparison Correction | `correction` | `none` (None), `bonferroni` (Bonferroni) |
| Explain Letters in Footer | `showLetterLegend` | On / off |
| Hatch Low Bases | `lowBaseHatch` | On / off |

### Target (Premium) (`target`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Show Target | `show` | On / off |
| Target Score | `value` | Number |
| Label | `label` | Text |
| Color (empty = theme) | `color` | Colour |
| Show Gap to Target | `showGapHint` | On / off |

### Smart Caption (`insights`)

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

### Footnote (`footnote`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Show Footnote | `show` | On / off |
| Template ({base} {n} {neff} {wave} {question} {source}) | `template` | Text |
| Source | `source` | Text |
