Calendar date slicer for Power BI Date Picker Plume
The calendar date slicer: a range in two clicks, the latest date in one, days without data greyed out and selectable days set by rules.
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.
Date Picker Plume shows one to twelve calendar months and filters the report by range, date, week or month. It covers the most requested date-slicer features: open the report on the latest available date, weeks that start on Monday, ISO week numbers, and days without data that cannot be picked. It can also let users pick only certain days (Fridays, month ends, the last working day) and, with premium, color each day by a measure. To see a measure's trend under the period or compare with last year, see Period Plume.
Use cases
- Daily reports that must always open on the last day with data
- Weekly (Friday) or month-end closings as the only selectable days
- Shops closed on Sundays or in August: days without sales greyed out
- Activity calendar: each day colored by revenue (premium)
FreeIncluded for free
- 1 to 12 months (or fitted to the frame), quick month and year picker, weeks starting Monday, Sunday or Saturday, ISO or US week numbers
- Range in two clicks with a preview, Shift + click to extend; a single date, a whole week or a whole month
- “Latest date” shortcut (last selectable day with data) and 12 more: yesterday, 7 and 30 days, week, month, quarter, year to date…
- Default selection on open, or every time the page is shown: the published report reopens on the latest date
- Days without data greyed out and not selectable (blank measure or date missing from the column)
- Selectable days: weekdays, month start or end, first or last working day, week, quarter and year ends; holidays and future dates excluded
- Public holidays of 7 countries plus your closures; compact field that opens the calendar on click; “Apply” button; maximum length; typed dates
- Full keyboard support, screen readers, high contrast, 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
- Several separate dates (each click adds or removes a date)
- Advanced rules in English or French: “friday”, “2nd tuesday”, “last workday & month 3,6,9,12”, exclusions
- Heatmap of a measure in the cells (linear, rank or diverging scale), values and legend
- Named custom shortcuts (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.
- Getting startedBeginner10 min readA calendar slicer that opens on the latest date and grays out days without dataGet started with Date Picker Plume: build a date table, gray out the days without data, and select a single date or a range in two clicks on a real calendar.
- How-to guidesIntermediate5 min readDate Picker Plume: 8 how-to guides (Fridays, month ends, heatmap…)Open on the latest date, allow only Fridays or month ends, write your own rules and color the days by revenue: step-by-step recipes for Date Picker Plume.
- Fields and settingsIntermediate15 min readDate Picker Plume: every field and setting explainedEvery field well and every Format pane setting of Date Picker Plume: what it does, the values you can choose and its default value, card by card, in pane order.
- BasicsGetting started with Plume visualsInstallation, license, styles and the settings shared by every visual.
Fields to drop into the visual
| Field | Content | |
|---|---|---|
| Date | Date column (Calendar[Date]), not the hierarchy | Required |
| Value (data and heatmap) | Measure: blank days greyed out; colors the heatmap ★ | Optional |
| Preselection | Measure: the date or range selected when the report opens, e.g. "2026-01-01;2026-03-31" (premium ★) | OptionalPremium |
| Tooltips | Extra measures | Optional |
| Dynamic format | Measures renamed card.setting (e.g. title.text): the Format pane driven by DAX | Optional |
Missing a feature? We adapt our visuals or build custom ones. Request a custom visual
Found a bug in Date Picker Plume, or have an idea to improve it? Report a bug · Suggest an idea
Technical reference for AI assistants
This section is meant for AI assistants (ChatGPT, Claude, Copilot…): every field, every Format pane option with its internal name, the expected data shape and DAX examples. Generated from the visual's code, version 1.1.0.0. Paste it into your assistant so it can guide you.
Raw Markdown version (/ai/visuals/date-picker.md)# Date Picker Plume: technical reference for AI assistants
> Power BI custom visual by Plume Studio (Plume Visuals). Visual version **1.1.0.0**. This page is generated from the visual's source code at each site build: field names, option names and defaults are exact for this version.
Use it to help someone build a report with Date Picker 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/date-picker (French: https://plumevisuals.com/fr/visuels/date-picker)
- Summary: The calendar date slicer: a range in two clicks, the latest date in one, days without data greyed out and selectable days set by rules.
- Power BI visual GUID (`visualType`): `plumeDatePicker25D54D111C2643719FC6E7ACE9CFD170`
- 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
Date Picker Plume is a Power BI custom slicer that shows a **calendar** (1 to 12 months) built from a date column and filters the report with the chosen dates. Selection modes (`selection.mode`): **`range`** (default: first click = start, the range is previewed on hover, second click = end; Shift + click extends the range, Esc cancels a range in progress), **`single`** (one date), **`week`** (click a day or a week number: the whole week, following `calendar.weekStart`), **`month`** (the whole month) and **`multiple`** ★ (each click adds or removes a date; Shift + click adds the selectable dates in between).
**New in version 1.1.0.0 (30/10/2026):** Shared slicer cards (Preselection: shortcuts such as last N days, or a range measure); short month names "Jan ’26" and smaller cells; `behavior.defaultSelection` → `preselect.shortcut`.
Days **without data** are greyed out and cannot be picked by default (`rules.noData` = `disable`; `dim` = greyed but selectable, `normal` = like the others). A date "has data" when the optional **Value** measure is not blank for that day (`rules.zeroIsEmpty` also treats 0 as empty); without a Value measure, every date present in the column has data, so a full Calendar table greys nothing out: drop a measure such as `[Revenue]` in Value to grey out the days without sales.
**Selectable dates** (card `rules`, « Dates sélectionnables »): a date can be picked only if it passes every condition: weekday toggles (`rules.mon` … `rules.sun`), position in the period (`rules.position`: `monthEnd`, `monthStart`, `lastWorkday`, `firstWorkday`, `lastDataDay` = last date with data of the month, `weekEnd`, `weekStart`, `quarterEnd`, `yearEnd`), `rules.excludeHolidays`, `rules.noFuture`, and the advanced rules ★ (`rules.expression`, see below). Other dates are faded, faded and struck through, or hidden (`rules.inactiveStyle`). A range filters every date between start and end, or only the selectable dates (`selection.rangeFilter` = `active`, the summary then reads "· 4 selectable").
**Shortcuts** (card `presets`): "Latest date" (`presets.latest`, on by default) selects the **last selectable date with data** (with Fridays only: the last Friday with data); Today, Yesterday, last 7 and 30 days, this week, last week, this month, last month, this quarter, year to date, last year, last 12 months, each one with its own toggle. They adapt to the mode (single date → days only; week → weeks; month → months; several dates → every selectable date of the period). Reference date (`presets.anchor`): `latest` (last date in the data, default) or `today`. Named custom shortcuts ★ (`presets.custom`, one per line: `Summer sales: 2026-06-24 - 2026-07-21`). Position: top, bottom or left side.
**Default selection** (card `behavior`): `preselect.shortcut` (`none` by default, `latest`, `today`, `last7`, `last30`, `thisWeek`, `thisMonth`, `lastMonth`, `ytd`) applied when the report opens without a date filter (`behavior.defaultWhen` = `noFilter`) or **every time the page is shown** (`open`): the published report then always reopens on the latest date even if another date was saved in it (a bookmark applied afterwards is respected). `behavior.apply` = `button` adds Apply / Cancel buttons ("Selection not applied").
Calendar card (`calendar`): `display` = `inline` (always visible) or `popup` (**compact field**, one line such as "Oct 6, 2026 → Oct 12, 2026 · 7 days" that opens the calendar on click: below the field when 250 px remain in the frame, otherwise as a full-frame panel; the frame is **transparent by default** in this visual (`container.transparent` = true): in compact mode it stays transparent even with a style that has a background, without border, shadow or texture unless set by hand, so the field can overlay another visual (make the frame taller, bring it to front, turn off the Power BI container background in General › Effects); with such a style, the title and the field sit on a card with the style's background, and the open calendar is opaque; with the visible calendar, the frame becomes opaque as soon as the style has a background); `months` (0 = fitted to the frame, up to 12, side by side then in rows; `maxCell` = maximum cell size, 44 px by default); `openOn` (month of the selection, of the latest date, or today's); quick month and year picker (click the month name); `weekStart` (`monday` default, `sunday`, `saturday`); `weekNumbers` with `weekRule` `iso` (ISO 8601) or `us`; weekends tinted, today outlined, days of neighbouring months, cell shape, month names long or short; `holidays` (`fr`, `frAm` = France Alsace-Moselle, `uk` = England, `us` = federal with observed days, `be`, `ch` = Geneva, `de` = national) shown as a dot under the date with the name in the tooltip, plus `holidayList` (`2026-12-24 Christmas Eve ; 2026-08-10..2026-08-21 Summer closure`).
## Free vs premium (★)
- Every feature works without a key and nothing is ever blocked. Free features never show a watermark, and the visual inserted with its default settings never shows one.
- Shared Style card (the same in every Plume visual): the styles `none`, `minimal` and `blackWhite`, the two Plume gradient palettes (`crest`, `crestDiverging`), "Follow report theme" and all custom colors are **free**; every other `style.preset`, the other gradient palettes and `style.themeJson` are **premium**.
- Premium features of Date Picker Plume: **several dates** (`selection.mode` = `multiple`), **advanced rules** (`rules.expression` not empty), the **heatmap** (`heatmap.show` with a Value measure; without a measure nothing is drawn and no watermark is shown), **custom shortcuts** (`presets.custom` not empty).
- Without a valid key, a premium feature in use shows **"Plume Visuals · Premium preview"** (French « Plume Visuals · Aperçu premium ») with an "Unlock →" link to the pricing page, until a key is pasted in **Format › Plume Studio License › License key** (`license.key`), the first card of the Format pane. The landing page never shows the watermark.
- Accepted keys: `PLUM1.` keys covering `date-picker` or the whole catalog, checked offline (Ed25519). Licenses last one year (one-time payment, no automatic renewal), per slicer: 19 € personal, 49 € SME, 149 € enterprise per year, or the full catalog pack.
## Advanced rules ★ (`rules.expression`)
One rule per line (or separated by `;`). A date is selectable if it matches **at least one** line; a line starting with `-`, `sauf` or `except` **excludes** the dates it describes. Inside a line, `&`, `et`, `and` combine terms; `non`, `not`, `!` negate a term. English or French, case and accents ignored. A rule that is not understood is ignored and flagged in edit mode ("Rule not understood, ignored: …"). No code is evaluated (each term is matched by a regular expression).
| Term (EN / FR) | Dates kept |
|---|---|
| `monday` … `sunday`, `mon-fri`, `mon,wed,fri`, `fridays` / `lundi`, `lun-ven` | weekdays |
| `workday`, `business day` / `ouvré`, `jours ouvrés` | Monday to Friday except holidays |
| `weekend` / `week-end`; `holiday` / `férié` | Saturday and Sunday; holidays of the list |
| `month end`, `month start`, `end of week`, `quarter end`, `year end`… / `fin de mois`, `début de mois`… | period bounds (week per `calendar.weekStart`) |
| `last workday`, `first workday` / `dernier ouvré`, `premier ouvré` | last / first working day of the month |
| `last day with data` / `dernière date avec données` | last date with data of the month |
| `day 1,15,-1`, `day 1-10` / `jour 1,15,-1`, `le 15` | days of the month (`-1` = last day) |
| `last friday`, `2nd tuesday` / `dernier vendredi`, `2e mardi` | n-th weekday of the month |
| `month 3,6,9,12`, `month jan-mar`, `december` / `mois 3,6,9,12` | months |
| `week 1-10`, `even week`, `odd week` / `semaine paire` | week numbers (ISO or US) |
| `year 2025,2026` / `année 2026` | years |
| `with data`, `no data` / `avec données`, `sans données` | according to the Value measure |
| `past`, `future`, `today` / `passé`, `futur`, `aujourd'hui` | relative to today |
| `2026-12-24`, `2026-01-01..2026-03-31`, `after 2026-01-01`, `before 2026-06-30` / `du 01/01/2026 au 31/03/2026` | dates and ranges |
Examples: `friday` (weekly closings); `last workday & month 3,6,9,12` (quarter-end closings); `workday` plus a line `- 2026-08-10..2026-08-21` (except the summer closure); `day 1,15` (twice a month).
## Heatmap ★ (`heatmap`)
Each day with data is colored by the Value measure: `heatmap.colors` = `style` (gradient palette of the style, follows the theme and custom colors), `accent` (background to accent) or `custom` (`low`, `high`); `reverse`; `intensity` (10 to 100 %); `scale` = `linear`, `quantile` (each color holds as many days) or `diverging` (around zero); `showValues` (values in enlarged cells, black or white text by contrast); `legend` (min – max with the measure name). The domain covers every date with data, not only the months shown, so colors stay stable from month to month. The selection stays visible (accent ring). High contrast: no heatmap.
## Expected data shape
| Date (`date`) | Value (`value`, optional) | Tooltips (`tooltips`, optional) |
|---|---|---|
| 2026-09-28 | 2 410 | 58 |
| 2026-09-29 | 1 980 | 47 |
| … | … | … |
- **Date** (`date`, grouping, required): a date column, e.g. `Calendar[Date]`. Use the column itself (right-click the field › Date), not the automatic date hierarchy; date/time columns are grouped by day; a column of years is refused with a clear message.
- **Value (data and heatmap)** (`value`, one measure, optional): blank = "without data"; also colors the heatmap ★.
- **Tooltips** (`tooltips`, measures): added to the Power BI tooltip of each day (date, value, tooltips, week, holiday, status).
- 30,000 rows per data window (one row per day).
## Filter sent to the report
- Date, range, week, month: an `AdvancedFilter` on the date column, `GreaterThanOrEqual` the first day and `LessThan` the day after the last one (local midnight, like Period Plume). A date hierarchy is resolved to its source column.
- Several dates ★, or a range limited to the selectable dates: a `BasicFilter` `In` with the exact values of the column (date/time values included), 5,000 dates at most (beyond: the whole range).
- Nothing selected = filter removed. **Bookmarks** and **Sync slicers** restore the selection (`supportsSynchronizingFilterState`).
## Interactions and accessibility
- Clicking a date never scrolls the months on show (since 1.0.1.0); a filter coming from elsewhere (bookmark, synced slicer) outside the view is brought into view.
- Keyboard: ← → day, ↑ ↓ week, Page Up / Down month, Shift + Page Up / Down year, Home / End start or end of the week, Enter / Space picks (Shift = extend), Esc cancels a range, closes the quick picker or the compact calendar. Only one cell is reachable with Tab (roving focus), and the focus stays on the date after each filter.
- ARIA grid (`grid`, `row`, `gridcell`, `aria-selected`, `aria-disabled`) with a full label per date (value, holiday, without data, not selectable). High contrast: outlines instead of fills.
- Power BI context menu and tooltip on each date. Read-only on dashboard tiles. FR/EN.
- Selection summary under the calendar (`selection.summary`), date format short / medium / long, text when nothing is selected ("All dates"), typed dates (`selection.inputs`: `15/03/2026`, `2026-03-15`, day/month order from the locale), maximum range length (`selection.maxDays`: the range is clipped, "Range limited to 7 days").
## Format pane
Card order: `license` (always first), `style`, `header`, `calendar`, `selection`, `rules` (« Dates sélectionnables » / "Selectable dates"), `heatmap` ("Heatmap ★"), `presets` ("Shortcuts"), `behavior`, `values` (number format), `container` (frame), `texts`. `general.filter` is where Power BI stores the filter: never write it by hand.
## Editing a PBIP report (visual.json)
```json
{
"visual": {
"visualType": "plumeDatePicker25D54D111C2643719FC6E7ACE9CFD170",
"query": { "queryState": {
"date": { "projections": [ { "field": { "Column": { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Date" } }, "queryRef": "Sales.Date", "nativeQueryRef": "Date" } ] },
"value": { "projections": [ { "field": { "Measure": { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Revenue" } }, "queryRef": "Sales.Revenue", "nativeQueryRef": "Revenue" } ] }
} },
"objects": {
"selection": [ { "properties": { "mode": { "expr": { "Literal": { "Value": "'single'" } } } } } ],
"rules": [ { "properties": { "mon": { "expr": { "Literal": { "Value": "false" } } }, "sat": { "expr": { "Literal": { "Value": "false" } } }, "sun": { "expr": { "Literal": { "Value": "false" } } } } } ],
"behavior": [ { "properties": { "defaultSelection": { "expr": { "Literal": { "Value": "'latest'" } } }, "defaultWhen": { "expr": { "Literal": { "Value": "'open'" } } } } } ],
"calendar": [ { "properties": { "holidays": { "expr": { "Literal": { "Value": "'uk'" } } }, "months": { "expr": { "Literal": { "Value": "2D" } } } } } ]
}
}
}
```
## Styles and theme JSON
Same Style card as every Plume visual (`style.preset`, `style.themeJson`, palettes, custom colors); see the theme JSON tutorial https://plumevisuals.com/ai/tutorials/en/themes-json.md. The heatmap uses the gradient palette of the style (`style.palette`), the diverging scale the diverging palette.
## Common pitfalls
- Nothing is greyed out: the Date column comes from a full Calendar table and no Value measure is set; add a measure in Value.
- The calendar shows years only, or an error: the date hierarchy or a Year column was dropped instead of the date column.
- "Latest date" picks an older day: the latest days are not selectable (rules, future dates, holidays) or have a blank Value.
- The report does not open on the latest date: `preselect.shortcut` is `none`, or `defaultWhen` is `noFilter` while a date filter was saved in the report; use `open`.
- Watermark visible: several dates, advanced rules, heatmap with a measure, custom shortcuts or a premium style, 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)
Fiscal calendars (4-4-5) and shifted fiscal years, a second comparison period (use Period Plume for year-over-year), a trend timeline under the dates (Period Plume), relative date filters that move by themselves (shortcuts send fixed dates; Period Plume sends relative filters), time-of-day selection, several independent ranges, drawing outside the visual's frame.
## 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 | A date column (e.g. Calendar[Date]), not the date hierarchy |
| `value` | Value (data and heatmap) | Valeur (données et dégradé) | measure | 1 | Optional measure: days where it is blank are greyed out; it also colors the calendar (heatmap) |
| `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 = `value`, `tooltips`, `preselect`, `format`.
Capabilities: supportsKeyboardFocus, supportsMultiVisualSelection, supportsLandingPage, supportsEmptyDataView, supportsSynchronizingFilterState.
Network access: none (no privileges requested, no external request).
## Format pane options (139)
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` |
### Calendar / Calendrier (`calendar`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `calendar.display` | Display as | Affichage | dropdown | enumeration | `inline` | `inline` Visible calendar; `popup` Compact field (calendar on click) | Compact field: a one-line box showing the selection; the calendar opens on click, inside the visual's frame (make the frame taller and turn off its background so it opens over the visual below). |
| `calendar.months` | Number of months (0 = fit the size) | Nombre de mois (0 = selon la taille) | number | integer | `0` | 0 to 12 | |
| `calendar.weekStart` | First day of the week | Premier jour de la semaine | dropdown | enumeration | `monday` | `monday` Monday; `sunday` Sunday; `saturday` Saturday | |
| `calendar.weekNumbers` | Week numbers | Numéros de semaine | toggle | bool | `false` | true / false | |
| `calendar.weekRule` | Week numbering | Numérotation des semaines | dropdown | enumeration | `iso` | `iso` ISO 8601 (Europe); `us` Week containing January 1 (US) | |
| `calendar.outsideDays` | Days of adjacent months | Jours des mois voisins | toggle | bool | `false` | true / false | |
| `calendar.today` | Highlight today | Mettre en évidence aujourd'hui | toggle | bool | `true` | true / false | |
| `calendar.weekends` | Shade weekends | Teinter les week-ends | toggle | bool | `true` | true / false | |
| `calendar.holidays` | Public holidays | Jours fériés | dropdown | enumeration | `none` | `none` None; `fr` France; `frAm` France (Alsace-Moselle); `uk` United Kingdom (England); `us` United States (federal); `be` Belgium; `ch` Switzerland (Geneva); `de` Germany (national) | |
| `calendar.holidayList` | Extra holidays or closures | Jours fériés ou fermetures en plus | textarea | text | (empty) | | One date (or range yyyy-mm-dd..yyyy-mm-dd) per line or separated by ;, followed by an optional label. Counted as holidays. |
| `calendar.cellShape` | Cell shape | Forme des cases | dropdown | enumeration | `rounded` | `rounded` Rounded; `square` Square; `circle` Circle | |
| `calendar.maxCell` | Maximum cell size (px) | Taille maximale d'une case (px) | number | integer | `44` | 14 to 120 | Small values (14 to 24 px): compact calendar, more months in the same frame. |
| `calendar.monthFormat` | Month names | Nom des mois | dropdown | enumeration | `long` | `long` Long (October 2026); `short` Short (Oct '26) | |
| `calendar.jump` | Quick month and year picker | Choix rapide du mois et de l'année | toggle | bool | `true` | true / false | Clicking the month name opens a grid of months and years. |
| `calendar.openOn` | Month shown on open | Mois affiché à l'ouverture | dropdown | enumeration | `selection` | `selection` The selection's (else latest date); `latest` The latest date in the data; `today` Today's | |
### Selection / Sélection (`selection`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `selection.mode` | Mode | Mode | dropdown | enumeration | `range` | `range` Range (two clicks); `single` Single date; `week` Whole week; `month` Whole month; `multiple` Several dates ★ | Range: first click = start, second click = end (Shift + click extends). Several dates: each click adds or removes a date, Shift + click adds the selectable dates in between. |
| `selection.rangeFilter` | A range filters | Une plage filtre | dropdown | enumeration | `between` | `between` Every date between start and end; `active` Only the selectable dates | Visible when `selection.mode` = `range` or `week` or `month`. With rules (e.g. Fridays only), "Only the selectable dates" filters the Fridays in the range and nothing else. |
| `selection.maxDays` | Maximum range length (days, 0 = no limit) | Durée maximale d'une plage (jours, 0 = sans limite) | number | integer | `0` | 0 to 3660 | Visible when `selection.mode` = `range` |
| `selection.summary` | Selection summary | Résumé de la sélection | toggle | bool | `true` | true / false | |
| `selection.inputs` | Typed dates (From / To) | Saisie des dates au clavier (Du / Au) | toggle | bool | `false` | true / false | |
| `selection.dateFormat` | Date format | Format des dates | dropdown | enumeration | `medium` | `short` Short (10/06/2026); `medium` Medium (Oct 6, 2026); `long` Long (Tue, October 6, 2026) | |
| `selection.fromLabel` | "From" label | Libellé « Du » | text | text | (empty) | | Visible when `selection.inputs` = `true` |
| `selection.toLabel` | "To" label | Libellé « Au » | text | text | (empty) | | Visible when `selection.inputs` = `true` |
| `selection.emptyText` | Text when nothing is selected | Texte sans sélection | text | text | (empty) | | |
### Selectable dates / Dates sélectionnables (`rules`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `rules.noData` | Dates without data | Dates sans données | dropdown | enumeration | `disable` | `disable` Greyed out, not selectable; `dim` Greyed out but selectable; `normal` Like the others | A date has "no data" when it is not in the column, or when the Value measure is blank on it. |
| `rules.zeroIsEmpty` | Value equal to 0 = no data | Valeur égale à 0 = sans données | toggle | bool | `false` | true / false | |
| `rules.mon` | Monday | Lundi | toggle | bool | `true` | true / false | |
| `rules.tue` | Tuesday | Mardi | toggle | bool | `true` | true / false | |
| `rules.wed` | Wednesday | Mercredi | toggle | bool | `true` | true / false | |
| `rules.thu` | Thursday | Jeudi | toggle | bool | `true` | true / false | |
| `rules.fri` | Friday | Vendredi | toggle | bool | `true` | true / false | |
| `rules.sat` | Saturday | Samedi | toggle | bool | `true` | true / false | |
| `rules.sun` | Sunday | Dimanche | toggle | bool | `true` | true / false | |
| `rules.position` | Position in the period | Position dans la période | dropdown | enumeration | `any` | `any` Any date; `monthEnd` Last day of the month; `monthStart` First day of the month; `lastWorkday` Last working day of the month; `firstWorkday` First working day of the month; `lastDataDay` Last date with data in the month; `weekEnd` Last day of the week; `weekStart` First day of the week; `quarterEnd` Last day of the quarter; `yearEnd` Last day of the year | |
| `rules.excludeHolidays` | Grey out public holidays | Griser les jours fériés | toggle | bool | `false` | true / false | |
| `rules.noFuture` | Grey out future dates | Griser les dates futures | toggle | bool | `false` | true / false | |
| `rules.expression` | Advanced rules ★ | Règles avancées ★ | textarea | text | (empty) | | One rule per line: a date is selectable when it matches any line; a line starting with "-" excludes. Terms: monday…sunday, mon-fri, workday, weekend, holiday, month end, month start, last workday, first workday, week end, quarter end, year end, day 1,15,-1, last friday, 2nd tuesday, month 1,4,7,10, even week, year 2026, with data, past, future, 2026-01-01..2026-03-31; "&" to combine, "not" to negate. See the tutorial. |
| `rules.inactiveStyle` | Look of non-selectable dates | Aspect des dates non sélectionnables | dropdown | enumeration | `faded` | `faded` Faded; `struck` Faded and struck through; `hidden` Hidden (empty cell) | |
### Heatmap ★ / Dégradé de couleur ★ (`heatmap`, 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 `heatmap.show`.
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `heatmap.show` | Show ★ | Afficher ★ | toggle | bool | `false` | true / false | Colors each cell by the Value measure. |
| `heatmap.colors` | Colors | Couleurs | dropdown | enumeration | `style` | `style` Gradient palette (style); `accent` From background to accent; `custom` Chosen start and end | |
| `heatmap.low` | Low values color | Couleur des valeurs basses | color | fill | (empty) | hex color | Visible when `heatmap.colors` = `custom` |
| `heatmap.high` | High values color | Couleur des valeurs hautes | color | fill | (empty) | hex color | Visible when `heatmap.colors` = `custom` |
| `heatmap.scale` | Scale | Échelle | dropdown | enumeration | `linear` | `linear` Linear; `quantile` By rank (quantiles); `diverging` Distance from zero (diverging) | |
| `heatmap.reverse` | Reverse | Inverser | toggle | bool | `false` | true / false | |
| `heatmap.intensity` | Intensity (%) | Intensité (%) | number | integer | `100` | 10 to 100 | |
| `heatmap.showValues` | Value in the cells | Valeur dans les cases | toggle | bool | `false` | true / false | |
| `heatmap.legend` | Legend (min – max) | Légende (min – max) | toggle | bool | `true` | true / false | |
### Shortcuts / Raccourcis (`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.latest` | Latest date | Dernière date | toggle | bool | `true` | true / false | |
| `presets.today` | Today | Aujourd'hui | toggle | bool | `false` | true / false | |
| `presets.yesterday` | Yesterday | Hier | toggle | bool | `false` | true / false | |
| `presets.last7` | Last 7 days | 7 derniers jours | toggle | bool | `true` | true / false | |
| `presets.last30` | Last 30 days | 30 derniers jours | toggle | bool | `false` | true / false | |
| `presets.thisWeek` | This week | Semaine en cours | toggle | bool | `false` | true / false | |
| `presets.lastWeek` | Last week | Semaine dernière | toggle | bool | `false` | true / false | |
| `presets.thisMonth` | Month to date | Mois en cours | toggle | bool | `true` | true / false | |
| `presets.lastMonth` | Last month | Mois dernier | toggle | bool | `false` | true / false | |
| `presets.thisQuarter` | Quarter to date | Trimestre en cours | toggle | bool | `false` | true / false | |
| `presets.ytd` | Year to date | Cumul annuel | toggle | bool | `true` | true / false | |
| `presets.lastYear` | Last year | Année dernière | toggle | bool | `false` | true / false | |
| `presets.last12m` | Last 12 months | 12 mois glissants | toggle | bool | `false` | true / false | |
| `presets.anchor` | Shortcuts reference date | Date de référence des raccourcis | dropdown | enumeration | `latest` | `latest` Latest date in the data; `today` Today | "Last 7 days" counts back from this date. Latest date = last selectable date with data. |
| `presets.custom` | Custom shortcuts ★ | Raccourcis personnalisés ★ | textarea | text | (empty) | | One per line or separated by ; — "Label: start - end" (yyyy-mm-dd or dd/mm/yyyy). |
| `presets.position` | Position | Position | dropdown | enumeration | `top` | `top` Top; `bottom` Bottom; `side` Left side | |
### Behavior / Comportement (`behavior`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `behavior.apply` | Apply the filter | Appliquer le filtre | dropdown | enumeration | `instant` | `instant` As soon as selected; `button` With an "Apply" button | |
### 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) | | |
### 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 | `true` | true / false | The visual lets what is behind it show through (useful for a dropdown placed over another visual). |
**Border / Bordure**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.border` | Border | Bordure | toggle | bool | `true` | true / false | |
| `container.borderColor` | Color (empty = lines) | Couleur (vide = traits) | color | fill | (empty) | hex color | Visible when `container.border` = `true` |
| `container.borderWidth` | Width | Épaisseur | number | integer | `1` | 0 to 6 | Visible when `container.border` = `true` |
| `container.radius` | Rounded corners | Coins arrondis | number | integer | `8` | 0 to 24 | |
**Shadow / Ombre**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.shadow` | Shadow | Ombre | toggle | bool | `false` | true / false | |
| `container.shadowColor` | Color (empty = soft) | Couleur (vide = douce) | color | fill | (empty) | hex color | Visible when `container.shadow` = `true` |
| `container.shadowSize` | Blur (px) | Flou (px) | number | integer | `12` | 0 to 40 | Visible when `container.shadow` = `true` |
**Spacing / Marges**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.padding` | Inner padding | Marge intérieure | number | integer | `10` | 0 to 40 | |
### Language and numbers / Langue et nombres (`texts`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `texts.language` | Interface language | Langue de l'interface | dropdown | enumeration | `auto` | `auto` Same as Power BI; `fr` French; `en` English | |
| `texts.numberLocale` | Number format locale (e.g. en-GB) | Format des nombres (ex. fr-FR) | text | text | (empty) | | Thousands and decimal separators. Empty: same as Power BI. |
### Other objects (not in the Format pane cards above)
- `general`: `general.filter` (filter), used by Power BI to store the filter applied by the visual.