2026年5月30日 2 分钟阅读

如何用代码定义数据仪表盘?DAC 实战:让 AI Agent 自动化构建标准看板

tinyash 0 条评论

痛点:传统仪表盘的时代局限

每个开发团队迟早都要面对一个问题:老板要看销售数据、产品要看用户留存、运维要看系统监控……于是大家打开 Grafana、Metabase、Tableau,在 GUI 里一顿拖拽配置,生成一堆”只可意会不可言传”的看板。

问题是,这些配置不可版本控制、不可代码审查、不可自动化。换个人维护,谁也不知道当初为什么选这个时间窗口、为什么用这个聚合逻辑。更糟糕的是,AI Agent 完全无法参与——它看不到你的拖拽步骤。

DAC(Dashboard as Code)就是来终结这个尴尬局面的。

DAC 是什么?

DAC(github.com/bruin-data/dac)是一个开源仪表盘即代码工具,允许你用 YAML 或 TSX(JSX 变体) 来定义交互式数据仪表盘。它由 Bruin 团队开发,使用 Go 编写,目前 686+ stars,AGPL-3.0 协议。

核心特性:

  • Dashboard as Code:用 YAML 或 TSX 声明式定义仪表盘的布局、查询、过滤器
  • 内置语义层:在 semantic/ 目录下定义一次指标和维度,DAC 自动生成 SQL
  • AI Agent 原生集成:通过 Codex 内置技能,AI 可以直接与看板对话并实时修改内容
  • 多数据库支持:Postgres、MySQL、Snowflake、BigQuery、Redshift、Databricks 等
  • 可版本化:所有配置都在文本文件中,天然适配 Git 工作流

5 分钟快速上手

安装

curl -LsSf https://getbruin.com/install/dac | sh

安装脚本会自动检测系统环境,下载对应二进制文件。

初始化项目

dac init my-dashboards
cd my-dashboards

这个命令会创建一个标准项目结构,包含基础配置文件和一个示例仪表盘。还会自动安装 DAC 的 Claude 和 Codex 技能文件:

ls .claude/skills/create-dashboard/SKILL.md
ls .codex/skills/create-dashboard

这意味着你的 AI 编码 Agent 开箱即用,可以直接帮你写仪表盘代码。

验证和启动

dac validate --dir .
dac serve --dir . --open

浏览器会自动打开 http://localhost:3000,你会看到一个包含 SQL 查询和可视化组件的完整仪表盘。

实战:用 YAML 定义销售看板

来看一个具体的 YAML 示例,展示 DAC 的核心表达能力:

name: Sales Overview
connection: warehouse

rows:
  - widgets:
      - name: Revenue
        type: metric
        sql: SELECT SUM(amount) AS value FROM sales
        column: value
        prefix: "$"
        col: 4
      - name: Orders
        type: metric
        sql: SELECT COUNT(*) AS value FROM orders
        column: value
        col: 4
  - widgets:
      - name: Daily Revenue Trend
        type: line-chart
        sql: |
          SELECT
            DATE(created_at) AS day,
            SUM(amount) AS revenue
          FROM sales
          WHERE created_at >= NOW() - INTERVAL '30 days'
          GROUP BY 1
          ORDER BY 1
        x: day
        y: revenue
        col: 12

这个配置定义了 2 行布局:第一行显示总收入($4 col)和订单数(4 col),第二行是全宽的 30 天收入趋势折线图。每个 widget 的 SQL 查询一目了然,可以放进 Git 审查。

TSX 版本更灵活

如果你需要动态计算布局、根据数据库内容生成组件,可以用 TSX 模式:

export default (
  
    
      
    
  
)

TSX 的好处是可以用 JavaScript 逻辑控制渲染,比如依据数据库返回的行数决定是否显示某个图表。

语义层:定义一次,处处引用

DAC 最有特色的功能之一是其内置语义层。在 semantic/ 目录下定义一次:

metrics:
  - name: total_revenue
    label: Total Revenue
    description: Sum of all transaction amounts
    sql: SUM(amount)
    format: currency

dimensions:
  - name: transaction_date
    label: Date
    sql: DATE(created_at)

然后在任何 widget 中引用:

widgets:
  - name: Revenue by Day
    type: line-chart
    metrics: [total_revenue]
    dimensions: [transaction_date]
    col: 12

优势:业务指标的定义集中管理,不会出现”同一个收入指标在不同看板中用不同 SQL 实现”的混乱。修改语义层定义,所有引用它的看板自动更新。

与 AI Agent 配合

DAC 的设计初衷就是让 AI Agent 也能构建仪表盘。安装时自动绑定的 Codex 技能文件,意味着你可以在终端中对 AI 说:

“帮我创建一个销售仪表盘,显示上月各地区的收入排名”

Codex 会自动调用 DAC 的命令行,生成对应的 YAML 文件,执行 dac validate 并启动服务。整个过程不需要你手写任何代码,但生成的 YAML 仍在你的版本控制之下,可以随时修改和审查。

对于自动化流水线,还可以在 CI 中加入:

dac validate --dir . --with-database

确保每次 PR 修改仪表盘后,查询语法和数据库连接都正确无误。

适用场景

场景推荐度
团队需要多个标准化看板⭐⭐⭐⭐⭐
需要版本控制和代码审查⭐⭐⭐⭐⭐
AI Agent 自动化生成报表⭐⭐⭐⭐⭐
临时分析 + 快速可视化⭐⭐⭐
复杂交互式仪表盘⭐⭐⭐

DAC 特别适合那些需要将 Dashboard 纳入 DevOps 流水线的团队。每一次看板变更都有迹可循、可回滚、可审查——这在传统 GUI 工具中几乎不可能实现。

总结

DAC 不是要取代 Grafana 或 Metabase,而是提供一种全新的”代码优先”的仪表盘范式。当你的团队开始用 AI Agent 辅助编码时,一个 AI 能读写、能版本控制、能 CI 验证的仪表盘方案,价值远超想象。

值得一试的场景:如果团队正在用 Codex 或 Claude Code 辅助开发,加上 DAC 等于让 AI 的能力从”写代码”延伸到”建看板”——一条命令,一个 PR,一个标准化的仪表盘就完成了。

项目地址:github.com/bruin-data/dac 安装命令:curl -LsSf https://getbruin.com/install/dac | sh

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。