Scheduled Reports
CalabiIQ's Scheduled Reports feature delivers dashboard and chart snapshots to inboxes and Slack channels on a user-defined schedule. Reports can be sent as screenshots (PNG), PDFs, or as inline data (CSV for chart-level reports).
Scheduled Reports require Professional tier or above. The underlying email and alert workers must be configured in your Calabi deployment — contact your administrator if reports are not sending.
Report Types
| Report Type | What is delivered | Delivery channel |
|---|---|---|
| Dashboard Screenshot | Full-page PNG of the dashboard | Email, Slack |
| Dashboard PDF | Multi-page PDF export | |
| Chart Screenshot | PNG of a single chart | Email, Slack |
| Chart CSV | Query results as a CSV attachment | |
| Alert | Conditional report — fires only when a metric crosses a threshold | Email, Slack |
Creating a Dashboard Report
From the dashboard
- Open the dashboard you want to schedule.
- Click ··· (more menu, top-right) → Schedule email report.
- The report configuration panel opens.
From the Reports list
- Navigate to Settings → Alerts & Reports (Admin) or Reports (non-Admin).
- Click + Report.
- Choose Dashboard as the report type.
Report Configuration Fields
| Field | Description | Example |
|---|---|---|
| Report name | Unique identifier for this report | Weekly Exam KPI Report |
| Description | Internal note about the report's purpose | Sent every Monday to the Product team |
| Report type | Dashboard or Chart | Dashboard |
| Dashboard / Chart | The asset to capture | Exam Performance — Q2 2026 |
| Owners | Users responsible for this report | analytics@yourcompany.com |
| Recipients | Email addresses (comma-separated) | cto@yourcompany.com, vp-product@yourcompany.com |
| Slack channel | Slack channel name (with #) | #exec-weekly-metrics |
| Format | PNG, PDF, or CSV | PNG |
| Schedule | Cron expression or preset | See below |
| Timezone | Timezone for cron evaluation | America/New_York |
| Report delay (seconds) | Wait before capturing (allows charts to finish loading) | 5 |
| Include filter state | Embed current dashboard filter values in the screenshot | Enabled |
| Force screenshot | Re-capture even if no data has changed | Disabled |
Scheduling — Cron Expressions
CalabiIQ accepts standard 5-field cron expressions plus a set of convenient presets.
Presets
| Preset | Cron equivalent | When it runs |
|---|---|---|
| Every day at 7:00 AM | 0 7 * * * | Daily at 07:00 |
| Every Monday at 8:00 AM | 0 8 * * 1 | Weekly, Monday morning |
| 1st of every month at 9:00 AM | 0 9 1 * * | Monthly |
| Every weekday at 6:00 AM | 0 6 * * 1-5 | Monday–Friday |
| Every hour | 0 * * * * | Top of each hour |
Custom cron examples
# Every Tuesday and Thursday at 7:30 AM
30 7 * * 2,4
# Last day of the month at 11:59 PM
59 23 28-31 * *
# Every 15 minutes (high-frequency — use with caution)
*/15 * * * *
Reports running more than once per hour generate significant database load and can trigger screenshot throttling. Consult your Calabi administrator before scheduling sub-hourly reports.
Setting Up Slack Delivery
Prerequisites
- A Calabi administrator must configure the Slack integration under Settings → Alerts & Reports → Slack.
- The bot must be added to the target channel.
Adding a Slack recipient to a report
- In the report configuration, find the Slack channels field.
- Enter the channel name with the
#prefix (e.g.,#data-alerts). - Click Add.
- Save the report.
Slack delivery sends:
- A brief message with the report name and link.
- An attached PNG screenshot (for dashboard/chart reports).
- An inline CSV preview (for data alerts).
Creating an Alert (Conditional Report)
An alert fires only when a specific metric crosses a threshold — ideal for data quality monitoring or business KPI watchdogs.
- Navigate to Settings → Alerts & Reports → + Alert.
- Configure the alert:
| Field | Description | Example |
|---|---|---|
| Alert name | Descriptive name | Pass Rate Below 70% |
| Database | Database to run the check against | Redshift Production |
| SQL query | Must return a single numeric value | See below |
| Trigger condition | Comparison operator | < (less than) |
| Trigger value | Threshold | 70 |
| Report type | What to deliver when triggered | Dashboard screenshot |
| Dashboard | Dashboard to capture | Exam Health Monitor |
| Recipients | Who receives the alert | data-team@yourcompany.com |
| Schedule | How often to evaluate the condition | 0 * * * * (hourly) |
| Grace period (hours) | Minimum hours between repeat alerts | 24 |
Alert SQL examples
-- Trigger if pass rate drops below 70%
SELECT
ROUND(
100.0 * SUM(CASE WHEN passed THEN 1 ELSE 0 END) / COUNT(*),
2
)
FROM psychometric_reporting.scores
WHERE exam_date >= CURRENT_DATE - INTERVAL '1 day';
-- Trigger if more than 100 failed attempts in the last hour
SELECT COUNT(*)
FROM psychometric_reporting.scores
WHERE passed = FALSE
AND exam_date >= NOW() - INTERVAL '1 hour';
-- Trigger if revenue drops more than 20% week-over-week
SELECT
(this_week - last_week) / NULLIF(last_week, 0) * 100
FROM (
SELECT
SUM(CASE WHEN created_at >= CURRENT_DATE - 7 THEN amount_usd END) AS this_week,
SUM(CASE WHEN created_at >= CURRENT_DATE - 14
AND created_at < CURRENT_DATE - 7 THEN amount_usd END) AS last_week
FROM billing.transactions
WHERE status = 'completed'
) sub;
Managing Reports
View all reports
Navigate to Settings → Alerts & Reports. The list shows:
| Column | Meaning |
|---|---|
| Name | Report name |
| Type | Report or Alert |
| Schedule | Cron expression |
| Last run | Timestamp of most recent execution |
| Last status | Success, Failed, Working |
| Active | Toggle to enable/disable without deleting |
Forcing an immediate run
- Find the report in the list.
- Click ··· → Force run.
- The report executes immediately — useful for testing new reports.
Viewing execution history
- Find the report and click its name.
- Click the Logs tab.
- Logs show each execution's status, timestamp, duration, and any error messages.
Troubleshooting Reports
| Symptom | Likely cause | Resolution |
|---|---|---|
| Report never arrives | Email worker not running | Contact Calabi admin to check Celery worker status |
| Screenshot is blank | Charts take longer than report_delay to load | Increase Report delay to 10–30 seconds |
| Alert never fires | SQL query returns NULL | Ensure SQL returns a numeric value; use COALESCE(result, 0) |
| Alert fires every run | Grace period too short | Increase grace period to reduce alert fatigue |
| Slack message appears but no attachment | Bot lacks file upload permission | Admin needs to re-authorize Slack bot with files:write scope |
| PDF is empty / cut off | Dashboard is too tall | Reduce dashboard height or split into multiple dashboards |
Report Email Template
Reports are delivered with a default email template that includes:
- Report name and description.
- Timestamp of the report capture.
- Link to the live dashboard.
- Inline PNG screenshot (for screenshot reports) or CSV attachment.
Your Calabi administrator can customize the email template (logo, colors, footer text) under Settings → Email configuration.