Aller au contenu
Plume Visuals
← Retour

Period Plume

Le segment de dates : une période choisie sur la tendance d'une mesure, avec périodes glissantes, calendrier et comparaison N-1.

Certifié par MicrosoftCERTIFIÉ MICROSOFT • POWER BI •
Tutoriels ↓
Installer depuis Microsoft MarketplacePage officielle du visuel chez Microsoft · installation gratuite

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.

Period Plume est un segment de dates qui montre la courbe de votre mesure : on voit les pics et les creux avant de choisir. Préréglages (30 derniers jours, cumul annuel, 12 mois glissants…) enregistrés en filtre relatif qui se recale tout seul, période dessinée à la souris, calendrier, saisie au clavier. Il s'adapte aux données mensuelles ou annuelles, et compare en premium la période à N-1 ou à la période précédente. Pour filtrer des nombres (prix, âge, délai), voyez Range Plume.

Cas d'usage

  • Ventes quotidiennes : 30 derniers jours, cumul annuel
  • Suivi d'activité avec comparaison à l'an dernier
  • Séries annuelles (climat, démographie) : 5, 10, 20 dernières années
  • Tableaux de bord qui doivent toujours montrer « les 12 derniers mois »

GratuitInclus gratuitement

  • Frise de tendance en aire, ligne ou barres ; granularité jour, semaine, mois, trimestre, année
  • Préréglages glissants (filtre de date relatif), date de référence au choix
  • Période dessinée, déplacée, poignées ; calendrier et saisie « 15/03/2025 »
  • Données mensuelles ou annuelles détectées automatiquement
  • Bouton « Appliquer », durée minimale ; présélection sans DAX à l'ouverture (aujourd'hui, N derniers jours, mois en cours, cumul annuel…)
  • Styles Entre, Avant, Après, comme le segment de dates natif ; préréglages standard masquables
  • 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

  • Comparaison à N-1 ou à la période précédente : période hachurée et écart chiffré
  • Périodes personnalisées nommées (soldes, saisons…)
  • Présélection par une mesure DAX : une date ou une plage (« 2026-01-01;2026-03-31 »)
  • 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.

  1. Prise en mainDébutant11 min de lectureUn segment de dates avec préréglages et comparaison N-1Prise en main de Period Plume : table de dates, hiérarchie de dates et un segment qui choisit une période sur la tendance d'une mesure.
  2. Cas pratiquesIntermédiaire4 min de lecturePeriod Plume : 8 cas pratiques (30 derniers jours, N-1, saisons…)Périodes glissantes, ouverture sur les 12 derniers mois, comparaison à N-1, périodes métier, durée minimale, données mensuelles : pas à pas.
  3. Champs et réglagesIntermédiaire14 min de lecturePeriod Plume : tous les champs et réglages expliquésChaque zone de champ et chaque réglage du volet Format de Period Plume : à quoi il sert, ses valeurs possibles et sa valeur par défaut.
  4. Bases communesBien démarrer avec les visuels PlumeInstallation, licence, styles et réglages communs à tous les visuels.

Champs à glisser dans le visuel

ChampContenu
DateColonne de dates (pas la hiérarchie) ou d'annéesObligatoire
Mesure (tendance)Dessine la frise et calcule la comparaisonFacultatif
InfobullesMesures supplémentairesFacultatif
PrésélectionMesure : la date ou la plage sélectionnée à l'ouverture, ex. « 2026-01-01;2026-03-31 » (fonction ★)FacultatifPremium
Format dynamiqueMesures renommées carte.réglage (ex. title.text) : le volet Format piloté en DAXFacultatif

Il vous manque une fonction ? Nous adaptons nos visuels ou en créons sur mesure. Demander un visuel sur mesure

Un bug dans Period 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/period-pulse.md)
# Period 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 Period 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/period-pulse (French: https://plumevisuals.com/fr/visuels/period-pulse)
- Summary: The date slicer: pick a period on a measure's trend, with rolling periods, calendar and year-over-year comparison.
- Power BI visual GUID (`visualType`): `plumePeriodPulse2E6A9C4D81B74F3A9D0C6E2B7A15F8C4`
- 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

Period Plume is a Power BI custom visual that works as a date slicer drawn over the trend of a measure: a small timeline (area, line or bars) of the measure, on which the user draws or drags the period, plus business presets (last 7 / 30 / 90 days, this month, last month, this quarter, last quarter, last 6 months, year to date, last year, last 12 months, all time), start / end date boxes with a calendar, and an optional comparison ★ with the same period last year or the previous period. Rolling presets are saved as relative date filters, so "Last 30 days" is still the last 30 days after tomorrow's refresh. Monthly, quarterly and yearly data are detected automatically.

**New in version 1.4.0.0 (30/10/2026):** Shared slicer cards (Preselection: today, latest date, last N days, current week, ISO range measure); hide the standard presets; **Between / Before / After** styles like the native date slicer; `compare.*` → `comparison.*`, `behavior.defaultPreset` → `preselect.shortcut`.

## 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 Period Plume:
  - the **Comparison ★** card: `comparison.show` is **off by default**; when it is on and a measure is in Measure (trend), the comparison is drawn and the watermark appears without a key ("Compare with ★" chooses `previousYear` or `previousPeriod`);
  - **custom periods** (`presets.custom` not empty, label "Custom periods ★" / « Périodes personnalisées ★ »).
- 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. 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 `period-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 date** (or per year), with the measure evaluated for that date.

| Date (`date`) | Measure (trend) (`measure`) |
|---|---|
| 2025-03-01 | 12 480 |
| 2025-03-02 | 9 915 |
| … | … |

- **Date** (`date`, label "Date" / « Date », grouping, exactly one field, required). Best: the date column of a marked date table (`'Date'[Date]`), used as **Date**, not as the Date Hierarchy (right-click the field in the well › Date). Date/time columns are accepted (grouped by day). A whole-number **year column** (2001, 2002…) is accepted too.
- **Measure (trend)** (`measure`, « Mesure (tendance) », one measure, optional): draws the timeline and feeds the comparison. Without it, the timeline counts the dates.
- **Tooltips** (`tooltips`, « Infobulles », several measures, optional): added to the Power BI tooltip.
- **Granularity**: `timeline.granularity` = `auto` picks day (≤ 4 months of data), week (≤ 2.5 years), month (≤ 10 years), quarter (≤ 25 years) or year. It is never finer than the data: if every date is the 1st of a month the data is treated as **monthly**; if every date is the 1st of January, April, July or October, as **quarterly**; if every date is January 1st, or the field holds years, as **yearly**. Only **yearly** data replaces the presets with "Latest year", "5 years", "10 years", "20 years" (plus "All time" if enabled), hides the calendar and shows labels like "2016". For **monthly or quarterly** data the usual presets stay: those shorter than one period are hidden and the others snap to whole periods; labels read like "March 2024". For monthly, quarterly or yearly data whose last date is in the past, presets are anchored on the last date of the data.
- Date bounds are sent as the instant of local midnight (since 1.0.2.0), so the first day of the period is included whatever the time zone of Power BI Desktop. Filters restored from older versions (UTC midnight) are read correctly.
- Volume: 30,000 dates per data window, more fetched automatically up to a fixed limit of 100,000 (no "Data" card since 1.0.1.0).

## DAX recipes

```dax
// Measure (trend)
Revenue = SUM ( Sales[Amount] )

// Report measures that follow the period chosen in the slicer
Revenue LY = CALCULATE ( [Revenue], SAMEPERIODLASTYEAR ( 'Date'[Date] ) )
Revenue previous period =
VAR _start = MIN ( 'Date'[Date] )
VAR _end = MAX ( 'Date'[Date] )
VAR _days = _end - _start + 1
RETURN CALCULATE ( [Revenue], DATESBETWEEN ( 'Date'[Date], _start - _days, _start - 1 ) )
Change vs LY = DIVIDE ( [Revenue] - [Revenue LY], [Revenue LY] )

// Date table (Modeling › New table), then mark it as a date table and relate 'Date'[Date] 1 → * Sales[Date]
Date = ADDCOLUMNS ( CALENDAR ( DATE ( 2024, 1, 1 ), DATE ( 2025, 12, 31 ) ), "Year", YEAR ( [Date] ) )
```

The comparison ★ shown inside the visual is computed by the visual for display only; use measures like the ones above for the rest of the report.

## Filter sent to the report

Target: the field's column, with two special cases. If the field is the **Year level of an automatic date hierarchy**, the filter targets the **underlying date column** (a filter on the level itself would filter nothing). If the field is a **whole-number year column**, a numeric filter is sent.

- **Fixed period**: `AdvancedFilter` `And` with `GreaterThanOrEqual` start date and `LessThan` the day after the end date (dates at midnight UTC of the chosen day).
- **Rolling preset**: `RelativeDateFilter`, e.g. "in the last 12 months, including today" (`last7`, `last30`, `last90`, `thisMonth`, `lastMonth`, `last6m`, `ytd`, `lastYear`, `last12m`). Only when `presets.rolling` is on and `presets.anchor` = `today`; then a "Rolling" badge is shown in the header. "This quarter", "Last quarter", custom periods and presets anchored on the last data date are sent as fixed periods.
- **Year column**: `AdvancedFilter` `GreaterThanOrEqual` start year `And` `LessThanOrEqual` end year (never relative).
- Whole range or "All" = filter removed. `preselect.shortcut` applies a period once when the report opens without a date filter.

## Interactions with the report

- Click a preset, draw the period on the timeline (`timeline.brush`), drag it (`timeline.moveWindow`), move the start / end handles, or type a date (`15/03/2025`, `2025-03-15`, `15.03.25`; day/month order follows the language). Clicking a date box opens the calendar (`inputs.calendar`).
- Snapping: `timeline.snap` (displayed granularity, day, week, month), never finer than the data. Granularity buttons in the visual (`timeline.userGranularity`) offer only granularities that make sense.
- Keyboard on the handles (ARIA `slider`): ← → by day, week or month depending on snapping, Shift = one month, Home / End. Esc closes the calendar.
- `behavior.apply` = `button` shows Apply / Cancel; `behavior.minDays` sets a minimum length.
- **Bookmarks** and **Sync slicers** work for fixed and relative filters (`supportsSynchronizingFilterState`). Context menu, tooltips, high contrast, landing page, read-only on dashboards. Other visuals cross-filter it (no highlighting).

## Format pane: how to read the tables below

- Each option has an ID `card.option` (for example `timeline.chart`). 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 `presets`, `timeline`, `inputs` (start and end dates), `comparison` (Comparison ★), `values` (number format), `behavior`, then `container` and `texts`. Format pane in version 1.4.0.0 (30/10/2026), top to bottom: `license`, `style`, `header`, `presets`, `timeline`, `inputs`, `comparison`, `values`, `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.
- "Visible when" means the option only appears when another option has one of the listed values (e.g. `presets.rolling` only when `presets.anchor` = `today`).
- `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": "plumePeriodPulse2E6A9C4D81B74F3A9D0C6E2B7A15F8C4",
  "query": {
    "queryState": {
      "date":    { "projections": [ { "field": { "Column":  { "Expression": { "SourceRef": { "Entity": "Date" } }, "Property": "Date" } }, "queryRef": "Date.Date", "nativeQueryRef": "Date" } ] },
      "measure": { "projections": [ { "field": { "Measure": { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Revenue" } }, "queryRef": "Sales.Revenue", "nativeQueryRef": "Revenue" } ] }
    }
  },
  "objects": {
    "presets":  [ { "properties": { "anchor": { "expr": { "Literal": { "Value": "'lastDate'" } } },
                                     "last90": { "expr": { "Literal": { "Value": "true" } } } } } ],
    "timeline": [ { "properties": { "chart": { "expr": { "Literal": { "Value": "'bars'" } } },
                                     "granularity": { "expr": { "Literal": { "Value": "'month'" } } },
                                     "colorIn": { "solid": { "color": { "expr": { "Literal": { "Value": "'#b8462a'" } } } } } } } ],
    "compare":  [ { "properties": { "show": { "expr": { "Literal": { "Value": "true" } } },
                                     "mode": { "expr": { "Literal": { "Value": "'previousYear'" } } } } } ],
    "behavior": [ { "properties": { "minDays": { "expr": { "Literal": { "Value": "7D" } } } } } ],
    "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

- Only years appear (yearly timeline) although the column has days: the Date Hierarchy was dropped and only its Year level is used. Right-click the field in the well › **Date**. Filtering still works (on the underlying date column), but by whole years.
- Off-by-one dates: use a Date column, not text. Dates are sent at midnight UTC of the chosen day, end excluded the next day.
- "Last 30 days" shows nothing: the data stops in the past and `presets.anchor` = `today`. Use `lastDate` (the filter is then a fixed period, not rolling).
- Comparison shows nothing or no watermark: `comparison.show` is off by default, and a measure is required in Measure (trend). Last year's dates must exist in the visual's data.
- The date table is not related to the fact table: the slicer filters the date table only.
- Watermark visible: Comparison ★ is on with a measure, or `presets.custom` is filled, 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)

Several disjoint periods at once, time-of-day (hour / minute) selection, fiscal years or custom fiscal calendars, week numbers other than Monday / Sunday start, relative filters "next N days" or offsets ("N days ago"), a comparison written back to the report as a filter or a measure, more than one comparison at a time, a play / animation button, filtering on a measure value, a list of years as checkboxes (use Bar Slicer Plume or Filter Bar Plume).

## 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 |
|---|---|---|---|---|---|
| `date` | Date | Date | column | 1 |  |
| `measure` | Measure (trend) | Mesure (tendance) | measure | 1 |  |
| `tooltips` | Tooltips | Infobulles | measure | several |  |
| `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 = `date` (one row per combination), 30,000 rows per data window (more fetched automatically); measures = `measure`, `tooltips`, `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` |

### 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.standard` | Standard presets | Préréglages standard | toggle | bool | `true` | true / false | Off: only the custom periods are shown. |
| `presets.last7` | Last 7 days | 7 derniers jours | toggle | bool | `true` | true / false | Visible when `presets.standard` = `true` |
| `presets.last30` | Last 30 days | 30 derniers jours | toggle | bool | `true` | true / false | Visible when `presets.standard` = `true` |
| `presets.last90` | Last 90 days | 90 derniers jours | toggle | bool | `false` | true / false | Visible when `presets.standard` = `true` |
| `presets.thisMonth` | This month | Mois en cours | toggle | bool | `true` | true / false | Visible when `presets.standard` = `true` |
| `presets.lastMonth` | Last month | Mois dernier | toggle | bool | `false` | true / false | Visible when `presets.standard` = `true` |
| `presets.thisQuarter` | This quarter | Trimestre en cours | toggle | bool | `true` | true / false | Visible when `presets.standard` = `true` |
| `presets.lastQuarter` | Last quarter | Trimestre dernier | toggle | bool | `false` | true / false | Visible when `presets.standard` = `true` |
| `presets.last6m` | Last 6 months | 6 derniers mois | toggle | bool | `false` | true / false | Visible when `presets.standard` = `true` |
| `presets.ytd` | Year to date | Cumul annuel | toggle | bool | `true` | true / false | Visible when `presets.standard` = `true` |
| `presets.lastYear` | Last year | Année dernière | toggle | bool | `false` | true / false | Visible when `presets.standard` = `true` |
| `presets.last12m` | Last 12 months | 12 mois glissants | toggle | bool | `true` | true / false | Visible when `presets.standard` = `true` |
| `presets.all` | All time | Toute la période | toggle | bool | `false` | true / false | Visible when `presets.standard` = `true` |
| `presets.custom` | Custom periods ★ | Périodes personnalisées ★ | textarea | text | (empty) |  | One period per line or separated by ; — "Label: start - end" (yyyy-mm-dd or dd/mm/yyyy). |
| `presets.anchor` | Reference date | Date de référence | dropdown | enumeration | `today` | `today` Today; `lastDate` Last date in the data |  |
| `presets.rolling` | Rolling preset (moves with each refresh) | Préréglage glissant (se recale à chaque actualisation) | toggle | bool | `true` | true / false | Visible when `presets.anchor` = `today`. Saved as a relative date filter: "Last 30 days" stays the last 30 days tomorrow. |
| `presets.position` | Position | Position | dropdown | enumeration | `top` | `top` Top; `bottom` Bottom |  |

### Trend timeline / Frise de tendance (`timeline`, Format pane)

The card header toggle is `timeline.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `timeline.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `timeline.granularity` | Granularity | Granularité | dropdown | enumeration | `auto` | `auto` Automatic; `day` Day; `week` Week; `month` Month; `quarter` Quarter; `year` Year |  |
| `timeline.userGranularity` | Granularity toggle in the visual | Choix de la granularité dans le visuel | toggle | bool | `true` | true / false |  |
| `timeline.chart` | Chart type | Type de tracé | dropdown | enumeration | `area` | `area` Area; `line` Line; `bars` Bars |  |
| `timeline.colorIn` | Period color (empty = accent) | Couleur de la période (vide = accent) | color | fill | (empty) | hex color |  |
| `timeline.colorOut` | Outside color (empty = auto) | Couleur hors période (vide = auto) | color | fill | (empty) | hex color |  |
| `timeline.axis` | Date axis | Axe des dates | toggle | bool | `true` | true / false |  |
| `timeline.brush` | Draw the period with the mouse | Dessiner la période à la souris | toggle | bool | `true` | true / false |  |
| `timeline.moveWindow` | Drag the period | Faire glisser la période | toggle | bool | `true` | true / false |  |
| `timeline.snap` | Snap to | Accrocher à | dropdown | enumeration | `auto` | `auto` Displayed granularity; `day` Day; `week` Week; `month` Month |  |

### Start and end dates / Dates de début et de fin (`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.format` | Format | Format | dropdown | enumeration | `long` | `short` Short (04/07/2025); `medium` Medium (Apr 7, 2025); `long` Long (Mon, April 7, 2025) |  |
| `inputs.calendar` | Calendar on click | Calendrier au clic | toggle | bool | `true` | true / false |  |
| `inputs.weekStart` | First day of the week | Premier jour de la semaine | dropdown | enumeration | `monday` | `monday` Monday; `sunday` Sunday |  |
| `inputs.showDuration` | Show duration | Afficher la durée | toggle | bool | `true` | true / false |  |
| `inputs.fromLabel` | "From" label | Libellé « Du » | text | text | (empty) |  |  |
| `inputs.toLabel` | "To" label | Libellé « Au » | text | text | (empty) |  |  |

### 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 | `false` | true / false |  |
| `comparison.mode` | Compare with ★ | Comparer à ★ | dropdown | enumeration | `previousYear` | `previousYear` Same period last year; `previousPeriod` Previous period |  |
| `comparison.band` | Comparison period on the timeline | Période de comparaison sur la frise | toggle | bool | `true` | true / false |  |
| `comparison.delta` | Numeric difference | Écart chiffré | toggle | bool | `true` | true / false |  |
| `comparison.userChoice` | Last year / previous toggle in the visual | Choix N-1 / précédente dans le visuel | toggle | bool | `true` | true / false |  |
| `comparison.goodUp` | An increase is good | Une hausse est positive | toggle | bool | `true` | true / false |  |

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

### 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; `before` Before; `after` After | Like the native date slicer styles: a period (Between), or everything up to a date (Before) or from a date (After). |
| `behavior.apply` | Apply the filter | Appliquer le filtre | dropdown | enumeration | `release` | `release` On mouse release; `button` With an "Apply" button |  |
| `behavior.minDays` | Minimum length (days) | Durée minimale (jours) | number | integer | `1` | 1 to 366 |  |

### 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); `today` Today; `latest` Latest date in the data; `last7` Last 7 days; `last30` Last 30 days; `lastN` Last N days; `thisWeek` This week; `thisMonth` This month; `lastMonth` Previous month; `ytd` Year to date (YTD); `last12m` Last 12 months | Drop in "Preselection" a measure that returns a date or a range ("2026-01-01;2026-03-31", ISO dates), or pick a shortcut below (free). Measure: premium feature ★. |
| `preselect.days` | N (days) | N (jours) | number | integer | `30` | 1 to 3660 | Visible when `preselect.shortcut` = `lastN` |
| `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 on hover (with the fields of the "Tooltips" well and report page tooltips). |

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

- `compare`: `compare.show` (bool), `compare.mode` (enumeration), `compare.band` (bool), `compare.delta` (bool), `compare.userChoice` (bool), `compare.goodUp` (bool).
- `general`: `general.filter` (filter), used by Power BI to store the filter applied by the visual.