Skip to content
datasquares.aiSign inStart free

Share & Export

Reports

Where dashboards are live surfaces, reports are documents: charts, tables, and narrative composed into pages you export, print, and email on a schedule.

Published reports are listed under Reports. Opening one shows it page by page.

  1. Choose Reports in the sidebar. Search, sort, and switch between grid and list to find a report.

    Choose Reports in the sidebar. Search, sort, and switch between grid and list to find a report.
  2. Select a report to open it. It reads like a document: text, charts and tables, page by page. The toolbar has Subscribe and Export.

    Select a report to open it. It reads like a document: text, charts and tables, page by page. The toolbar has Subscribe and Export.
  3. Choose Subscribe to have the report emailed to you on a schedule. Pick how often, then choose Subscribe again. The report is rendered with your own permissions.

    Choose Subscribe to have the report emailed to you on a schedule. Pick how often, then choose Subscribe again. The report is rendered with your own permissions.
  4. Choose Export to download the report as a PDF (a quick one or an exact preview), Excel, PowerPoint, CSV or HTML file.

    Choose Export to download the report as a PDF (a quick one or an exact preview), Excel, PowerPoint, CSV or HTML file.

Full screen (in the report's top bar, just before Publish; in Preview, beside Exit preview), or F anywhere outside a text field, shows the report as laid out, its pages one under the other, scrolling, alone in your browser's full screen: no menu, no header, no toolbars or panels. Move the pointer, tap the screen or pressTab (the control is the first stop) to show the small Exit full screen control at the top right; it hides again after 2 seconds. Esc or F leaves, and puts you back on theFull screen button. A screen reader hears it go in and out.

In a desktop browser's full screen the browser takes Esc itself: it leaves full screen first, and a card's Expand, a dialog or a list you opened stays open, to close with its own control or a secondEsc. Where the view fills the window instead (below), Esc closes what is open first.

None of the editor shows: no page list, no blocks to select, no panels. Leaving gives the editor back as you left it.

Where the browser doesn't allow full screen (a page embedded without the permission, Safari on an iPhone), the same view fills the window instead, and says so once.

New report opens a page with the ways to start a report: Blank report, Paginated report (print-style tables with grouping and subtotals) and, under them, the report templates your workspace saved. On that page, Blank report and each template ask for the report’s name first (left empty, it is Untitled Report), then open the editor: on a cover page, or on the template’s pages. Nothing is made there until your templates have loaded. Blank report beside New report on the list opens a blank one in one click; name it from the name’s menu at the top (Rename…).

  1. Open Reports and choose New report.

    Open Reports and choose New report.
  2. New report opens a page of ways to start: a blank report, a paginated report for print-style tables, and the report templates your workspace saved.

    New report opens a page of ways to start: a blank report, a paginated report for print-style tables, and the report templates your workspace saved.
  3. Choose Blank report and give it a name. Left empty, it is called Untitled Report until you rename it from its title.

    Choose Blank report and give it a name. Left empty, it is called Untitled Report until you rename it from its title.
  4. The report opens in the editor with a cover page, the page filling the screen and its tools on the left. To rename it later, choose its name at the top, then Rename….

    The report opens in the editor with a cover page, the page filling the screen and its tools on the left. To rename it later, choose its name at the top, then Rename….

A report’s page owns the screen: one bar at the top, a rail of tools at the left, and small pills at the page’s foot. Every action is a command too: press Ctrl+K (⌘K on a Mac), or choose Search commands or ask AI in the middle of the bar, and type its name.

  • The top bar — the logo tile (the app’s menu, with notifications, theme and your account) and Back to Reports; the report’s name, which holds its menu: Rename…, New report… (the page of ways to start), Save as template… and Create flowing copy; the save state; Undo and Redo. At the right: Preview (every page as laid out), Share with its arrow (More sharing actions: Schedule…, Email me this report…, Open on a phone… and Export…), Full screen and Publish.
  • The rail — Insert, Data, Pages, Layers and Style, and Versions at its foot. A tool opens its drawer over the page’s left edge, one at a time; it folds once used (a block inserted, a page opened), when you choose its tool again or its Fold button, or on Esc, and the keyboard goes back to its tool.
    • Insert — its search (Find a block to insert), then Text, Chart, KPI, Table, Saved query and Image, and two layouts: Title page and Chart and commentary.
    • Data — the selected block’s Filters (see Parameters), and the saved queries to put on the page (Add a saved query).
    • Pages — the report’s pages (open one, Add a page, and beside each page Move page up, Move page down, Duplicate page and Delete page…), Page setup (A4, Letter or Legal, portrait or landscape) and Open another report. Right-click a page, or press Shift+F10 on it, for its menu: Rename page, Duplicate page, Move page up, Move page down and Delete page…, each on that page without opening it.
    • Layers — the page’s blocks in reading order, a group as a folder of its blocks; select one from there (Shift or Ctrl adds it to the selection).
    • Style — the report’s style, colours, fonts and brand kit, or the report’s own look (see Design).
    • Versions — the published versions; its editors Restore one.
  • The selection’s panel — at the right, while one block is selected: Block settings, the block’s data and look. Its close button folds it until the next selection. A colour or font tile opens its panel there (see A block’s colours and fonts).
  • The quick bar — over the selected block: a text block’s Font (named in its own face) and Text colour, a table’s Text colour, then Edit, Block filters (a chart, a table or a saved query), Duplicate and Delete, with what doesn’t fit in More actions. Select several blocks (Shift or Ctrl and a click) and it holds Match width, Match height, Match size and the distributions, with Group (or Ungroup), the alignments, Copy, Cut, Duplicate, Lock and Delete in More actions.
  • The right-click menu — the same commands, for what you right-click (see Select, group and right-click).
  • The pills at the foot — the page shown, with Previous page and Next page; how many blocks are selected while several are; and Keyboard shortcuts.

Ctrl+Z and Ctrl+Shift+Z undo and redo; Esc clears the selection; the arrow keys move the selected blocks by one grid cell (on the page, never while a field, a menu or the rail has the keyboard). Tab moves between the blocks, Enter edits the focused one and Space selects it. Ctrl+/ lists every shortcut.

Select several blocks. Shift-click or Ctrl-click a block to add it to the selection, or to take it out (on a Mac ⌘-click: there Ctrl-click opens the menu instead). Drag on the empty page to select every block the box touches, or press Ctrl+A for every block on the page. Several blocks copy, cut and paste together, onto another page too, keeping their places to each other; Ctrl+Shift+L locks them, and a locked block doesn’t move or resize.

Group them. Group (Ctrl+G) makes the selected blocks of a page one group that selects, moves, copies, pastes and locks as one; Ungroup (Ctrl+Shift+G) takes apart every group the selection touches. Each is one step Undo takes back. Groups don’t nest: grouping blocks from different groups merges them. A click on a grouped block selects its group; click one of its blocks again, or double-click it, to pick that block out and open its Block settings, and Esc goes back to the whole group. A drag on the group moves it whole, stopping at the page’s edge; a block picked out moves alone. In Layers a group is a folder (Group 1, Group 2…): click it to select the group, rename it with F2, a double-click or its pencil (a blank name gives back Group n), or Ungroup it; a block under it selects that block alone.

Say the Monthly sales — Europe report opens with a title, a Revenue KPI and a Revenue by region chart: group the three and drag them down together to make room for a note above them.

The right-click menu. Right-click a block, several, or the page (Shift+F10 or the Menu key from the keyboard; on a Mac, Ctrl-click). A right-click outside the selection selects first; inside it, the menu acts on everything selected.

Right-click on The menu
One block Edit, Block filters, Font, Text colour (those it has); Copy, Cut, Paste, Duplicate; Ungroup (a block picked out of a group); Lock; Delete
Several blocks Copy, Cut, Paste, Duplicate; Group, Ungroup; Align, Match and Distribute, each a submenu; Lock; Delete
A group Ungroup and Select this block (the one you right-clicked), then as for several blocks
The page Paste, Select all; Insert (Text, Chart, KPI, Table, Saved query, Image, Title page, Chart and commentary); Page setup, Add a page

Text you are typing in keeps the browser’s own menu. See Right-click menus and selecting several things.

Who may only read a report opens it in the same frame: the name, Preview, Share’s arrow and Full screen at the top; Data (a block’s filters, kept for this visit), Pages and Versions on the rail; nothing that changes it. Where a report is read its pages fit the window’s width — never wider, and never larger than the editor’s page, which is 100 % — and zoom: with the zoom at the foot (Zoom out, the zoom’s menu with Fit, 100 % and the steps, Zoom in), with a pinch, with Ctrl and the mouse wheel, or with the deck’s keys: Ctrl = zooms in, Ctrl - out and Ctrl 0 fits (⌘ on a Mac), never the browser’s own zoom. Zoomed in, a page scrolls both ways; Fit fits it again. Preview fits and zooms the same way, and so does full screen, its zoom shown with its controls; there Page Down, the arrows, Space, Home and End read through the pages.

On a phone, a tablet held upright or a narrower window, everyone reads here, and someone who may edit is told why in one line: Editing needs a window at least 1024 px wide. You can read, filter and share here. The bar keeps the way back, the name, the search (an icon) and Share; the rest is in Ctrl+K, and the foot keeps the page’s place and the zoom’s menu. A report is made only where it can be edited, so there the New report page says at the top Creating needs a window at least 1024 px wide. You can look through the templates here., and its ways and templates say they need a wider window; Blank report on the list says the same line instead of making one.

Add text, chart, KPI, table, image and saved-query blocks from Insert on the rail.

  1. Choose Add Block to see the block types: heading, text, chart, table, image and more.

    Choose Add Block to see the block types: heading, text, chart, table, image and more.
  2. Choose Text to add a text block. Click into it to type, with a small toolbar for headings, bold and lists.

    Choose Text to add a text block. Click into it to type, with a small toolbar for headings, bold and lists.
  3. Add a Chart block. It shows Click to configure chart until you choose its data.

    Add a Chart block. It shows Click to configure chart until you choose its data.
  4. In the block settings choose the data model and table, then use the X, Y, C and S buttons beside a field (or drag it) to put it on the X axis, Values, Colour or Series, and pick a Chart Type. Block Filters and an accent color are set per block.

    In the block settings choose the data model and table, then use the X, Y, C and S buttons beside a field (or drag it) to put it on the X axis, Values, Colour or Series, and pick a Chart Type. Block Filters and an accent color are set per block.

A text block the AI assistant writes from your data says so under its text: AI-written from your data · its numbers are computed again each time the report is sent, with when they were last computed. Each scheduled send and each export computes them again, with the access the rest of the report is sent with. A number that quotes one of the report’s charts follows that chart’s report filters and parameters, so the words and the chart describe the same data; a number written for the text alone follows the report’s parameters on its data, so at a data-driven send each recipient’s commentary describes their own value, as their charts do. When a parameter has different values on different blocks, the commentary is left out rather than describe one of them. A month (or any period) counts as over once it has ended both in UTC and in your workspace’s default timezone, so a monthly report sent on the 1st speaks of the month just ended. A number that cannot be computed for that send leaves the commentary out with the reason, and the delivery history counts that block as failed. When its period simply hasn’t come yet — no complete period in the data yet, no data yet for the period in progress, or too early in the period to project a pace to its target (a tenth of it must have passed) — the commentary is left out with a note that its numbers are not available yet, the block counts as drawn, and the report is sent as usual: a weekly report sent on Monday morning is never held back for it. Edit the words and they are yours: they stay as you wrote them, and their numbers no longer change. Since they describe the report as a whole, a copy narrowed for its recipients — each one’s own value at a data-driven send, or a schedule’s own filters — leaves them out with a note instead, as its charts show only part of what they describe.

In the report itself, the commentary shows the numbers last computed, with the access of whoever they were computed for. So a reader a row-level security policy applies to on the commentary’s data — or whose policies can’t be checked — sees “This commentary was computed from data you can’t see in full, so it is hidden for you.” in its place, also in the report’s versions; the copy sent to them is computed for them. Once someone has edited the commentary’s words, those words are never computed again, so such a reader gets the same note in what is sent to them and in their exports as well. A shared or embedded report shows the same kind of note when its link filters rows, or when the commentary reads data with row-level security policies. An editor the commentary is hidden from can still move, resize, copy or delete the block, and saving the report keeps it for everyone else.

A saved query can be the data of three kinds of block:

  • A saved-query block (from Insert, or Add a saved query in Data) shows the query’s result as a table.
  • A chart block draws it. In the block’s settings, set Data from to Saved query, pick the query, then choose which of its columns fill the chart’s wells: the X axis, the values, the series. Changing the chart type keeps the columns the new type uses.
  • A KPI (a chart block of the KPI type) shows one of its columns as its number: the query’s first row when it compares with nothing. To compare it, choose Compare with: The period before, The same period last year or A target (then type the target), then the Period column, one of the query’s date or timestamp columns, and what Each row is one (a day, week, month, quarter or year). The query returns one row per period, dated the period’s first day, with its value; the KPI shows the latest whole period and its change, as a KPI on a data model does. A timestamp is read as its date in your workspace’s default timezone, so a month your database starts at local midnight is that month. When the rows aren’t one date per period (a month written as text, or a row a day under Month), the KPI says The period column must hold one date per month instead of a number, on screen and in every file.

The list offers the saved queries you can read in the SQL editor, and saving the report checks it: a block can name only a saved query of the workspace that whoever saves may read (blocks the report already has keep theirs). A report reads a saved query only through these blocks: one named anywhere else in a report (an older report’s settings, a paginated table) runs only for someone who may read saved queries, and for anyone else the block or the file says why in its place. The query runs on the server each time the block is drawn; readers never see its SQL. Anyone who can view the report sees these blocks, with the checks a saved query meets everywhere it is read: SQL that isn’t a single SELECT is refused; a reader a row-level security policy applies to on the query’s data source sees the block refused instead of rows the policy would hide; and a query that returns a column your role may not read is refused. On a public or password link the block runs as the person who made the link, and is refused when a policy on the query’s source applies to them (see What a link visitor gets).

Filters and parameters. Select one of these blocks and choose Block filters on its quick bar (or open Data on the rail): it lists the query’s result columns, and a filter narrows the query’s result by one of them. Check Prompt at export to make the filter a parameter. The block’s filters and parameters apply wherever the report is read: in the editor and its preview, on shared and embedded links (a viewer there can change a parameter’s value, never a filter you locked), in every export and in every scheduled send. A filter on a column the query no longer returns stops the block with a message rather than showing it unfiltered: change or remove the filter.

Every export draws these charts and KPIs as it draws the report’s others, a KPI’s comparison included, and from the same rows the report shows: when the data source returns only part of the result, the block says so under the chart.

Select an image block and choose its picture (a URL, or Or upload an image): the block’s settings, in the selection’s panel, then show the picture panel. Each change shows on the page at once, and each is one step Undo takes back: a slider’s drag, or a run of arrow keys on the crop, is one step.

Option What it does
Crop Drag the frame or its handles over the picture, or type the part shown, in percent. Crop shape holds the frame to a shape: as the picture, square, 4:3, 3:2, 16:9 or their portrait turns. With the frame focused, the arrow keys move it, Shift+arrows resize it and Ctrl takes bigger steps. Show the whole picture brings the rest back
Turn and flip Turn a quarter left or right; flip left to right or top to bottom, as the picture shows
Brightness, Contrast and Saturation From 0 to 200 %, on a slider or typed; 100 % leaves the picture as it is
Filter None, Mono, Warm, Cool, Vivid or Fade, each shown on your own picture
Opacity From 0 to 100 %
Shape Rectangle, Rounded, Circle or Pill. A circle crops a picture that isn’t square to the largest square in it
Border Its Border colour opens the colour panel on the report’s style colours and their shades (its design’s, or its theme’s when it has none), which follow a style switch; 1 to 40 points of the page wide, inside the picture’s edge. Without a design, the files draw it in the light theme’s colours, with the report’s own data colours, as they print
Shadow None, Soft or Lifted
Alt text What the picture shows, for people who can’t see it. The PDF, PowerPoint and HTML files also show it above the picture as its title
Replace… A new PNG, JPEG, GIF, WebP or AVIF from your computer, with the other options kept; its crop starts again, and a circle’s new picture is cropped to the largest square in it. A picture chosen another way (a new URL or upload) also starts with its whole picture
Reset Every option back to none; the alt text stays

The picture is fitted whole in its block: its share of the width of the report’s page (its size and orientation), and at most 300 pt high. A shared or embedded report shows it as the editor does, and so do the files: the PDF and the HTML exactly, Excel as a picture of it, and PowerPoint with the crop, turn, flips, a circle’s shape, the opacity and the shadow as PowerPoint’s own picture settings, so you can change them there (the colours are applied to the picture itself, and the border is an outline over it; a rounded or pill picture, or a faded one with a border, is a picture of it). Excel and PowerPoint fit it in the room they give a picture, its border and shadow scaled with it, so it keeps the proportions the editor gives it. The files draw a PNG or JPEG picture with its options; a GIF, WebP or AVIF one, or one of more than 40 megapixels (an 8000 × 6000 photo is 48), is left out with a note that says so: replace it with a PNG or JPEG, or a smaller copy.

A photo whose file says it is to be turned (as phones write one taken on its side) shows turned, as your browser shows it, in every file, with options or without. PowerPoint turns it by the picture’s own rotation, except when its colours are changed or it is rounded, pill shaped or faded with a border: then the picture itself is upright, as it shows. Excel holds a picture of it turned, so in Excel such a photo of more than 40 megapixels is left out with a note, even without options.

The paginated builder produces print-ready reports with groups and subtotals. For current controls, multi-section documents, parameters, physical page layout, templates and calculation evidence, use the paginated reporting guide.

  1. Open a new paginated report. Choose the data model and the table on the left. A paginated report prints across pages with repeating headers, group subtotals and grand totals.

    Open a new paginated report. Choose the data model and the table on the left. A paginated report prints across pages with repeating headers, group subtotals and grand totals.
  2. Click fields to add them as columns, in order. Set each column's header label and number format, and choose a subtotal such as Sum for numbers.

    Click fields to add them as columns, in order. Set each column's header label and number format, and choose a subtotal such as Sum for numbers.
  3. Group rows by a field to get a subtotal for each group. The page size and orientation are set beside the report title.

    Group rows by a field to get a subtotal for each group. The page size and orientation are set beside the report title.
  4. Choose Create report. The report is saved and reopens at its own address, ready to export or schedule like any other report.

    Choose Create report. The report is saved and reopens at its own address, ready to export or schedule like any other report.

In the dashboard editor, choose Add to report on a card’s quick bar (More actions), or right-click the card. Pick a report, or choose New report… to start one with the card as its first block.

  1. Right-click a card (or open its menu) to see what you can do with it, including Add to report.

    Right-click a card (or open its menu) to see what you can do with it, including Add to report.
  2. Choose Add to report. Pick the report to add the chart to, or create a new one from the dialog.

    Choose Add to report. Pick the report to add the chart to, or create a new one from the dialog.
  3. Select the report, then choose Add block. The chart is copied into the report as a block, with its data settings.

    Select the report, then choose Add block. The chart is copied into the report as a block, with its data settings.
Standard Paginated
Builder block-based WYSIWYG — text (rich editor), charts, tables, and images on a page grid, with undo/redo and versions print-style tablix builder
Strengths narrative documents, executive summaries grouped data with subtotals and grand totals flowing across as many pages as needed
Page setup A4 / Letter / Legal, portrait or landscape A4 / Letter, portrait or landscape

New reports start blank or from a template, both on the New report page; the list page tracks both kinds with search, sorting, and duplicate.

In the standard editor’s Pages list the open page is part of the address (?page=<page-id>), so a link or a refresh lands on it. ↑ / ↓ move between pages, Enter opens one, F2 renames it, Alt+↑ / Alt+↓ move it, and Shift+F10 opens its menu.

A report follows the workspace’s roles: anyone whose role can view reports opens it. To open one report to a member their role does not cover, or let them change it, share it with them. Grants sit on top of roles, as a dashboard’s Access does: a grant only ever adds access to this one report, never takes any away.

Open the report (the editor or the paginated builder) and choose Share:

  • The list shows who the report is shared with and as what: viewer opens it, even when their role can’t view reports (from the notice in their Inbox, or a link to it; the Reports list itself follows their role); editor can also change and publish it, and the app opens it for them to edit.
  • Search members by email or name, choose Viewer or Editor, and Share, or pick someone from the matching members. Sharing with someone again changes what they may do. They are told in their Inbox, unless they turned off that notice.
  • Remove asks first, then stops sharing; their role still decides whether they can open the report.

Managing the list takes the right to edit the report: a role that edits reports, or an editor grant on it. Anyone who can open the report reads the list. Only active members of the workspace can be given access; for people outside it, schedule the report to them. Each share and removal is in the Audit Log as report.access_granted or report.access_revoked.

The API is GET, POST and DELETE /api/reports/{id}/access, with /access/candidates?q= for the matching members; GET /api/reports/{id} answers can_edit, and GET /api/reports lists the reports shared with a member whose role can’t view reports. Saved queries, metrics, data sources, models and datasets stay on roles: they can’t be shared one by one yet.

Delete a report from the Reports list. It moves to the Recovery Center, where an admin can restore it for the workspace’s recovery window. Deleting needs the delete permission, with one exception: Blank report creates the report at once, so opening it and leaving leaves an Untitled Report behind, and you can delete that one yourself even if your role cannot delete reports.

A report is an untouched draft while it is still named Untitled Report, is not a template, and has no description, blocks, filters or table definition, no versions or schedules, and was never published. One change and it is an ordinary report. The list offers Delete only when it can see that the report is untouched; if a saved version or a schedule says otherwise, the server declines and the list shows Failed to delete report. An untouched draft that nobody changes for 7 days is removed automatically and waits in the Recovery Center, marked Removed automatically — see Drafts nobody touched.

Reports support promptable filters — parameters readers fill in when viewing or exporting. Paginated parameters support typed values, multiple selections, number/date ranges, saved defaults and cascading authorized choices. See parameter setup and run values. Saved table and document reports require signed-in workspace access; do not assume the public sharing options for standard block reports apply to them.

The Android app compares changes too. See mobile comparison controls for its filters, repeated sections, matrix scopes and evidence.

For private background jobs, the Android app has Android export history, Android document/complete-table queue and cancellation and Android private file previews and sharing. Whether new background exports can be queued depends on the server’s export settings.

In the paginated builder, AI layout suggestions can propose formatting changes for explicit review. Select individual changes, apply them to the draft, inspect the preview and save separately. This uses AI credits and sends only your request and curated layout settings/labels to the provider. See the review workflow and supported settings.

Compare changes in a saved table or matrix

Section titled “Compare changes in a saved table or matrix”

In the web paginated report builder, save the report and choose Compare changes beside the report view controls. Choose a Report section, a sum, count, average, numeric minimum or maximum (or a matrix distinct count), and a visible breakdown field. Tables use their declared report groups; matrices can use a row or column axis field. Enter Before parameters and After parameters, then choose Compare saved report. Before starts with saved defaults; After starts with the current run values. The comparison uses the saved definition. For a repeated section, first follow Choose a repeated partition.

A repeated report may contain a separate statement for each customer, with customer statements nested inside country groups. Select that table or matrix path in Report section, set both parameter sets, and choose Load partitions. This runs two authorized fresh queries and lists each typed group path with its Before and After row counts. It does not call AI.

Select a Repeated partition that exists on both sides, then choose Compare saved report. A customer with the same name in another country is outside the selected partition. Nested and reused sections apply every saved ancestor group before formulas, totals, averages or distinct counts are evaluated. The same group values must apply on both sides; this is not a comparison of two different customers. Matrix totals cover all axes inside that partition.

The picker preserves types: 1, "1", false, "false", null and empty text "" are different values. Missing values join the null group, matching the document renderer. Text is shown in quotes. Partition values must be text up to 500 characters, booleans or safe finite numbers; model complex values as text. At most 200 partitions are supported across both captures along the selected path, with the renderer’s 200-group limit at each repeated level. Narrow the parameters if a limit is exceeded.

Loading choices is separate from comparing. Compare saved report runs two new queries and checks the selected partition again. An absent partition is disabled in the picker; if it disappears later, comparison fails and asks you to reload. A missing statement is not assigned a zero total. Parameter changes, section changes, failed lookups and refreshes clear prior choices and evidence; cancellation discards late results. Capture evidence shows both the selected partition’s row count and the complete query’s row count. The selected ancestor values appear in Compared repeated partition; that metadata is not added to the optional AI payload. Visible breakdown labels can still contain those values if you choose the same field as the breakdown.

The result shows both reported aggregates and their absolute and percentage change. For sums, counts, averages and distinct counts, it also shows the eight largest group movements. Other movers are combined so their contributions reconcile to the change. A percentage is undefined when Before is zero; a negative baseline uses its magnitude. Table count includes null measure values because it counts returned rows. Matrix count excludes null, undefined and empty strings, matching the matrix renderer. Table sums and averages exclude null, empty strings, booleans and nonnumeric values. Matrix sums and averages exclude null and empty strings, but refuse other nonnumeric values. Whitespace-only numeric strings follow the renderer’s conversion to zero.

For an average, each group contributes its numeric sum divided by the total numeric row count for that capture. The contributions add to the overall report average; they are not individual group averages. Changing group sizes can change the average even when group averages stay constant. Capture evidence shows the numerator and denominator. An empty numeric table capture uses the report engine’s zero average. For a matrix sum or average, both captures must have numeric observations; an undefined matrix total cannot be compared. Empty matrix counts are zero.

For a minimum or maximum, Groups reaching the minimum/maximum identifies groups that reach the reported value in either capture, including ties. Each row shows that group’s own before/after extreme and how many returned rows match the overall extreme on each side. A missing group or one with no numeric observations shows No numeric values, which is distinct from an observed zero. Matching groups can change even when the reported value stays the same.

Up to eight matching groups are shown, including a representative from each capture. The panel gives the full number of matching groups on each side and the number omitted from the list. It does not combine omitted extrema into an Other total. Group minima/maxima are not additive contributions, so they have no shares of change. Capture evidence shows the numeric-row count and how many rows reach the reported extreme. These counts refer to the returned query grain, not necessarily individual source records. The selected group evidence and omission counts are also included when you request an optional AI summary.

Minimum/maximum comparisons require numeric observations in both captures, for tables and matrices. An empty or all-ignored table capture is refused even if the ordinary table renderer supplies a default zero. Numeric strings follow the report’s conversion rules. Table extrema ignore null, empty strings, booleans and nonnumeric strings; matrix extrema refuse nonnumeric values other than null/empty strings. Date and text ordering are outside this comparison. Row-local calculated table extrema are supported, with the same expression and precision checks as other totals.

For a matrix distinct count, each distinct nonempty value counts once overall. When a value appears in several breakdown groups, its one count is split equally among those groups. Duplicate rows within a group do not increase its allocation. For example, an account appearing in North and South contributes 0.5 to each; an account appearing only in North contributes 1 to North. These contributions add to the matrix grand total, but are not the distinct counts of the individual groups. This allocation is a stated comparison rule, not proof of what caused a change.

Distinct values across captures shows counts added, removed and retained. These are counts of distinct measure values, not source records. Retained values may move between groups; allocations can change even with no net count change. Conversely, replacing one value with another can leave every group allocation unchanged. The added/removed counts still show that turnover. Capture evidence shows each capture’s distinct total, nonempty row count and number of values shared across groups. No extra list of distinct identities is returned or sent to AI; the selected visible breakdown labels are included as with other comparisons.

Distinct-count comparisons accept text, numbers and booleans. Numeric 1 and text "1" are distinct, as in the matrix renderer. Null, undefined and empty strings are excluded; whitespace text is a distinct value. Empty captures count as zero. Complex values and unsafe numeric identities are refused; model complex values as text before comparing. Group allocations may be fractional, while the overall distinct counts and added/removed/retained counts remain exact integers.

Row-local and dataset calculated columns/groups use the same expression evaluator as the report. Chained formulas and Sum, Avg, Min, Max and Count() are supported. Dataset functions use all returned rows in the selected section, after repeated-partition filtering and before the breakdown is grouped. For example, [amount] / Sum([amount]) * 100 uses that capture’s section total as its denominator. Each capture calculates its own values; contributions aggregate those calculated rows without recalculating each breakdown group in isolation. The calculation scope appears beside the choices and the resulting evidence.

Unknown dependencies and cycles are refused. Calculations with unsafe numeric inputs, literals, aggregate additions or intermediate results are also refused before a comparison is returned; use a scaled modeled measure. No formula operands are sent to AI. Dataset aggregates are reused within one column pass, so a section total is not recomputed separately for every output row.

Saved table window calculations are also supported: running total, percent of total, rank, moving average, period change/percent, year-over-year percent and year-to-date. These follow the report query’s saved x-axis order and series. They run on the complete returned query before repeated-section filtering; dataset expressions and report totals then operate on the selected section’s transformed rows. A sum of running-total rows is not the final running balance. Use the same aggregate you intend to show in the report and read the calculation-scope notice.

Ordered windows require a saved x-axis with unique, nonempty ordering values within each series. Tied buckets, mixed ordering types, ambiguous series types, invalid year dates and unsafe source numbers/intermediate arithmetic are refused. Aggregate tied buckets or correct the modeled fields first. Moving-average windows must be integers from 1 to 10,000. Rank and percent-of-total do not need ordering. Printed matrices continue to require detail fields without query windows; raw SQL saved-query blocks do not gain window processing through this comparison.

Capture evidence shows timestamps, returned-row counts, ignored values, query filters and fingerprints. These are two independent fresh queries under your current permissions. They are not retained historical snapshots, and a group contribution does not establish a business cause. Changed report definitions or access rules invalidate the result; use Refresh choices and compare again.

Include an AI summary is optional and off by default. When available, it uses AI credits and sends only calculated aggregate facts and group labels to the configured provider. It does not send the raw rows, SQL, access policies or parameter filters. Check its wording against the calculated evidence. If the provider fails, the calculated comparison remains available.

For a matrix, Matrix scope starts at Grand total. To compare one cell or subtotal, set both parameter sets, choose Load cells and subtotals, then choose a scope present in both captures. For repeated matrices, select the repeated partition first. The list follows the saved row/column axes and includes enabled subtotals and totals across either axis. Text values appear in quotes, so numeric 1 and text "1" remain distinct.

For example, choose region="North" / All columns to compare North’s subtotal across the two parameter sets. A leaf cell includes its full row and column paths. The same typed axis values must have contributing rows in both captures; an absent cell is not assumed to be zero. Loading choices and comparing each run two fresh queries. Parameter, section or repeated-partition changes clear old choices.

All six matrix aggregates use the contributing source rows directly. Subtotals never sum duplicated child cells or average child averages. Shared distinct-value allocations apply inside the selected scope. Compared cell/subtotal and Capture evidence show the selected paths and scoped/source row counts. Scope discovery is limited to 200 cells/subtotals across both captures; narrow parameters or use the grand total when this limit is reached. If the same field appears as sum and average, each has a separate choice tied to the saved report revision.

This comparison supports ordinary saved v1 tables and root, reused or repeated v2 tables and matrices with a visible breakdown and a sum, count, average, numeric minimum or maximum; matrices also support scalar distinct counts. Row-local and dataset calculated columns are supported in tables. Repeated sections require the explicit partition selection above. Table windows follow the ordering and precision requirements above. Incomplete captures, unsafe numeric precision, and more than 2,000 distinct groups across both captures are refused. Narrow the parameters or use a suitable modeled measure.

Message or symptom What to do
No supported section or total Save a table with a declared aggregate and visible group, or a matrix with a declared measure and row/column axis. Save edits before refreshing choices.
Saved report changed Choose Refresh choices, re-enter the parameters, and reload any repeated partitions.
Source or report access changed Restore the appropriate access through your workspace administrator, then refresh. Previously displayed evidence is discarded.
Incomplete capture or too many groups Narrow the parameter values. A source cap is not a complete total; comparison does not silently extrapolate.
No numeric observations Choose captures containing numeric measure values. Min/max cannot infer an extreme from an absent or all-ignored capture.
Unsafe precision or a calculation error Correct the expression or use a safely scaled modeled measure. Numeric comparisons cannot preserve arbitrary-precision decimals.
Repeated partition absent Reload partitions and choose one present in both captures. Do not substitute a different customer’s section.
Matrix cell/subtotal absent Reload cells and choose a scope with rows in both captures. Changes to the saved axes require Refresh choices.
More than 200 matrix scopes Narrow parameters, or compare Grand total without loading cells.
Ambiguous window ordering or series Use one consistently typed x-axis and series; aggregate tied buckets. Year-based windows need valid dates.
AI summary unavailable Use the deterministic evidence. An optional provider failure does not discard a valid comparison.

A report reads like a document, and like a document it can take a finished look in one click: a style sets its colours, its fonts and the shape of its cards together. The styles, colour palettes and font pairings are the same ones offered wherever you choose a look in DataSquares, and your brand kit is offered first.

  1. Open the report and choose Style on the rail.
  2. Choose a style. The page changes as you choose, in the editor and in Preview.
  3. To keep the style with other colours, open Colours and choose a palette; for other fonts, open Fonts and choose a pairing. Choosing the style’s own palette or fonts again goes back to them.
  4. To use your organization’s colours and fonts, turn on Use brand kit, before or after choosing a style; turned on first, the report starts on the style that keeps most of the kit (where several keep as much, a light one, or a dark one when your brand’s background is dark). It is offered when your workspace (or your company) has a brand kit that changes some look, and puts the kit’s colours and fonts over the style wherever the kit sets them and they read in that style (Brand kit).

Each choice is one step: Undo takes it back, and the report saves it as it saves any other change. Choosing a look never changes the report’s data, its filters or who can see it.

Part of the report What the style gives it
Page Its background colour, on every page
Text The body font and the text colour
Headings The heading font: the first heading level in the display face, the other headings, page names and block titles in the title face, each at its usual size
Numbers A KPI’s value in the number font and the accent colour
Tables The header row in the accent colour, with text in whichever colour reads best on it (where no text reads well enough on the accent, a deeper or lighter shade of it); rows striped and ruled in the style’s colours. In the PDF, a matrix’s group and subtotal rows are banded in them; the other files set those rows in bold
Charts Series in the palette’s data colours, labels in the style’s fonts and colours. Past the palette’s colours, series are shades that read on the style’s page and cards; Excel’s read on its white sheet
Cards Charts and KPIs sit on cards with the style’s corners and outline

Sizes stay the report’s own: a style chooses fonts and colours, never how big things are. A font or colour you set on one block in its settings stays as you set it, headings included.

A block’s colours and its font are tiles. Each shows what it holds (a colour’s swatch and its name or code, a font’s name in its own face) and opens the colour panel or the font panel in the selection’s panel.

Where Tiles
The quick bar A text block’s Font and Text colour; a table’s Text colour
Block settings A text block’s Font, Text colour and Background colour; a table’s Font and Text colour; a chart’s or an image’s Background colour; a picture’s Border colour
A text block’s toolbar, while you edit it Font of the selected words, Colour of the selected words and Highlight
Style, under The report’s own look Accent colour

Colours. The colour panel offers In this report (the report’s colours, most used first), the style’s colours with their shades, under the style’s name (a report with neither a style nor a theme of its own is offered the colours its files print in, … theme, as printed), and your brand kit. A colour you pick is kept as the code it paints, which is what every file reads, so it stays as it is when the style changes. A picture’s border takes only the style’s colours, and follows a style switch. A text colour, and the colour of selected words, shows its contrast on what the text sits on, at 4.5:1: the block’s own background, or else both the page as the editor draws it and the paper the files print it on (the style’s page colour, or white for a report with no style), the lower ratio counting. So a report with no style, edited in the dark theme, is still judged on its white paper.

Change all. After a pick, the panel’s foot says where the colour you started from is still used, and offers to change it there too. Say a monthly sales report sets its headings in last year’s brand blue, #1D4ED8, and you give one heading this year’s navy, #1E3A8A. The foot says #1D4ED8 is in 6 more parts on 3 pages., with This page and Everywhere. This page changes the two on this page and says Changed 2 parts on this page., then offers the rest: #1D4ED8 is in 4 more parts on 2 other pages., with Everywhere. Where every one is on this page, the foot has a single Change all. It reaches text colours, backgrounds, coloured and highlighted words (each run of them a part), and pictures’ borders (only when the new colour is one of the style’s), each written in the form it keeps. The font panel’s Change all does the same for a font, counting blocks, or for the selected words’ font. Each is one step Undo takes back.

Fonts. A block’s font panel lists your brand kit’s fonts, In this report (its blocks’ fonts and its style’s), recently used and popular ones, then every family DataSquares bundles, by kind, and the fonts of your computer. Resting on one shows the block in it. Use the report’s font, at its foot with that font’s name, takes the block’s own font away. Selected words keep the six fonts they always had: Geist, Georgia, Times New Roman, Courier New, Arial and Verdana.

Under a brand lock the colour panel offers the style’s colours and the brand kit’s alone (Your company keeps reports to its brand’s colours.), and the font panel the brand’s fonts. A block colour an older version of the app kept as a style colour is drawn nowhere: its tile says …, not drawn, and the panel asks you to pick a colour to draw it.

A text or table block’s Font offers the thirty families DataSquares bundles, by kind, and the classic fonts of your computer: Arial, Courier New, Georgia, System UI, Times New Roman and Verdana. A chart or table block’s Format panel sets a font of its own too (Typography), as a dashboard card’s does. Selected words in a text block keep their six fonts (above); the page shows them in their font, and the files set them in the block’s.

The bundled families are files DataSquares serves itself, under the SIL Open Font License, never fetched from another site, so the page shows them on any network. Each prints as it shows, in scheduled emails too:

  • PDF draws a text block, a table’s header and cells, a chart’s text, and a KPI’s value and label in the family: bold in its bold, italic in its italic (slanted where the family has none), and letters the family has not (Chinese, Greek) in the report’s fonts beside it. A font of your computer draws in the PDF’s own font of its kind: Georgia and Times New Roman in Times, Courier New in Courier, the others in Noto Sans.
  • PowerPoint names the family on a text block, a table, a chart’s text and a KPI, so a computer with the font shows it and one without it uses PowerPoint’s nearest. A font of your computer is named as Office knows it: System UI as Segoe UI.
  • Excel draws a chart’s picture in the family.
  • HTML shows text blocks and tables in the report’s fonts, and names a chart’s own font on its labels.

The look appears on the page in the editor, in Preview, in shared links and embeds, and in every file the report becomes. Two places draw part of it their own way:

  • In the editor, a table is drawn as it is on a dashboard: its header is underlined in the accent colour rather than filled with it. The files fill it.
  • In PowerPoint, a text block becomes one text box in the body font: its headings keep their words, not the heading fonts or sizes.

What each file takes:

  • PDF includes the fonts, so it looks the same wherever it is opened.
  • PowerPoint names the fonts on its text. On a computer without them, PowerPoint uses a similar font of its own, in the same places.
  • HTML includes the fonts, so the file shows them with no network connection.
  • Excel fills its table headers in the style’s header colour, with text that reads on it, and draws its charts in the style’s colours. A sheet stays white, so a block’s title takes a shade of the accent colour that reads on white.
  • Scheduled emails attach the report in its style, with your brand kit when the style uses it. The brand kit is the one your workspace has when each email is sent.
  • Shared links and embeds show the report in its style. When the style uses the brand kit, they show your workspace’s brand kit, never the viewer’s.

A report with no style keeps its own look: the Theme and Accent colour in Style, under The report’s own look. A theme comes from the same catalog as dashboard themes (built-ins plus your workspace themes) and re-skins the page surfaces, text and chart palettes for print.

While a style is chosen it is the report’s whole look. To go back, open Style and choose Use the report’s own look: the theme and accent the report had come back as they were.

Paginated reports, built in the paginated builder, keep their own look.

Any report can be emailed on a schedule:

  • Frequency — daily, weekly (pick the day), or monthly (pick the date), with time and timezone.
  • Format — choose the supported format shown for the report; paginated reports also support Word. A block report’s schedule, preview or test send in Word is refused, naming the formats to choose instead. See format differences.
  • Recipients — an email list, with Send Test before committing.
  • Dates — a sent report writes its dates in your workspace’s date format and default timezone, as an export does.
  • Schedules can be paused/resumed, and a delivery history records each run’s sent/partial/failed counts.

A new schedule first sends at its next time, never at once for a time already past, and so does one whose time or time zone changes or that is resumed. Saving the same schedule twice within two minutes, with a double click for example, makes one schedule.

A send that fails is tried again a few times, further apart each time (after 2, 4, 8, 16 and 30 minutes, about an hour in all). Then it is given up: the delivery history keeps what it reached and says so, and the schedule’s creator, or for a subscription its subscriber, is told in the app. A send that no retry would change, such as one refused or an attachment over the size limit, is not tried again and is told the same way. One report’s slow or failing send never holds back another workspace’s schedules.

A schedule sends the report as the person who created it sees it, with their data permissions, to everyone on it, unless it uses the member-based delivery policy below. So only that person or a workspace admin can change who such a schedule sends to or what it sends: its recipients, its data-driven list and the values it fills the report’s parameters with. Only they can switch a schedule’s delivery policy. Anyone else who can edit the report is told so if they try, and can still change the rest of the schedule, such as its timing and format. To get the report yourself, use Email me this report: your copy shows what you can see.

When you edit someone else’s schedule, its recipients, data-driven list and delivery policy are shown as they are, with Email me this report beside them; you can still change when it is sent and its format.

The report itself is shared work, so when someone other than a schedule’s creator or a workspace admin changes what it shows (its blocks, layout or data, by hand, by restoring a version or through the AI assistant), each such schedule of it pauses for review, and its creator is told in the app. The same happens when they change something the report reads without opening it: the data model its blocks use (a field, measure or table added, changed or deleted, a relationship between its tables, a table’s transform steps, a schema sync or table import, or an earlier version of the model restored), the SQL of a saved query a block runs, or the definition of a metric it shows. The schedule list says why, for example Waiting for its creator: Carol changed the data model “Sales” on 2026-10-23 14:51. Only the creator or a workspace admin can resume it, after checking what it now sends; anyone else sees the reason, not a Resume button. Their own edits pause nothing, nor does the report’s new name, page size or orientation, a new description for a field, measure or metric, or a saved query’s new name, and member-based delivery and subscriptions never pause this way: they send each person their own view.

A schedule sends the report’s filters, its parameters among them, as they were when its creator made it, so anyone can change the filters in the editor without pausing a schedule or changing what it sends. When the report’s filters have changed since, the schedule list says so, and its creator or a workspace admin can choose Use current filters; no one else can, whatever the schedule’s delivery policy. Resuming a paused schedule also makes it send the filters as they are then, and a paused schedule whose filters have changed says so before you resume it. Switching a schedule from member-based delivery back to sending as its creator does the same. A schedule made before this release, or made by the AI assistant, keeps the filters it is sending: it takes them as they are at its next send, or just before someone other than its creator or a workspace admin first changes them.

A filter finds its field by the field’s name or id, so a field that a block, the report’s filters, a schedule’s filters or a metric still uses can’t be deleted, and a new field can’t take the name of another field of its table, or of a column one reads. Should a filter a schedule sends still come to name a field its data model no longer has, that send is skipped rather than sent without the filter: the schedule’s creator is told in the app, once for each new reason, and the delivery history says which filter to correct.

The email that carries a scheduled report uses a published message version: its subject, inbox preview, introduction and footer, with approved variables such as {{target.name}}. Administrators publish a new version with New version; a schedule keeps the version it was given until someone changes it, so publishing never changes an existing schedule.

To retire a workspace version, select it in the schedule dialog and choose Retire version. Schedules already using it keep sending it unchanged, but new schedules can’t choose it and it leaves the list. The system message can’t be retired.

The delivery history shows each run’s counts: accepted, rejected, unknown and failed. Administrators can open Recipient evidence on a finished run, for reports and dashboards alike, to see each recipient with the outcome, the attempt, the error and the mail provider’s message ID; a run still being delivered offers it once it finishes, and a skipped run has none. Every opening is recorded in the audit log. Recipient-level evidence is deleted after the retention period; the counts stay. A run with no evidence either never reached delivery or has passed that period.

Per-recipient filtering: choose a filter column and map each recipient to a value — every recipient receives the report filtered to their slice (the classic “each regional manager gets their region” pattern).

For governed paginated delivery, use the member-based delivery policy when it is available. Select workspace members and map their report parameters, then review the resolved destinations. Each recipient is checked with their current identity, source permissions, row security and masking. An occurrence pins the saved definition and parameters so a mid-run edit does not mix versions. Review the delivery history for sent, partial and failed outcomes; a queued occurrence or draft check is not proof that an email arrived. Legacy author-context delivery is a separate policy; do not assume it has recipient-level isolation.

You don’t need to be the report’s author to get it by email. Anyone who can view a report can choose Email me this report… (in Share’s arrow) and have it delivered to their own inbox on a schedule — pick a frequency (daily, weekly, or monthly), time, and format, then pause, resume, or unsubscribe anytime.

Subscriptions are personal: the email goes only to you, and the report is rendered with your own data permissions — row-level security applies to your copy exactly as it does when you open the report. Author-managed schedules and your subscriptions are listed separately, and an author can’t change yours. If you lose access to the report, the deliveries stop.

All your subscriptions — reports and dashboards — can be listed in one place (GET /api/reports/subscriptions); the mobile app shows them together.

Paginated Export… (in Share’s arrow) offers PDF, HTML, Excel, CSV, Word and PowerPoint, using the saved definition and current run parameters. Save edits first. Preview PDF uses the current draft. Standard block reports have a separate PDF (exact preview) option. Exports explains format differences, private background jobs and complete streaming CSV/Excel exports.