Range Plume
Le segment numérique : une plage choisie sur l'histogramme de la colonne (prix, âge, délai), avec poignées, saisie exacte et impact.
Démo interactive
Le vrai visuel Power BI, exécuté dans votre navigateur avec les données fictives du rapport d'exemple. Les cartes et les barres réagissent au filtre comme dans un rapport.
Range Plume filtre un nombre (prix, âge, délai, surface…) en montrant sa distribution. On choisit la plage en faisant glisser les poignées, en dessinant sur l'histogramme ou en tapant « 250k ». Des préréglages (quartiles, sans les valeurs extrêmes, 10 % les plus élevés) et un résumé de l'impact (lignes et mesure retenues) aident à choisir une plage qui a du sens. Pour filtrer des dates, voyez Period Plume.
Cas d'usage
- Prix ou surface de biens immobiliers
- Montant des commandes, panier moyen
- Âge des clients, ancienneté des contrats
- Délais de livraison ou de résolution
GratuitInclus gratuitement
- Histogramme en barres, courbe pleine ou points ; échelle linéaire ou logarithmique automatique
- Poignées, brosse sur l'histogramme, plage déplaçable d'un bloc, accrochage
- Saisie « 1,2k », « 3,5 M », « 1 200 € » ; médiane et moyenne
- Préréglages : quartiles, sans les x % extrêmes, au-dessus de la médiane, 10 % les plus élevés
- Impact de la plage : lignes, part, mesure retenue ; bouton « Appliquer » au choix
- Présélection sans DAX à l'ouverture : sans les extrêmes, moitié centrale, au-dessus de la médiane, 10 % les plus élevés ou les plus bas
- Styles Entre, Inférieur ou égal à, Supérieur ou égal à, comme le segment natif
- Formats dynamiques : bouton fx sur les couleurs et les textes, tout réglage piloté en DAX
- Styles Minimal et Noir et blanc, couleurs personnalisées (fond, texte, texte secondaire, traits, fond des barres, accent)
PremiumFonctions premium
- Plages personnalisées nommées : « Studio : -30 ; Familial : 80-140 »
- Présélection par une mesure DAX : une plage (« 100;500 », bornes ouvertes acceptées)
- Styles communs au catalogue (Néon, Journal, Graphite…), palettes et thème JSON
Utilisables sans clé pour les essayer, avec un filigrane.
Tutoriels
Commencez par la prise en main, puis piochez dans les cas pratiques. La page « Champs et réglages » décrit chaque option du volet Format.
- Prise en mainDébutant9 min de lectureFiltrer une plage numérique sur un histogrammePrise en main de Range Plume : choisir une plage de prix, de surfaces ou de délais en voyant leur distribution, des données au segment réglé.
- Cas pratiquesIntermédiaire4 min de lectureRange Plume : 9 cas pratiques (tranches nommées, valeurs extrêmes…)Créer des tranches métier, écarter les valeurs extrêmes, lire une distribution étirée, fixer l'échelle, éviter les recalculs : pas à pas.
- Champs et réglagesIntermédiaire13 min de lectureRange Plume : tous les champs et réglages expliquésChaque zone de champ et chaque réglage du volet Format de Range Plume : à quoi il sert, ses valeurs possibles et sa valeur par défaut.
- Bases communesBien démarrer avec les visuels PlumeInstallation, licence, styles et réglages communs à tous les visuels.
Champs à glisser dans le visuel
| Champ | Contenu | |
|---|---|---|
| Champ numérique | La colonne filtrée : montant, âge, délai… | Obligatoire |
| Nombre de lignes (poids) | Mesure COUNTROWS : hauteur exacte des barres | Facultatif |
| Mesure (impact) | Mesure additive : part retenue par la plage | Facultatif |
| Présélection | Mesure : la plage sélectionnée à l'ouverture du rapport, ex. « 100;500 » (fonction ★) | FacultatifPremium |
| Format dynamique | Mesures renommées carte.réglage (ex. title.text) : le volet Format piloté en DAX | Facultatif |
Il vous manque une fonction ? Nous adaptons nos visuels ou en créons sur mesure. Demander un visuel sur mesure
Un bug dans Range Plume, ou une idée pour l'améliorer ? Signaler un bug · Proposer une idée
Référence technique pour assistants IA
Section destinée aux assistants IA (ChatGPT, Claude, Copilot…) : tous les champs, toutes les options du volet Format avec leurs noms internes, le format des données et des exemples DAX. Générée depuis le code du visuel, version 1.4.0.0. Vous pouvez la copier dans votre assistant pour qu'il vous guide.
Version Markdown brute (/ai/visuals/range-pulse.md)# Range Plume: technical reference for AI assistants
> Power BI custom visual by Plume Studio (Plume Visuals). Visual version **1.4.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 Range 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/range-pulse (French: https://plumevisuals.com/fr/visuels/range-pulse)
- Summary: The numeric range slicer: pick a range on the column's histogram (price, age, lead time), with handles, exact input and impact.
- Power BI visual GUID (`visualType`): `plumeRangePulse4B8C2E7F19A04D6C8E3B5A7F2C91D0E3`
- 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
Range Plume is a Power BI custom visual that works as a numeric range slicer drawn over the distribution of the column: a histogram of the values (price, age, lead time, surface…), two handles, a brush to draw the range directly on the histogram, exact min / max inputs ("1.2k", "3.5M", "1 200 €"), presets (quartiles, "without outliers", top / bottom 10 %, above median, "Custom ranges ★") and an impact summary (rows kept, share of rows, measure kept and its share, median of the range). The chosen range filters the rest of the report.
**New in version 1.4.0.0 (30/10/2026):** Shared slicer cards (Preselection: measure "100;500" ★ or free shortcuts); **Between / Less than or equal to / Greater than or equal to** styles like the native numeric slicer; histogram hover moved to Tooltips (`tooltip.show`).
## Free vs premium (★)
- Every feature works without a key and nothing is ever blocked. Free features never show a watermark.
- Shared Style card (the same in every Plume visual): the styles `none`, `minimal` and `blackWhite`, the two Plume gradient palettes (`crest`, `crestDiverging`), "Follow report theme" and all custom colors (`style.customColors` and the colors under it) are **free**; every other `style.preset`, the other gradient palettes (`style.palette`) and `style.themeJson` ("Theme JSON ★") are **premium** (watermark without a key). See "Styles and theme JSON" below.
- The only premium feature of Range Plume is **custom named ranges** (`presets.custom`, label "Custom ranges ★" / « Plages personnalisées ★ »). When that text is not empty and no valid key is set, the footer shows **"Plume Visuals · Premium preview"** (French: « Plume Visuals · Aperçu premium ») with an "Unlock →" link to the pricing page.
- The watermark disappears once a key is pasted in **Format › Plume Studio License › License key** (`license.key`; French: « Licence Plume Studio › Clé de licence »), the **first card** of the Format pane. In the Format pane, premium options have " ★" appended to their label and carry the description "Premium feature: usable for free with a « Premium preview » watermark…".
- Accepted keys: only keys starting with `PLUM1.` shown in the buyer's account on plumevisuals.com, checked offline (Ed25519 signature), covering `range-pulse` 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". `license.showOwner` displays "Licensed to <holder>".
- Licenses last one year (one-time payment, no automatic renewal, key accepted for 30 more days, reminders 30 and 7 days before the end), per segment: 19 € personal, 49 € SME, 149 € enterprise per year, or the full catalog pack. Renewing gives a new key to paste instead of the old one.
## Expected data shape
The visual reads **one row per distinct value of the numeric column**, with the measures evaluated for that value.
| Numeric field (`value`) | Row count (weight) (`weight`) | Measure (impact) (`measure`) |
|---|---|---|
| 185 000 | 12 | 2 220 000 |
| 192 500 | 3 | 577 500 |
| … | … | … |
- **Numeric field** (`value`, label "Numeric field" / « Champ numérique », grouping, exactly one column, required): the column to filter. Only number / whole number columns are accepted (text and date columns are refused by the well).
- **Row count (weight)** (`weight`, « Nombre de lignes (poids) », one measure, optional but strongly recommended): how many rows have this value, normally `COUNTROWS`. It gives exact histogram heights and weighted quantiles (median, quartiles, deciles). Without it every distinct value counts 1 and an ⓘ is shown in the summary. Values whose weight is blank or 0 are ignored.
- **Measure (impact)** (`measure`, « Mesure (impact) », one measure, optional): an **additive** measure (revenue, volume…) whose kept amount and share are shown in the summary.
- There is no Tooltips well: the tooltip per histogram bin (bounds, rows and share, measure) is built in (`tooltip.show`).
- Volume: 30,000 distinct values per data window, more fetched automatically up to a **fixed limit of 100,000 distinct values**; beyond, a warning icon is shown ("Only the first n values are loaded"; details: "The visual loads at most 100,000 values. Filter the page or use a less detailed column."). There is no "Data" card any more since 1.0.1.0. Amounts with cents create many distinct values: round the column.
## DAX recipes
```dax
// Weight and impact
Listings = COUNTROWS ( Listings )
Total value = SUM ( Listings[Price] )
// Calculated column with fewer distinct values (use it in Numeric field)
Price rounded = ROUND ( Listings[Price], -3 ) // nearest thousand
Amount rounded = ROUND ( Orders[Amount], 0 )
// Measures that react to the range (cards next to the slicer)
Median price = MEDIAN ( Listings[Price] )
Share of listings = DIVIDE ( [Listings], CALCULATE ( [Listings], REMOVEFILTERS ( Listings[Price] ) ) )
```
## Filter sent to the report
An `AdvancedFilter` with logical operator `And` on the numeric column: `GreaterThanOrEqual` min and `LessThanOrEqual` max, for example `{ "target": { "table": "Listings", "column": "Price" }, "logicalOperator": "And", "conditions": [ { "operator": "GreaterThanOrEqual", "value": 150000 }, { "operator": "LessThanOrEqual", "value": 300000 } ] }`.
- With `behavior.clampOutside` (on by default), a handle left at the end of the scale drops that condition: the bound is open and values beyond it stay included. Both handles at the ends = filter removed.
- Presets (quartiles, deciles, "without outliers"…) are computed from the current data and sent as a fixed range: they are not re-evaluated when the data changes.
- `behavior.apply` = `release` filters when the mouse is released; `button` shows Apply / Cancel.
## Interactions with the report
- Drag a handle, drag the whole range (`slider.moveWindow`), draw a range on the histogram (`slider.brush`), type in the min / max boxes, or click a preset. Snapping: `slider.snap` = `step` (`slider.step`, 0 = auto), `bins`, `data` (existing values) or `none`.
- Keyboard on the handles (ARIA `slider`): ← → ↑ ↓ (Shift = ×10), Page Up / Page Down, Home / End. Enter validates a typed value, Esc in a min / max box restores the current value.
- "Clear" in the header (`header.showClear`) removes the filter. Context menu, high contrast, landing page, read-only on dashboards.
- **Bookmarks** and **Sync slicers** work: the visual declares `supportsSynchronizingFilterState` and restores the range from the filter.
- Other visuals cross-filter Range Plume (it does not support highlighting).
## Format pane: how to read the tables below
- Each option has an ID `card.option` (for example `histogram.style`). The card is the capabilities.json **object name**, the option is the **property name**.
- Card order: `license` (always first), `style` (Style card shared by every Plume visual: `preset`, `themeJson`, `followTheme`, then `customColors`, the colors, `palette` (Gradient palette), font, size, density, radius, animations), `header`, then `histogram`, `slider`, `inputs`, `presets`, `values` (number format), `summary` (range impact), `behavior`, then `container` and `texts`. Format pane in version 1.4.0.0 (30/10/2026), top to bottom: `license`, `style`, `header`, `histogram`, `slider`, `inputs`, `presets`, `values`, `summary`, `behavior`, `preselect`, `tooltip`, `container`, `texts`. Settings moved or renamed in this version keep working in older reports (the old names are still read).
- Labels follow the language of Power BI Desktop; `texts.language` can force French or English inside the visual, `texts.numberLocale` the number format (e.g. `en-GB`).
- "Visible when" means the option only appears when another option has one of the listed values.
- `general.filter` is where Power BI stores the filter applied by the visual: never write it by hand.
## Editing a PBIP report (visual.json)
`visualType` is the visual GUID, `queryState` keys are the data role names, `objects` keys are the option IDs. Literal syntax: booleans `true` / `false`, numbers suffixed with `D`, strings and enumeration values in single quotes, colors wrapped in `solid.color`.
```json
{
"visualType": "plumeRangePulse4B8C2E7F19A04D6C8E3B5A7F2C91D0E3",
"query": {
"queryState": {
"value": { "projections": [ { "field": { "Column": { "Expression": { "SourceRef": { "Entity": "Listings" } }, "Property": "Price" } }, "queryRef": "Listings.Price", "nativeQueryRef": "Price" } ] },
"weight": { "projections": [ { "field": { "Measure": { "Expression": { "SourceRef": { "Entity": "Listings" } }, "Property": "Listings" } }, "queryRef": "Listings.Listings", "nativeQueryRef": "Listings" } ] },
"measure": { "projections": [ { "field": { "Measure": { "Expression": { "SourceRef": { "Entity": "Listings" } }, "Property": "Total value" } }, "queryRef": "Listings.Total value", "nativeQueryRef": "Total value" } ] }
}
},
"objects": {
"histogram": [ { "properties": { "style": { "expr": { "Literal": { "Value": "'area'" } } },
"mean": { "expr": { "Literal": { "Value": "true" } } },
"colorIn": { "solid": { "color": { "expr": { "Literal": { "Value": "'#1d3557'" } } } } } } } ],
"presets": [ { "properties": { "custom": { "expr": { "Literal": { "Value": "'Small: -50; Medium: 50-200; Large: 200-'" } } },
"trimPct": { "expr": { "Literal": { "Value": "10D" } } } } } ],
"summary": [ { "properties": { "rowsLabel": { "expr": { "Literal": { "Value": "'listings'" } } } } } ],
"behavior": [ { "properties": { "apply": { "expr": { "Literal": { "Value": "'button'" } } } } } ],
"license": [ { "properties": { "key": { "expr": { "Literal": { "Value": "'PLUM1.…'" } } } } } ]
}
}
```
The custom visual package must also be embedded in the report (Power BI does this when the visual is imported from AppSource or 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`.
- `style.themeJson` (Format › Style › Theme JSON ★) takes a JSON theme as plain text. Format v2: an object with an optional `extends` (a style ID above) and optional groups `colors`, `palettes`, `typography`, `shape`, `table`, `marks`, `effects`; the v1 flat format (`style`, `palette`, `accent`, `background`…) is still read. Every field is optional. Colors are `#RRGGBB` (`#RGB` and `#RRGGBBAA` accepted, opacity ignored). Unknown fields and values outside the allowed lists are ignored, out-of-range numbers are clamped. Invalid JSON shows "Invalid theme JSON: ignored" in edit mode and the visual keeps its look.
- Full field list with allowed values, examples and troubleshooting: tutorial https://plumevisuals.com/ai/tutorials/en/themes-json.md (French: https://plumevisuals.com/ai/tutorials/fr/themes-json.md). The same JSON can be pasted in every Plume visual of a page.
- Priority (the last one wins): visual defaults → `style.preset` → `style.themeJson` → `style.palette` (if not "Style or theme palette") → `style.followTheme` → custom colors → options set by hand in the other cards → DAX formats (fx button, "Dynamic format" field) → Windows high contrast.
- What this slicer uses from a theme JSON: `colors` (`background`, `foreground`, `muted`, `grid`, `accent`, `borderColor`, `glowColor`), `typography` (`fontFamily`, `titleFamily`, `headerCase`, `letterSpacing`), `shape` (`radius`, `border`, `borderWidth`, `borderStyle`, `shadow`) and `effects` (`glow`, `texture`). `fontFamily`, `radius`, `border`, `borderWidth` and `shadow` only apply while the matching Format pane options are left at their default. The `palettes`, `table` and `marks` groups and the other fields (`surface`, `background2`, `stroke`, `accent2`, `positive`, `negative`, `numberFamily`…) are accepted but have no visible effect on it.
## Common pitfalls
- The field is refused: the column is text or date. Change its data type, or create a numeric calculated column.
- Histogram heights all equal / ⓘ in the summary: no measure in Row count (weight).
- Slow, or warning "The visual loads at most 100,000 values. Filter the page or use a less detailed column.": too many distinct values (e.g. amounts with cents); round the column.
- Squeezed histogram: a long tail of large values. `histogram.xScale` = `auto` switches to a log scale when the distribution is very skewed (only for positive values); force `log`, or use `histogram.yScale` = `sqrt`.
- Custom ranges syntax: `Label: min-max`, one per line or separated by `;`, min or max left empty for an open range (`Large: 200-`). The `-` is the separator, so negative bounds cannot be written in this field.
- The scale does not start at 0: it follows the data; set `behavior.boundsMin` / `behavior.boundsMax` to impose bounds.
- Watermark visible: `presets.custom` is filled, or a ★ style, palette or theme JSON is used, without a valid key.
- The visual makes no network request: data and license key stay in the report.
## Features that do NOT exist (do not suggest them)
Several ranges at once or a list of discrete values (use Bar Slicer Plume), date or time ranges (use Period Plume), more than one numeric field, a Tooltips well, a filter on a measure value (only columns are filtered), dynamic presets that move with each refresh, a histogram of a measure (the histogram counts rows per column value), two-dimensional brush, logarithmic scale for zero or negative values.
## 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 |
|---|---|---|---|---|---|
| `value` | Numeric field | Champ numérique | column | 1 | |
| `weight` | Row count (weight) | Nombre de lignes (poids) | measure | 1 | |
| `measure` | Measure (impact) | Mesure (impact) | measure | 1 | |
| `preselect` | Preselection | Présélection | measure | 1 | Optional measure returning the value(s) selected when the report opens, e.g. "Paris;Lyon" or "2026-01-01;2026-03-31" |
| `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 = `value` (one row per combination), 30,000 rows per data window (more fetched automatically); measures = `weight`, `measure`, `preselect`, `format`.
Capabilities: supportsKeyboardFocus, supportsLandingPage, supportsEmptyDataView, supportsSynchronizingFilterState.
Network access: none (no privileges requested, no external request).
## Format pane options (118)
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. |
**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.colorTrack` | Bar track | Fond des barres | 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` | | |
| `style.fontSize` | Text size | Taille du texte | number | formatting | `12` | 8 to 28 | |
| `style.density` | Density | Densité | dropdown | enumeration | `normal` | `compact` Compact; `normal` Normal; `comfortable` Comfortable | |
**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. |
### Header / En-tête (`header`, Format pane)
The card header toggle is `header.show`.
**Title / Titre**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `header.show` | Show | Afficher | toggle | bool | `true` | true / false | |
| `header.title` | Text | Texte | text | text | (empty) | | Leave empty to use the field name. |
| `header.fontSize` | Size | Taille | number | formatting | `14` | 7 to 36 | |
| `header.bold` | Bold | Gras | toggle | bool | `true` | true / false | |
| `header.italic` | Italic | Italique | toggle | bool | `false` | true / false | |
| `header.underline` | Underline | Souligné | toggle | bool | `false` | true / false | |
| `header.color` | Color (empty = text) | Couleur (vide = texte) | color | fill | (empty) | hex color | |
| `header.bgColor` | Background color | Couleur d'arrière-plan | color | fill | (empty) | hex color | |
| `header.align` | Horizontal alignment | Alignement horizontal | dropdown | enumeration | `left` | `left` Left; `center` Center; `right` Right | |
| `header.wrap` | Text wrap | Retour automatique à la ligne | toggle | bool | `true` | true / false | A long title goes on two lines instead of being cut. |
**Divider / Séparateur**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `header.divider` | Show divider | Afficher le séparateur | toggle | bool | `false` | true / false | |
| `header.dividerColor` | Color (empty = lines) | Couleur (vide = traits) | color | fill | (empty) | hex color | Visible when `header.divider` = `true` |
| `header.dividerStyle` | Line style | Style de trait | dropdown | enumeration | `solid` | `solid` Solid; `dashed` Dashed; `dotted` Dotted | Visible when `header.divider` = `true` |
| `header.dividerWidth` | Width | Épaisseur | number | integer | `1` | 1 to 6 | Visible when `header.divider` = `true` |
**Count and Clear button / Décompte et bouton Effacer**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `header.showCount` | Show value / selection count | Afficher le nombre de valeurs / sélection | toggle | bool | `true` | true / false | |
| `header.showClear` | "Clear" button | Bouton « Effacer » | toggle | bool | `true` | true / false | |
| `header.clearLabel` | Clear button label | Libellé du bouton Effacer | text | text | (empty) | | Visible when `header.showClear` = `true` |
### Histogram / Histogramme (`histogram`, Format pane)
The card header toggle is `histogram.show`.
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `histogram.show` | Show | Afficher | toggle | bool | `true` | true / false | |
| `histogram.bins` | Number of bins (0 = auto) | Nombre de classes (0 = auto) | number | integer | `0` | 0 to 200 | |
| `histogram.xScale` | Horizontal scale | Échelle horizontale | dropdown | enumeration | `auto` | `auto` Auto (log when very skewed); `linear` Linear; `log` Logarithmic | |
| `histogram.yScale` | Bar height | Hauteur des barres | dropdown | enumeration | `linear` | `linear` Linear; `sqrt` Square root (softens peaks) | |
| `histogram.style` | Style | Style | dropdown | enumeration | `bars` | `bars` Bars; `area` Filled curve; `dots` Dots (units) | |
| `histogram.gap` | Gap between bars (px) | Espace entre barres (px) | number | integer | `2` | 0 to 8 | Visible when `histogram.style` = `bars` |
| `histogram.colorIn` | In-range color (empty = accent) | Couleur dans la plage (vide = accent) | color | fill | (empty) | hex color | |
| `histogram.colorOut` | Out-of-range color (empty = auto) | Couleur hors plage (vide = auto) | color | fill | (empty) | hex color | |
| `histogram.median` | Median marker | Repère de la médiane | toggle | bool | `true` | true / false | |
| `histogram.mean` | Mean marker | Repère de la moyenne | toggle | bool | `false` | true / false | |
| `histogram.axis` | Axis | Axe gradué | toggle | bool | `true` | true / false | |
| `histogram.ticks` | Tick count | Nombre de graduations | number | integer | `5` | 2 to 12 | Visible when `histogram.axis` = `true` |
### Slider / Curseur (`slider`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `slider.handle` | Handle shape | Forme des poignées | dropdown | enumeration | `circle` | `circle` Circle; `bar` Vertical bar; `pill` Pill | |
| `slider.handleSize` | Handle size | Taille des poignées | number | integer | `16` | 10 to 30 | |
| `slider.thickness` | Track thickness | Épaisseur du rail | number | integer | `4` | 2 to 12 | |
| `slider.labels` | Handle values | Valeurs des poignées | dropdown | enumeration | `hover` | `always` Always; `hover` On hover and drag; `never` Never | |
| `slider.step` | Step (0 = auto) | Pas (0 = auto) | number | numeric | `0` | 0 to … | |
| `slider.snap` | Snap to | Accrocher aux | dropdown | enumeration | `step` | `step` Step; `bins` Bin edges; `data` Existing values; `none` Nothing | |
| `slider.brush` | Draw range on the histogram | Dessiner la plage sur l'histogramme | toggle | bool | `true` | true / false | |
| `slider.moveWindow` | Drag the whole range | Déplacer la plage d'un bloc | toggle | bool | `true` | true / false | |
### Min / max inputs / Saisie min / max (`inputs`, Format pane)
The card header toggle is `inputs.show`.
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `inputs.show` | Show | Afficher | toggle | bool | `true` | true / false | |
| `inputs.position` | Position | Position | dropdown | enumeration | `below` | `below` Below the slider; `above` Above the histogram | |
| `inputs.labels` | "Minimum / Maximum" labels | Étiquettes « Minimum / Maximum » | toggle | bool | `true` | true / false | |
| `inputs.minLabel` | Minimum label | Libellé du minimum | text | text | (empty) | | |
| `inputs.maxLabel` | Maximum label | Libellé du maximum | text | text | (empty) | | |
### Presets / Préréglages (`presets`, Format pane)
The card header toggle is `presets.show`.
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `presets.show` | Show | Afficher | toggle | bool | `true` | true / false | |
| `presets.custom` | Custom ranges ★ | Plages personnalisées ★ | textarea | text | (empty) | | One range per line or separated by ; — "Label: min-max". Leave min or max empty for an open range. |
| `presets.quartiles` | Quartiles (Q1 to Q4) | Quartiles (Q1 à Q4) | toggle | bool | `false` | true / false | |
| `presets.trim` | "Without outliers" | « Sans les valeurs extrêmes » | toggle | bool | `true` | true / false | |
| `presets.trimPct` | Share removed on each side (%) | Part retirée de chaque côté (%) | number | integer | `5` | 1 to 25 | Visible when `presets.trim` = `true` |
| `presets.aboveMedian` | "Above median" | « Au-dessus de la médiane » | toggle | bool | `false` | true / false | |
| `presets.topDecile` | "Top 10%" | « 10 % les plus élevés » | toggle | bool | `true` | true / false | |
| `presets.bottomDecile` | "Bottom 10%" | « 10 % les plus bas » | toggle | bool | `false` | true / false | |
| `presets.position` | Position | Position | dropdown | enumeration | `bottom` | `top` Top; `bottom` Bottom | |
### Number format / Format des nombres (`values`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `values.units` | Display units | Unités | dropdown | enumeration | `auto` | `auto` Auto; `none` None; `k` Thousands; `m` Millions; `b` Billions | |
| `values.decimals` | Decimals (-1 = auto) | Décimales (-1 = auto) | number | integer | `-1` | -1 to 6 | |
| `values.prefix` | Prefix | Préfixe | text | text | (empty) | | |
| `values.suffix` | Suffix (e.g. €) | Suffixe (ex. €) | text | text | (empty) | | |
### Range impact / Impact de la plage (`summary`, Format pane)
The card header toggle is `summary.show`.
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `summary.show` | Show | Afficher | toggle | bool | `true` | true / false | |
| `summary.count` | Rows kept | Nombre de lignes retenues | toggle | bool | `true` | true / false | |
| `summary.share` | Share of rows | Part des lignes | toggle | bool | `true` | true / false | |
| `summary.measure` | Measure kept and its share | Mesure retenue et sa part | toggle | bool | `true` | true / false | |
| `summary.median` | Median of the range | Médiane de la plage | toggle | bool | `true` | true / false | |
| `summary.rowsLabel` | Row name (e.g. orders) | Nom des lignes (ex. commandes) | text | text | (empty) | | |
### Behavior / Comportement (`behavior`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `behavior.operator` | Style | Style | dropdown | enumeration | `between` | `between` Between; `lessEq` Less than or equal to; `greaterEq` Greater than or equal to | Like the native numeric slicer styles: two handles (Between) or one (≤ or ≥). |
| `behavior.apply` | Apply the filter | Appliquer le filtre | dropdown | enumeration | `release` | `release` On mouse release; `button` With an "Apply" button | |
| `behavior.boundsMin` | Fixed lower bound | Borne minimale imposée | text | text | (empty) | | |
| `behavior.boundsMax` | Fixed upper bound | Borne maximale imposée | text | text | (empty) | | |
| `behavior.clampOutside` | Open-ended at the extremes | Bornes ouvertes aux extrémités | toggle | bool | `true` | true / false | When a handle is at the end of the scale, values beyond it are kept. |
### Preselection / Présélection (`preselect`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `preselect.shortcut` | Shortcut (no DAX) | Raccourci (sans DAX) | dropdown | enumeration | `none` | `none` None (measure only); `trim` Without outliers; `iqr` Middle half (Q1 to Q3); `aboveMedian` Above median; `top10` Top 10%; `bottom10` Bottom 10% | Drop in "Preselection" a measure that returns a range ("100;500"), or pick a shortcut below (free). Measure: premium feature ★. |
| `preselect.when` | Apply | Appliquer | dropdown | enumeration | `session` | `session` Once per session; `always` Reapply on every display | |
| `preselect.force` | Force | Forcer | toggle | bool | `false` | true / false | Replaces an existing selection: saved in the report, recalled by a bookmark or by persistent filters. Otherwise it is kept. |
| `preselect.separator` | Value separator | Séparateur des valeurs | text | text | `;` | | |
| `preselect.warn` | Report values not found (edit mode) | Signaler les valeurs introuvables (mode édition) | toggle | bool | `true` | true / false | |
### 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 for each histogram bin (row count, measure). |
### 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` |
| `container.transparent` | Transparent background | Fond transparent | toggle | bool | `false` | true / false | The visual lets what is behind it show through (useful for a dropdown placed over another visual). |
**Border / Bordure**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.border` | Border | Bordure | toggle | bool | `true` | 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 | `10` | 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)
- `general`: `general.filter` (filter), used by Power BI to store the filter applied by the visual.