Skip to main content

Scheduled Reports

Professional+

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).

Tier requirement

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 TypeWhat is deliveredDelivery channel
Dashboard ScreenshotFull-page PNG of the dashboardEmail, Slack
Dashboard PDFMulti-page PDF exportEmail
Chart ScreenshotPNG of a single chartEmail, Slack
Chart CSVQuery results as a CSV attachmentEmail
AlertConditional report — fires only when a metric crosses a thresholdEmail, Slack

Creating a Dashboard Report

From the dashboard

  1. Open the dashboard you want to schedule.
  2. Click ··· (more menu, top-right) → Schedule email report.
  3. The report configuration panel opens.

From the Reports list

  1. Navigate to SettingsAlerts & Reports (Admin) or Reports (non-Admin).
  2. Click + Report.
  3. Choose Dashboard as the report type.

Report Configuration Fields

FieldDescriptionExample
Report nameUnique identifier for this reportWeekly Exam KPI Report
DescriptionInternal note about the report's purposeSent every Monday to the Product team
Report typeDashboard or ChartDashboard
Dashboard / ChartThe asset to captureExam Performance — Q2 2026
OwnersUsers responsible for this reportanalytics@yourcompany.com
RecipientsEmail addresses (comma-separated)cto@yourcompany.com, vp-product@yourcompany.com
Slack channelSlack channel name (with #)#exec-weekly-metrics
FormatPNG, PDF, or CSVPNG
ScheduleCron expression or presetSee below
TimezoneTimezone for cron evaluationAmerica/New_York
Report delay (seconds)Wait before capturing (allows charts to finish loading)5
Include filter stateEmbed current dashboard filter values in the screenshotEnabled
Force screenshotRe-capture even if no data has changedDisabled

Scheduling — Cron Expressions

CalabiIQ accepts standard 5-field cron expressions plus a set of convenient presets.

Presets

PresetCron equivalentWhen it runs
Every day at 7:00 AM0 7 * * *Daily at 07:00
Every Monday at 8:00 AM0 8 * * 1Weekly, Monday morning
1st of every month at 9:00 AM0 9 1 * *Monthly
Every weekday at 6:00 AM0 6 * * 1-5Monday–Friday
Every hour0 * * * *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 * * * *
High-frequency reports

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

  1. A Calabi administrator must configure the Slack integration under SettingsAlerts & ReportsSlack.
  2. The bot must be added to the target channel.

Adding a Slack recipient to a report

  1. In the report configuration, find the Slack channels field.
  2. Enter the channel name with the # prefix (e.g., #data-alerts).
  3. Click Add.
  4. 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.

  1. Navigate to SettingsAlerts & Reports+ Alert.
  2. Configure the alert:
FieldDescriptionExample
Alert nameDescriptive namePass Rate Below 70%
DatabaseDatabase to run the check againstRedshift Production
SQL queryMust return a single numeric valueSee below
Trigger conditionComparison operator< (less than)
Trigger valueThreshold70
Report typeWhat to deliver when triggeredDashboard screenshot
DashboardDashboard to captureExam Health Monitor
RecipientsWho receives the alertdata-team@yourcompany.com
ScheduleHow often to evaluate the condition0 * * * * (hourly)
Grace period (hours)Minimum hours between repeat alerts24

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 SettingsAlerts & Reports. The list shows:

ColumnMeaning
NameReport name
TypeReport or Alert
ScheduleCron expression
Last runTimestamp of most recent execution
Last statusSuccess, Failed, Working
ActiveToggle to enable/disable without deleting

Forcing an immediate run

  1. Find the report in the list.
  2. Click ···Force run.
  3. The report executes immediately — useful for testing new reports.

Viewing execution history

  1. Find the report and click its name.
  2. Click the Logs tab.
  3. Logs show each execution's status, timestamp, duration, and any error messages.

Troubleshooting Reports

SymptomLikely causeResolution
Report never arrivesEmail worker not runningContact Calabi admin to check Celery worker status
Screenshot is blankCharts take longer than report_delay to loadIncrease Report delay to 10–30 seconds
Alert never firesSQL query returns NULLEnsure SQL returns a numeric value; use COALESCE(result, 0)
Alert fires every runGrace period too shortIncrease grace period to reduce alert fatigue
Slack message appears but no attachmentBot lacks file upload permissionAdmin needs to re-authorize Slack bot with files:write scope
PDF is empty / cut offDashboard is too tallReduce 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 SettingsEmail configuration.