Pie and donut chart for Power BI Pie Plume
The donut Power BI is missing: a figure in the center, labels that stay readable, Others, half donut, rose and slice breakdown.
Interactive demo
The real Power BI visual, running in your browser with the sample report's fictitious data. Switch scenario, style or year: the visual updates as it does in Power BI. Premium ★ features are shown here without the watermark; in Power BI, without a license, they show “Plume Visuals · Premium preview”.
Power BI's donut chart writes nothing in the center and drops labels as soon as room is short. Pie Plume writes the total, a measure or your text in the middle of the donut, arranges labels in two columns linked to the slices by leader lines so they never overlap, sorts the slices and splits each slice by a second field. Clicking a slice pops it out and filters the page; small multiples compare breakdowns from one year to the next. With premium: animated play axis, Nightingale rose, half donut, “Others”, sub-categories in the same colors everywhere, slice breakdown as an outer ring, pie of pie or bar of pie, and a previous-period ring.
Use cases
- Revenue by channel or region, with the total in the center
- Budget by item, or monthly spending, with small lines grouped into “Others”
- Share of each product in each region (same color for a product everywhere)
- Market shares from one year to the next, animated or as small multiples
FreeIncluded for free
- Donut or full pie: hole, rotation, direction, gaps between slices, rounded corners, outline
- Text in the center: total, “Center value” measure, free text, number of slices
- Labels in two columns with leader lines: never overlapping; inside or around the slices
- Sort by value, by name or data order (Sort by column)
- Details field: each slice split into shades of its color
- The selected slice pops out and filters the page; highlighting, drill-down, tooltips, keyboard
- Small multiples: one breakdown per year, total in each title, shared legend
- Label background (color, transparency), like native detail labels
- Dynamic formats: fx button on colors and texts, any option driven by DAX
PremiumPremium features
- Play axis: slices glide from one year to the next, the total counts in the center
- Nightingale rose: radius by value, or angle and radius from two measures
- Half donut and arcs, slices exploded by name, patterns
- Small slices grouped into “Others” (N largest or threshold), custom order
- Hovered or selected slice written in the center; shades of a single color
- Sub-categories in the same colors in every slice, as a gradient or as layers
- Slice breakdown as an outer ring, pie of pie or bar of pie, on click or always
- Previous-period ring and change in the center; small multiples sized by their total
- Catalog-wide styles (Neon, Newspaper, Nordic…), palettes, theme JSON
Usable without a key to try them, with a watermark.
Tutorials
Start with Getting started, then pick from the how-to guides. The Fields and settings page describes every option of the Format pane.
- Getting startedBeginner6 min readA readable donut in Power BI: total in the center, tidy labelsGet started with Pie Plume: prepare a sales table, insert the donut, show the total in the center, arrange labels in columns and make a slice stand out.
- How-to guidesIntermediate5 min readPie Plume: 9 use cases for pie charts that speakStep by step: a measure in the center, custom order ★, "Others", half donut, sub-categories in colors, pie of pie, previous year, small multiples, animation.
- Fields and settingsIntermediate14 min readPie Plume: every field and setting explainedEach field well and each Format pane setting of Pie Plume: what it does, its possible values and its default value, premium features included.
- BasicsGetting started with Plume visualsInstallation, license, styles and the settings shared by every visual.
Fields to drop into the visual
| Field | Content | |
|---|---|---|
| Legend (categories) | One slice per value; several fields = drillable hierarchy | Required |
| Details (sub-category) | Splits every slice, or feeds the breakdown ★ | Optional |
| Values | The measure; without Legend, several measures = one slice each | Required |
| Center value | Measure written in the center of the donut | Optional |
| Radius (rose) | Rose: angle by Values, radius by this measure | OptionalPremium |
| Previous period | Ring of the former shares and change | OptionalPremium |
| Small multiples | One chart per value | Optional |
| Play axis | Year, month: slices animate | OptionalPremium |
| Tooltips | Extra measures | Optional |
| Dynamic format | Measures renamed card.setting (e.g. title.text): the Format pane driven by DAX | Optional |
Missing a feature? We adapt our visuals or build custom ones. Request a custom visual
Found a bug in Pie Plume, or have an idea to improve it? Report a bug · Suggest an idea
Technical reference for AI assistants
This section is meant for AI assistants (ChatGPT, Claude, Copilot…): every field, every Format pane option with its internal name, the expected data shape and DAX examples. Generated from the visual's code, version 1.1.0.0. Paste it into your assistant so it can guide you.
Raw Markdown version (/ai/visuals/pie-chart.md)# Pie Plume: technical reference for AI assistants
> Power BI custom visual by Plume Studio (Plume Visuals). Visual version **1.1.0.0**. This page is generated from the visual's source code at each site build: field names, option names and defaults are exact for this version.
Use it to help someone build a report with Pie Plume: which fields to drag, how to shape the data, which Format pane option to change, or how to write the visual's settings in a PBIP `visual.json` file.
- Product page: https://plumevisuals.com/en/visuals/pie-chart (French: https://plumevisuals.com/fr/visuels/pie-chart)
- Summary: The donut Power BI is missing: a figure in the center, labels that stay readable, Others, half donut, rose and slice breakdown.
- Power BI visual GUID (`visualType`): `plumePieChartA98296CC7934459199F53486CD90BFCD`
- Power BI visuals API: 5.11.1
- Support: https://plumevisuals.com/support · contact@plumevisuals.com
- Index of everything on the site for AI assistants: https://plumevisuals.com/llms.txt
## What the visual does
Pie Plume (identifier `pie-chart`) is a Power BI custom visual (version 1.1.0.0, installed from its `.pbiviz` file; not yet on AppSource) that draws **pie charts, donut charts and Nightingale roses** with the Plume Studio look. It covers the native pie and donut charts (Legend with drill-down, Values, Details, tooltips, detail labels, rotation, inner radius, colors per category, cross-filtering, highlighting, small multiples) and fixes their known gaps.
**New in version 1.1.0.0 (30/10/2026):** Format pane reorganized (`shape.*` split into **Layout** and **Parts**); free **label background** (color, transparency).
- **Text in the center of the donut** (free): the total of the slices, the "Center value" measure, free text with `{total}`, `{count}`, `{measure}`, the number of slices; caption under the value; ★ with `center.hover` (off by default), the hovered or selected slice (name, value, share) replaces it while hovering.
- **Labels that never overlap** (free): outside labels are arranged in two columns (left and right) with leader lines, spread vertically; when room is short, the smallest slices lose their label first, never the large ones. Long names wrap on two lines; "< 1 %" instead of "0 %". Labels can also be inside, automatic (inside when the whole text fits) or around the slices.
- **Sort** by value, name, data order (Sort by column), ★ a custom list; **Top N or threshold + "Others"** ★.
- **Details field**: every slice is cut into sub-parts in shades of its color (free), or ★ one color per sub-category (the same in every slice), a gradient, or concentric layers whose area follows the share.
- **Slice breakdown** ★: the sub-categories of a slice (or the members of "Others") as an outer ring, a pie of pie or a bar of pie, linked to the slice, on click or always shown (largest, "Others", a named slice, all for the ring).
- **Previous period** ★: a thin ring with the former shares, the change of the total (▲ / ▼, %) in the center, change per slice in share points or % in the tooltip.
- **Shapes**: donut (hole 5–92 %), full pie, ★ Nightingale rose (area or radius proportional, equal angles or by value, or angle by Values and radius by the "Radius" measure), rotation, clockwise or not, ★ opening under 360° (half donut, arcs), gaps of constant width, rounded corners, outline; the selected slice pops out (free), ★ the largest or named slices, ★ patterns.
- **Small multiples** (shared legend, panel titles with totals, scrolling grid; ★ pies sized by their total) and a **play axis** ★ (shared Plume player: slices glide from one value to the next, the center total counts).
- Values: only positive values are drawn; negative, zero or empty ones are counted and reported in edit mode. Above 240 slices, the smallest are gathered into "Others" with no watermark (readability limit).
## Free vs premium (★)
- Every feature works without a key and nothing is ever blocked. Free features never show a watermark.
- Shared Style card (the same in every Plume visual): the styles `none`, `minimal` and `blackWhite`, the two Plume gradient palettes (`crest`, `crestDiverging`), "Follow report theme" and all custom colors are **free**; every other `style.preset`, the other gradient palettes (`style.palette`) and `style.themeJson` ("Theme JSON ★") are **premium**. The `blackWhite` style brings its own free patterns.
- Free in Pie Plume: donut, full pie, rotation, direction, gaps, corners, outline, selected slice popping out; total, measure, text or count in the center, caption, sizes and colors; every label option; sort (value, name, data order); Details split in shades; small multiples with the same size; palette (one color per slice); legend; drill-down, tooltips, selection, highlighting, keyboard, high contrast.
- Premium features of Pie Plume (the watermark only shows when the feature really applies):
- `layout.kind` = `rose` (and the `radius` role); `layout.arc` below 360; `parts.explode` = `largest` or `name`; `parts.patterns`;
- `sort.others` = `topN` or `threshold` when at least two slices are grouped;
- with a Details field: `split.colors` = `category` or `gradient`, `split.layout` = `radial`;
- `breakdown.mode` = `ring`, `pieOfPie` or `barOfPie` (with Details or "Others");
- the `previous` role while `comparison.show` is on;
- `smallMultiples.sizeBy` = `total` with small multiples;
- `dataColors.mode` = `gradient`, `highlight` or `mono` (shades of one color);
- since the free / ★ rebalance of 22/10/2026: the play axis (`play` role) as soon as it contains data; `sort.by` = `custom` with a non-empty `sort.customOrder`; `center.hover` on (donut with the center shown).
- Without a valid key, a premium feature in use shows, in edit mode, a "Premium preview" note in the footer; in reading view, **"Plume Visuals · Premium preview"** (French « Plume Visuals · Aperçu premium ») is repeated lightly across the whole visual, without catching the mouse. It disappears once a key is pasted in **Format › Plume Studio License › License key** (`license.key`), the **first card** of the Format pane. Premium options and list values have " ★" appended to their label.
- Accepted keys: only keys starting with `PLUM1.` shown in the buyer's account on plumevisuals.com, checked offline (Ed25519 signature), covering `pie-chart` or the whole catalog. In edit mode, a wrong key shows "Invalid license key", "License expired (date)" or "This key does not cover this visual".
- Licenses last one year (one-time payment, no automatic renewal, key accepted for 30 more days, reminders 30 and 7 days before the end). Prices: 39 € personal, 99 € SME, 299 € enterprise per year, or the catalog pack (199 € / 399 € / 1,199 € per year; tiers by number of users: personal 1–10, SME 11–200, enterprise more than 200).
## Expected data shape
One row per sale (or per category); the visual adds up the measure per slice.
| Legend (`category`) | Details (`detail`) | Values (`values`) |
|---|---|---|
| North West | Lighting | 41,200 |
| North West | Furniture | 38,600 |
| East Midlands | Home linen | 12,400 |
- **Legend (categories)** (`category`, « Légende (catégories) », 1 to 6 columns): one slice per value; several fields make a hierarchy (Power BI drill-down; "Expand all" joins the levels in the label). Without a Legend, up to 12 measures in Values become one slice each (selection by measure).
- **Details (sub-category)** (`detail`, « Détails (sous-catégorie) », 1 column): splits every slice, or feeds the breakdown ★.
- **Values** (`values`, « Valeurs »): 1 measure with a Legend, up to 12 without.
- **Radius (rose) ★** (`radius`, « Rayon (rose) ★ »): with `layout.kind` = `rose`, the angle follows Values and the radius this measure ("Others" uses the value-weighted average).
- **Center value** (`center`, « Valeur au centre »): written in the center with `center.value` = `measure`; write it with `CALCULATE ( …, ALLSELECTED () )`; if values differ per slice, they are added up.
- **Previous period ★** (`previous`, « Période précédente ★ »): same measure for the period before.
- **Small multiples** (`multiples`), **Play axis ★** (`play`, « Axe de lecture ★ »), **Tooltips** (`tooltips`, up to 5 measures), **Dynamic format** (`format`, see below).
- Volume: 30,000-row windows then `fetchMoreData` up to 100,000 rows; 100,004 rows render in well under a second in the test bench.
## DAX recipes
```dax
Total revenue = SUM ( Sales[Revenue] )
// Same value for every slice (center)
Customers (all) = CALCULATE ( DISTINCTCOUNT ( Sales[Customer] ), ALLSELECTED () )
// Current and previous year (Values and Previous period ★)
Revenue 2025 = CALCULATE ( [Total revenue], Sales[Year] = 2025 )
Revenue 2024 = CALCULATE ( [Total revenue], Sales[Year] = 2024 )
// Rose radius ★
Margin rate = DIVIDE ( SUM ( Sales[Margin] ), SUM ( Sales[Revenue] ) )
```
## Interactions with the report
- Click a slice: cross-filter on its category (Details sub-part: category + sub-category; "Others": every grouped category; measures mode: the measure); Ctrl for several; click an empty area to clear. The selected slice pops out (`parts.explode` = `selected`) and, with `center.hover` ★, shows in the center. Cross-highlighting from other visuals fills each slice in proportion (rest dimmed); "Highlighted value" in the tooltip.
- Hover: Power BI tooltip (category, value, share of total, previous value and change, Tooltips measures); report-page tooltips are supported. Context menu everywhere, including the empty area and the landing page.
- Breakdown "on click": selecting one slice opens its detail; clearing the selection closes it. Nothing is saved with `persistProperties` (play frame, hover and breakdown are per session).
- Keyboard: Tab to the chart, ← → slice by slice, Enter selects, Esc clears; with a play axis, Space plays / pauses and Page Up / Page Down step. High contrast (host colors, a pattern per slice), ARIA labels, French and English. "Reduce motion" is respected.
## Dynamic formats
- **fx button** (Power BI conditional formatting) on colors and texts of the Format pane, and per category on the slice colors.
- **"Dynamic format" well** (`format`): measures renamed `card.setting` (e.g. `title.text`, `title.color`, `center.text`, `layout.kind`) drive any setting and win over the fixed value. Driving a ★ setting by DAX still shows the watermark without a key.
```dax
// renamed title.text
Dynamic title = "Revenue 2025: " & FORMAT ( CALCULATE ( [Total revenue], ALLSELECTED (), Sales[Year] = 2025 ), "$#,0" )
// renamed title.color
Title color = IF ( [Revenue 2025] >= [Revenue 2024], "#2E7D4F", "#C0392B" )
```
## Format pane: option IDs
- Card order: `license`, `style`, `dataColors`, `shape`, `center`, `labels`, `sort`, `split`, `breakdown`, `comparison`, `legend`, `smallMultiples`, `play`, `interaction`, then `title`, `source`, `container`, `texts`. Format pane in version 1.1.0.0 (30/10/2026), top to bottom: `license`, `style`, `dataColors`, `layout`, `parts`, `center`, `labels`, `sort`, `split`, `breakdown`, `comparison`, `legend`, `smallMultiples`, `play`, `interaction`, `tooltip`, `title`, `source`, `container`, `texts`. Settings moved or renamed in this version keep working in older reports (the old names are still read).
- `dataColors`: `mode` (`category` | `mono` ★ | `gradient` ★ | `highlight` ★), `single`, `fill`, `highlightWhat` (`max` | `min` | `name`), `highlightName`, `highlightColor`, `othersColor`.
- `parts`: `layout.kind` (`donut` | `pie` | `rose` ★), `layout.innerRadius` (5–92, 58), `layout.roseScale` (`area` | `radius`), `layout.roseAngles` (`equal` | `value`), `layout.roseGrid`, `layout.startAngle` (-360–360, 0), `layout.arc` (60–360, 360), `layout.clockwise`, `padAngle` (0–10, 0.8), `cornerRadius` (0–30, 2), `stroke`, `strokeWidth` (0.5–6, 1), `strokeColor`, `patterns` ★, `explode` (`none` | `selected` | `largest` ★ | `name` ★), `explodeName`, `explodeOffset` (0–40, 8).
- `center`: `show`, `value` (`total` | `measure` | `text` | `count` | `none`), `text`, `label`, `hover` ★ (off), `fontSize` (0–96, 0), `color`, `labelSize` (6–30, 11), `labelColor`, `showChange`.
- `labels`: `show`, `content` (`catPct` | `cat` | `value` | `pct` | `catValue` | `valuePct` | `all`), `position` (`outside` | `auto` | `inside`), `leader`, `layout` (`columns` | `around`), `minPct` (0–20, 0), `pctDecimals` (0–3, 0), `wrap`, `fontSize` (6–24, 10), `color`, `bold`, `halo`, `declutter`, `units` (`auto` | `none` | `k` | `m` | `b`), `decimals` (-1–6, -1), `prefix`, `suffix`.
- `sort`: `by` (`valueDesc` | `valueAsc` | `labelAsc` | `labelDesc` | `data` | `custom` ★), `customOrder`, `others` (`none` | `topN` ★ | `threshold` ★), `n` (1–50, 6), `threshold` (0.1–30, 3), `othersLabel`.
- `split`: `colors` (`tints` | `category` ★ | `gradient` ★), `layout` (`angular` | `radial` ★), `separators`, `legend` (`auto` | `categories` | `details`).
- `breakdown`: `mode` (`none` | `ring` ★ | `pieOfPie` ★ | `barOfPie` ★), `trigger` (`click` | `always`), `target` (`largest` | `others` | `name` | `all`), `targetName`, `size` (20–80, 42), `links`.
- `comparison`: `show`, `position` (`outside` | `inside`), `width` (2–20, 5), `change` (`points` | `percent`).
- `legend`: `show`, `position` (`top` | `bottom` | `right` | `left`), `align` (`left` | `center` | `right`), `showTitle`, `titleText`, `fontSize` (6–24, 9), `color`, `interactive`.
- `smallMultiples`: `columns` (0–12, 0), `minHeight` (50–600, 110), `gap` (0–60, 14), `sizeBy` (`same` | `total` ★), `border`, `titleShow`, `titleSize` (6–24, 10), `titleColor`, `titleTotal`.
- `play`: the shared player card (★: the play axis itself is premium) (`start`, `speed`, `loop`, `autoPlay`, `transition`, `controls`, `position`, `ticks`, `tickLabels`, `stepButtons`, `speedButton`, `showLabel`, `labelSize`, `labelPosition`). `interaction`: `hover`, `dim` (5–80, 25).
## Editing a PBIP report (visual.json)
`visualType` is the visual GUID, `queryState` keys are the data role names, `objects` keys are the option IDs. Booleans `true` / `false`, numbers suffixed with `D`, strings and enumeration values in single quotes.
```json
{
"visualType": "plumePieChartA98296CC7934459199F53486CD90BFCD",
"query": {
"queryState": {
"category": { "projections": [ { "field": { "Column": { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Region" } }, "queryRef": "Sales.Region", "nativeQueryRef": "Region" } ] },
"values": { "projections": [ { "field": { "Measure": { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Total revenue" } }, "queryRef": "Sales.Total revenue", "nativeQueryRef": "Total revenue" } ] }
}
},
"objects": {
"center": [ { "properties": { "label": { "expr": { "Literal": { "Value": "'2025 revenue'" } } } } } ],
"sort": [ { "properties": { "others": { "expr": { "Literal": { "Value": "'topN'" } } }, "n": { "expr": { "Literal": { "Value": "5D" } } } } } ]
}
}
```
The custom visual package must also be embedded in the report (Power BI does this when the visual is imported from the `.pbiviz` file).
## Styles and theme JSON
- `style.preset` takes one of the 20 style IDs shared by every Plume visual: `none`, `minimal`, `blackWhite`, `press`, `vintage`, `earth`, `nordic`, `executive`, `accessible`, `pastel`, `bauhaus`, `climate`, `blueprint`, `unknownPleasures`, `dark`, `neon`, `terminal`, `infographic`, `cockpit`, `hologram`. Slice colors follow the categorical palette of the style; colors set per category in Data colors win over the style.
- `style.themeJson` (Theme JSON ★): a JSON theme as plain text (format v2 with optional `extends` and groups `colors`, `palettes`, `typography`, `shape`, `table`, `marks`, `effects`). Full reference: https://plumevisuals.com/ai/tutorials/en/themes-json.md.
## Common pitfalls
- "No positive value to draw": every value is empty, zero or negative.
- "n negative or zero value(s) not drawn" (edit mode): those categories have no place in a circle; use Waterfall Plume for balances.
- A small slice has no label: the label column is full; enlarge the visual, reduce the text size or group small slices into "Others" ★.
- The center is empty: `layout.kind` = `pie` (no hole), `center.show` off, or the comparison ring placed in the hole.
- The center measure looks too big: it is evaluated per slice and added up; write it with `ALLSELECTED`.
- The legend does not show: hidden by default (`legend.show`); it shows by itself with small multiples and with `split.colors` = `category`.
- Watermark visible: rose, opening below 360°, patterns, exploded largest / named slice, "Others" grouping two slices or more, sub-category colors / gradient / layers, breakdown, previous period ring, sized small multiples, shades / gradient / highlight colors, custom order, hovered slice in the center, play axis with data, a ★ style or a theme JSON, without a valid key.
- The visual makes no network request: data and license key stay in the report; no R or Python.
## Features that do NOT exist (do not suggest them)
3D pies, images inside slices, drill-down inside the visual (use Power BI's drill-down on the Legend hierarchy), a summary table, exporting the chart as an image, saving the play frame or the opened breakdown with the report, negative slices.
## Data fields (wells)
Internal name = data role name (PBIP `queryState` key). Labels as shown in Power BI (English / French). ★ = premium.
| Internal name | Label (EN) | Label (FR) | Kind | Max fields | Description |
|---|---|---|---|---|---|
| `category` | Legend (categories) | Légende (catégories) | column | 6 | One slice per value. Several fields make a hierarchy you can drill into. |
| `detail` | Details (sub-category) | Détails (sous-catégorie) | column | 1 | Splits every slice into sub-parts (shades, colors or a gradient), or feeds the breakdown of a slice (outer ring, pie of pie, bar of pie). |
| `values` | Values | Valeurs | measure | 12 | Size of the slices. Without a Legend, several measures give one slice each. |
| `radius` | Radius (rose) ★ | Rayon (rose) ★ | measure | 1 | Nightingale rose: the angle follows Values and the radius follows this measure. |
| `center` | Center value | Valeur au centre | measure | 1 | Measure written in the center of the donut (Format › Center › Value: Center value field). |
| `previous` | Previous period ★ | Période précédente ★ | measure | 1 | Same measure for the previous period: a thin ring shows the former shares, the center shows the change. |
| `multiples` | Small multiples | Petits multiples | column | 1 | |
| `play` | Play axis ★ | Axe de lecture ★ | column | 1 | A date, a year or an ordered category: the visual moves from one value to the next (play button) |
| `tooltips` | Tooltips | Infobulles | measure | 5 | |
| `format` | Dynamic format | Format dynamique | measure | several | Measures named card.setting (e.g. title.fontSize): drive any Format option with DAX |
Data view: categorical, categories = `multiples` + `category` + `detail` + `play` (one row per combination), 30,000 rows per data window (more fetched automatically); measures = `values`, `radius`, `center`, `previous`, `tooltips`, `format`.
Capabilities: supportsHighlight, supportsKeyboardFocus, supportsMultiVisualSelection, supportsLandingPage, supportsEmptyDataView.
Network access: none (no privileges requested, no external request).
## Format pane options (176)
Columns: option ID (`object.property`), labels EN / FR as shown in Power BI, control type, PBIP literal type, default value, allowed values, notes.
### Plume Studio License / Licence Plume Studio (`license`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `license.buy` | Get a license | Obtenir une licence | info | text | `plumevisuals.com` | | |
| `license.key` | License key | Clé de licence | text | text | (empty) | | Paste the key received after purchase on plumevisuals.com (starts with PLUM1.). Checked offline. |
| `license.showOwner` | Show license holder (edit mode) | Afficher le titulaire (mode édition) | toggle | bool | `true` | true / false | |
### Style (`style`, Format pane)
**Style**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `style.preset` | Style | Style | dropdown | enumeration | `none` | `none` None; `minimal` Minimal; `blackWhite` Black & White; `press` Newspaper ★; `vintage` Vintage (antique plate) ★; `earth` Earth ★; `nordic` Nordic ★; `executive` Executive ★; `accessible` Accessible (high legibility) ★; `pastel` Pastel ★; `bauhaus` Bauhaus (pop) ★; `climate` Climate ★; `blueprint` Blueprint ★; `unknownPleasures` Unknown Pleasures ★; `dark` Graphite (dark) ★; `neon` Neon ★; `terminal` Terminal (Matrix) ★; `infographic` Infographic ★; `cockpit` Cockpit (HUD) ★; `hologram` Hologram ★ | Complete look shared by all Plume visuals: colors, three palettes, fonts, frame, table header, marks and effects. Customize colors below. |
| `style.themeJson` | Theme JSON ★ | Thème JSON ★ | textarea | text | (empty) | | Paste a JSON theme: see the 'JSON themes' tutorial on plumevisuals.com |
| `style.followTheme` | Follow report theme | Suivre le thème du rapport | toggle | bool | `false` | true / false | Text, background, accent and data colors come from the Power BI report theme. |
| `style.reverse` | Reverse gradients | Inverser les dégradés | toggle | bool | `false` | true / false | |
**Custom colors / Couleurs personnalisées**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `style.customColors` | Customize colors | Personnaliser les couleurs | toggle | bool | `false` | true / false | Start from the style and pick your own colors. A color left empty keeps the style's color. |
| `style.colorBackground` | Background | Fond | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorText` | Text | Texte | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorMuted` | Secondary text | Texte secondaire | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorGrid` | Lines and grid | Traits et grille | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorAccent` | Accent | Accent | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorPositive` | Favorable | Favorable | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorNegative` | Unfavorable | Défavorable | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series1` | Series 1 | Série 1 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series2` | Series 2 | Série 2 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series3` | Series 3 | Série 3 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series4` | Series 4 | Série 4 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series5` | Series 5 | Série 5 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series6` | Series 6 | Série 6 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series7` | Series 7 | Série 7 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series8` | Series 8 | Série 8 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.palette` | Gradient palette | Palette du dégradé | dropdown | enumeration | `auto` | `auto` Style or theme palette; `crest` Plume (sequential); `crestDiverging` Plume (diverging); `viridis` Viridis ★; `magma` Magma ★; `inferno` Inferno ★; `cividis` Cividis (colorblind-safe) ★; `warmingStripes` Warming stripes ★; `rdYlBu` Red–Yellow–Blue ★; `brBG` Brown–Teal (drought) ★; `spectral` Spectral ★; `blues` Blues ★; `reds` Reds ★; `grays` Grays ★; `press` Press (ink and paper) ★; `nordic` Nordic ★; `earth` Earth (ochre to umber) ★; `pastel` Pastel ★; `okabeIto` Okabe-Ito (colorblind-safe) ★ | Visible when `style.customColors` = `true`. Gradient from the catalog (Viridis, Magma…). The start, middle and end colors below replace it. |
| `style.scaleLow` | Gradient: start | Dégradé : début | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.scaleMid` | Gradient: middle (diverging) | Dégradé : milieu (écarts) | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.scaleHigh` | Gradient: end | Dégradé : fin | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
**Text / Texte**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `style.fontFamily` | Font | Police | font | formatting | `Segoe UI, wf_segoe-ui_normal, helvetica, arial, sans-serif` | | Used by every text of the visual (title, axes, labels, cells). |
**Animations**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `style.animate` | Animations | Animations | toggle | bool | `true` | true / false | Smooth transitions when data changes. Automatically disabled when the system asks to reduce motion. |
### Layout / Disposition (`layout`, Format pane)
**Type**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `layout.kind` | Shape | Forme | dropdown | enumeration | `donut` | `donut` Donut (ring); `pie` Full pie; `rose` Nightingale rose ★ | Rose: every slice gets the same angle (or the angle of its value) and its radius shows the value. With a “Radius” field, the angle follows Values and the radius follows Radius. |
| `layout.innerRadius` | Inner radius (% of radius) | Rayon intérieur (% du rayon) | number | integer | `58` | 5 to 92 | Visible when `layout.kind` = `donut` or `rose`. Size of the hole of the donut (the « Spacing › Inner radius » of the native donut chart). |
| `layout.roseScale` | Rose radius | Rayon de la rose | dropdown | enumeration | `area` | `area` Area proportional (Nightingale); `radius` Radius proportional | Visible when `layout.kind` = `rose`. Area proportional: a value twice as large covers twice the surface (the honest choice). |
| `layout.roseAngles` | Rose slice angles | Angle des parts de la rose | dropdown | enumeration | `equal` | `equal` Equal (one slice per category); `value` By value | Visible when `layout.kind` = `rose` |
| `layout.roseGrid` | Rose guide circles | Cercles de repère de la rose | toggle | bool | `true` | true / false | Visible when `layout.kind` = `rose` |
**Rotation and opening / Rotation et ouverture**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `layout.startAngle` | Rotation (start angle, °) | Rotation (angle de départ, °) | number | integer | `0` | -360 to 360 | 0 = the first slice starts at 12 o'clock; 90 = at 3 o'clock. |
| `layout.arc` | Opening (°, 180 = half circle) | Ouverture (°, 180 = demi-cercle) | number | integer | `360` | 60 to 360 | Less than 360°: half donut, gauge-like arc (premium). With 180° and a rotation of -90°, the half circle stands on its base. |
| `layout.clockwise` | Clockwise | Sens des aiguilles d'une montre | toggle | bool | `true` | true / false | |
### Data colors / Couleurs des données (`dataColors`, Format pane)
Per-item card: Power BI shows it once per series, category, column or KPI (an "Apply settings to" list where relevant). In PBIP `visual.json`, each entry of `objects.dataColors` carries a `selector` (`metadata` = the field's queryRef, or `data` for a category value); an entry without a selector applies to all items.
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `dataColors.mode` | Coloring | Coloration | dropdown | enumeration | `category` | `category` Palette (one color per slice); `mono` Shades of a single color ★; `gradient` Gradient by value ★; `highlight` Highlight one slice ★ | |
| `dataColors.single` | Color | Couleur | color | fill | (empty) | hex color | |
| `dataColors.fill` | Color | Couleur | color | fill | (empty) | hex color | |
| `dataColors.highlightWhat` | Highlighted slice | Part mise en avant | dropdown | enumeration | `max` | `max` The largest; `min` The smallest; `name` By its name | |
| `dataColors.highlightName` | Slice name | Nom de la part | text | text | (empty) | | |
| `dataColors.highlightColor` | Highlighted slice color (empty = accent) | Couleur de la part mise en avant (vide = accent) | color | fill | (empty) | hex color | |
| `dataColors.othersColor` | Other slices color (empty = gray) | Couleur des autres parts (vide = gris) | color | fill | (empty) | hex color | |
### Slices / Parts (`parts`, Format pane)
**Slices / Parts**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `parts.padAngle` | Gap between slices (°) | Espace entre les parts (°) | number | numeric | `0.8` | 0 to 10 | |
| `parts.cornerRadius` | Corner radius (px) | Arrondi des angles (px) | number | integer | `2` | 0 to 30 | |
| `parts.stroke` | Outline | Contour | toggle | bool | `true` | true / false | |
| `parts.strokeWidth` | Outline width | Épaisseur du contour | number | numeric | `1` | 0.5 to 6 | Visible when `parts.stroke` = `true` |
| `parts.strokeColor` | Outline color (empty = background) | Couleur du contour (vide = fond) | color | fill | (empty) | hex color | Visible when `parts.stroke` = `true` |
| `parts.patterns` | Patterns (hatching, dots) ★ | Motifs (hachures, points) ★ | toggle | bool | `false` | true / false | A different pattern on each slice: readable in black and white prints and without colors. |
**Exploded slices / Parts détachées**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `parts.explode` | Explode | Détacher | dropdown | enumeration | `selected` | `none` No slice; `selected` The selected slice; `largest` The largest slice ★; `name` A slice chosen by name ★ | |
| `parts.explodeName` | Slice name (separated by ;) | Nom de la part (séparés par ;) | text | text | (empty) | | Visible when `parts.explode` = `name` |
| `parts.explodeOffset` | Distance (px) | Distance (px) | number | integer | `8` | 0 to 40 | Visible when `parts.explode` = `selected` or `largest` or `name` |
### Donut center / Centre de l'anneau (`center`, Format pane)
The card header toggle is `center.show`.
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `center.show` | Show | Afficher | toggle | bool | `true` | true / false | Text in the hole of the donut (and of the rose when it has a hole). |
| `center.value` | Value | Valeur | dropdown | enumeration | `total` | `total` Total of the slices; `measure` “Center value” field; `text` Free text; `count` Number of slices; `none` None (caption only) | Center value field: write the measure with CALCULATE ( [Measure], ALLSELECTED () ) so it is the same for every slice. |
| `center.text` | Free text | Texte libre | text | text | (empty) | | Visible when `center.value` = `text`. Placeholders: {total}, {count}, {measure}. Also driven by DAX with the fx button. |
| `center.label` | Caption under the value | Légende sous la valeur | text | text | (empty) | | |
| `center.hover` | Show the hovered or selected slice ★ | Afficher la part survolée ou sélectionnée ★ | toggle | bool | `false` | true / false | Hovering or selecting a slice writes its name, value and share in the center. |
| `center.fontSize` | Value size (0 = automatic) | Taille de la valeur (0 = automatique) | number | integer | `0` | 0 to 96 | |
| `center.color` | Value color (empty = text) | Couleur de la valeur (vide = texte) | color | fill | (empty) | hex color | |
| `center.labelSize` | Caption size | Taille de la légende | number | formatting | `11` | 6 to 30 | |
| `center.labelColor` | Caption color (empty = secondary) | Couleur de la légende (vide = secondaire) | color | fill | (empty) | hex color | |
| `center.showChange` | Change from the previous period | Évolution par rapport à la période précédente | toggle | bool | `true` | true / false | With a “Previous period” field: ▲ / ▼ and the change of the total under the value. |
### Data labels / Étiquettes de données (`labels`, Format pane)
The card header toggle is `labels.show`.
**Labels / Étiquettes**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `labels.show` | Show | Afficher | toggle | bool | `true` | true / false | |
| `labels.content` | Content | Contenu | dropdown | enumeration | `catPct` | `catPct` Category and %; `cat` Category; `value` Value; `pct` % of total; `catValue` Category and value; `valuePct` Value and %; `all` Category, value and % | |
| `labels.position` | Position | Position | dropdown | enumeration | `outside` | `outside` Outside; `auto` Automatic (inside when all fits); `inside` Inside | |
| `labels.leader` | Leader lines | Traits de rappel | toggle | bool | `true` | true / false | |
| `labels.layout` | Outside labels | Étiquettes extérieures | dropdown | enumeration | `columns` | `columns` Aligned in columns left and right; `around` Around the slices | Columns: labels are spread vertically so they never overlap, with a leader line to their slice. |
| `labels.minPct` | Hide below (% of total) | Masquer sous (% du total) | number | numeric | `0` | 0 to 20 | |
| `labels.pctDecimals` | Decimals of % | Décimales des % | number | integer | `0` | 0 to 3 | |
| `labels.wrap` | Long names on two lines | Noms longs sur deux lignes | toggle | bool | `true` | true / false | |
| `labels.bg` | Background | Arrière-plan | toggle | bool | `false` | true / false | A box behind each label (like the background of the native detail labels). |
| `labels.bgColor` | Background color (empty = background) | Couleur de l'arrière-plan (vide = fond) | color | fill | (empty) | hex color | Visible when `labels.bg` = `true` |
| `labels.bgTransparency` | Background transparency (%) | Transparence de l'arrière-plan (%) | slider | numeric | `10` | 0 to 100 | Visible when `labels.bg` = `true` |
| `labels.fontSize` | Size | Taille | number | formatting | `10` | 6 to 24 | |
| `labels.color` | Color (empty = automatic) | Couleur (vide = automatique) | color | fill | (empty) | hex color | Automatic: readable color depending on the background (inside bars: white or dark). |
| `labels.bold` | Bold | Gras | toggle | bool | `false` | true / false | |
| `labels.halo` | Text halo | Halo autour du texte | toggle | bool | `true` | true / false | |
| `labels.declutter` | Hide overlapping labels | Masquer les étiquettes qui se chevauchent | toggle | bool | `true` | true / false | |
**Numbers / Nombres**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `labels.units` | Display units | Unités d'affichage | dropdown | enumeration | `auto` | `auto` Auto; `none` None; `k` Thousands; `m` Millions; `b` Billions | |
| `labels.decimals` | Decimals (-1 = auto) | Décimales (-1 = auto) | number | integer | `-1` | -1 to 6 | |
| `labels.prefix` | Prefix | Préfixe | text | text | (empty) | | |
| `labels.suffix` | Suffix (e.g. €) | Suffixe (ex. €) | text | text | (empty) | | |
### Legend / Légende (`legend`, Format pane)
The card header toggle is `legend.show`.
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `legend.show` | Show | Afficher | toggle | bool | `false` | true / false | Shown when the chart has several series. |
| `legend.position` | Position | Position | dropdown | enumeration | `right` | `top` Top; `bottom` Bottom; `right` Right; `left` Left | |
| `legend.align` | Alignment | Alignement | dropdown | enumeration | `left` | `left` Start; `center` Center; `right` End | Visible when `legend.position` = `top` or `bottom` |
| `legend.showTitle` | Legend title | Titre de la légende | toggle | bool | `false` | true / false | |
| `legend.titleText` | Title text | Texte du titre | text | text | (empty) | | Visible when `legend.showTitle` = `true` |
| `legend.fontSize` | Size | Taille | number | formatting | `9` | 6 to 24 | |
| `legend.color` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color | |
| `legend.interactive` | Click = select the series | Clic = sélectionner la série | toggle | bool | `true` | true / false | |
### Sort / Tri (`sort`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `sort.by` | Slice order | Ordre des parts | dropdown | enumeration | `valueDesc` | `valueDesc` Value descending; `valueAsc` Value ascending; `labelAsc` Name (A → Z); `labelDesc` Name (Z → A); `data` Data order (Sort by column); `custom` Custom ★ | |
| `sort.customOrder` | Custom order (separated by ;) | Ordre personnalisé (séparé par ;) | text | text | (empty) | | Visible when `sort.by` = `custom` |
| `sort.others` | Group small slices into “Others” | Regrouper les petites parts dans « Autres » | dropdown | enumeration | `none` | `none` No; `topN` Keep the N largest ★; `threshold` Slices under a threshold (%) ★ | |
| `sort.n` | N | N | number | integer | `6` | 1 to 50 | Visible when `sort.others` = `topN` |
| `sort.threshold` | Threshold (% of total) | Seuil (% du total) | number | numeric | `3` | 0.1 to 30 | Visible when `sort.others` = `threshold` |
| `sort.othersLabel` | “Others” label | Libellé de « Autres » | text | text | (empty) | | Visible when `sort.others` = `topN` or `threshold` |
### Sub-categories (Details) / Sous-catégories (Détails) (`split`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `split.colors` | Sub-part colors | Couleurs des sous-parts | dropdown | enumeration | `tints` | `tints` Shades of the slice color; `category` One color per sub-category (same in every slice) ★; `gradient` Continuous gradient in the slice ★ | With a field in “Details”, every slice is cut into sub-parts. One color per sub-category: compare the same product across regions at a glance. |
| `split.layout` | Cut | Découpe | dropdown | enumeration | `angular` | `angular` Side by side within the slice angle; `radial` In layers, from the center outward ★ | |
| `split.separators` | Lines between sub-parts | Traits entre les sous-parts | toggle | bool | `true` | true / false | |
| `split.legend` | The legend shows | La légende montre | dropdown | enumeration | `auto` | `auto` Automatic; `categories` The slices; `details` The sub-categories | Automatic: the sub-categories with one color per sub-category, the slices otherwise. |
### Slice breakdown / Sous-répartition d'une part (`breakdown`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `breakdown.mode` | Show | Afficher | dropdown | enumeration | `none` | `none` No (slices split in place); `ring` Outer ring ★; `pieOfPie` Pie of pie ★; `barOfPie` Bar of pie ★ | Shows the detail of one slice (its “Details” sub-categories, or the members of “Others”): around the slice, or in a second pie or a bar linked to it. |
| `breakdown.trigger` | When | Quand | dropdown | enumeration | `click` | `click` On click on a slice; `always` Always shown | Visible when `breakdown.mode` = `ring` or `pieOfPie` or `barOfPie` |
| `breakdown.target` | Detailed slice (always shown) | Part détaillée (toujours affichée) | dropdown | enumeration | `largest` | `largest` The largest; `others` “Others”; `name` By its name; `all` All (outer ring only) | Visible when `breakdown.mode` = `ring` or `pieOfPie` or `barOfPie` |
| `breakdown.targetName` | Slice name | Nom de la part | text | text | (empty) | | Visible when `breakdown.mode` = `ring` or `pieOfPie` or `barOfPie` |
| `breakdown.size` | Detail size (% of width) | Taille du détail (% de la largeur) | number | integer | `42` | 20 to 80 | Visible when `breakdown.mode` = `ring` or `pieOfPie` or `barOfPie` |
| `breakdown.links` | Connector lines | Traits de liaison | toggle | bool | `true` | true / false | Visible when `breakdown.mode` = `ring` or `pieOfPie` or `barOfPie` |
### Comparison / Comparaison (`comparison`, Format pane)
The card header toggle is `comparison.show`.
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `comparison.show` | Previous period ring | Anneau de la période précédente | toggle | bool | `true` | true / false | |
| `comparison.position` | Position | Position | dropdown | enumeration | `outside` | `outside` Around the chart; `inside` In the hole | |
| `comparison.width` | Width (px) | Épaisseur (px) | number | integer | `5` | 2 to 20 | |
| `comparison.change` | Change in the tooltip | Évolution dans l'infobulle | dropdown | enumeration | `points` | `points` In share points; `percent` In % of the value | |
### Small multiples / Petits multiples (`smallMultiples`, Format pane)
**Grid / Grille**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `smallMultiples.columns` | Columns (0 = automatic) | Colonnes (0 = automatique) | number | integer | `0` | 0 to 12 | |
| `smallMultiples.minHeight` | Minimum panel height (px) | Hauteur minimale d'un panneau (px) | number | integer | `110` | 50 to 600 | Below that, the grid scrolls vertically. |
| `smallMultiples.gap` | Spacing (px) | Espacement (px) | number | integer | `14` | 0 to 60 | |
| `smallMultiples.sizeBy` | Chart size | Taille des graphiques | dropdown | enumeration | `same` | `same` Same size; `total` Proportional to the panel total ★ | Proportional: the surface of each pie follows its total, so panels compare in size as well as in shares. |
| `smallMultiples.border` | Panel border | Cadre des panneaux | toggle | bool | `false` | true / false | |
**Titles / Titres**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `smallMultiples.titleShow` | Title of each panel | Titre de chaque panneau | toggle | bool | `true` | true / false | |
| `smallMultiples.titleSize` | Text size | Taille du texte | number | formatting | `10` | 6 to 24 | Visible when `smallMultiples.titleShow` = `true` |
| `smallMultiples.titleColor` | Color (empty = text) | Couleur (vide = texte) | color | fill | (empty) | hex color | Visible when `smallMultiples.titleShow` = `true` |
| `smallMultiples.titleTotal` | Total in the title | Total dans le titre | toggle | bool | `true` | true / false | Visible when `smallMultiples.titleShow` = `true` |
### Playback ★ / Lecture ★ (`play`, Format pane)
This card controls premium features (★): they work without a license key but show the watermark while in use.
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `play.start` | Frame shown on opening | Image affichée à l'ouverture | dropdown | enumeration | `last` | `last` The last one (most recent); `first` The first one | |
| `play.speed` | Duration of a frame (ms) | Durée d'une image (ms) | number | integer | `1000` | 100 to 10000 | At speed ×1; the speed button of the play bar multiplies it (×0.5 to ×4) for the session. |
| `play.loop` | Loop | Lecture en boucle | toggle | bool | `false` | true / false | |
| `play.autoPlay` | Play automatically on opening | Lecture automatique à l'ouverture | toggle | bool | `false` | true / false | Once, from the first frame. Not when animations are reduced (Style › Animations or the system) nor on a dashboard tile. |
| `play.transition` | Animated transitions | Transitions animées | toggle | bool | `true` | true / false | Values, positions and colors move smoothly from one frame to the next. |
| `play.controls` | Play bar | Barre de lecture | toggle | bool | `true` | true / false | |
| `play.position` | Bar position | Position de la barre | dropdown | enumeration | `bottom` | `bottom` Bottom; `top` Top | Visible when `play.controls` = `true` |
| `play.ticks` | Tick marks | Graduations | dropdown | enumeration | `auto` | `auto` Automatic; `all` Every frame; `none` None | Visible when `play.controls` = `true` |
| `play.tickLabels` | Tick labels | Étiquettes des graduations | toggle | bool | `true` | true / false | Visible when `play.controls` = `true` |
| `play.stepButtons` | Start and end buttons | Boutons début et fin | toggle | bool | `true` | true / false | Visible when `play.controls` = `true` |
| `play.speedButton` | Speed button | Bouton de vitesse | toggle | bool | `true` | true / false | Visible when `play.controls` = `true` |
| `play.showLabel` | Current value in large type | Valeur en cours en grand | toggle | bool | `true` | true / false | |
| `play.labelSize` | Large value size | Taille de la valeur en grand | number | formatting | `44` | 12 to 160 | Visible when `play.showLabel` = `true` |
| `play.labelPosition` | Large value position | Position de la valeur en grand | dropdown | enumeration | `bottomRight` | `bottomRight` Bottom right; `topRight` Top right; `topLeft` Top left; `bottomLeft` Bottom left; `center` Center | Visible when `play.showLabel` = `true` |
### Interactions (`interaction`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `interaction.hover` | Highlight on hover | Mettre en avant au survol | toggle | bool | `true` | true / false | |
| `interaction.dim` | Dimmed items opacity (%) | Opacité des éléments estompés (%) | number | integer | `25` | 5 to 80 | |
### Tooltips / Infobulles (`tooltip`, Format pane)
The card header toggle is `tooltip.show`.
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `tooltip.show` | Show | Afficher | toggle | bool | `true` | true / false | Tooltip on hover (with the fields of the "Tooltips" well and report page tooltips). |
### Title / Titre (`title`, Format pane)
The card header toggle is `title.show`.
**Title / Titre**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `title.show` | Show | Afficher | toggle | bool | `true` | true / false | |
| `title.text` | Text | Texte | text | text | (empty) | | Leave empty for an automatic title built from the fields. |
| `title.fontSize` | Size | Taille | number | formatting | `14` | 7 to 40 | |
| `title.bold` | Bold | Gras | toggle | bool | `true` | true / false | |
| `title.italic` | Italic | Italique | toggle | bool | `false` | true / false | |
| `title.underline` | Underline | Souligné | toggle | bool | `false` | true / false | |
| `title.color` | Color (empty = text) | Couleur (vide = texte) | color | fill | (empty) | hex color | |
| `title.bgColor` | Background color | Couleur d'arrière-plan | color | fill | (empty) | hex color | |
| `title.align` | Horizontal alignment | Alignement horizontal | dropdown | enumeration | `left` | `left` Left; `center` Center; `right` Right | |
| `title.wrap` | Text wrap | Retour automatique à la ligne | toggle | bool | `true` | true / false | |
**Subtitle / Sous-titre**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `title.subtitle` | Subtitle | Sous-titre | text | text | (empty) | | Several lines allowed: type \n to go to the next line. |
| `title.subFontSize` | Size | Taille | number | formatting | `11` | 7 to 30 | Visible when `title.subtitle` = |
| `title.subColor` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color | Visible when `title.subtitle` = |
| `title.subItalic` | Italic | Italique | toggle | bool | `false` | true / false | Visible when `title.subtitle` = |
**Divider / Séparateur**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `title.divider` | Show divider | Afficher le séparateur | toggle | bool | `false` | true / false | |
| `title.dividerColor` | Color (empty = lines) | Couleur (vide = traits) | color | fill | (empty) | hex color | Visible when `title.divider` = `true` |
| `title.dividerStyle` | Line style | Style de trait | dropdown | enumeration | `solid` | `solid` Solid; `dashed` Dashed; `dotted` Dotted | Visible when `title.divider` = `true` |
| `title.dividerWidth` | Width | Épaisseur | number | integer | `1` | 1 to 6 | Visible when `title.divider` = `true` |
**Spacing / Espacement**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `title.spaceBelow` | Space below the title (px) | Espace sous le titre (px) | number | integer | `4` | 0 to 40 | |
### Source note / Note de source (`source`, Format pane)
The card header toggle is `source.show`.
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `source.show` | Show | Afficher | toggle | bool | `false` | true / false | |
| `source.text` | Text | Texte | text | text | (empty) | | |
| `source.fontSize` | Size | Taille | number | formatting | `9` | 6 to 20 | |
| `source.italic` | Italic | Italique | toggle | bool | `false` | true / false | |
| `source.color` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color | |
| `source.align` | Alignment | Alignement | dropdown | enumeration | `left` | `left` Left; `center` Center; `right` Right | |
### Frame / Cadre (`container`, Format pane)
**Background / Arrière-plan**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.bgShow` | Background | Arrière-plan | toggle | bool | `false` | true / false | |
| `container.bgColor` | Color | Couleur | color | fill | `#FFFFFF` | hex color | Visible when `container.bgShow` = `true` |
| `container.bgColor2` | Gradient end (optional) | Fin du dégradé (optionnel) | color | fill | (empty) | hex color | Visible when `container.bgShow` = `true` |
| `container.bgTransparency` | Transparency (%) | Transparence (%) | slider | numeric | `0` | 0 to 100 | Visible when `container.bgShow` = `true` |
**Border / Bordure**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.border` | Border | Bordure | toggle | bool | `false` | true / false | |
| `container.borderColor` | Color (empty = lines) | Couleur (vide = traits) | color | fill | (empty) | hex color | Visible when `container.border` = `true` |
| `container.borderWidth` | Width | Épaisseur | number | integer | `1` | 0 to 6 | Visible when `container.border` = `true` |
| `container.radius` | Rounded corners | Coins arrondis | number | integer | `8` | 0 to 24 | |
**Shadow / Ombre**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.shadow` | Shadow | Ombre | toggle | bool | `false` | true / false | |
| `container.shadowColor` | Color (empty = soft) | Couleur (vide = douce) | color | fill | (empty) | hex color | Visible when `container.shadow` = `true` |
| `container.shadowSize` | Blur (px) | Flou (px) | number | integer | `12` | 0 to 40 | Visible when `container.shadow` = `true` |
**Spacing / Marges**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.padding` | Inner padding | Marge intérieure | number | integer | `8` | 0 to 40 | |
### Language and numbers / Langue et nombres (`texts`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `texts.language` | Interface language | Langue de l'interface | dropdown | enumeration | `auto` | `auto` Same as Power BI; `fr` French; `en` English | |
| `texts.numberLocale` | Number format locale (e.g. en-GB) | Format des nombres (ex. fr-FR) | text | text | (empty) | | Thousands and decimal separators. Empty: same as Power BI. |
### Other objects (not in the Format pane cards above)
- `shape`: `shape.kind` (enumeration), `shape.innerRadius` (integer), `shape.roseScale` (enumeration), `shape.roseAngles` (enumeration), `shape.roseGrid` (bool), `shape.startAngle` (integer), `shape.arc` (integer), `shape.clockwise` (bool), `shape.padAngle` (numeric), `shape.cornerRadius` (integer), `shape.stroke` (bool), `shape.strokeWidth` (numeric), `shape.strokeColor` (fill), `shape.patterns` (bool), `shape.explode` (enumeration), `shape.explodeName` (text), `shape.explodeOffset` (integer).