Skip to content
Plume Visuals
← Back

Period Plume

The date slicer: pick a period on a measure's trend, with rolling periods, calendar and year-over-year comparison.

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.

Period Plume is a date slicer that shows your measure's curve: you see peaks and dips before you choose. Presets (last 30 days, year to date, last 12 months…) saved as a relative filter that moves on its own, a period drawn with the mouse, a calendar, typed dates. It adapts to monthly or yearly data and, with premium, compares the period with last year or the previous period. Filtering numbers (price, age, lead time)? See Range Plume.

Use cases

  • Daily sales: last 30 days, year to date
  • Activity tracking with a comparison to last year
  • Yearly series (climate, demographics): last 5, 10, 20 years
  • Dashboards that must always show “the last 12 months”

FreeIncluded for free

  • Trend timeline as area, line or bars; day, week, month, quarter or year granularity
  • Rolling presets (relative date filter), choice of reference date
  • Drawn, draggable period, handles; calendar and typed dates
  • Monthly or yearly data detected automatically
  • “Apply” button, minimum length; preselection without DAX when the report opens (today, last N days, this month, year to date…)
  • Between, Before and After styles, like the native date slicer; standard presets can be hidden
  • 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

  • Comparison with last year or the previous period: hatched period and difference
  • Named custom periods (sales, seasons…)
  • Preselection from a DAX measure: a date or a range ("2026-01-01;2026-03-31")
  • 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 startedBeginner10 min readA date slicer with presets and year-over-year comparisonGet started with Period Plume: build a date table, avoid the date hierarchy trap, and add a slicer that picks a period right on the trend of a measure.
  2. How-to guidesIntermediate4 min readPeriod Plume: 8 how-to guides (last 30 days, year over year, seasons…)Rolling periods, opening on the last 12 months, year-over-year comparison, business periods, minimum length and monthly data, step by step in Period Plume.
  3. Fields and settingsIntermediate13 min readPeriod Plume: every field and setting explainedEvery field well and every Format pane setting of Period Plume: what it does, the values you can choose and its default value, card by card, in pane order.
  4. BasicsGetting started with Plume visualsInstallation, license, styles and the settings shared by every visual.

Fields to drop into the visual

FieldContent
DateDate column (not the hierarchy) or year columnRequired
Measure (trend)Draws the timeline and computes the comparisonOptional
TooltipsExtra measuresOptional
PreselectionMeasure: the date or range selected when the report opens, e.g. "2026-01-01;2026-03-31" (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 Period 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.4.0.0. Paste it into your assistant so it can guide you.

Raw Markdown version (/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.