Skip to main content
Data alerts are available wherever scheduled refreshes are: on Premium and Enterprise plans, for users with at least the Explorer role and Edit or Manage permission on the workbook.
A data alert turns a scheduled refresh into a watch on one number. Without an alert, a schedule with a notification sends it after every run. With one, each run checks a value on the dashboard, and the notification goes out only when that value meets the condition you set — for example, when the orders count goes above 1,000, when revenue drops by 10% or more from the previous month, or when this week’s sign-ups look unusual. An alert belongs to one schedule. The schedule’s frequency is how often the condition is checked, and its notification — email recipients or a Slack channel — is who hears about it. The dashboard is still refreshed on every run, whether the alert fires or not.

Creating a data alert

  1. Open the scheduled refreshes sidebar of a published dashboard and click Create scheduled refresh, or edit an existing schedule.
  2. Click Add alert condition. An Alert condition card opens above the notification.
  3. In Chart, pick the chart or KPI to watch. The list holds every chart and KPI widget on the published dashboard, including those inside grid, stack, and tabs containers. A chart that can’t carry an alert is listed but disabled; hover it to see why (see Which charts support which rule).
  4. In Measure, pick the value to read. The chart’s first measure is selected for you. Measure and Condition stay disabled until you pick a chart.
  5. Under Condition, choose the rule type and fill in its fields.
  6. Click Add notification and choose email recipients or a Slack channel. An alert needs somewhere to send its notification, so Save stays disabled until it has one.
  7. Click Save.
While something is missing, the dialog footer says what it is — for example, “Enter the value to compare with.” or “An alert needs a notification: add recipients or a Slack channel.” On a dashboard with no charts, the card reads “This dashboard has no charts to check.” and the footer reads “This dashboard has no charts to check. Remove the alert condition to save.” Click the card’s ✕ to save the schedule without an alert. You can also create an alert from the Scheduled refreshes tab of the Scheduled page. Its Create scheduled refresh dialog shows the Add alert condition button from the start, disabled with “Select a dashboard to add an alert condition.” until you pick a Dashboard. After that, it works as it does in the sidebar.

From a chart’s menu

To watch a particular chart, open that chart or KPI’s menu (⋮) on the published dashboard and choose Create alert. The Create scheduled refresh dialog opens with the Alert condition card already open, that chart in Chart, and its first measure in Measure; continue from step 5 of the list above. Everything outside the card starts as it does for Create scheduled refresh in the sidebar. When you save, the dialog closes with “Scheduled refresh created”, and the new schedule is listed in the scheduled refreshes sidebar. Create alert is offered only to people with Edit or Manage permission on the workbook, and never on an embedded dashboard, published or in Creator Mode. On a plan without scheduled refreshes (see the note at the top of this page), it is still listed, but pressing it opens the Scheduled refreshes upgrade dialog instead of Create scheduled refresh. In the dashboard builder, a chart’s menu offers Create alert too. An alert reads the published dashboard, so the item is enabled only on a chart that is in the published version. On a chart added since the last publish, or on every chart of a dashboard that has never been published, it is disabled, and hovering it shows “Publish the dashboard to create an alert on this chart.” Once you publish, the item is enabled. If the chart can’t carry an alert — it is split by a dimension, or Cube can’t read its query — the dialog still opens on it, disables every rule type, shows the reason under them, and keeps Save disabled with, for example, “This chart has no single value to check. Choose another chart.” Pick another chart in Chart to continue.

Rule types

Threshold

The condition is met when the measure is above, is below, or is equal to the number you enter in Value. Is equal to compares exactly, so it suits whole-number measures such as counts.

% change

The condition is met when the measure increases by ≥, decreases by ≥, or changes by ≥ (in either direction) the percentage you enter. On a chart with a time dimension, it compares the chart’s last complete period with the period before it, and the field reads “vs the previous period”. On a chart or KPI without one, it compares the value read now with the value the previous check read, and the field reads “vs the previous check” (see Comparing with previous checks). When the previous period’s or previous check’s value is 0 there is no percentage to compute, so the check can’t run and nothing is sent.

Anomaly

On a chart with a time dimension, the condition is met when the last complete period falls outside the normal range of the periods before it. On a chart or KPI without one, it is met when the value read now falls outside the normal range of the values the alert read on its earlier checks. The normal range is their median ± 3 × the median absolute deviation. If every earlier value is the same, the range is that value alone, and any other value is outside it. The rule needs at least 8 earlier values: complete periods before the latest one, or earlier checks on a chart without a time dimension. Until it has them, the check can’t run and nothing is sent.

Which charts support which rule

The dialog offers a chart and a rule type only where the chart has the value it reads, and says why when it doesn’t:
  • A chart or KPI without a time dimension supports every rule type. % change and Anomaly compare its value with the values the alert read on its previous checks, and the dialog says so under the condition: “Compares with the values this alert read on its previous checks.”
  • A chart split by a dimension besides its time dimension — a bar chart by category, or a line chart with one line per status — has no single value to check, so it is disabled in the Chart list. Its tooltip says why, for example ““Orders by month and status” is split by Status, so it has no single value to check. Pick a KPI or a chart without a breakdown.” A chart with several measures and no breakdown is fine: you pick one measure.
  • A chart whose query Cube can’t read, such as a Python analysis or a chart built from SQL, is disabled in the Chart list too.
If the chart an alert already watches can no longer carry one — for example, it is now split by a dimension — Edit keeps that chart in Chart, disables every rule type, and shows the reason under them.

What an alert checks

The data the notification shows. The alert reads the chart with the schedule’s control values, and with the dashboard’s published default for every control the schedule leaves on Use default — the same data the notification’s screenshot shows. For example, if the dashboard’s Status filter defaults to completed orders and the schedule sets it to Clear, the alert reads the orders of every status. The dialog, every alert email, and every Slack message say so: “Checked with the dashboard’s default filters and this schedule’s saved filters.” If you republish the dashboard or change a default, the next check uses the new version. The last complete period. On a chart with a time dimension, every rule reads the last complete period: the period still in progress, and any later periods the data holds, are skipped. A monthly chart checked on September 15 reads August. Periods follow the granularity the chart is drawn with, so a time granularity switcher that changes it changes the period the alert reads. On a chart without a time dimension, the alert reads its single value, and % change and Anomaly compare it with the values the alert read on its previous checks. The schedule creator’s access. The check runs once per run, with the data access of the person who created the schedule.

Comparing with previous checks

A chart or KPI without a time dimension has no earlier periods to compare with, so a % change or Anomaly alert on it remembers the value it reads on each check and compares the next value with those:
  • % change compares with the value the previous check read. The schedule’s frequency sets what “previous” means: on a daily schedule, a check compares with yesterday’s.
  • Anomaly compares with the normal range of the values the earlier checks read, once there are at least 8 of them.
The alert remembers the values of its last 30 checks. Threshold alerts, and alerts on a chart with a time dimension, remember nothing. The first check of a % change alert has nothing to compare with: it remembers its value and sends nothing. Its card reads “Last check: less than a minute ago, could not check”, and hovering the line shows “could not check. There is no earlier check to compare with yet. Nothing sent.” On an Anomaly alert’s first check the hover reads “Needs 8 earlier checks, has 0.”, and each later check counts up until there are 8. Only the schedule’s creator sees the count; anyone else reads “Needs 8 earlier checks.” Run now is a check like any other: it compares with the remembered values and adds its own, so the next scheduled run compares with it. Pressing it twice gives the second press a previous check. A check remembers nothing when it can’t read a number (for example, the chart returned no rows or is now split by a dimension), or when it found the condition met but its notification reached no one. The next check then compares with the same earlier value. The remembered values are kept when you change the schedule’s frequency, time, timezone, recipients, or Slack channel, and when you turn the schedule off and on again. They are discarded, and the alert starts over from its first check, when you change the alert’s chart, measure, rule type, direction, or percentage, or the schedule’s control values. Republishing the dashboard keeps them: if you change the chart’s filters and republish, the next check compares the new value with the values read before the change.

When an alert notifies

An alert notifies when its condition starts to hold, and again only after it has stopped holding and then starts again. While the condition keeps holding, later runs send nothing, so a value that stays above its threshold for a week sends one notification, not seven. There is no notification when the condition stops holding. A notification that reaches no one — for example, when the only recipient is a group with no members — doesn’t count as sent: the next run that finds the condition met tries again. Run now checks against the same history as a scheduled run: pressing it twice while the condition holds notifies once. The alert starts fresh — as if its condition had never held, with its card back to “Last check: not run yet” — when you turn the schedule off, edit the alert’s condition, or change the schedule’s control values: the next check notifies if the condition holds on what it now reads. Changing only the schedule’s time keeps the history. A check that can’t run leaves the history as it was. Turning the schedule off doesn’t discard the values an alert on a chart without a time dimension remembers (see Comparing with previous checks). A run whose alert does not fire is a plain refresh: no screenshot is generated, no AI summary is written, and nothing is sent.

The notification

A fired alert sends the schedule’s usual notification — the dashboard link and screenshot, and the AI summary if it is turned on — led by what the alert found:
  • Email — the subject is Alert: <chart> on <dashboard>. The message names the condition, the chart, and the value read: the period it read, plus the previous period and the change for % change, or the normal range for Anomaly. On a chart without a time dimension, it names the previous check’s time and value instead of the previous period, or the normal range of the earlier checks, and adds “Compared with the values this alert read on its previous checks.”
  • Slack — the message opens with the same Alert: <chart> on <dashboard> line, followed by what the alert read, for example “Count increased by 2.5% from 157 in 2026-08 to 161 in 2026-09 (alert at 1% or more).” On a chart without a time dimension it reads, for example, “Count decreased by 50%: it was 20,003, from 40,000 at the previous check (2026-10-17 04:56 UTC) (alert at 10% or more).” and adds the same sentence as the email.
Both state that the check used the dashboard’s default filters and the schedule’s saved filters, and that you will be notified again only after the condition stops holding.
Because the check runs with the schedule creator’s access, the values it read appear only in the creator’s email and in the Slack message. Every other email recipient gets the condition and the chart, a note that the values are not shown because the check ran with the schedule creator’s access, and a screenshot of the dashboard with their own access.

Following an alert in the sidebar

In the scheduled refreshes sidebar, a schedule with an alert carries an Alert badge beside its schedule and a summary of its rule, for example “Condition: Count is above 1,000 · Orders count”. A % change rule ends with “vs the previous period”, or “vs the previous check” on a chart without a time dimension. On the Scheduled refreshes tab, the same summary, without “Condition:”, fills the Condition column. The card’s last line shows the last check. Before the first one it reads “Last check: not run yet”; afterwards it says how long ago the check ran, what it read, and what came of it, for example “Last check: 3 minutes ago, Count increased by 2.7%, notified”. What it read depends on the rule:
  • Threshold — the value, for example “Count was 20,003”.
  • % change — the change, for example “Count increased by 2.7%” or “Count decreased by 4%”.
  • Anomaly — “Count outside its normal range” or “Count within its normal range”.
What came of it is one of these: How long ago is given in its largest unit, as for the next run: “less than a minute ago”, “3 minutes ago”, “1 hour ago”, or “2 days ago”. Hovering the line shows it whole and, under it, the whole check: when it ran, in your timezone and naming it, the value it read, and, for % change, the previous period and the change, for example “Last check Oct 17, 2026, 3:08 AM GMT+1: Count 339 (2026-09). Previous: 330 (2026-08), +2.7%. Condition not met.” For Anomaly, it names the normal range, for example “Normal range: 8 – 14.” On a chart without a time dimension, it names the previous check instead, for example “Count 20,003. Previous check Oct 19, 2026, 3:04 PM GMT+1: 40,000, -50%.”, or “Normal range of the earlier checks: 8 – 14.” For a check that couldn’t run, it says why. The Last check column of the Scheduled refreshes tab shows the same line, without “Last check:”, and the same text on hover. The values are shown only to the schedule’s creator. Anyone else sees how long ago the check ran and what came of it, for example “Last check: 1 minute ago, still met, not notified again”, and on hover “values not shown, as it ran with the access of the schedule’s creator.” After Run now, leave the sidebar open: once the run has checked, the card’s last line shows the new check by itself, with no reload. A run can take a few minutes.

When a check can’t run

A check that can’t run sends nothing and doesn’t change whether the alert counts as holding. On a chart without a time dimension, it still remembers the value it read, if it read one. Hovering the last-check line shows why, for example:
  • The chart is no longer on the dashboard, or the measure is no longer in its query.
  • The chart is now split by a dimension.
  • The chart returned no rows, or there is no complete period yet.
  • An Anomaly rule has too few complete periods, or a % change rule’s previous period was 0.
  • On a chart without a time dimension, a % change rule has no earlier check yet or its previous check read 0, or an Anomaly rule has fewer than 8 earlier checks.
When the chart or measure is gone, Edit shows the alert with the missing field flagged, for example “Count is no longer in “Orders by month”. Pick another measure.”

Editing, duplicating, and deleting

Edit a schedule to change or remove its alert: click the ✕ (Remove alert condition) on the Alert condition card to make it a plain scheduled refresh again. Duplicating a schedule copies its alert, and deleting a schedule deletes its alert. If data alerts are turned off for your account, schedules keep their alerts but send nothing while they do. Editing such a schedule shows only the Alert condition switch; turn it off to remove the alert. When data alerts are turned back on, the alerts resume where they left off.

Managing alerts from chat

You can also ask the agent in Analytics Chat to add, change, or remove a dashboard’s alert, or to list the alerts on a dashboard, in plain language — for example, “email me when the Orders KPI on the Sales dashboard drops 10% from one check to the next, every day at 9” or “what alerts are on the Sales dashboard?” The agent never makes an alert on a chart of a published dashboard into a scheduled task with a condition: the alert belongs to a scheduled refresh of that dashboard. See Managing schedules from chat.

Managing alerts through the API

The Platform API sets an alert through a notification’s alert field. An alert needs notifications switched on and at least one recipient, so create the notification, add its recipients, and then update it with alert. Setting alert to null removes the alert and keeps the notification.