Skip to content
Plume Visuals
← Back
Core range

Gauge for Power BI Gauge Plume

The gauge Power BI never had: red, amber and green ranges, a needle, a readable target and ▲▼ gap, one gauge per category.

Tutorials ↓

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”.

The Power BI gauge has no color ranges, no needle, no comparison, and its labels get cut. Gauge Plume keeps its fields (Value, Minimum value, Maximum value, Target value) and adds what is missing: eight shapes (semicircle, 240° and 270° arcs, ring, custom angles, linear gauges, bullet chart), ranges in % of the scale, as values or from measures, a needle, the gap to target written with ▲▼ (never color alone), an automatically rounded maximum and one gauge per region or product. With premium: a play axis that glides the needle from month to month, the change since last year, the thermometer, ranges in % of each gauge's own target, the gap arc, a history sparkline under each gauge, several needles (target, last year, forecast), car-dashboard dials, 4 or 5 ranges and gradient ranges, needle memory while playing.

Use cases

  • Year-to-date revenue against the target and last year
  • One gauge per region or sales rep, colored from each one's own target
  • Service level, satisfaction, delivery lead time (lower is better)
  • Warehouse fill or budget used, month by month with the play axis

FreeIncluded for free

  • 8 shapes: semicircle, 240° and 270° arcs, ring, custom angles, horizontal and vertical linear, bullet chart
  • Value, minimum, maximum and target from fields or fixed values; maximum rounded above the value and the target
  • 2 or 3 red / amber / green ranges in % of the scale, as values or from measures; range names
  • Needle (tapered, line, arrow, pointer), animated when data changes
  • Gap to target written with ▲▼ under the value, % of target in the center
  • One gauge per category: automatic grid, same scale, sort by value or % of target, cross-filtering
  • Adjustable target label (size, color, units, decimals, prefix, suffix), target name taken from the field
  • Labels never cut, high contrast, keyboard and screen reader; dynamic formats (fx and DAX)

PremiumPremium features

  • Play axis: the needle glides from one period to the next, stable scale; needle memory
  • Comparison (last year, budget) written with ▲▼, “lower is better”; thermometer
  • Ranges in % of each gauge's target, gap arc between value and target
  • History sparkline under each gauge (the gauge shows the last period)
  • Several needles: target, last year and up to 3 measures, with a legend
  • Car-dashboard dials: Classic, Sport, Retro, Cockpit
  • 4 or 5 ranges, gradient ranges
  • 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.

  1. Getting startedBeginner6 min readA readable gauge in Power BI: target, ranges and gap at a glanceGet started with Gauge Plume: prepare the measures, insert the gauge, add the target, show the % of target, color red, amber and green ranges and show the needle.
  2. How-to guidesIntermediate5 min readGauge Plume: 10 use cases for your Power BI gaugesOne gauge per region, colors from each region's own target ★, % of target, costs where lower is better, bullets, play axis ★, history ★ and several needles ★.
  3. Fields and settingsIntermediate18 min readGauge Plume: every field and setting explainedEvery field well and every Format pane setting of Gauge Plume: shape, scale, ranges, needle, dial, callout, target, comparison, grid, history, play axis.
  4. BasicsGetting started with Plume visualsInstallation, license, styles and the settings shared by every visual.

Fields to drop into the visual

FieldContent
One gauge per… (category)One gauge per value, in a grid (region, product, sales rep)Optional
ValueThe measure shown by the gaugeRequired
Minimum value, Maximum valueStart and end of the scale (otherwise automatic or fixed)Optional
Target valueMarker, label and ▲▼ gapOptional
Comparison (previous year…)Last year, budget: ▲▼ change under the valueOptionalPremium
Range limitsUp to 4 measures: the limits of the color rangesOptional
Extra needlesUp to 3 measures, one needle eachOptionalPremium
History (date)Sparkline under each gaugeOptionalPremium
Play axisMonths, years: play button, the needle glides from one period to the nextOptionalPremium
TooltipsExtra measuresOptional
Dynamic formatMeasures renamed card.setting (e.g. title.text): the Format pane driven by DAXOptional

Missing a feature? We adapt our visuals or build custom ones. Request a custom visual

Found a bug in Gauge 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/gauge.md)
# Gauge 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 Gauge 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/gauge (French: https://plumevisuals.com/fr/visuels/gauge)
- Summary: The gauge Power BI never had: red, amber and green ranges, a needle, a readable target and ▲▼ gap, one gauge per category.
- Power BI visual GUID (`visualType`): `plumeGauge1F054613CBF04C5D8B56ED96A49BC450`
- 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

Gauge Plume (identifier `gauge`) is a Power BI custom visual (base range, version 1.1.0.0, installed from its `.pbiviz` file; AppSource submission in preparation) that shows **one value on a scale against a target**, like the native Power BI gauge (same fields: Value, Minimum value, Maximum value, Target value) with what the native gauge lacks:

**New in version 1.1.0.0 (30/10/2026):** Free native-parity addition: target label size, color, units, decimals, prefix and suffix.

- **Nine shapes** (`gauge.type`), eight of them free: semicircle `semi` (default), `arc240`, `arc270`, full ring `ring`, `custom` angles (`gauge.startAngle`, `gauge.sweep`), horizontal `linear`, `vertical`, `bullet` chart (Stephen Few: grey qualitative bands, thin value bar, target line); `thermometer` is premium ★.
- **Color ranges** (red / amber / green): 2 or 3 ranges free, limits in % of the scale, as values, or from measures; ★ in **% of the target** (each gauge of a grid uses its own target) (the Range limits field, up to 4 measures). The fill and the value take the color of the range reached (`gauge.colorByRange`).
- **Readable min / max and target**: min and max labels under the ends of the arc, never cut; the automatic maximum is rounded above the value **and** the target (never "twice the value" unless `scale.autoMax` = `double`); the target label is placed outside the arc and the radius shrinks to keep it readable.
- **Gap to target written under the value**: "▼ 15% below target", colored favorable / unfavorable; ★ with the Comparison field, "▲ +9.4% vs Revenue LY" (`comparison.lowerIsBetter` for costs and lead times).
- **Needle** (free): tapered, line, arrow or pointer on the arc.
- **One gauge per category** (the category field): a grid of gauges with a shared or per-gauge scale, sorted by data, value, % of target or name; clicking a gauge cross-filters the page.
- **Play axis ★** (premium since the free / premium rebalancing of 2026-10-22, common Plume player): steps through periods; the needle and the arc glide from one period to the next on a scale fixed for the whole sequence.
- Values out of scale are flagged with a ▲ tip and the exact value (or the scale is extended); negative scales fill from zero.
- Premium ★: the play axis, the Comparison field, the thermometer, ranges in % of the target, the gap arc, 4 or 5 ranges, continuous gradient ranges, car-dashboard dials, the Sport needle, needles for the target, the comparison and up to 3 extra measures, a history sparkline under each gauge, needle memory (min. and max. reached) while playing.

## Free vs premium (★)

- Every feature works without a key and nothing is ever blocked. Free features never show a watermark. The default view uses no ★ 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 Gauge Plume: eight shapes (all but `thermometer`), Value / Minimum / Maximum / Target fields, 2 or 3 color ranges (limits in % of the scale, as values, or a Range limits field with 1 or 2 measures), range names, limit values on the scale, the needle (shapes `classic`, `line`, `arrow`, `pointer`), ticks, the callout content (`value`, % of scale, % of target, both), the ▲▼ gap to target, one gauge per category, tooltips, dynamic formats.
- Premium features of Gauge Plume (the watermark appears only when they actually apply):
  - a field in **Play axis ★** (`play`) holding data, even a single frame;
  - a measure in **Comparison ★** (`comparison`) with `comparison.show` on (default on);
  - `gauge.type` = `thermometer` ("Thermometer ★");
  - `ranges.mode` = `target` ("In % of the target ★") with `ranges.show` on, a known target and no Range limits measure;
  - `target.gapArc` ("Gap arc ★") with a known target;
  - `ranges.count` = `4` or `5`, or 3 or 4 measures in Range limits; `ranges.gradient` ("Continuous gradient ★"), with `ranges.show` on;
  - `dial.skin` = `classic`, `sport`, `retro` or `cockpit` (arc shapes only);
  - `needle.style` = `sport` ("Sport (counterweight) ★"), with the needle shown;
  - `needle.targetNeedle` (with a target) and `needle.compareNeedle` (with a comparison); any measure in **Extra needles ★** (`needles`);
  - a field in **History (date) ★** (`trend`) with `history.show` on (default on);
  - `play.trace` ("Needle memory ★") with at least two periods in the play axis.
- 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 `gauge` 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 per year: 39 € personal, 99 € SME, 299 € enterprise, 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 number per gauge: measures, evaluated for the current filters (and for each category value when the category field is used).

| Region (`category`) | Revenue (`value`) | Target (`target`) | Revenue LY (`comparison`) |
|---|---|---|---|
| North | 1,412,000 | 1,350,000 | 1,301,000 |
| South | 1,098,000 | 1,180,000 | 1,012,000 |

- **One gauge per… (category)** (`category`, « Une jauge par… (catégorie) », one column): one gauge per value, in a grid (up to `layout.maxGauges`, 60 by default; "+N" beyond).
- **Value** (`value`, « Valeur », one measure, required).
- **Minimum value**, **Maximum value** (`min`, `max`, one measure each): the scale; otherwise `scale.min` / `scale.max` (text), otherwise 0 and the automatic maximum. Field > fixed value > automatic. A percentage measure (format %) with values up to 1 gets a 0–100% scale.
- **Target value** (`target`, « Valeur cible »): marker, label, gap ▲▼; otherwise `target.value` (fixed).
- **Comparison (previous year…) ★** (`comparison`, « Comparaison (année précédente…) ★ »): change ▲▼ under the value and a small hollow marker.
- **Range limits** (`thresholds`, « Limites des plages », up to 4 measures): the limits between ranges, in value units; they replace `ranges.mode`, `ranges.count` and `ranges.t1`–`t4`.
- **Extra needles ★** (`needles`, up to 3 measures): one needle each, with a needle legend.
- **History (date) ★** (`trend`, one column): the gauge shows the **last period**; a sparkline under the gauge shows every period.
- **Play axis ★** (`play`, « Axe de lecture ★ », one column): one frame per value.
- **Tooltips** (`tooltips`) and **Dynamic format** (`format`, see below).
- Volume: windows of 30,000 rows, more fetched with `fetchMoreData` up to 100,000 rows (a warning beyond).

## DAX recipes

```dax
Revenue = SUM ( Sales[Amount] )
Target = SUM ( Sales[Target amount] )
Revenue LY = CALCULATE ( [Revenue], SAMEPERIODLASTYEAR ( 'Date'[Date] ) )

// A rate: return 0.72 for 72% and give the measure the % format (scale 0–100% automatically)
Satisfaction = DIVIDE ( [Satisfied answers], [Answers] )

// Range limits from measures (drop them into Range limits, in this order)
Low limit = [Target] * 0.9
High limit = [Target]

// A scale ending at 120% of the target
Scale max = [Target] * 1.2

// Fill color driven by DAX: rename the measure gauge.fillColor in Dynamic format
Color versus target = IF ( [Revenue] >= [Target], "#2E7D4F", "#2A6F97" )
```

Do not put a column in Value without checking its summarization (sum by default). For a lead time or a cost, choose `ranges.colors` = `greenRed` (and, with a Comparison ★ measure, turn on `comparison.lowerIsBetter`).

## Interactions with the report

- Click a gauge (with the category field): cross-filter on that category; Ctrl + click adds one; click on an empty spot clears. Cross-highlighting from other visuals dims the gauges without highlighted values and shows the highlighted part. Context menu everywhere (right-click on a gauge or on the background).
- Hover: Power BI tooltip with value, target, % of target, comparison and change, minimum, maximum, range reached and the Tooltips measures; report-page tooltips are supported.
- Keyboard: Tab to the gauges, arrows to move, Enter or Space selects, Esc clears; on the play bar, Space plays or pauses, arrows step, Home / End. High contrast, ARIA labels ("Revenue: 1.53M, target 1.8M, 85% of the target…"), French and English.
- Animation: the arc and the needle glide to the new value (650 ms) after a filter; reduced when `style.animate` is off or the system asks for reduced motion.

## Dynamic formats

- **fx button** (Power BI conditional formatting) on colors and texts of the Format pane.
- **"Dynamic format" well** (`format`): measures renamed `card.setting` (e.g. `gauge.fillColor`, `gauge.type`, `ranges.t1`, `target.labelText`, `title.text`) drive any setting and win over the fixed value. Driving a ★ setting by DAX still shows the watermark without a key.

```dax
// renamed gauge.type
Gauge type = IF ( HASONEVALUE ( Sales[Region] ), "semi", "bullet" )
// renamed ranges.names
Range names = "Watch;Close;Reached"
```

## Format pane: option IDs

- Card order: `license`, `style`, `gauge`, `scale`, `ranges`, `needle`, `dial`, `callout`, `target`, `comparison`, `layout`, `history`, `play`, `tooltip`, `interaction`, then `title`, `source`, `container`, `texts`. Cards whose field is empty (Several gauges, History, Playback, Comparison) and settings replaced by a field (`target.value`, `scale.min`, `scale.max`, range limits) are hidden. Format pane in version 1.1.0.0 (30/10/2026), top to bottom: `license`, `style`, `layout`, `gauge`, `scale`, `ranges`, `needle`, `dial`, `callout`, `target`, `comparison`, `history`, `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).
- `gauge`: `type` (`semi` | `arc240` | `arc270` | `ring` | `custom` | `linear` | `vertical` | `bullet` | `thermometer` ★), `startAngle` (−360–360, −120, 0 = top), `sweep` (20–360, 240), `thickness` (3–80 % of the radius or height, 22), `rounded`, `trackColor`, `fillShow`, `fillColor` (empty = style data color), `colorByRange` (true), `fromZero` (true), `overflow` (`mark` | `extend` | `none`).
- `scale`: `min`, `max` (text, empty = automatic), `autoMax` (`nice` | `double` | `target`), `reverse`, `minMax` (true), `ticks` (false), `tickCount` (2–20, 5), `minor` (0–9, 4), `tickLabels`, `fontSize` (9), `color`, `tickUnits`, `tickDecimals`, `tickPrefix`, `tickSuffix`.
- `ranges`: `show` (false), `mode` (`percent` | `target` ★ | `values`), `count` (`2` | `3` | `4` ★ | `5` ★), `t1`–`t4` (50, 80, 90, 95), `colors` (`redGreen` | `greenRed` | `style` | `custom`), `c1`–`c5`, `gradient` ★, `display` (`track` faded in the track | `band` thin outer band | `full` solid speedometer), `opacity` (5–100, 28), `names` (separated by `;`), `showName` (true), `limitLabels`.
- `needle`: `show` (false), `style` (`classic` | `line` | `arrow` | `pointer` | `sport` ★), `color`, `width` (1–16, 4), `length` (40–115 % of the radius, 92), `hub`, `targetNeedle` ★, `compareNeedle` ★, `legend` (true).
- `dial`: `skin` (`none` | `classic` ★ | `sport` ★ | `retro` ★ | `cockpit` ★), `faceColor`.
- `callout`: `show`, `content` (`value` | `pctScale` | `pctTarget` | `valuePct`), `autoSize` (true), `fontSize` (8–120, 32: maximum when automatic), `color` (empty = range reached or text), `bold`, `units`, `decimals` (−1 = auto), `prefix`, `suffix`, `showLabel` (false), `label`, `labelSize` (11).
- `target`: `show`, `value` (fixed, text), `marker` (`line` | `triangle` | `dot`), `color`, `label`, `labelContent` (`nameValue` | `value` | `name`), `labelText`, `gap` (▲▼ under the value, true), `gapArc` ★ (false).
- `comparison` (card « Comparaison ★ », shown with the Comparison ★ field): `show`, `label` (default "vs <measure name>"), `content` (`pct` | `abs` | `both`), `marker`, `lowerIsBetter`, `posColor` (#2E7D4F), `negColor` (#C0392B).
- `layout`: `columns` (0 = automatic, up to 12), `sort` (`data` | `valueDesc` | `valueAsc` | `pctDesc` | `name`), `sharedScale` (true), `labelPosition` (`top` | `bottom` | `none`), `labelSize`, `gap` (12 px), `maxGauges` (1–200, 60).
- `history`: `show` ★ (true), `kind` (`area` | `line` | `columns`), `height` (10–50 % of the gauge, 22), `color`, `targetLine`, `lastDot`.
- `play` (common player): `start` (`last` by default), `speed` (ms per frame, 1000), `loop`, `autoPlay`, `transition`, `controls`, `position`, `ticks`, `tickLabels`, `stepButtons`, `speedButton`, `showLabel` (false in Gauge Plume), `labelSize` (32), `labelPosition` (`topLeft`), `trace` ★.
- `tooltip`: `show`, `pct`, `range`. `interaction`: `dim`.

## 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, colors in `solid.color`.

```json
{
  "visualType": "plumeGauge1F054613CBF04C5D8B56ED96A49BC450",
  "query": {
    "queryState": {
      "category":   { "projections": [ { "field": { "Column":  { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Region" } }, "queryRef": "Sales.Region", "nativeQueryRef": "Region" } ] },
      "value":      { "projections": [ { "field": { "Measure": { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Revenue" } }, "queryRef": "Sales.Revenue", "nativeQueryRef": "Revenue" } ] },
      "target":     { "projections": [ { "field": { "Measure": { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Target" } }, "queryRef": "Sales.Target", "nativeQueryRef": "Target" } ] },
      "comparison": { "projections": [ { "field": { "Measure": { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Revenue LY" } }, "queryRef": "Sales.Revenue LY", "nativeQueryRef": "Revenue LY" } ] }
    }
  },
  "objects": {
    "gauge":  [ { "properties": { "type": { "expr": { "Literal": { "Value": "'arc240'" } } } } } ],
    "ranges": [ { "properties": { "show": { "expr": { "Literal": { "Value": "true" } } },
                                  "mode": { "expr": { "Literal": { "Value": "'target'" } } },
                                  "t1":   { "expr": { "Literal": { "Value": "90D" } } },
                                  "t2":   { "expr": { "Literal": { "Value": "100D" } } } } } ],
    "needle": [ { "properties": { "show": { "expr": { "Literal": { "Value": "true" } } } } } ],
    "layout": [ { "properties": { "sort": { "expr": { "Literal": { "Value": "'pctDesc'" } } } } } ]
  }
}
```

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`. The style sets the fill color, the font and the track; `minimal` draws a thinner arc, rounded styles round the ends, `cockpit`, `terminal` and `blueprint` show tick marks. Colors set in the Gauge, Color ranges and Needle cards 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

- "Add a measure in "Value"": only the target or the comparison is placed.
- The gauge is almost empty: the scale is too wide; set `scale.max`, drop a measure into Maximum value, or `scale.autoMax` = `target`.
- "140%" instead of 72%: the rate measure returns 72 instead of 0.72.
- The ranges ignore the target: `ranges.mode` is `percent` (of the scale), or there is no target (the visual then falls back to % of the scale).
- The settings Range limits / Number of ranges disappeared: a measure is in the Range limits field, it decides.
- The gauge shows December only: a field is in History (date) ★; the gauge shows the last period by design. For a total, remove the field or use the Play axis ★.
- A ▲ tip at the end of the arc: the value is above the maximum (`gauge.overflow`).
- Watermark visible: a Play axis ★ field, a Comparison ★ measure, the thermometer, ranges in % of the target, the gap arc, 4 or 5 ranges (or 3–4 limit measures), gradient ranges, a dial skin, the Sport needle, target / comparison / extra needles, History with `history.show`, needle memory, 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)

A logarithmic scale, a custom image or SVG as the dial face, several values stacked in one gauge (concentric rings, multi-series radial bars), a different measure per gauge of the grid (every gauge uses the same Value measure split by the category), a drill-down hierarchy in the category, a "liquid fill" or shape-filling gauge (that is Shape Gauge Plume), dragging the needle or the target to change a value (what-if input), exporting the gauge as an image, sounds or blinking alarms, live data feeds (the visual only shows the report's data).

## 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` | One gauge per… (category) | Une jauge par… (catégorie) | column | 1 | One gauge for each value of the field (region, product, sales person…), side by side |
| `value` | Value | Valeur | measure | 1 | The measure shown by the gauge |
| `min` | Minimum value | Valeur minimale | measure | 1 | Start of the scale (otherwise 0 or Format › Scale › Minimum) |
| `max` | Maximum value | Valeur maximale | measure | 1 | End of the scale (otherwise rounded above the value and the target, or Format › Scale › Maximum) |
| `target` | Target value | Valeur cible | measure | 1 | Goal: a marker and its label on the gauge |
| `comparison` | Comparison (previous year…) ★ | Comparaison (année précédente…) ★ | measure | 1 | Premium: value to compare with: change ▲▼ under the value and a small marker on the gauge |
| `thresholds` | Range limits | Limites des plages | measure | 4 | Up to 4 measures: the limits between the color ranges (red / orange / green…) |
| `needles` | Extra needles ★ | Aiguilles supplémentaires ★ | measure | 3 | Up to 3 measures, each one drawn as its own needle (forecast, budget, best month…) |
| `trend` | History (date) ★ | Historique (date) ★ | column | 1 | A date or period: a sparkline of the value under each gauge; the gauge shows the last period |
| `play` | Play axis ★ | Axe de lecture ★ | column | 1 | Premium: a date, a year or an ordered category: the needle and the arc move from one value to the next (play button) |
| `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 = `category` + `trend` + `play` (one row per combination), 30,000 rows per data window (more fetched automatically); measures = `value`, `min`, `max`, `target`, `comparison`, `thresholds`, `needles`, `tooltips`, `format`.
Capabilities: supportsHighlight, supportsKeyboardFocus, supportsMultiVisualSelection, supportsLandingPage, supportsEmptyDataView.
Network access: none (no privileges requested, no external request).

## Format pane options (191)

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.columns` | Columns (0 = automatic) | Colonnes (0 = automatique) | number | integer | `0` | 0 to 12 |  |
| `layout.sort` | Order | Ordre | dropdown | enumeration | `data` | `data` Data order; `valueDesc` Value, descending; `valueAsc` Value, ascending; `pctDesc` % of target, descending; `name` Name (A → Z) |  |
| `layout.sharedScale` | Same scale for every gauge | Même échelle pour toutes les jauges | toggle | bool | `true` | true / false | Off: each gauge computes its own automatic maximum (the Minimum / Maximum fields always apply per gauge). |
| `layout.labelPosition` | Category name | Nom de la catégorie | dropdown | enumeration | `top` | `top` Above; `bottom` Below; `none` Hidden |  |
| `layout.labelSize` | Name size | Taille du nom | number | formatting | `11` | 6 to 30 |  |
| `layout.gap` | Space between gauges (px) | Espace entre les jauges (px) | number | integer | `12` | 0 to 60 |  |
| `layout.maxGauges` | Maximum number of gauges | Nombre maximal de jauges | number | integer | `60` | 1 to 200 |  |

### Gauge / Jauge (`gauge`, Format pane)

**Shape / Forme**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `gauge.type` | Gauge type | Type de jauge | dropdown | enumeration | `semi` | `semi` Semicircle (180°); `arc240` Arc (240°); `arc270` Arc (270°); `ring` Ring (full circle); `custom` Arc: custom angles; `linear` Horizontal linear; `vertical` Vertical linear; `bullet` Bullet chart; `thermometer` Thermometer ★ |  |
| `gauge.startAngle` | Start angle (°, 0 = top) | Angle de départ (°, 0 = en haut) | number | integer | `-120` | -360 to 360 | Visible when `gauge.type` = `custom` |
| `gauge.sweep` | Arc sweep (°) | Ouverture de l'arc (°) | number | integer | `240` | 20 to 360 | Visible when `gauge.type` = `custom` |
| `gauge.thickness` | Thickness (% of radius or height) | Épaisseur (% du rayon ou de la hauteur) | number | integer | `22` | 3 to 80 |  |
| `gauge.rounded` | Rounded ends | Extrémités arrondies | toggle | bool | `false` | true / false |  |
| `gauge.trackColor` | Track color (empty = grid) | Couleur de la piste (vide = grille) | color | fill | (empty) | hex color |  |

**Fill / Remplissage**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `gauge.fillShow` | Fill up to the value | Remplir jusqu'à la valeur | toggle | bool | `true` | true / false |  |
| `gauge.fillColor` | Color (empty = style data color) | Couleur (vide = couleur des données du style) | color | fill | (empty) | hex color | Visible when `gauge.fillShow` = `true` |
| `gauge.colorByRange` | Color of the range reached | Couleur de la plage atteinte | toggle | bool | `true` | true / false | With color ranges: the fill and the value take the color of the range where the value is. |
| `gauge.fromZero` | Fill from zero (negative scale) | Remplir depuis zéro (échelle négative) | toggle | bool | `true` | true / false | When the scale crosses zero, the fill starts at zero: a negative value fills to the left. |
| `gauge.overflow` | Value out of scale | Valeur hors de l'échelle | dropdown | enumeration | `mark` | `mark` Flag it (▲ tip and exact value); `extend` Extend the scale; `none` Stop at the edge |  |

### Scale / Échelle (`scale`, Format pane)

**Minimum and maximum / Minimum et maximum**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `scale.min` | Minimum (without field) | Minimum (sans champ) | text | text | (empty) |  |  |
| `scale.max` | Maximum (without field) | Maximum (sans champ) | text | text | (empty) |  |  |
| `scale.autoMax` | Automatic maximum | Maximum automatique | dropdown | enumeration | `nice` | `nice` Rounded above the value and the target; `double` Twice the value (like Power BI); `target` The target (100% = target) |  |
| `scale.reverse` | Reverse direction | Sens inversé | toggle | bool | `false` | true / false |  |

**Ticks / Graduations**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `scale.minMax` | Minimum and maximum labels | Étiquettes du minimum et du maximum | toggle | bool | `true` | true / false |  |
| `scale.ticks` | Tick marks | Graduations | toggle | bool | `false` | true / false |  |
| `scale.tickCount` | Number of major ticks | Nombre de graduations principales | number | integer | `5` | 2 to 20 | Visible when `scale.ticks` = `true` |
| `scale.minor` | Minor ticks between two major ones | Graduations secondaires entre deux principales | number | integer | `4` | 0 to 9 | Visible when `scale.ticks` = `true` |
| `scale.tickLabels` | Tick labels | Étiquettes des graduations | toggle | bool | `true` | true / false | Visible when `scale.ticks` = `true` |
| `scale.fontSize` | Text size | Taille du texte | number | formatting | `9` | 6 to 24 |  |
| `scale.color` | Color (empty = secondary) | Couleur (vide = secondaire) | color | fill | (empty) | hex color |  |
| `scale.tickUnits` | Display units | Unités d'affichage | dropdown | enumeration | `auto` | `auto` Auto; `none` None; `k` Thousands; `m` Millions; `b` Billions |  |
| `scale.tickDecimals` | Decimals (-1 = auto) | Décimales (-1 = auto) | number | integer | `-1` | -1 to 6 |  |
| `scale.tickPrefix` | Prefix | Préfixe | text | text | (empty) |  |  |
| `scale.tickSuffix` | Suffix (e.g. €) | Suffixe (ex. €) | text | text | (empty) |  |  |

### Color ranges / Plages de couleurs (`ranges`, Format pane)

The card header toggle is `ranges.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `ranges.show` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `ranges.mode` | Range limits | Limites des plages | dropdown | enumeration | `percent` | `percent` In % of the scale; `target` In % of the target ★; `values` Values | Ignored when the Range limits field is filled (one measure per limit). % of the target: each gauge of a grid uses its own target. |
| `ranges.count` | Number of ranges | Nombre de plages | dropdown | enumeration | `3` | `2` 2; `3` 3; `4` 4 ★; `5` 5 ★ |  |
| `ranges.t1` | Limit 1 | Limite 1 | number | numeric | `50` |  |  |
| `ranges.t2` | Limit 2 | Limite 2 | number | numeric | `80` |  | Visible when `ranges.count` = `3` or `4` or `5` |
| `ranges.t3` | Limit 3 | Limite 3 | number | numeric | `90` |  | Visible when `ranges.count` = `4` or `5` |
| `ranges.t4` | Limit 4 | Limite 4 | number | numeric | `95` |  | Visible when `ranges.count` = `5` |
| `ranges.colors` | Colors | Couleurs | dropdown | enumeration | `redGreen` | `redGreen` Red → green (high is good); `greenRed` Green → red (low is good); `style` Style gradient; `custom` Custom |  |
| `ranges.c1` | Range 1 color | Couleur de la plage 1 | color | fill | (empty) | hex color | Visible when `ranges.colors` = `custom` |
| `ranges.c2` | Range 2 color | Couleur de la plage 2 | color | fill | (empty) | hex color | Visible when `ranges.colors` = `custom` |
| `ranges.c3` | Range 3 color | Couleur de la plage 3 | color | fill | (empty) | hex color | Visible when `ranges.colors` = `custom` |
| `ranges.c4` | Range 4 color | Couleur de la plage 4 | color | fill | (empty) | hex color | Visible when `ranges.colors` = `custom` |
| `ranges.c5` | Range 5 color | Couleur de la plage 5 | color | fill | (empty) | hex color | Visible when `ranges.colors` = `custom` |
| `ranges.gradient` | Continuous gradient ★ | Dégradé continu ★ | toggle | bool | `false` | true / false | The colors blend smoothly along the scale instead of solid bands. |
| `ranges.display` | Range display | Affichage des plages | dropdown | enumeration | `track` | `track` In the track, faded; `band` Thin outer band; `full` Solid (speedometer) |  |
| `ranges.opacity` | Faded ranges opacity (%) | Opacité des plages atténuées (%) | number | integer | `28` | 5 to 100 | Visible when `ranges.display` = `track` |
| `ranges.names` | Range names (separated by ;) | Noms des plages (séparés par ;) | text | text | (empty) |  |  |
| `ranges.showName` | Write the name of the range reached | Écrire le nom de la plage atteinte | toggle | bool | `true` | true / false |  |
| `ranges.limitLabels` | Limit values on the scale | Valeurs des limites sur l'échelle | toggle | bool | `false` | true / false |  |

### Needle / Aiguille (`needle`, Format pane)

The card header toggle is `needle.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `needle.show` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `needle.style` | Shape | Forme | dropdown | enumeration | `classic` | `classic` Tapered; `line` Line; `arrow` Arrow; `pointer` Pointer on the arc; `sport` Sport (counterweight) ★ |  |
| `needle.color` | Color (empty = text) | Couleur (vide = texte) | color | fill | (empty) | hex color |  |
| `needle.width` | Width (px) | Largeur (px) | number | integer | `4` | 1 to 16 |  |
| `needle.length` | Length (% of radius) | Longueur (% du rayon) | number | integer | `92` | 40 to 115 |  |
| `needle.hub` | Hub | Moyeu | toggle | bool | `true` | true / false |  |
| `needle.targetNeedle` | Needle for the target ★ | Aiguille pour la cible ★ | toggle | bool | `false` | true / false |  |
| `needle.compareNeedle` | Needle for the comparison ★ | Aiguille pour la comparaison ★ | toggle | bool | `false` | true / false |  |
| `needle.legend` | Needle legend (several needles) | Légende des aiguilles (plusieurs aiguilles) | toggle | bool | `true` | true / false |  |

### Dial / Cadran (`dial`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `dial.skin` | Skin | Habillage | dropdown | enumeration | `none` | `none` None; `classic` Classic (meter) ★; `sport` Sport (dashboard) ★; `retro` Retro (pressure gauge) ★; `cockpit` Cockpit (screen) ★ | Car-dashboard faces for the arc gauges: face, bezel, ticks and needle drawn in the visual. |
| `dial.faceColor` | Face color (empty = skin color) | Couleur du fond (vide = celle de l'habillage) | color | fill | (empty) | hex color | Visible when `dial.skin` = `classic` or `sport` or `retro` or `cockpit` |

### Callout value / Valeur centrale (`callout`, Format pane)

The card header toggle is `callout.show`.

**Value / Valeur**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `callout.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `callout.content` | Content | Contenu | dropdown | enumeration | `value` | `value` Value; `pctScale` % of the scale; `pctTarget` % of the target; `valuePct` Value and % of the target |  |
| `callout.autoSize` | Automatic size | Taille automatique | toggle | bool | `true` | true / false |  |
| `callout.fontSize` | Size (maximum when automatic) | Taille (maximum en automatique) | number | formatting | `32` | 8 to 120 |  |
| `callout.color` | Color (empty = range reached or text) | Couleur (vide = plage atteinte ou texte) | color | fill | (empty) | hex color |  |
| `callout.bold` | Bold | Gras | toggle | bool | `true` | true / false |  |

**Numbers / Nombres**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `callout.units` | Display units | Unités d'affichage | dropdown | enumeration | `auto` | `auto` Auto; `none` None; `k` Thousands; `m` Millions; `b` Billions |  |
| `callout.decimals` | Decimals (-1 = auto) | Décimales (-1 = auto) | number | integer | `-1` | -1 to 6 |  |
| `callout.prefix` | Prefix | Préfixe | text | text | (empty) |  |  |
| `callout.suffix` | Suffix (e.g. €) | Suffixe (ex. €) | text | text | (empty) |  |  |

**Label / Libellé**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `callout.showLabel` | Label under the value | Libellé sous la valeur | toggle | bool | `false` | true / false |  |
| `callout.label` | Label text | Texte du libellé | text | text | (empty) |  | Visible when `callout.showLabel` = `true` |
| `callout.labelSize` | Label size | Taille du libellé | number | formatting | `11` | 6 to 30 |  |

### Target / Objectif (`target`, Format pane)

The card header toggle is `target.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `target.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `target.value` | Fixed value (without field) | Valeur fixe (sans champ) | text | text | (empty) |  |  |
| `target.marker` | Marker | Repère | dropdown | enumeration | `line` | `line` Line; `triangle` Triangle; `dot` Dot |  |
| `target.color` | Color (empty = text) | Couleur (vide = texte) | color | fill | (empty) | hex color |  |
| `target.label` | Label | Étiquette | toggle | bool | `true` | true / false |  |
| `target.labelContent` | Label content | Contenu de l'étiquette | dropdown | enumeration | `nameValue` | `nameValue` Name and value; `value` Value; `name` Name | Visible when `target.label` = `true` |
| `target.labelText` | Target name | Nom de la cible | text | text | (empty) |  | Visible when `target.label` = `true`. Empty: the name of the “Target value” field (“Target” for a fixed value). The gap under the value keeps neutral words (“below target”). |
| `target.labelSize` | Label size | Taille de l'étiquette | number | formatting | `9` | 6 to 30 | Visible when `target.label` = `true` |
| `target.labelColor` | Label color (empty = target color) | Couleur de l'étiquette (vide = couleur de la cible) | color | fill | (empty) | hex color | Visible when `target.label` = `true` |
| `target.labelUnits` | Display units | Unités d'affichage | dropdown | enumeration | `auto` | `auto` Auto; `none` None; `k` Thousands; `m` Millions; `b` Billions | Visible when `target.label` = `true` |
| `target.labelDecimals` | Decimals (-1 = auto) | Décimales (-1 = auto) | number | integer | `-1` | -1 to 6 | Visible when `target.label` = `true` |
| `target.labelPrefix` | Prefix | Préfixe | text | text | (empty) |  | Visible when `target.label` = `true` |
| `target.labelSuffix` | Suffix (e.g. €) | Suffixe (ex. €) | text | text | (empty) |  | Visible when `target.label` = `true` |
| `target.gap` | Gap to target under the value (▲▼) | Écart à la cible sous la valeur (▲▼) | toggle | bool | `true` | true / false |  |
| `target.gapArc` | Gap arc between value and target ★ | Arc d'écart entre la valeur et la cible ★ | toggle | bool | `false` | true / false | Paints the part of the scale between the value and the target: favorable color when the target is beaten, unfavorable otherwise. |

### Comparison ★ / Comparaison ★ (`comparison`, Format pane)

This card controls premium features (★): they work without a license key but show the watermark while in use.

The card header toggle is `comparison.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `comparison.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `comparison.label` | Label | Libellé | text | text | (empty) |  |  |
| `comparison.content` | Change shown | Écart affiché | dropdown | enumeration | `pct` | `pct` In %; `abs` As a value; `both` Value and % |  |
| `comparison.marker` | Marker on the gauge | Repère sur la jauge | toggle | bool | `true` | true / false |  |
| `comparison.lowerIsBetter` | A decrease is favorable | Une baisse est favorable | toggle | bool | `false` | true / false |  |
| `comparison.posColor` | Favorable | Favorable | color | fill | `#2E7D4F` | hex color |  |
| `comparison.negColor` | Unfavorable | Défavorable | color | fill | `#C0392B` | hex color |  |

### History (sparkline) / Historique (mini-courbe) (`history`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `history.show` | Sparkline under the gauge ★ | Mini-courbe sous la jauge ★ | toggle | bool | `true` | true / false | Needs the History (date) field. The gauge shows the last period; the sparkline shows every period. |
| `history.kind` | Shape | Forme | dropdown | enumeration | `area` | `area` Area; `line` Line; `columns` Columns |  |
| `history.height` | Height (% of the gauge) | Hauteur (% de la jauge) | number | integer | `22` | 10 to 50 |  |
| `history.color` | Color (empty = fill) | Couleur (vide = remplissage) | color | fill | (empty) | hex color |  |
| `history.targetLine` | Target line | Ligne de la cible | toggle | bool | `true` | true / false |  |
| `history.lastDot` | Dot on the last period | Point sur la dernière période | toggle | bool | `true` | 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.

| 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 | `false` | true / false |  |
| `play.labelSize` | Large value size | Taille de la valeur en grand | number | formatting | `32` | 12 to 160 | Visible when `play.showLabel` = `true` |
| `play.labelPosition` | Large value position | Position de la valeur en grand | dropdown | enumeration | `topLeft` | `bottomRight` Bottom right; `topRight` Top right; `topLeft` Top left; `bottomLeft` Bottom left; `center` Center | Visible when `play.showLabel` = `true` |
| `play.trace` | Needle memory (min. and max. reached) ★ | Mémoire de l'aiguille (min. et max. atteints) ★ | toggle | bool | `false` | true / false | While playing, the part of the scale already reached is drawn and the highest and lowest values are marked. |

### Interactions (`interaction`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `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). |
| `tooltip.pct` | % of the target | % de la cible | toggle | bool | `true` | true / false | Visible when `tooltip.show` = `true` |
| `tooltip.range` | Range reached | Plage atteinte | toggle | bool | `true` | true / false | Visible when `tooltip.show` = `true` |

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