SDI Lab / BI cockpit Demo on a made-up Swiss insurance-lead business, data as of 28.10.2026 18:00. Names, brokers and numbers are invented.

Appointments (Operations)

459

▲ +32% vs August (349) · by appointment date

Trend * October 2026 so far: the data runs to 28.10.2026 18:00, so it is not a full month.

As a table
ChannelAppointmentsRows
Google Ads174Rows →
Comparison portal118Rows →
Referral96Rows →
Meta Ads71Rows →
How it's calculated

Every broker appointment that is scheduled or held, counted on the appointment day. Owner: Operations.

Why other departments count differently →

Definition in metrics/leads.yml

name: appointments_operations
label: Appointments
noun: appointments
description: Every broker appointment that is scheduled or held, counted on the appointment day.
measure: lead_count
time_basis: appointment_at
filter:
  dimension: appointment_status
  op: in
  values: [scheduled, held]
owner: operations
certified: true

The number

select count(distinct lead_id) as value
from leads
where appointment_at >= timestamp '2026-09-01 00:00:00' at time zone 'Europe/Zurich'
  and appointment_at < timestamp '2026-10-01 00:00:00' at time zone 'Europe/Zurich'
  and appointment_status in ('scheduled', 'held')

The trend

select to_char(appointment_at at time zone 'Europe/Zurich', 'YYYY-MM') as period,
       count(distinct lead_id) as value
from leads
where appointment_at >= timestamp '2026-04-01 00:00:00' at time zone 'Europe/Zurich'
  and appointment_at < timestamp '2026-11-01 00:00:00' at time zone 'Europe/Zurich'
  and appointment_status in ('scheduled', 'held')
group by 1
order by 1

The breakdown by channel

select channel as label,
       count(distinct lead_id) as value
from leads
where appointment_at >= timestamp '2026-09-01 00:00:00' at time zone 'Europe/Zurich'
  and appointment_at < timestamp '2026-10-01 00:00:00' at time zone 'Europe/Zurich'
  and appointment_status in ('scheduled', 'held')
group by 1
order by 2 desc, 1
limit 50

The app runs these queries with parameters; here the values are written in, so they can be read or pasted into psql.