# SmartVisuals Text Insights for Power BI

> Offline word cloud and text analytics for Power BI: stable layout, stop words in 18 languages, word forms, tone, phrases and the comments behind each word.

- Page: https://www.smartvisuals.io/visuals/text-insights
- Fields and settings: https://www.smartvisuals.io/visuals/text-insights/settings
- Microsoft Marketplace: https://marketplace.microsoft.com/en-us/product/smartvisuals.smartvisuals-text-insights?tab=overview
- Package: https://www.smartvisuals.io/downloads/smartvisuals-text-insights-1.0.0.0.pbiviz
- Sample report (zipped .pbip): https://www.smartvisuals.io/samples/smartvisuals-text-insights-sample-1.0.0.0.zip
- Price: Free tier for every viewer; premium $2.99 per user per month or $29 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: no
- Version: 1.0.0.0
- GUID (visualType and publicCustomVisuals): `textInsights5E1F2C7A9B3D4E8F8A6C0D2B4F7E9A13`

## What is free

- **A word cloud from raw comments or ready-made terms**: Bind comments and the visual tokenizes them, reading the first 30,000; a note says so whenever there were more. Or bind words you pre-aggregated in Power Query with a Weight measure, and every count stays exact.
- **A cloud that stays put**: Filter the page and the words that remain keep their positions; new words fill the gaps. The same data always gives the same cloud.
- **Word forms merged, labelled with a real word**: price, prices and pricing count as one word; words typed without accents merge into the accented form.
- **Stop words in 18 languages**: Built in and detected per comment, plus Custom stop words with * wildcards and a Stop words (measure) field that needs no relationship.
- **Sentiment colouring**: Each word takes the tone of the sentences that mention it, or of your own Sentiment measure. The offline estimate is strongest in English, Danish, French, Polish, Swedish and Turkish; other languages use a short word list, and the tooltip says so.
- **Distinctive words (TF-IDF) and a search box**: Size by Distinctive words (TF-IDF), and a search box narrows the words in the visual without filtering the report.
- **Shapes**: Ellipse, circle, heart, cloud, speech bubble, diamond, triangle, star or hexagon, a word you type, or your own silhouette image.
- **Themes, fonts and style effects**: 4 themes (SmartVisuals, Dark, Clean, Slate) or the report theme colours, rotation presets and size scaling; 7 built-in fonts that work offline plus the report font; bold, italic, letter case; Crayon, Chalk, Marker and Stamp lettering drawn without images.
- **Colour modes and conditional formatting**: Colour by tone, gradient by size, single colour, your own palette, random from a palette, Compare-by group or a Rule (fx).
- **No word dropped silently**: Words shrink to fit before any is left out, and a note says how many did not fit.
- **Tooltips and report page tooltips**: Comments mentioning, share, occurrences, tone, word forms and an example comment, plus extra Tooltips measures and report page tooltips filtered to the word's comments.
- **Cross-filtering, highlight, bookmarks and context menu**: Click a word to filter the page to the comments that mention it, Ctrl+click to add more; the selection survives bookmarks.
- **Accessibility and 20 languages**: Full keyboard navigation, screen-reader labels and a hidden data table, tone marked by symbols, Windows high contrast, focus outline, minimum text size and Reduce motion. Format pane and visual in 20 locales.

## What premium adds

- **Bars and Table views**: Ranked words and phrases with the share of comments and the positive / neutral / negative split, with data labels, axis and gridlines.
- **Phrases**: Word pairs and triples that belong together (customer service, delivery time, value for money), found offline with a log-likelihood test, plus negations such as "not good" or "never arrived" with their own tone.
- **Trend over time**: Add a Date and see whether "delivery time" is rising and turning negative, period by period, with a tested verdict (linear trend test, Benjamini-Hochberg).
- **Score impact**: Add an NPS or CSAT score and see which words go with a lower or higher score (Welch t-test, Benjamini-Hochberg).
- **Comment panel**: Click a word or phrase and read the comments behind it, the word highlighted, sorted by relevance or tone, ready to copy.
- **Compare groups**: One cloud per region, plant or quarter with shared word positions (small multiples), words over-represented in a group highlighted (weighted log-odds keyness, also a Table column), an A versus B view and words rising in the latest period.
- **Themes**: Your own dictionary (Price: price, cost*, expensive) across languages, with share and tone per theme.
- **Insight headline**: One sentence about the data, such as the top word with its share and tone, or the word that grew most.
- **Large data**: Reads up to 150,000 comments (free: the first 30,000).

## Fields

| Field | Internal name | Takes | Needed | What it is for |
| --- | --- | --- | --- | --- |
| Text | `text` | Column | Optional | Comments, reviews, answers — or single terms when the data is already aggregated. |
| Comment ID | `id` | Column | Optional | Optional: keeps identical comments apart and identifies each comment. |
| Compare by | `group` | Column | Optional | Optional: a segment to compare (region, plant, quarter). |
| Weight | `weight` | Measure | Optional | Optional: how much each row counts (a count of responses, or a term's frequency). |
| Sentiment | `sentiment` | Measure | Optional | Optional: a sentiment score per row, computed upstream (any range). |
| Stop words (measure) | `stopWords` | Measure | Optional | Optional: a text measure listing extra words to hide, separated by commas. No relationship needed. |
| Tooltips | `tooltips` | Measure | Optional, up to 5 | Extra measures, summed over the comments that mention a word. |
| Date | `date` | Column | Optional | Optional: when each comment was written. Powers the Trend over time view (premium). |
| Score | `score` | Measure | Optional | Optional: a score per comment, such as an NPS rating or CSAT. Powers the Score impact view (premium). |

## 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`).

### View (`view`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| View | `kind` | Text |
| Max words | `maxTerms` | Number |
| Size by | `sizeBy` | Text |

### Text (`data`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Text is: Auto treats short weighted rows as ready-made terms and everything else as comments to split into words. | `textMode` | Text |
| Rows to analyse: Free: the first 30,000 rows; premium: up to 150,000. Rows come in Power BI's sort order, so sort by a Comment ID or date. Ready-made terms count exactly at any volume. | `rowLimit` | Number |

### Words (`words`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Show: Phrases find word pairs and triples that belong together, such as "customer service". | `unit` | Text |
| Word forms: Merge counts "price, prices, pricing" or "cena, ceny, cenou" as one word, labelled with its most common real form. | `forms` | Text |
| Merge words typed without accents: Counts "prilis" as "příliš" when people type without diacritics. | `mergeAccents` | On / off |
| Minimum word length | `minLength` | Number |
| Minimum mentions | `minCount` | Number |
| Keep numbers | `keepNumbers` | On / off |

### Stop words (`stopWords`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Built-in stop words: Built-in lists for 18 languages, chosen per comment. Extended also hides one- and two-letter words. | `level` | Text |
| Custom stop words: Words to hide, separated by commas or new lines. Use * as a wildcard: promo* | `custom` | Text |
| Hidden words: Words hidden with the × button on a word (edit mode). Delete a word here to show it again. | `hidden` | Text |

### Language (`language`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Language: Auto-detect chooses per comment; set a language when the detection gets short comments wrong. | `language` | Text |

### Phrases (Premium) (`phrases`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Minimum mentions of a phrase | `minCount` | Number |
| Longest phrase (words) | `maxLength` | Number |

### Themes (Premium) (`themes`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Theme dictionary: One theme per line: Theme: word, word, phrase, prefix* | `dictionary` | Text |

### Search (`search`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Show search box: A box that narrows the words shown in this visual. It never filters the report. | `show` | On / off |

### Trend (Premium) (`trend`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Words | `words` | Number |
| Words shown: Biggest tested change tests the 60 most mentioned words and shows the clearest risers and fallers first. | `order` | Text |
| Period: Auto keeps period labels as they are and groups dates by month, quarter or year by their span. | `period` | Text |
| Negative share line: Also draws the share of each word's mentions that are negative, with its own trend test. | `toneLine` | On / off |

### Score impact (Premium) (`impact`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Minimum mentions: Words mentioned less often are not tested. Welch t-test, Benjamini-Hochberg q < 0.05. | `minMentions` | Number |
| Show | `side` | Text |

### Style (`effects`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Effect: Crayon, chalk, marker or stamp lettering, drawn without images. | `kind` | Text |
| Roughness | `roughness` | Number |

### Compare groups (Premium) (`compare`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Layout | `layout` | Text |
| Highlight: Distinctive words are over-represented in a group compared with the rest (log-odds keyness). | `highlight` | Text |
| Group A | `groupA` | Text |
| Group B | `groupB` | Text |
| Columns (0 = auto) | `columns` | Number |
| Emerging words: When Compare by holds periods, mark the words that grew most in the latest one. | `showEmerging` | On / off |

### Theme (`theme`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Use report theme colors | `useReportTheme` | On / off |
| Transparent background | `transparentBg` | On / off |
| Background color | `background` | Colour |
| Theme | `selectedTheme` | Text |

### Colors (`colors`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Color by | `colorBy` | Text |
| Word color | `single` | Colour |
| Smallest words | `low` | Colour |
| Largest words | `high` | Colour |
| Accent the top words | `accentTop` | On / off |
| Palette color 1: Colors for Custom palette and Random from palette. Empty: the theme's colors. | `p1` | Colour |
| Palette color 2 | `p2` | Colour |
| Palette color 3 | `p3` | Colour |
| Palette color 4 | `p4` | Colour |
| Palette color 5 | `p5` | Colour |
| Palette color 6 | `p6` | Colour |
| Color rule (fx) | `rule` | Colour |

### Group colors (`groupColors`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Group colors | `fill` | Colour |

### Sentiment (`sentiment`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Sentiment source: Built-in estimate scores each comment offline with a word list (strongest in English, Danish, French, Polish, Swedish and Turkish). A measure from upstream wins in Auto. | `source` | Text |
| Measure range | `range` | Text |
| Most negative value | `min` | Number |
| Neutral value | `neutral` | Number |
| Most positive value | `max` | Number |
| Positive color | `positive` | Colour |
| Neutral color | `neutralColor` | Colour |
| Negative color | `negative` | Colour |

### Font (`font`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Font: Seven embedded fonts work offline in every browser. Report font uses Power BI's Segoe UI. | `family` | Text |
| Bold | `bold` | On / off |
| Italic | `italic` | On / off |
| Bolder for bigger words | `weightBySize` | On / off |
| Letter case | `textCase` | Text |
| Fit sizes to the visual: Scales every word so the cloud fills the visual. Off: the font sizes below apply exactly. | `autoSize` | On / off |
| Smallest font size | `minSize` | Number |
| Largest font size | `maxSize` | Number |

### Layout (`layout`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Layout: Stable keeps a word in its place when filters change. Compact repacks the cloud every time. | `mode` | Text |
| Rotation | `rotation` | Text |
| Size scaling | `scaling` | Text |
| Spacing (0 = theme) | `padding` | Number |
| Arrangement seed: A different number gives a different, equally stable arrangement. | `seed` | Number |

### Shape (`shape`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Shape | `kind` | Text |
| Shape text | `text` | Text |
| Shape image: Paste a data URI of a dark or opaque silhouette (PNG or SVG, up to 300 KB). | `image` | Text |
| Show shape outline | `showOutline` | On / off |

### Bars & table (Premium) (`bars`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Sentiment style | `style` | Text |
| Data labels | `showValues` | On / off |
| Share of comments | `showShare` | On / off |
| Value axis | `showAxis` | On / off |
| Gridlines | `showGrid` | On / off |
| Font size | `fontSize` | Number |
| Bar color | `barColor` | Colour |

### Comment panel (Premium) (`verbatims`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Open comments on click: Clicking a word opens the comments that mention it. | `show` | On / off |
| Position | `position` | Text |
| Sort comments | `sort` | Text |
| Font size | `fontSize` | Number |
| Highlight color | `highlight` | Colour |

### Legend (`legend`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Show legend | `show` | On / off |
| Position | `position` | Text |
| Title | `title` | Text |
| Font size | `fontSize` | Number |

### Insight headline (Premium) (`headline`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Show headline: One sentence about the data: the top word, its share and tone, or the word that grew most. | `show` | On / off |
| Font size | `fontSize` | Number |
| Color | `color` | Colour |

### Notes (`status`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Show notes: "Based on the first N comments", "N words did not fit" and similar notes. | `show` | On / off |
| Font size | `fontSize` | Number |
| Color | `color` | Colour |

### Tooltip (`tooltipOptions`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Example comment | `example` | On / off |
| Word forms | `forms` | On / off |
| Language | `language` | On / off |

### Animation (`animation`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Entrance animation | `entrance` | On / off |

### Accessibility (`accessibility`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Focus outline color: Color of the keyboard focus outline. Empty: the theme's focus color. | `focusColor` | Colour |
| Focus outline width: Width of the keyboard focus outline in pixels. | `focusWidth` | Number |
| Minimum text size: No text is drawn smaller than this. | `minFontSize` | Number |
| Reduce motion: Follow system respects the operating system setting. | `reduceMotion` | Text |
| Mark tone with symbols: Adds ▲ / ▼ to positive and negative words so tone does not rely on color alone. | `toneSymbols` | On / off |
| Screen-reader table: A hidden table of the top words for screen readers. | `srTable` | On / off |

### State (`state`)

| Setting | Internal name | Type or options |
| --- | --- | --- |
| Group color memory | `groupColorMemory` | Text |
