Skip to content
Plume Visuals
← Back

Filter Bar Plume

Up to 8 fields in one slicer: menus or panel, faceted counts, chips, “Apply” button.

Certified by MicrosoftMICROSOFT CERTIFIED • POWER BI •
Tutorials ↓
Get it on Microsoft MarketplaceThe visual's official Microsoft listing · free to install

Interactive demo

The real Power BI visual, running in your browser with the fictitious data of the sample report. Cards and bars react to the filter as in a report.

Filter Bar Plume brings several slicers together in one visual: a bar of drop-down menus or a vertical panel. Each value shows how many rows remain given the choices made in the other fields, each active filter becomes a removable chip, and the total after filters is shown. On a small screen, the bar collapses into a “Filters” button.

Use cases

  • A filter bar at the top of a dashboard
  • A side filter panel, like on an e-commerce site
  • Mobile reports: one “Filters” button instead of five slicers
  • Filter several fields, then apply once

FreeIncluded for free

  • 1 to 3 fields, horizontal bar or vertical panel
  • Faceted counts, search, “Select all”, single-select fields
  • Active filter chips, “Clear all”, total after filters
  • Collapses into a “Filters (n)” button on narrow visuals
  • Full keyboard support, bookmarks and synced slicers
  • Dynamic formats: fx button on colors and texts, any option driven by DAX
  • Minimal and Black & White styles, custom colors (background, text, secondary text, lines, bar track, accent)

PremiumPremium features

  • 4 to 8 fields in the same visual
  • “Apply” button: one query for several choices
  • Per-field preselection: one DAX measure per field, applied when the report opens
  • Catalog-wide styles (Neon, Newspaper, Graphite…), palettes and 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 startedIntermediate10 min readA multi-field filter bar in a single visualGet started with Filter Bar Plume: put several fields in one bar, with faceted counts and active filter chips. Build your first filter bar in about 12 minutes.
  2. How-to guidesIntermediate5 min readFilter Bar Plume: 9 how-to guides (Apply button, mobile, views…)Allow one year at a time, apply several fields at once, use a side panel, adapt to phones and save filter views with bookmarks: step-by-step guides for Filter Bar Plume.
  3. Fields and settingsIntermediate10 min readFilter Bar Plume: all fields and settings explainedEvery field well and every Format pane setting of Filter Bar Plume: what it does, which values it accepts and what its default value is, card by card.
  4. BasicsGetting started with Plume visualsInstallation, license, styles and the settings shared by every visual.

Fields to drop into the visual

FieldContent
Fields1 to 8 columns (3 for free)Required
Count (e.g. COUNTROWS)COUNTROWS measure: counts and totalOptional
PreselectionOne measure per field (named like the field, or in field order): a value or a list "Paris;Lyon" (premium ★)OptionalPremium
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 Filter Bar 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.5.0.0. Paste it into your assistant so it can guide you.

Raw Markdown version (/ai/visuals/filter-bar.md)
# Filter Bar Plume: technical reference for AI assistants

> Power BI custom visual by Plume Studio (Plume Visuals). Visual version **1.5.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 Filter Bar 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/filter-bar (French: https://plumevisuals.com/fr/visuels/filter-bar)
- Summary: Up to 8 fields in one slicer: menus or panel, faceted counts, chips, “Apply” button.
- Power BI visual GUID (`visualType`): `plumeFilterBar9C1F5B3E7A2D4E8B6F0A3C9D5E7B1F26`
- 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

Filter Bar Plume is a Power BI custom visual that puts up to 8 slicers in a single compact visual: a horizontal bar of dropdown menus, or a vertical panel of expandable sections. Each menu has accent-insensitive search, a three-state "Select all" row and **faceted counts** (each count takes into account the choices made in the *other* fields of the bar). Active filters are shown as removable chips with a "Clear all" button and the total after filters ("→ 10,960 orders"). Below a configurable width (420 px by default for the bar, 220 px at most for the panel) the visual collapses into a "Filters (n)" button that opens a full-frame panel, which suits mobile layouts. An "Apply" button ★ lets users tick values in several fields and send one single query.

**New in version 1.5.0.0 (30/10/2026):** Shared slicer cards; **preselection per field** (one measure per field) and **automatic collapse** into a "Filters" button depending on the frame size.

## 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.
- Premium features of Filter Bar Plume:
  - **4 to 8 fields** in the Fields well (1 to 3 fields are free);
  - the **Apply button**: `applying.mode` = `button` (value label: "Apply" button (single query) ★).
- Without a valid key, a premium feature in use shows **"Plume Visuals · Premium preview"** (French: « Plume Visuals · Aperçu premium ») in the footer, with an "Unlock →" link to the pricing page. It 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, every premium option and premium list value has " ★" appended to its label (the generated tables below star them too). The Fields well itself is not starred: the 4-to-8-fields rule above is the reference.
- Accepted keys: only keys starting with `PLUM1.` shown in the buyer's account on plumevisuals.com, checked offline (Ed25519 signature), covering `filter-bar` 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 existing combination of the fields**, with the Count measure evaluated for that combination. It derives the value lists and the faceted counts from these rows.

| Fields (`fields`): Team | Fields: Channel | Fields: Priority | Count (`count`) |
|---|---|---|---|
| Billing | Email | High | 42 |
| Billing | Phone | Low | 17 |
| … | … | … | … |

- **Fields** (`fields`, label "Fields" / « Champs », grouping, 1 to 8 columns, required): the columns to filter, ideally from the same fact table or from dimension tables related to it. The menus appear in the order of the well.
- **Count** (`count`, label "Count (e.g. COUNTROWS)" / « Décompte (ex. COUNTROWS) », one measure, optional but recommended): shown next to each value and used for the total after filters. It must be **additive** (COUNTROWS, SUM): counts are summed over combinations inside the visual. It also makes Power BI return only combinations that exist in the data.
- No Tooltips well.
- Volume: the number of rows is the number of **combinations**, which multiplies quickly with each field. 30,000 rows per data window, more fetched automatically up to a fixed limit of 100,000 rows; 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.

## DAX recipes

```dax
// Count (additive)
Tickets = COUNTROWS ( Tickets )
Orders = COUNTROWS ( Sales )
Units = SUM ( Sales[Quantity] )

// Year column usable as a field (single selection: menus.single = "Year")
Year = YEAR ( Tickets[Opened on] )
```

Do not use DISTINCTCOUNT or averages as Count: they are not additive across combinations and the faceted counts would be wrong.

## Filter sent to the report

**One `BasicFilter` `In` per filtered field**, all sent together as an array in a single call, for example `[ { "target": { "table": "Tickets", "column": "Team" }, "operator": "In", "values": ["Billing"] }, { "target": { "table": "Tickets", "column": "Channel" }, "operator": "In", "values": ["Email", "Chat"] } ]`. A field with nothing ticked sends no filter; nothing ticked anywhere = filters removed.

- `applying.mode` = `instant` (default): every click sends the filters. `button` ★: changes stay as a draft ("n change(s) not applied") until Apply; Cancel restores the applied state.
- Fields listed in `menus.single` (field names separated by `;`, as displayed in the well, case- and accent-insensitive) use radio buttons: one value at a time.

## Interactions with the report

- `layout.mode` = `bar` (dropdowns, `layout.fieldWidth`, `layout.wrap`) or `panel` (expandable sections, `layout.openFirst`). Field names above the value, inline, or hidden (`layout.labels`).
- `layout.collapseBelow` (420 px by default, 0 = never): below that width, a "Filters (n)" button opens a full-frame panel. In panel mode (`layout.mode = "panel"`) the threshold is capped at 220 px, so a typical 250–350 px side panel stays expanded. When the visual is too short for a menu, the menu fills the visual's frame.
- Alt + click = only this value. Keyboard: the bar is an ARIA `toolbar`; ← → between fields, ↓ opens the menu, ↑ ↓ in the values, Space / Enter ticks, Esc closes.
- Chips (`chips.style` = values (up to 2) or count), "Clear all" (`chips.clearAll`), total after filters (`chips.result`, unit in `chips.resultLabel`).
- **Bookmarks** and **Sync slicers** restore every filter of the bar (`supportsSynchronizingFilterState`). High contrast, landing page, read-only on dashboards. Other visuals cross-filter it (no highlighting).
- The header is hidden by default for this visual (`header.show` = false) and the inner padding is 8 px.

## Format pane: how to read the tables below

- Each option has an ID `card.option` (for example `layout.mode`). 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 `layout`, `menus` (value lists), `applying`, `chips` (active filters summary), then `container` and `texts`. Format pane in version 1.5.0.0 (30/10/2026), top to bottom: `license`, `style`, `header`, `layout`, `menus`, `applying`, `chips`, `preselect`, `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.
- "Visible when" means the option only appears when another option has one of the listed values.
- `general.filter` is where Power BI stores the filters 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 (several projections in `fields`), `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": "plumeFilterBar9C1F5B3E7A2D4E8B6F0A3C9D5E7B1F26",
  "query": {
    "queryState": {
      "fields": { "projections": [
        { "field": { "Column": { "Expression": { "SourceRef": { "Entity": "Tickets" } }, "Property": "Year" } }, "queryRef": "Tickets.Year", "nativeQueryRef": "Year" },
        { "field": { "Column": { "Expression": { "SourceRef": { "Entity": "Tickets" } }, "Property": "Team" } }, "queryRef": "Tickets.Team", "nativeQueryRef": "Team" },
        { "field": { "Column": { "Expression": { "SourceRef": { "Entity": "Tickets" } }, "Property": "Channel" } }, "queryRef": "Tickets.Channel", "nativeQueryRef": "Channel" } ] },
      "count":  { "projections": [ { "field": { "Measure": { "Expression": { "SourceRef": { "Entity": "Tickets" } }, "Property": "Tickets" } }, "queryRef": "Tickets.Tickets", "nativeQueryRef": "Tickets" } ] }
    }
  },
  "objects": {
    "layout":   [ { "properties": { "mode": { "expr": { "Literal": { "Value": "'panel'" } } },
                                     "openFirst": { "expr": { "Literal": { "Value": "true" } } } } } ],
    "menus":    [ { "properties": { "single": { "expr": { "Literal": { "Value": "'Year'" } } },
                                     "sort": { "expr": { "Literal": { "Value": "'count'" } } } } } ],
    "chips":    [ { "properties": { "resultLabel": { "expr": { "Literal": { "Value": "'tickets'" } } } } } ],
    "header":   [ { "properties": { "show": { "expr": { "Literal": { "Value": "true" } } } } } ],
    "style":    [ { "properties": { "customColors": { "expr": { "Literal": { "Value": "true" } } }, "accent": { "solid": { "color": { "expr": { "Literal": { "Value": "'#1d3557'" } } } } } } } ],
    "license":  [ { "properties": { "key": { "expr": { "Literal": { "Value": "'PLUM1.…'" } } } } } ]
  }
}
```

`style.colorAccent` and the other custom colors (`colorBackground`, `colorText`, `colorMuted`, `colorGrid`, `colorTrack`, `colorPositive`, `colorNegative`, `series1`–`series8`, `scaleLow`/`scaleMid`/`scaleHigh`; empty = the style's color) are only used when `style.customColors` = `true`. A style (`style.preset`), a palette (`style.palette`) or a JSON theme (`style.themeJson`, same format in every Plume visual, see the "JSON themes" tutorial) can be used instead. 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

- Counts look wrong: the Count measure is not additive (DISTINCTCOUNT, average…), or it is missing.
- Values that do not exist together appear, or the visual is slow: fields from unrelated tables and no Count measure, so Power BI returns every combination. Add a COUNTROWS measure of the fact table and relate the tables.
- Warning icon "Only the first n values are loaded" ("The visual loads at most 100,000 values. Filter the page or use a less detailed column."): too many combinations (e.g. customer × product × day). Use fewer or coarser fields, or a dedicated Bar Slicer Plume for a high-cardinality field.
- A field stays multi-select: its name in `menus.single` does not match the name displayed in the well (renamed field).
- Long value lists are cut: `menus.maxItems` (300 by default); use the search box.
- Values that became empty under other choices: `menus.empty` = `dim` (bottom, greyed), `hide` or `keep`.
- Watermark visible: more than 3 fields, or the Apply button, or a ★ style, palette or theme JSON, 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)

More than 8 fields, numeric range or date range controls inside the bar (use Range Plume or Period Plume), hierarchies or cascading parent-child menus, measure bars (use Bar Slicer Plume), a Tooltips well, saved filter presets or "views", exclude mode (`NotIn`), filtering on a measure value, per-field colors or icons, drag-and-drop reordering of the menus inside the visual (the order is the well order), cross-report filtering.

## 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 |
|---|---|---|---|---|---|
| `fields` | Fields | Champs | column | 8 |  |
| `count` | Count (e.g. COUNTROWS) | Décompte (ex. COUNTROWS) | measure | 1 |  |
| `preselect` | Preselection | Présélection | measure | 8 | 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 = `fields` (one row per combination), 30,000 rows per data window (more fetched automatically); measures = `count`, `preselect`, `format`.
Capabilities: supportsKeyboardFocus, supportsLandingPage, supportsEmptyDataView, supportsSynchronizingFilterState.
Network access: none (no privileges requested, no external request).

## Format pane options (93)

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 | `false` | 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` |

### Layout / Disposition (`layout`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `layout.mode` | Layout | Disposition | dropdown | enumeration | `panel` | `bar` Horizontal bar (dropdowns); `panel` Vertical panel (expandable sections) |  |
| `layout.fieldWidth` | Minimum field width (px) | Largeur minimale d'un champ (px) | number | integer | `150` | 80 to 400 | Visible when `layout.mode` = `bar` |
| `layout.wrap` | Wrap when needed | Passer à la ligne si besoin | toggle | bool | `true` | true / false | Visible when `layout.mode` = `bar` |
| `layout.labels` | Field names | Nom des champs | dropdown | enumeration | `above` | `above` Small label above; `inline` Before the value; `hidden` Hidden |  |
| `layout.openFirst` | Expand the first section | Ouvrir la première section | toggle | bool | `false` | true / false | Visible when `layout.mode` = `panel` |
| `layout.collapse` | Collapse into a "Filters" button | Replier en bouton « Filtres » | dropdown | enumeration | `auto` | `auto` Automatic (when the fields do not fit the frame); `width` Below a chosen width; `never` Never | Automatic: the threshold depends on the frame size, the number of fields and the layout (width and height). The button opens the filters full frame. |
| `layout.collapseBelow` | Collapse width (px) | Largeur de repli (px) | number | integer | `420` | 0 to 1200 | Visible when `layout.collapse` = `width` |
| `layout.buttonLabel` | Collapsed button label | Libellé du bouton replié | text | text | (empty) |  |  |

### Value lists / Listes de valeurs (`menus`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `menus.search` | Search | Recherche | toggle | bool | `true` | true / false |  |
| `menus.counts` | Counts next to values | Décomptes à côté des valeurs | toggle | bool | `true` | true / false | Uses the "Count" measure; each count takes the other fields of the bar into account. |
| `menus.selectAll` | "Select all" row | Ligne « Tout sélectionner » | toggle | bool | `true` | true / false |  |
| `menus.sort` | Value sort | Tri des valeurs | dropdown | enumeration | `label` | `label` Label A → Z; `count` Count, descending; `data` Model order |  |
| `menus.empty` | Values that became empty | Valeurs devenues vides | dropdown | enumeration | `dim` | `dim` Dimmed, at the bottom; `hide` Hidden; `keep` Unchanged |  |
| `menus.single` | Single-selection fields | Champs à sélection unique | text | text | (empty) |  | Field names separated by ; |
| `menus.menuWidth` | Menu width (px) | Largeur des menus (px) | number | integer | `260` | 160 to 600 | Visible when `layout.mode` = `bar` |
| `menus.maxItems` | Maximum values shown | Valeurs affichées au maximum | number | integer | `300` | 20 to 5000 |  |
| `menus.allLabel` | Text when nothing is filtered | Texte quand rien n'est filtré | text | text | (empty) |  |  |
| `menus.blankLabel` | Blank label | Libellé des vides | text | text | (empty) |  |  |

### Applying filters / Application des filtres (`applying`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `applying.mode` | Mode | Mode | dropdown | enumeration | `instant` | `instant` Instant (each click); `button` "Apply" button (single query) ★ |  |
| `applying.applyLabel` | Button label | Libellé du bouton | text | text | (empty) |  | Visible when `applying.mode` = `button` |

### Active filters summary / Résumé des filtres actifs (`chips`, Format pane)

The card header toggle is `chips.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `chips.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `chips.style` | Chip content | Contenu des puces | dropdown | enumeration | `values` | `values` Values (up to 2); `count` Number of values |  |
| `chips.clearAll` | "Clear all" button | Bouton « Tout effacer » | toggle | bool | `true` | true / false |  |
| `chips.result` | Total after filters | Total après filtres | toggle | bool | `true` | true / false |  |
| `chips.resultLabel` | Total unit (e.g. orders) | Unité du total (ex. commandes) | text | text | (empty) |  | Visible when `chips.result` = `true` |
| `chips.prefix` | Text before chips | Texte devant les puces | text | text | (empty) |  |  |

### Preselection / Présélection (`preselect`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `preselect.when` | Apply | Appliquer | dropdown | enumeration | `session` | `session` Once per session; `always` Reapply on every display | Drop one measure per field in "Preselection" (in field order, or named like the field): it returns a value or a list ("Paris;Lyon"). Premium feature ★. |
| `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 |  |

### 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 | `8` | 0 to 40 |  |

### Language and numbers / Langue et nombres (`texts`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `texts.language` | Interface language | Langue de l'interface | dropdown | enumeration | `auto` | `auto` Same as Power BI; `fr` French; `en` English |  |
| `texts.numberLocale` | Number format locale (e.g. en-GB) | Format des nombres (ex. fr-FR) | text | text | (empty) |  | Thousands and decimal separators. Empty: same as Power BI. |

### Other objects (not in the Format pane cards above)

- `general`: `general.filter` (filter), used by Power BI to store the filter applied by the visual.