Radar chart for Power BI Radar Plume
Compare profiles across several criteria, each on its own scale: players, products, teams, stores.
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 has no native radar, and the free radar forces a single scale and one measure per series. Radar Plume takes its axes from several measures (speed in km/h, salary in $, rates in %…) with one scale per axis, or from a category (skills, criteria, months); a Series field draws one polygon per player, product or team from a single measure. Round level values, model or name axis order, click a point, a polygon or an axis name to filter the page. With premium: the play axis (polygons morph from one year to the next), 0–100 % normalization, axis order by value or custom, lower-is-better axes, per-axis bounds and weights, targets, reference series, group band, ▲▼ gap under each axis, overall score, polar rose and small multiples.
Use cases
- Player or candidate profiles across 6 statistics with different units
- Team skills assessment against a target
- Brand image versus a competitor, animated from 2019 to 2025 ★
- Satisfaction by store as small multiples, ranked by score
FreeIncluded for free
- Axes from several measures or from a category; one polygon per series from a single measure
- Automatic, common or per-axis scale; minimum, maximum, non-zero start
- Polygon or circular grid, round levels and their values, rotation
- Fill, line width, markers, value labels, axis order (model, name)
- Polygon line style, gridline width; scale kept under filters
- Click a point, a polygon or an axis name to filter; tooltips, keyboard, high contrast, dynamic formats
PremiumPremium features
- Play axis: polygons morph from one period to the next
- 0–100 % normalized scale, axis order by value or custom, labels in % of the maximum, center hole
- Per-axis settings: bounds, "lower is better" (costs, delays), weights
- Target, reference series, average, min–max or quartile band of the group
- ▲▼ gap under each axis (target, benchmark, first series, previous period), best and worst axis
- Overall score (weighted mean or area) in a ranked legend and in the center
- Polar rose (radial bars), smooth curves, small multiples (one radar per series or per value)
- 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 startedBeginner7 min readA Power BI radar chart that compares profiles, each axis on its scaleGet started with Radar Plume: prepare the data, drop several measures or a category, one series per player, read the scales and filter the page with a click.
- How-to guidesIntermediate5 min readRadar Plume: 9 recipes to compare profiles in Power BIRatings out of 5, months in order, and with premium lower-is-better axes, target and ▲▼ gap, market benchmark, overall score, play axis, small multiples: the Radar Plume recipes.
- Fields and settingsIntermediate13 min readRadar Plume: every field and setting explainedEvery field well and every Format pane setting of Radar 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 | |
|---|---|---|
| Values | Without Axes: one axis per measure; with Axes: the value of each axis | Required |
| Axes (category) | One axis per value (skill, criterion, month) | Optional |
| Series (one polygon each) | Player, product, team | Optional |
| Play axis | A year or a date: the polygons move ★ | OptionalPremium |
| Target | A target per axis, as a dashed outline, compared with each series | OptionalPremium |
| Small multiples | One radar per value, same scales | 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 Radar 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/radar.md)# Radar 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 Radar 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/radar (French: https://plumevisuals.com/fr/visuels/radar)
- Summary: Compare profiles across several criteria, each on its own scale: players, products, teams, stores.
- Power BI visual GUID (`visualType`): `plumeRadarC4CFD44A07A54CEF8806718E4F113927`
- 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
Radar Plume (identifier `radar`) is a Power BI custom visual (base range, version 1.1.0.0, installed from its `.pbiviz` file; AppSource submission in preparation) that draws **radar (spider) charts**. Power BI Desktop has no native radar; Microsoft's free Radar Chart has a single common scale, no maximum and needs one measure per series.
**New in version 1.1.0.0 (30/10/2026):** Format pane reorganized (`radar.type` / `grid` / angles → **Layout**, `gridLines` → `gridlines`, `compare` → `comparison`); free gridline width and polygon line style.
- **Two ways to give the axes**: without the `axis` role ("Axes (category)"), **each measure of Values is an axis** (statistics or KPIs with different units); with `axis`, **each value of the category is an axis** and the measure gives the value.
- **Series**: the `legend` role ("Series (one polygon each)") draws one polygon per value from a single measure (one player, product, team). With `axis` and no `legend`, several measures in Values give one polygon each.
- **Scales** (`scale.mode`): `auto` (common with an Axes field; one per axis when measures have different formats or a size ratio above 4), `common`, `perAxis` (each axis its own round range, written under its name: "0 – 120"), `normalized` ★ (0–100 % of each axis maximum; `scale.normFrom` = `zero` or `min`). `scale.zero` (start at zero), `scale.min` / `scale.max` for the common scale. Level values are round: ratings up to 4.6 give 0 to 5 in 5 levels.
- **Per-axis settings ★** (dynamic card `axes`, "Apply settings to" All axes or one axis): `min`, `max`, `invert` ("Lower is better", the best value at the edge, "↓" after the name), `weight` (score). Stored with the measure selector (`{ metadata: queryName }`) or the category selector.
- Polygon or circular grid, levels, alternating bands, spokes, level values written between the first and the last axis, rotation, direction, center hole ★, fill opacity (automatically lighter beyond 3 series), markers (circle, square, diamond, one shape per series), value labels (value, % of the axis maximum ★, series and value), axis order (model, name, value ★, custom list ★).
- **Play axis ★** (`play` role, shared Plume player): play / pause, start / end, slider, speed ×0.5 to ×4, loop, autoplay, value in large type; **polygons morph from one frame to the next**; scales stay fixed over all frames.
- Interactions: click a point (axis + series), a polygon (series), an axis name (category, `axisLabels.click`) or the legend to cross-filter; hover = the series stands out; highlighting from other visuals dims series without highlighted values.
## Free vs premium (★)
- Every feature works without a key and nothing is ever blocked. Free features never show a watermark, and the default settings use no premium feature.
- 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**.
- Free in Radar Plume: both axis modes, Series, the scale modes auto, common and per axis, min / max of the common scale, grid, fills, markers, value labels, axis order by model or name (the model order follows Power BI's Sort by column), rotation, legend, interactions, high contrast, dynamic formats.
- Rebalanced on 22/10/2026 (moved from free to premium): play axis, normalized scale, axis order by value or custom, labels in % of the axis maximum, center hole.
- Premium features of Radar Plume (the watermark appears only when they actually apply):
- the `play` role ("Play axis ★") with data; `scale.mode` = `normalized`; `sort.by` = `value`, or `custom` with at least one name; `labels.content` = `percent` with labels shown; `layout.inner` > 0;
- `layout.type` = `polar` (polar rose, radial bars) and `radar.curve` = `smooth`;
- per-axis settings: any `axes.min`, `axes.max`, `axes.invert` (weights only matter with a score);
- the **Target ★** field (`target`, with Axes), `benchmark.series` (a series name that exists), `benchmark.average`, `benchmark.band` = `minmax` or `quartiles`;
- `comparison.with` = `target`, `reference`, `previous` (with a play axis) or `first`; `score.method` = `mean` or `area`; `extremes.show` ≠ `none`;
- the **Small multiples ★** field (`multiples`) or `smallMultiples.bySeries`.
- 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.
- Accepted keys: only keys starting with `PLUM1.` shown in the buyer's account on plumevisuals.com, checked offline (Ed25519 signature), covering `radar` or the whole catalog. Licenses last one year (one-time payment, no automatic renewal). Prices: 39 € personal, 99 € SME, 299 € enterprise per year, or the catalog pack.
## Expected data shape
**Measures mode** (one measure per criterion), one row per compared item:
| Player (`legend`) | Speed (`values`) | Stamina (`values`) | Passes completed (`values`) | Goals (`values`) |
|---|---|---|---|---|
| Léa | 31.5 | 88 | 86% | 14 |
| Marc | 33.8 | 72 | 78% | 19 |
**Category mode** (long format), one row per item and per criterion:
| Team (`legend`) | Skill (`axis`) | Rating (`values`) | Target (`target`) |
|---|---|---|---|
| North team | Communication | 4.2 | 4.0 |
| North team | Technical skills | 3.1 | 4.0 |
- **Axes (category)** (`axis`, « Axes (catégorie) », one column): one axis per value; Power BI sorts text alphabetically, so sort the month column by its number in the model (Sort by column, free) or use `sort.by` = `custom` ★.
- **Series** (`legend`, « Séries (un polygone par valeur) », one column): up to 60 series drawn.
- **Values** (`values`, « Valeurs », 1 to 24 measures).
- **Target ★** (`target`, « Cible ★ », one measure, with Axes): dashed outline, compared with `comparison.with` = `target`.
- **Play axis ★** (`play`, « Axe de lecture ★ »), **Small multiples ★** (`multiples`, « Petits multiples ★ »), **Tooltips** (`tooltips`), **Dynamic format** (`format`).
- At most 60 axes are drawn (message in edit mode); 30,000-row windows, more with `fetchMoreData` up to 100,000 rows; 100,004 rows render in about 1.3 s.
## DAX recipes
```dax
// Measures mode: choose the aggregation of each criterion
Speed = AVERAGE ( Players[Speed km/h] ) // a measure cannot share a column name of its own table
Goals = SUM ( Players[Goals scored] )
Salary = AVERAGE ( Players[Annual salary] ) // then Per-axis settings ★ › Salary › Lower is better
// Category mode
Average rating = AVERAGE ( Assessments[Rating] )
Target = AVERAGE ( Assessments[Target score] ) // one target per skill (Target ★ field)
```
## Format pane: option IDs
- Card order: `license`, `style`, `dataColors`, `radar`, `scale`, `axes` (dynamic, ★), `gridlines`, `axisLabels`, `labels`, `legend`, `sort`, `benchmark`, `comparison`, `score`, `extremes`, `play`, `smallMultiples`, `interaction`, then `title`, `source`, `container`, `texts`. Format pane in version 1.1.0.0 (30/10/2026), top to bottom: `license`, `style`, `layout`, `dataColors`, `radar`, `scale`, `axes`, `axisLabels`, `labels`, `gridlines`, `legend`, `sort`, `benchmark`, `comparison`, `score`, `extremes`, `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` (`series` | `single`), `single`, `fill` (per series).
- `radar`: `layout.type` (`radar` | `polar` ★), `layout.grid` (`polygon` | `circle`), `layout.startAngle` (−360–360, 0), `layout.clockwise`, `layout.size` (40–100, 92), `layout.inner` ★ (0–60, 0), `fillOpacity` (0–100, 16), `width` (0–10, 2), `curve` (`linear` | `smooth` ★), `markers`, `markerSize` (2–20, 6), `markerShape` (`circle` | `square` | `diamond` | `series`), `barPadding` (0–80, 12), `polarLayout` (`grouped` | `overlap`).
- `scale`: `mode` (`auto` | `common` | `perAxis` | `normalized` ★), `zero`, `min`, `max` (text), `normFrom` (`zero` | `min`).
- `axes` ★: `min`, `max` (text), `invert`, `weight` (0–100, 1).
- `gridlines`: `levels` (1–12, 4), `bands`, `spokes`, `style` (`solid` | `dashed` | `dotted`), `color`, `levelLabels`, `levelSize` (9).
- `axisLabels`: `show`, `fontSize` (10), `color`, `bold`, `wrap`, `range`, `click`.
- `labels`: `show`, `content` (`value` | `percent` ★ | `seriesValue`), `which` (`all` | `first` | `last` | `single`), `fontSize`, `color`, `bold`, `halo`, `declutter`, `units`, `decimals`, `prefix`, `suffix`.
- `sort`: `by` (`data` | `name` | `value` ★ | `custom` ★), `order` (`desc` | `asc`), `custom` (names, one per line or `;`).
- `benchmark`: `targetColor`, `targetStyle`, `targetWidth`, `series` ★ (name), `average` ★, `band` (`none` | `minmax` ★ | `quartiles` ★), `bandColor`, `bandOpacity` (3–70, 14).
- `comparison`: `with` (`none` | `target` ★ | `reference` ★ | `previous` ★ | `first` ★), `focus` (series name), `arrows`, `ghost`, `pct`.
- `score`: `method` (`none` | `mean` ★ | `area` ★), `inLegend`, `center`, `decimals` (0–2).
- `extremes`: `show` (`none` | `both` ★ | `best` ★ | `worst` ★).
- `play` ★ (shared player): `start` (`last` | `first`), `speed` (ms), `loop`, `autoPlay`, `transition`, `controls`, `position`, `ticks`, `tickLabels`, `stepButtons`, `speedButton`, `showLabel`, `labelSize`, `labelPosition`.
- `smallMultiples`: `bySeries` ★, `others`, `sortByScore`, `columns`, `minWidth` (170), `gap`, `titleSize`, `border`. `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. A per-axis setting uses a `metadata` selector with the measure's query name.
```json
{
"visualType": "plumeRadarC4CFD44A07A54CEF8806718E4F113927",
"query": { "queryState": {
"values": { "projections": [
{ "field": { "Measure": { "Expression": { "SourceRef": { "Entity": "Players" } }, "Property": "Speed" } }, "queryRef": "Players.Speed", "nativeQueryRef": "Speed" },
{ "field": { "Measure": { "Expression": { "SourceRef": { "Entity": "Players" } }, "Property": "Salary" } }, "queryRef": "Players.Salary", "nativeQueryRef": "Salary" } ] },
"legend": { "projections": [ { "field": { "Column": { "Expression": { "SourceRef": { "Entity": "Players" } }, "Property": "Player" } }, "queryRef": "Players.Player", "nativeQueryRef": "Player" } ] } } },
"objects": {
"scale": [ { "properties": { "mode": { "expr": { "Literal": { "Value": "'perAxis'" } } } } } ],
"axes": [ { "properties": { "invert": { "expr": { "Literal": { "Value": "true" } } } }, "selector": { "metadata": "Players.Salary" } } ],
"score": [ { "properties": { "method": { "expr": { "Literal": { "Value": "'mean'" } } } } } ]
}
}
```
## Dynamic formats
- **fx button** on colors and texts of the Format pane; **"Dynamic format" well**: measures renamed `card.setting` (e.g. `title.text`, `radar.fillOpacity`, `scale.max`, `axes.invert` for all axes). Driving a ★ setting by DAX still shows the watermark without a key.
## Common pitfalls
- One or two lines instead of a polygon: fewer than 3 axes.
- Polygons squashed except on one axis: common scale with different units; use `perAxis` (or `normalized` ★).
- Doubled values: a `SUM` measure over several rows per item; use `AVERAGE`.
- Months in alphabetical order: sort the month column by the month number in the model (Sort by column), or `sort.by` = `custom` ★ with the month list.
- Reference series not drawn: the name in `benchmark.series` does not match a value of Series (message in edit mode).
- Watermark visible: a ★ setting listed above, a ★ style or a theme JSON, without a valid key.
## Features that do NOT exist (do not suggest them)
Images in points or at the end of axes, a logarithmic scale, mixing bars and lines per series, drill-down on the axes, free annotations, more than 60 axes or 60 series drawn, exporting the chart as an image. The visual makes no network request.
## 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 |
|---|---|---|---|---|---|
| `axis` | Axes (category) | Axes (catégorie) | column | 1 | One axis per value (skills, criteria, months…). Leave empty to get one axis per measure of the Values field |
| `legend` | Series (one polygon each) | Séries (un polygone par valeur) | column | 1 | A product, a player, a team, a scenario: one polygon per value |
| `values` | Values | Valeurs | measure | 24 | Without Axes: each measure is an axis (each with its own scale if needed). With Axes: the value of each axis; several measures without Series give one polygon each |
| `target` | Target ★ | Cible ★ | measure | 1 | With Axes: a target value per axis, drawn as a dashed outline and compared with each series |
| `play` | Play axis ★ | Axe de lecture ★ | column | 1 | A date, a year or an ordered category: the polygons morph from one value to the next (play button) ★ |
| `multiples` | Small multiples ★ | Petits multiples ★ | column | 1 | One small radar per value, with the same scales |
| `tooltips` | Tooltips | Infobulles | measure | several | |
| `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 = `axis` + `play` + `multiples` (one row per combination), 30,000 rows per data window (more fetched automatically); measures = `values`, `target`, `tooltips`, `format`, grouped into series by `legend`.
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)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `layout.type` | Type | Type | dropdown | enumeration | `radar` | `radar` Radar (polygons); `polar` Polar rose (radial bars) ★ | |
| `layout.grid` | Grid shape | Forme de la grille | dropdown | enumeration | `polygon` | `polygon` Polygonal; `circle` Circular | |
| `layout.startAngle` | First axis angle (degrees, 0 = top) | Angle du premier axe (degrés, 0 = en haut) | number | integer | `0` | -360 to 360 | |
| `layout.clockwise` | Clockwise | Sens des aiguilles d'une montre | toggle | bool | `true` | true / false | |
| `layout.size` | Radar size (% of the room) | Taille du radar (% de la place) | number | integer | `92` | 40 to 100 | |
| `layout.inner` | Center hole (%) ★ | Trou central (%) ★ | number | integer | `0` | 0 to 60 | Leaves an empty disc in the center: small values stay visible. |
### 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 | `series` | `series` One color per series; `single` Single color | |
| `dataColors.single` | Color | Couleur | color | fill | (empty) | hex color | |
| `dataColors.fill` | Color | Couleur | color | fill | (empty) | hex color | |
### Radar (`radar`, Format pane)
**Polygons / Polygones**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `radar.fillOpacity` | Fill opacity (%) | Opacité du remplissage (%) | number | integer | `16` | 0 to 100 | |
| `radar.width` | Line width (px) | Épaisseur du trait (px) | number | numeric | `2` | 0 to 10 | |
| `radar.lineStyle` | Line style | Style du trait | dropdown | enumeration | `solid` | `solid` Solid; `dashed` Dashed; `dotted` Dotted | |
| `radar.curve` | Line | Tracé | dropdown | enumeration | `linear` | `linear` Straight; `smooth` Smooth curves ★ | |
| `radar.markers` | Markers | Marqueurs | toggle | bool | `true` | true / false | |
| `radar.markerSize` | Marker size (px) | Taille des marqueurs (px) | number | integer | `6` | 2 to 20 | Visible when `radar.markers` = `true` |
| `radar.markerShape` | Marker shape | Forme des marqueurs | dropdown | enumeration | `circle` | `circle` Circle; `square` Square; `diamond` Diamond; `series` One shape per series | Visible when `radar.markers` = `true`. One shape per series helps when colors are hard to tell apart. |
**Polar rose / Rose polaire**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `radar.barPadding` | Space between sectors (%) | Espace entre les secteurs (%) | number | integer | `12` | 0 to 80 | |
| `radar.polarLayout` | Several series | Plusieurs séries | dropdown | enumeration | `grouped` | `grouped` Side by side; `overlap` Overlapping | |
### Scale / Échelle (`scale`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `scale.mode` | Axis scale | Échelle des axes | dropdown | enumeration | `auto` | `auto` Automatic; `common` Common to all axes; `perAxis` One scale per axis; `normalized` Normalized (0–100 % of the axis maximum) ★ | Automatic: common scale for a category; one scale per axis when the measures have different units or sizes. |
| `scale.zero` | Start at zero | Partir de zéro | toggle | bool | `true` | true / false | Off: each scale starts near the smallest value (differences stand out; say it in the title). |
| `scale.min` | Minimum (common scale) | Minimum (échelle commune) | text | text | (empty) | | |
| `scale.max` | Maximum (common scale) | Maximum (échelle commune) | text | text | (empty) | | E.g. 100 for scores out of 100 or 5 for ratings out of 5. |
| `scale.normFrom` | Normalization: 0 % | Normalisation : 0 % | dropdown | enumeration | `zero` | `zero` = zero; `min` = smallest value of the axis | Visible when `scale.mode` = `normalized` |
### Per-axis settings ★ / Réglages par axe ★ (`axes`, Format pane)
This card controls premium features (★): they work without a license key but show the watermark while in use.
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.axes` 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 |
|---|---|---|---|---|---|---|---|
| `axes.min` | Axis minimum ★ | Minimum de l'axe ★ | text | text | (empty) | | |
| `axes.max` | Axis maximum ★ | Maximum de l'axe ★ | text | text | (empty) | | Choose “All axes” or one axis in “Apply settings to” above. Empty = automatic. |
| `axes.invert` | Lower is better (inverted axis) ★ | Plus bas = mieux (axe inversé) ★ | toggle | bool | `false` | true / false | Costs, delays, weight: the best value is drawn at the edge, the axis name gets a ↓ mark. |
| `axes.weight` | Weight in the score ★ | Poids dans le score ★ | number | numeric | `1` | 0 to 100 | |
### Axis names / Noms des axes (`axisLabels`, Format pane)
The card header toggle is `axisLabels.show`.
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `axisLabels.show` | Show | Afficher | toggle | bool | `true` | true / false | |
| `axisLabels.fontSize` | Text size | Taille du texte | number | formatting | `10` | 6 to 24 | |
| `axisLabels.color` | Color (empty = text) | Couleur (vide = texte) | color | fill | (empty) | hex color | |
| `axisLabels.bold` | Bold | Gras | toggle | bool | `false` | true / false | |
| `axisLabels.wrap` | Long names on two lines | Noms longs sur deux lignes | toggle | bool | `true` | true / false | |
| `axisLabels.range` | Scale under the name (one scale per axis) | Échelle sous le nom (échelle par axe) | toggle | bool | `true` | true / false | With one scale per axis: “0 – 120” under each axis name. |
| `axisLabels.click` | Click on a name = select the axis | Clic sur un nom = sélectionner l'axe | toggle | bool | `true` | true / false | With an Axes field: filters the other visuals of the page. |
### 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 | `false` | true / false | |
| `labels.content` | Content | Contenu | dropdown | enumeration | `value` | `value` Value; `percent` % of the axis maximum ★; `seriesValue` Series and value | |
| `labels.which` | Labeled series | Séries étiquetées | dropdown | enumeration | `all` | `all` All; `first` The first one; `last` The last one; `single` Only when there is one | |
| `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) | | |
### Gridlines / Quadrillage (`gridlines`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `gridlines.levels` | Number of levels | Nombre de niveaux | number | integer | `4` | 1 to 12 | |
| `gridlines.bands` | Alternating level bands | Niveaux en bandes alternées | toggle | bool | `true` | true / false | |
| `gridlines.spokes` | Spokes (one line per axis) | Rayons (un trait par axe) | toggle | bool | `true` | true / false | |
| `gridlines.style` | Line style | Style du trait | dropdown | enumeration | `solid` | `solid` Solid; `dashed` Dashed; `dotted` Dotted | |
| `gridlines.width` | Width (px) | Épaisseur (px) | number | numeric | `1` | 0.5 to 6 | |
| `gridlines.color` | Color (empty = style grid) | Couleur (vide = grille du style) | color | fill | (empty) | hex color | |
| `gridlines.levelLabels` | Level values | Valeurs des niveaux | toggle | bool | `true` | true / false | Written along the first axis (common or normalized scale). |
| `gridlines.levelSize` | Level values size | Taille des valeurs des niveaux | number | formatting | `9` | 6 to 20 | Visible when `gridlines.levelLabels` = `true` |
### 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 | `true` | true / false | Shown when the chart has several series. |
| `legend.position` | Position | Position | dropdown | enumeration | `top` | `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` | Axis order | Ordre des axes | dropdown | enumeration | `data` | `data` Model order (as in Power BI); `name` Axis name; `value` Value (average of the series) ★; `custom` Custom ★ | |
| `sort.order` | Direction | Sens | dropdown | enumeration | `desc` | `desc` Descending (names A to Z); `asc` Ascending (names Z to A) | Visible when `sort.by` = `name` or `value` |
| `sort.custom` | Custom order | Ordre personnalisé | textarea | text | (empty) | | Visible when `sort.by` = `custom`. Axes not listed follow in the model order. Case and accents are ignored. |
### Reference ★ / Référence ★ (`benchmark`, Format pane)
This card controls premium features (★): they work without a license key but show the watermark while in use.
**Target (Target field) / Cible (champ Cible)**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `benchmark.targetColor` | Color (empty = text) | Couleur (vide = texte) | color | fill | (empty) | hex color | |
| `benchmark.targetStyle` | Line style | Style du trait | dropdown | enumeration | `dashed` | `solid` Solid; `dashed` Dashed; `dotted` Dotted | |
| `benchmark.targetWidth` | Width | Épaisseur | number | numeric | `1.5` | 0.5 to 6 | |
**Reference series / Série de référence**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `benchmark.series` | Reference series (name) ★ | Série de référence (nom) ★ | text | text | (empty) | | A value of the Series field drawn as a gray dashed outline, without fill (benchmark, last year, competitor). |
| `benchmark.average` | Average of all series ★ | Moyenne de toutes les séries ★ | toggle | bool | `false` | true / false | |
**Band / Bande**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `benchmark.band` | Band per axis | Bande par axe | dropdown | enumeration | `none` | `none` None; `minmax` From the minimum to the maximum of the series ★; `quartiles` Quartiles of the series (25 % to 75 %) ★ | The range covered by the group on each axis: the eye sees at once where a series stands out. |
| `benchmark.bandColor` | Band color (empty = secondary text) | Couleur de la bande (vide = texte secondaire) | color | fill | (empty) | hex color | |
| `benchmark.bandOpacity` | Band opacity (%) | Opacité de la bande (%) | number | integer | `14` | 3 to 70 | |
### Comparison ★ / Comparaison ★ (`comparison`, 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 |
|---|---|---|---|---|---|---|---|
| `comparison.with` | Compare with | Comparer à | dropdown | enumeration | `none` | `none` Nothing; `target` The target ★; `reference` The reference series (or the average) ★; `previous` The previous frame (play axis) ★; `first` The first series ★ | |
| `comparison.focus` | Compared series (empty = automatic) | Série comparée (vide = automatique) | text | text | (empty) | | A value of the Series field. Empty: the first series (the second one when comparing with the first series). |
| `comparison.arrows` | ▲▼ gap under each axis name | ▲▼ écart sous chaque nom d'axe | toggle | bool | `true` | true / false | |
| `comparison.ghost` | Dashed comparison outline | Contour de comparaison en pointillé | toggle | bool | `true` | true / false | |
| `comparison.pct` | Gap in % | Écart en % | toggle | bool | `false` | true / false | |
### Overall score ★ / Score global ★ (`score`, 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 |
|---|---|---|---|---|---|---|---|
| `score.method` | Method | Calcul | dropdown | enumeration | `none` | `none` None; `mean` Weighted mean of the axes (0–100) ★; `area` Polygon area (% of the full radar) ★ | Each axis counts as 0 at its minimum and 100 at its maximum (inverted axes and weights of “Per-axis settings” included). |
| `score.inLegend` | Score in the legend (ranking) | Score dans la légende (classement) | toggle | bool | `true` | true / false | |
| `score.center` | Score in the center (single series or small multiples) | Score au centre (une seule série ou petits multiples) | toggle | bool | `true` | true / false | |
| `score.decimals` | Decimals | Décimales | number | integer | `0` | 0 to 2 | |
### Best and worst axis ★ / Meilleur et pire axe ★ (`extremes`, 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 |
|---|---|---|---|---|---|---|---|
| `extremes.show` | Highlight | Mettre en avant | dropdown | enumeration | `none` | `none` Nothing; `both` The best and the worst axis ★; `best` The best axis ★; `worst` The worst axis ★ | Of the compared series (Comparison card), relative to each axis scale; “lower is better” axes included. |
### Small multiples ★ / Petits multiples ★ (`smallMultiples`, 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 |
|---|---|---|---|---|---|---|---|
| `smallMultiples.bySeries` | One radar per series ★ | Un radar par série ★ | toggle | bool | `false` | true / false | Without the Small multiples field: each series gets its own radar (profiles side by side). |
| `smallMultiples.others` | Other series in gray in each radar | Autres séries en gris dans chaque radar | toggle | bool | `true` | true / false | |
| `smallMultiples.sortByScore` | Rank by score | Classer par score | toggle | bool | `false` | true / false | |
| `smallMultiples.columns` | Columns (0 = automatic) | Colonnes (0 = automatique) | number | integer | `0` | 0 to 12 | |
| `smallMultiples.minWidth` | Minimum radar width (px) | Largeur minimale d'un radar (px) | number | integer | `170` | 80 to 800 | |
| `smallMultiples.gap` | Spacing (px) | Espacement (px) | number | integer | `12` | 0 to 60 | |
| `smallMultiples.titleSize` | Title size | Taille des titres | number | formatting | `10` | 6 to 24 | |
| `smallMultiples.border` | Frame around each radar | Cadre autour de chaque radar | toggle | bool | `false` | true / false | |
### Playback ★ / Lecture ★ (`play`, Format pane)
This card controls premium features (★): they work without a license key but show the watermark while in use.
**Playback / Lecture**
| 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 bar / Barre de lecture**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `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` |
**Large value / Valeur en grand**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `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)
- `gridLines`: `gridLines.levels` (integer), `gridLines.bands` (bool), `gridLines.spokes` (bool), `gridLines.style` (enumeration), `gridLines.color` (fill), `gridLines.levelLabels` (bool), `gridLines.levelSize` (formatting).
- `compare`: `compare.with` (enumeration), `compare.focus` (text), `compare.arrows` (bool), `compare.ghost` (bool), `compare.pct` (bool).