Skip to main content

Data fields

The Calendar is driven entirely by the fields you drag into its wells. This page covers every field — what it does, whether it's required, how many columns it accepts — and, just as importantly, exactly how your dates are read.

Field summary

FieldRequiredAcceptsMax columnsWhat it does
Start DateYesDate / date-time column1The date (and optionally the time) the event starts.
End DateNoDate / date-time column1When the event finishes. Blank means a single-day event.
Event TitleNoColumn or measure1The label shown on the event.
CategoryNoColumn1Groups events by colour and builds the legend.
Detail URLNoColumn1An http(s) address opened from the event's details popover.
Tooltip FieldsNoColumns or measures3Extra values shown on hover and in the popover.
Row limit

The visual receives up to 30,000 rows from Power BI. Beyond that, Power BI stops sending rows and the calendar is drawn from the first 30,000 it received. For very large models, filter to a date range, a team or a status before the visual sees the data — a calendar is rarely read 30,000 events at a time anyway.

One row per event

Every row that has a readable Start Date becomes exactly one event. The Calendar does not aggregate, group or deduplicate:

  • Two identical rows produce two overlapping events, not one.
  • If your table is at a finer grain than the event (one row per booking line, say), summarize it upstream — in Power Query or with a summarized table — so each event appears once.
  • Rows with a blank Start Date are skipped silently. Blank cells are normal in models, so they aren't treated as an error.

Start Date

The only field the visual truly requires. Until it's bound, the visual shows its landing page.

How dates are read

The Calendar reads each date cell by type, and never guesses:

What's in the columnHow it's read
Date or Date/time (the normal case)Used as-is. A time component makes the event timed; midnight makes it all-day — see below.
TextParsed as ISO 8601 first (2026-03-09, 2026-03-09T14:30:00), then with the browser's general date parsing. Ambiguous formats such as 03/09/2026 are risky — the reading depends on the viewer's browser locale.
Whole number, 8 digitsRead as a YYYYMMDD date key (the star-schema convention), between 19000101 and 21001231. Impossible dates such as 20260230 are rejected rather than rolled over.
Whole number, very largeRead as epoch milliseconds (values of 100,000,000,000 and above — i.e. dates from 1973 onwards).
Anything elseRejected and counted. Excel serial numbers, epoch seconds, decimal numbers and unparseable text all fall here.
Epoch seconds are rejected on purpose

A Unix timestamp in seconds (1772064000) is not converted. Read as milliseconds it would place every event in January 1970 — a plausible-looking but wrong calendar. The visual refuses it, counts the row, and raises the unreadable-dates warning instead. Multiply by 1000 in Power Query, or convert to a proper date column.

tip

The safest input is a real Date/time column from your model. It sorts, filters and formats correctly, works with date slicers and relative-date filters, and removes all ambiguity about how it's parsed.

Timed events vs all-day events

The Calendar decides this per event, from the values themselves — there's no setting:

StartEndResult
Midnight (00:00:00)Midnight, 23:59, or blankAll-day event: a full-width bar on every day it covers.
Any other timeAnyTimed event: placed at its exact position on the Week and Day timelines.

All-day events appear in the all-day lane at the top of Week and Day view; timed events appear on the hour grid. In Month, Quarter, Year and List views both kinds are drawn the same way — only List view shows the times.

Time zones

Power BI date/time values carry no time zone, and the Calendar renders them exactly as they are stored. If your source holds UTC timestamps and your audience reads local time, convert them in Power Query before they reach the visual.

End Date

Optional. It defines where the event's bar stops.

  • Blank → the event occupies its start day only (a deadline, an invoice, a birthday).
  • Earlier than the start → the event is drawn on the start day (an inverted range is never drawn backwards).
  • Same as the start → a single-day event.

End Date Interpretation

Format → Calendar → End Date Interpretation

A date column can't say whether it means "up to" or "through". You declare it once, and the whole calendar follows:

Setting2026-03-09 → 2026-03-14 coversChoose it when
Exclusive (iCal) (default)9 – 13 March (5 days)Dates come from a system: iCal/Outlook exports, booking engines, APIs. This is the RFC 5545 convention.
Inclusive9 – 14 March (6 days)Dates are typed by people: leave requests, campaign end dates, room bookings, project plans.

The setting only affects date-only end values (midnight). It never changes:

  • Timed events — an event ending at 2026-03-09 17:00 always stops at 17:00.
  • Ends written as 23:59 — already unambiguous, always treated as inclusive.
The one-day-short symptom

If every multi-day event looks one day short, you have inclusive data with the exclusive default. Switch the setting rather than adding a day in Power Query — the setting is applied in exactly one place and keeps every view consistent.

Event Title

The label written on the event chip, on the list row, and at the top of the details popover.

  • Accepts a column or a measure; values are converted to text.
  • If nothing is bound — or a row's title is blank — the event is labelled Untitled (translated into the viewer's language).
  • Long titles are truncated to fit the chip; the full text is always available in the popover and the tooltip.

Category

A categorical column (team, status, room, channel, region…) that does three things at once:

  1. Gives every distinct value its own colour, editable under Format → Data Colors.
  2. Builds the legend.
  3. Makes the legend clickable to filter the report by that category.

Details in Categories & colours.

  • Up to 20 distinct values get their own colour picker in the Format pane. Beyond that, extra categories are still coloured from the report theme palette, but have no swatch.
  • Rows with a blank category are still drawn — they simply share the default palette colour and don't appear in the legend.
  • Leave the field empty and every event takes the same colour, with no legend.

Detail URL

An absolute http(s) address per event. When present, the event's details popover gains an Open Link button that opens the address in a new browser tab.

  • Only http:// and https:// are opened — Power BI blocks other schemes from inside a visual.
  • One URL per row: point it at the record the event came from (a booking, a ticket, a work order, a SharePoint page).
  • The link is opened from the popover, not by clicking the event itself, so a click can still cross-filter the report.

Tooltip Fields

Up to three extra columns or measures, shown on hover (when tooltips are on) and in the details popover.

  • Values respect the model format string of the column or measure — currency, percentages, decimals, date formats.
  • Column names are used as the labels, so rename in the model (or in the field well) to control the wording.
  • Tooltips are off by default: turn on Format → Tooltips to see them. The popover shows these fields whether tooltips are on or off.

The hover tooltip is assembled in this order:

  1. The event title, as the tooltip header.
  2. The category (if Show category is on).
  3. Start and End (if Show start/end dates is on).
  4. Your Tooltip Fields, in the order you dropped them.

See Tooltips for report-page tooltips.

When dates can't be read

If any row has a date the visual can't read, Power BI shows a small warning icon in the visual's header. Hovering it reads:

Rows with unreadable dates: N. Use a date column, or numeric dates in YYYYMMDD format.

The rest of the calendar still renders from the rows that were readable. The icon clears itself on the next data refresh once the underlying values are fixed.

Common causes: text dates in an ambiguous or non-ISO format, Excel serial numbers, epoch seconds, or a numeric column bound by mistake.

Next steps