5. 构建 Dashboard

一个有用的 CRM Dashboard 应该在一屏内回答四个问题:本周有多少 lead、转化速度多快、pipeline 集中在哪里、本季度有多少会成交。

预计耗时:25 分钟。

5.1 布局

新建 Dashboard crm-overview,采用 12 列栅格:

Widget宽度
1KPI:本周 Leads3
1KPI:转化率(qualified / 总数)3
1KPI:进行中 pipeline 价值3
1KPI:本季度即将成交3
2柱状图:按 source 拆分的 lead6
2漏斗:按 stage 拆分的 opportunity6
3折线图:每周新建 vs 资格化 lead12
4表格:按金额排序的 Top 10 opportunity12

销售 Dashboard 含 KPI、图表与 drill-down

从 Dashboard 列表页点 New dashboard 进入编辑器 —— 一个网格画布,每个单元是一个绑定到已保存查询的 widget。

Dashboard 列表

Dashboard 编辑器 —— 网格画布 + widget 属性面板

5.2 定义查询

使用 Query Builder 为每个 widget 定义数据源。Query Builder 是可视化 SQL 组装器:选 source model,加 measure 与 dimension,配置 filter,然后把查询另存为 widget 可复用的数据源。

Query Builder —— 可视化 measure / dimension / filter 组装

按 source 拆分 lead 的图表示例:

query:
  source: crm_lead
  groupBy: source
  measures:
    - { kind: count, alias: leads }
  filters:
    - field: created_at
      op: gte
      value: ${range.start}
    - field: created_at
      op: lte
      value: ${range.end}

${range.start}${range.end} 来自 Dashboard 级的日期范围筛选。

5.3 下钻

为漏斗 widget 配置点击行为:点一条柱时跳转到 /docs/...?stage=<x> —— 即打开按 stage 过滤的 Opportunity 列表页。这是每个 widget 的可选项:

"onClick": {
  "type": "navigate",
  "to": "crm_opportunity_list",
  "params": { "stage": "${bar.key}" }
}

5.4 验证

  • 所有 KPI 与手工 SQL 计数一致
  • 日期范围筛选会重新计算每个 widget
  • 点击漏斗的一条柱可落到过滤后的列表页
  • 在本地数据(约 10k 行)上 Dashboard 渲染时间小于 1 秒

下一步

第 6 章 → 发布到移动端