dbt Charts 开源发布:用于 AI 驱动分析的声明式 YAML 仪表板

TL;DR

dbt Charts 0.x 引入了一种声明式的 YAML 语言,用于构建全栈仪表板,使 AI 代理能够以代码形式创建、验证和版本控制图表,同时保留传统 BI 工具的治理和可审计性。


为什么需要一种新的仪表板语言?

答案: 现有的 AI 生成的仪表板将输出分散在 HTML、CSS、JavaScript 和框架文件中,导致审计过程缓慢且消耗大量 token;而 BI 工具则将 AI 限制在狭窄的 UI 表面上。dbt Charts 将图表定义移入单一、可审计的 YAML 文件中,使代理能够读取、编写和验证。

  • 代理在 SQL、Git 和 YAML 方面表现出色,但在以 UI 为中心的工具上表现不佳。
  • 单一的 YAML 仪表板将变量、查询、图表规格和布局封装为一个自包含的资产。
  • 验证可在本地运行(dct validate),在任何 UI 渲染之前就标记出可视化问题。

核心设计:解耦 BI 堆栈

答案: 现代数据栈已经将数据摄取、转换和计算与 BI 层分离;dbt Charts 通过将 可视化 层提取为代码,完成了这一解耦过程。

  • 历史背景 – 传统 BI 工具(如 MicroStrategy、Cognos)将数据摄取 → 转换 → 可视化捆绑在一起。自约 2015 年以来,该堆栈已拆分,使 BI 工具仅保留可视化、UI、语义和托管功能。
  • 向对话式交互的转变 – 随着对话式代理成为主要前端,以 UI 为中心的方法成为瓶颈。将图表移至代码,与代理的优势相契合。

YAML 规范

答案: 一个 dbt Charts 仪表板是一个单一的 YAML 文件,用于声明变量、SQL 查询、图表类型和布局行。

variables:
  status:
    column: main.documents.status

queries:
  doc_growth: |
    SELECT DATE_TRUNC('month', created_at) AS month,
           SUM(COUNT(*)) OVER (ORDER BY month) AS num_docs
    FROM main.documents
    WHERE {{ filter('status', status) }}
    GROUP BY 1

charts:
  growth:
    title: 所有时间创建的文档
    type: area
    query: doc_growth
    x: month
    y: num_docs

rows:
  - growth
  • SQL 用于数据 – queries 块包含原始 SQL,保留了 dbt 的表达能力。
  • Markdown 与 Jinja – 可通过 Markdown 添加说明性文字;Jinja 支持宏和变量插值,与 dbt 的模板机制一致。
  • 可扩展性 – 提供超过 1,100 种配置选项,涵盖 16 种图表类型和可组合图表,但大多数默认值通过主题和仪表板扩展继承。

渲染与 CI 集成

答案: dct CLI 可将任意仪表板渲染为 SVG、HTML、PNG、PDF,甚至终端输出,并可托管静态站点以供共享。

# 渲染为 SVG(或 html、png、pdf、terminal)
dct render charts/documents.yml --format svg
# 服务渲染后的图表文件夹
dct serve
  • 仪表板与 dbt 模型并列存放(charts/ 位于 models/ 旁边),因此单个 PR 可同时修改转换逻辑和可视化内容。
  • dbt parse && dct validate charts/ 可在部署前捕获错误的 ref() 调用或可视化警告。
  • 未来将支持 dbt 语义层,使图表可引用指标而非原始 SQL。

治理、审计与 AI 反馈循环

答案: dbt Charts 提供严格的 YAML 语法和 SQL 语义验证,以及在图表发布前就暴露的可视化警告。

$ dct render charts/revenue.yml
WARN-BAR-BAND-WIDTH-TOO-NARROW
182 个条带,2 个系列,总宽度 640px
修复建议:合并为更粗的粒度。

WARN-TABLE-COLUMNS-OVERFLOW
表格需要 980px,但可用空间仅为 640px。
修复建议:删除列或扩大槽位宽度。
  • 确定性输出(相同 YAML → 相同图表)支持可复现的 CI 流水线。
  • 由于规范受版本控制,任何变更均可追溯至特定提交,满足审计要求。

社区与竞争格局

答案: 该项目引发了关于替代方案和定位的讨论。

  • Malloy – 一种替代 DSL(Malloyyo/Publisher)也针对 AI 生成的图表,但保持独立生态系统。评论者 @mrtimo 指出 Malloy 提供免费托管,而 dbt Charts 提供可选的 SaaS 层。
  • Observable Framework – @bbkane 询问 dbt Charts 的区别;关键差异在于 YAML 优先、与 dbt 集成的规范,而非 Observable 的 Markdown+JS 方式。
  • Vega‑Lite – @engrav3er40 担心重叠;Vega‑Lite 是一种视觉语法,而 dbt Charts 将该语法与数据模型治理和 CI 集成结合。
  • Evidence、Superset 及其他无头 BI – 多位评论者(如 @theodorewiles、@hackandthink)指出类似基于 YAML 的仪表板定义,但 dbt Charts 独特之处在于嵌入 dbt 转换层,并提供一流的聊天集成。
  • 设计重点 – 项目邀请了数据图形设计师 RJ Andrews 创建统一的视觉语言,回应了批评:许多代码驱动的仪表板存在“视觉噪音”问题。

托管平台(dbtCharts.com)

答案: 尽管语言是开源的,dbtCharts.com 提供了公开测试版的 SaaS 层,用于托管、访问控制和对话式分析。

  • 连接数据仓库,添加聊天界面(类似 Claude/ChatGPT),权限为只读,并提供可视化编辑器用于微调。
  • 所有编辑——无论来自聊天、UI 还是代码——都会提交回 Git 中的同一 YAML 文件,保持单一事实来源。
  • 该平台处理仍难以解耦的 BI 职责:托管、认证和协作共享。

反应与开放问题

答案: 早期社区反馈既充满热情,也存在质疑。

  • 积极反响 – 用户赞赏其确定性、可审计的资产(@mollifier14、@marcy_74),并看到在 Slack/Teams 中每日 KPI 更新的实际应用场景。
  • 批评意见 – 有人认为创新是渐进式的(@dgudkov),质疑选择 YAML 作为“语言”的决定(@carterschonwald、@pgt);也有人指出可视化交互和语义层仍是开放问题(@RobGoretsky、@chupchap)。
  • 未来工作 – 计划支持 dbt 语义层、更丰富的交互原语以及更广泛的 UI 集成,以解决这些问题。

快速入门

答案: 要在本地尝试 dbt Charts,请安装 CLI 并渲染一个示例仪表板。

# 通过 uv(或 pip)安装
uv tool install dbt-charts
# 将仪表板渲染为 SVG
dct render charts/documents.yml --format svg

总结

答案: dbt Charts 在自由的代码生成与受控的 BI UI 之间填补了空白,提供了一种与 dbt 紧密集成、支持 AI 驱动创作、并通过 CI 就绪验证强制治理的版本控制 YAML 仪表板语言。

Sources

相关