computePanels; the UI, the CLI, the API, the chat card and the App SDK all
draw from it, so a number is the same number everywhere.
What a dashboard is
A dashboard is a list of panels. A panel names a metric, an optional group-by, an optional date bucketing and optional filters in the sameFilterGroup shape saved views use. No SQL.
Derived metrics (
conversion_rate, win_rate, won_amount, lost_amount,
open_pipeline, pipeline_forecast, mrr, arr) read the object’s field
roles — amount, stage + won/lost/converted values, close date, owner,
location, recurrence, stage probabilities — so they work on any custom
object once the roles are mapped. Templates map them at install.
Two synthetic fields work anywhere a field name goes:
$createdAt— the row’s creation time. “New leads this week” needs no date column.$location— the location role, resolved through one relation hop (Account.HQ Location) so a deal inherits its account’s HQ.
Period, views, drills
- The header’s period pill (“This month”, “Last quarter”, …) scopes every chart and the rows under the strip, and fills each stat’s previous-period delta. It is never saved onto a view.
- Dashboards are per object or per view. Every view shows the object’s
shared dashboard until it gets its own (
scope --mode ownstarts it as a copy). Any active view follows its own filters by default. - Clicking a chart segment filters the table (chips in the header, one per dimension); the chart you clicked keeps its whole picture.
/?path=<object>&analytics=1[&view=<view>][&analyticsPeriod=this_month]
opens the sheet with the pill set.
Charts in chat
Ask Dench a quantitative question (“pipeline by stage this quarter”, “where are our customers”, “win rate by rep”) and the answer is a live chart card in the thread — the object’s owncomputePanels, updating as rows
land. Open takes you to the dashboard; an ad-hoc chart offers Save to
dashboard. When the panel model cannot express the question (a join across
objects, a custom formula, a cohort), Dench embeds a small App SDK widget
instead, fed by dench.analytics.compute; Keep as app turns it into a
workspace app. Off the web UI (Slack, iMessage, comments) you get the
headline number and the deep link.
CLI
--period is this_week | this_month | last_month | this_quarter | last_quarter | this_year. Each panel in a compute response says where its
numbers came from (source): aggregate — pre-computed buckets, exact at
any table size (counts, sums, averages, group-bys, monthly or coarser series,
won/lost/open $, MRR/ARR, forecast, win rate); scan — the newest rows; or
snapshot — a background pass over every row that replaces a clipped scan.
truncated: true appears only while a scan panel could not see every row;
the snapshot is requested automatically and the next response is exact.
link is the deep link above.
API
Apps call the same query through the bridge:
dench.analytics.compute({ objectName, viewName?, panels?, panelIds?, period?, extraFilters? }) — see the Apps reference.