news 2026/9/13 2:13:58

Metabase Questions 完全指南:从查询构建器到原生 SQL 的问题全生命周期

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Metabase Questions 完全指南:从查询构建器到原生 SQL 的问题全生命周期

Metabase Questions 完全指南:从查询构建器到原生 SQL 的问题全生命周期

【免费下载链接】metabaseThe easy-to-use open source Business Intelligence and Embedded Analytics tool that lets everyone work with data :bar_chart:项目地址: https://gitcode.com/GitHub_Trending/me/metabase

导读

Questions(问题)是 Metabase 中最基础的"分析单元"——本质上是"查询 + 结果 + 可视化"三者的组合,也是仪表板(Dashboard)、模型(Model)与预警(Alert)等一切上层能力的原材料。本文以官方 Questions 总览 为主线,系统讲解如何用图形化查询构建器与原生 SQL 编辑器两类入口创建问题,并覆盖保存、管理、分享、导出与预警的完整生命周期,同时结合仓库源码揭示问题的底层执行机制,帮助你从"会点按钮"进阶到"理解原理"。

一、什么是 Question:查询、结果与可视化的统一体

Metabase 官方文档对 Question 的定义非常精炼:"Questions are queries plus their visualization"——一个问题由三部分组成:一段查询(query)、查询返回的结果(results),以及结果的展示形态(visualization)。你可以把它理解为"已保存的查询",它既能以表格形式展示,也能渲染成图表,还可以被:

  • 组织进集合(Collections)与仪表板(Dashboards);
  • 通过嵌入(Embedding)集成到外部应用中;
  • 以链接形式分享、导出其结果,或在其结果"变得有趣"时触发预警(Alerts)通知你。

从源码角度看,问题的核心载体是 Metabase 中的Card实体:它保存着dataset_query(数据集查询定义,即 MBQL 或原生查询)以及展示配置。在 src/metabase/query_processor/card.clj 中,process-query-for-card是执行已保存问题查询的入口:先通过api/read-check做权限校验,再取出 Card 中存储的dataset_query,并依据context(默认为:question,仪表板场景则为:dashboard)决定查询的执行上下文。这说明"保存一个问题"本质上是保存一段可复用的查询定义,每次运行都经过权限检查与查询处理器(Query Processor)流水线。

二、创建问题:两种官方入口

在 Metabase 界面右上角点击+ New,即可选择如何查询数据:

  1. + New > Question:使用图形化查询构建器(Query Builder)创建问题,适合不写代码的用户,参见查询编辑器;
  2. + New > SQL/native query:使用原生/SQL 编辑器创建问题,适合掌握 SQL 或需要表达复杂逻辑的用户,参见原生编辑器。

此外,如果你已配置 AI 能力,还可以通过Metabot用自然语言创建问题——直接告诉 Metabot 你想从数据中了解什么,它会生成对应的图表与查询,详见 Metabot 文档。

即便你精通 SQL,官方也建议先了解一下图形化查询构建器:用构建器搭建的问题天然支持完整的下钻交互(Drill-through)能力,而 SQL 问题的下钻能力是受限的。

三、图形化查询构建器:分步搭出查询

查询构建器把"从数据到图表"的过程拆解为一系列可视化步骤(Step),每一步都是一个积木块:选择数据 → 连接表 → 创建自定义列 → 筛选 → 汇总分组 → 排序 → 限制行数 → 可视化。每一步右侧都有一个Preview(播放键样式)按钮,可以即时查看该步骤执行到当前为止的前 10 行结果。

3.1 选择数据(Pick data)

构建问题的第一步是选定数据源。你可以从四种来源中任选其一:

  • 数据库中的(Table);
  • 模型(Model)——一类经过清洗、可作为查询起点的"虚拟表";
  • 指标(Metric);
  • 已保存的其他问题(Saved Question)。

支持通过输入搜索或浏览数据库与集合来选择。若实例配置了 Library 集合,默认只会显示其中的数据表与指标,需要查询其他数据源时选择Browse all

选定数据源后,点击数据源名称旁的箭头可以勾选要包含的列。取消勾选的列依然可以在构建过程中使用(例如用于筛选),但不会出现在结果中。这一点与"隐藏列"有本质区别:

⚠️隐藏列绝不能用于保护敏感信息。表格可视化设置中的"隐藏列"只影响可视化的显示,查询结果中仍包含该列数据,且任何对问题拥有"仅查看数据"权限的人都能修改可视化设置重新显示该列。若要真正从查询结果中排除某列,应在查询构建器的 Data 块中取消勾选它。

3.2 连接数据(Join data)

当你需要同时使用同一数据库中多张表的数据时,可以使用 Join 步骤将它们连接起来,支持选择连接类型、连接条件与输出列,详见 Joining data。Metabase 还允许把一个已保存的问题当作连接数据源。

3.3 创建自定义列(Custom columns)

自定义列用于基于已有列做计算,例如"用 A 列减 B 列""从文本列中截取一段"等。公式支持四则运算+*/以及大量类电子表格函数,还可用括号明确运算优先级。自定义列不会写入底层数据库表,只存在于当前问题中,可以在"选择数据"步骤之后或"汇总"步骤之后添加。详见 Custom expressions 与表达式函数清单。

3.4 筛选数据(Filter)

筛选步骤用于限定检索范围,例如"只取 Widgets 分类过去 3 周的数据",详见 Filtering data。

3.5 汇总与分组(Summarize and group)

选定数据与筛选条件后,可以汇总数据——例如统计行数(Count)或某列的平均值(Average),并按维度进行分组(Break out)。除了内置聚合函数,也支持在汇总块中使用自定义表达式做聚合内/聚合间的运算,例如:

Average(sqrt[FieldX]) + Sum([FieldY]) Max(floor([FieldX] - [FieldY]))

其中FieldXFieldY为当前选中表的字段。详见 Summarizing and grouping。

3.6 排序与行数限制(Sort & Row limit)

  • 排序:选择一个或多个列排序,点击箭头在升序/降序间切换。需要注意:若在 Summarize 块中使用了累计聚合函数,排序顺序可能影响聚合的计算方式(而不仅是显示顺序),详见累计函数说明。
  • 行数限制:限制结果行数,可与排序配合生成"Top 10"榜单。该步骤只能放在问题最后——Metabase 会先执行前面所有步骤,再对最终结果做行数截断。若想对截断后的结果继续叠加步骤,可把当前结果另存为新问题,再基于它继续构建。

另外,出于浏览器性能保护:未聚合查询最多展示 2000 行、聚合查询最多展示 10000 行,即使你把行数限制设得更大,表格可视化也只会渲染到上述上限(详见表格可视化)。

3.7 查看问题背后的原生 SQL

所有查询构建器问题在底层都会被转换为目标查询引擎的原生语言(如 SQL)。点击构建器右上角的View SQL/View query按钮即可在侧栏预览 Metabase 将实际执行的查询。查看原生查询需要具备查询构建器与原生查询权限。

你还可以把构建器问题转换为 SQL 问题:点击构建器右上角的 Console 图标,在 SQL 代码下方选择Convert the question to SQL。注意转换是单向的——SQL 问题无法再转回构建器问题。

从源码看,构建器的每一步操作最终都会落成结构化的MBQL(Metabase Business Query Language)查询。MBQL 以 Clojure 数据结构描述"从哪里取数、怎么筛选、怎么聚合",例如 src/metabase/lib/query.cljc 的query-with-stages负责把构建器各步骤组织为查询阶段(stages)。在提交执行前,src/metabase/legacy_mbql/normalize.cljc 的normalize会对 MBQL 做规范化处理,随后由查询处理器将其编译为各数据库方言的 SQL 执行。

四、原生 SQL 编辑器

SQL 编辑器(官方称 "native editor",因为除 SQL 外它也支持 MongoDB 等非 SQL 数据源的原生查询语言)用于表达查询构建器难以实现的逻辑。在主导航栏点击+ New,若具备相应权限,会出现带控制台图标的SQL query选项。

以 Sample Database 为例,粘贴并运行以下查询:

SELECT sum(subtotal), created_at FROM orders GROUP BY created_at;

点击蓝色Run query按钮执行——得到的表格与用查询构建器对 Orders 表的Subtotal求和并按Created At分组的结果完全一致。

4.1 运行方式与快捷键

  • 运行整条查询:Windows/Linux 下按ctrl + enter,Mac 下按⌘ + return
  • 只运行选中部分:高亮需要执行的片段后再点击运行按钮或使用快捷键。

SQL 问题与构建器问题一样,可以保存、下载、转换为模型并加入仪表板。

4.2 两个实用细节

  • PostgreSQL 的?运算符:若使用 PostgreSQL 的?JSON 运算符,请改用等价的??。这是因为 JDBC 会把单个问号?解释为参数占位符。
  • SQL 格式化:点击编辑器侧栏的"文档"图标可自动格式化查询。格式化功能仅对 SQL 有效,且不适用于 SQLite 与 SQL Server。

4.3 SQL 变量与筛选组件

在 SQL 中通过变量(Variable)可把查询参数化:包含变量的问题会在编辑器上方显示筛选组件(Filter widget),运行前可修改取值。官方文档将这一主题细分为多篇子文档,均位于docs/questions/native-editor/目录:

主题说明文档
SQL 模板参数通过{{variable}}语法向 SQL 模板传参SQL templates
字段筛选将字段筛选变量连接到数据库字段,生成智能筛选组件Field filters
基础参数参数在 SQL 查询中的基本用法Basic SQL parameters
可选变量[[可选部分]]方括号语法创建可留空的参数Optional variables
时间分组参数在原生查询中用参数按时间段分组数据Time grouping parameters
筛选组件配置配置与变量绑定的筛选组件Filter widgets

4.4 引用已保存问题与代码片段

  • 引用已保存问题:可以在 SQL 中把模型(Model)或已保存问题当作数据源,详见 Referencing saved questions in queries。从源码看,这类查询在进入查询处理器时由 fetch_source_query 与 resolve_referenced 等中间件解析其引用关系并做权限检查。
  • 代码片段(Snippets):把常用 SQL 片段保存、复用并跨问题共享,详见 Snippets。

4.5 执行方式与编辑器限制

Metabase 会把 SQL原样发送给数据库执行,你在 Metabase 中看到的结果/错误与直接在数据库客户端中运行完全一致;若 SQL 语法与目标数据库方言不匹配,数据库将无法执行。编辑器不支持以下操作:

  • 多语句查询(Multi-statement queries);
  • 存储过程与函数调用;
  • DDL 语句(如CREATEALTERDROP)。

部分操作可能因连接权限不同而侥幸成功,但均非官方支持。在使用数据库冒充(Impersonation)的数据库上,Metabase 会强制校验:查询必须是单个SELECT语句,多语句、临时表与 DDL 都会被拒绝。

4.6 版本历史与结果探索

  • 问题、仪表板与模型会保留最近 15 个版本的历史记录,详见 History。
  • 对于无参数的已保存 SQL 问题,会出现Explore results按钮:它会以该 SQL 的结果为数据源新建一个查询构建器问题,实现"SQL 结果 + 构建器二次分析"的组合。
  • SQL 问题的可视化下钻能力受限:只能对数据点筛选结果、放大时间序列或地图、使用部分列头操作;无法下钻到未聚合记录、无法更改时间粒度、无法按类别或位置细分。

五、保存与管理问题

构建好查询并完成可视化后,可以将问题保存到仪表板(默认)或集合,保存时需填写名称、可选的描述并选择存放位置。

5.1 保存到仪表板 vs 集合

  • 保存到仪表板:该问题仅在该仪表板内可见,不能被其他仪表板复用;保存后需将卡片排列到某个标签页并保存仪表板。
  • 保存到集合:集合中的问题可被添加到多个仪表板;把问题从一个集合移动到另一个集合,不会影响已引用它的仪表板。保存到集合需要你所在的用户组拥有该集合的 Curate access(策展)权限。

5.2 破坏性变更检查

保存问题、模型或指标时,Metabase 会尝试检测你的改动是否会破坏依赖它的下游实体。例如你删除了一个问题中被其他问题依赖的列,Metabase 会警告下游问题将被破坏。目前检测范围限于列引用:重命名或删除列通常会被标记为破坏性变更,但改变列类型或计算逻辑这类变更暂时无法被识别。该能力属于付费套餐功能。

5.3 在集合与仪表板之间移动问题

能否把集合中的问题移入仪表板,取决于有多少其他仪表板引用了它:

  • 没有其他仪表板使用该问题,可以直接移动;
  • 其他使用该问题的仪表板位于你拥有策展权限的集合中时,Metabase 会列出受影响的仪表板,由你决定是否接受将这些仪表板中的问题移除。

5.4 问题的信息侧栏

保存后点击右上角的info图标可查看问题元数据:

  • Overview 标签页:描述(支持 Markdown)、创建者与最后编辑者、所在集合或仪表板、数据来源,以及Entity ID(可用于序列化(Serialization)在多实例间保持 ID 一致)。
  • History 标签页:查看历史记录。

5.5 其他管理操作

  • 下载结果:见导出结果;
  • 验证问题:见内容验证;
  • 书签:点击书签图标把问题固定到侧边栏,见 Bookmarks;
  • 转为模型:仅当问题保存在集合中时才能转为模型(仪表板中的问题需先移入集合),见模型;
  • 缓存结果:见按问题缓存策略;
  • 设置预警:见下文;
  • 时间序列事件:若结果是时间序列,可沿 x 轴显示事件,见事件与时间线;
  • 删除问题:见删除与恢复。

六、指标浏览器(Metrics Explorer)

Metrics Explorer 是面向指标(Metric)与度量(Measure)的即席探索空间,适合"从指标出发"的分析场景,例如比较不同产品的收入趋势与客户情绪变化。支持的能力包括:

  • 沿维度探索指标/度量:打开指标主页(从集合、指标浏览器或搜索进入)后点击右上角Explore;度量则从 Data studio > Tables > 表 > Measures 的"三个点"菜单进入。Metabase 会按最合适的维度绘制,时间列统一归入Time桶、国家列(按语义类型识别)统一归入Country桶,可切换具体列或选择No breakout查看无维度总计。
  • 对比多个指标/度量:在顶部搜索栏继续添加指标即可并排对比;时间/国家维度即使列不同也可配对比较,其他列则需精确匹配才出现在 Shared dimensions 中。
  • 指标间做数学运算:支持+-*/、括号与数字,例如直接在搜索栏输入Revenue / Active users,甚至支持跨数据源的指标运算(查询构建器中需要 join,而指标浏览器只需写公式)。
  • 按额外维度细分与筛选:可为每个指标单独添加 series breakout 或筛选条件。

需注意:指标浏览器定位是即席探索,当前无法保存探索结果;分享时复制链接(形如[your-metabase-URL]/explore#abunchofcharacters),链接会编码你的探索配置,他人打开即可看到相同视图。需要持久化分析时请用查询构建器创建保存问题。

七、分享结果:可视化

表格适合查数,图表适合看趋势。查询构建器会自动为结果挑选合适的图表类型;原生查询则需要手动选择。切换方式:构建器问题点击最后一步下方的Visualize,SQL 问题点击屏幕底部的Visualization按钮。所有图表类型(除透视表外)对原生查询同样可用——只要结果形状匹配(例如"指标 + 日期列"适合趋势图)。

Metabase 内置的图表类型包括:面积图、柱状图、箱线图、组合图、明细视图、漏斗图、仪表图、折线图、地图、数字、饼图/环形图/旭日图、透视表、矩形树图、进度条、行图、表格、趋势图、直方图、桑基图、瀑布图、散点图与气泡图,完整说明见可视化总览及各分文档。每个图表都有独立的高级选项:点击左下角Gear图标打开可视化设置,可配置数据、显示与坐标轴,以及列的格式(还支持自定义格式,参见格式默认值)。企业版管理员还可通过自定义可视化上传自研图表类型。

八、分享结果:预警(Alerts)

预警用于按计划运行问题并在"结果有趣"时通过邮件、Slack 或 Webhook通知相关人员。注意预警只针对问题;仪表板的结果推送请使用仪表板订阅。

8.1 前提条件

管理员需至少配置一个通知渠道:邮件、Slack 或 Webhooks;Webhook 仅管理员与具备设置访问权限的用户可用。

8.2 创建预警的通用步骤

  1. 保存问题;
  2. 点击右上角"三个点"图标;
  3. 选择Create an alert
  4. 选择预警类型(取决于问题类型):结果预警、目标线预警(适用于带目标线的折线/柱状/面积时间序列图)、进度条预警;
  5. 选择检查频率:按分钟、小时、每日、每周、每月,或使用 Quartz cron 语法自定义计划;
  6. 选择接收渠道:邮件、Slack 或 Webhook;
  7. 配置其他选项(如一次性预警);
  8. 点击Done

8.3 三种预警类型

  • 结果预警(Results alerts):按计划在有结果返回时通知,特别适合"通常无结果、一旦有结果就要知道"的场景(例如"近两天低于三星的差评")。
  • 目标线预警(Goal line alerts):适用于 DAU、周订单数等指标,可在时间序列越过目标线(向上或向下)时通知,可选择每次越过或仅首次越过时提醒。
  • 进度条预警(Progress bar alerts):进度条可视化配目标值后,可在单值达到或跌破目标时通知。

8.4 管理预警

  • 每个人可编辑自己创建的预警,可在Account settings > Notifications查看与退订所有收到的预警;
  • 管理员可编辑/删除任意预警、增删任意预警的接收人,并可在 Admin settings 的 People 菜单按人批量管理,或在 Monitor > Alerts management 批量管理实例内全部预警。

8.5 边界情况

  • 重命名 Slack 目标频道后,需要在 Metabase 中更新预警指向新频道名;
  • 若目标线被移除,对应目标线预警会自动降级为结果预警;
  • 问题被删除时,其预警会被一并删除;
  • 即使创建者账号被停用,预警仍继续工作(只是不再向停用账号发送);
  • 嵌入式问题的预警会省略指向 Metabase 内部对象的链接,避免收件人收到失效链接;
  • 自定义可视化在预警渲染时会回退到默认图表(预警渲染时无人登录)。

预警的调度与发送在仓库中有完整实现:src/metabase/pulse/api/alert.clj 定义了预警 API(当前标记为 deprecated,正在向 notification API 迁移),其中可见:has_result/:goal_above等发送条件、send_once(一次性预警)字段、skip_if_empty(无结果不发送)逻辑,以及向用户邮箱或 Slack 频道等接收方分发消息的渠道结构;定时发送任务由 src/metabase/pulse/task/send_pulses.clj 驱动。

九、分享结果:导出与提示

  • 导出:问题与仪表板的结果有多种导出方式,详见导出结果;Webhook 预警的邮件可配置移除 Metabase 品牌标识。
  • Tooltips:可自定义柱状图、折线图与面积图的提示信息,详见 Tooltips。

十、总结

从"查询 + 结果 + 可视化"的定义出发,Metabase Questions 提供了两条互补的创作路径:图形化查询构建器以 MBQL 分步生成查询,天然支持交互式下钻;原生 SQL 编辑器则把查询控制权完全交给用户。两者产出的问题共享同一套保存、管理、缓存、预警与导出体系,最终通过可视化与分享机制把数据洞察传递到团队各处。想要继续深入,推荐阅读查询构建器编辑器、SQL 编辑器、可视化总览与预警等分主题文档,或参考 SQL 故障排查指南解决实际运行问题。

【免费下载链接】metabaseThe easy-to-use open source Business Intelligence and Embedded Analytics tool that lets everyone work with data :bar_chart:项目地址: https://gitcode.com/GitHub_Trending/me/metabase

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 2:09:15

π型滤波器实战:从截止频率公式到传导EMI调试经验

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 2:08:01

DBeaver 执行计划避坑指南:3 步把 5 秒慢查询压到 0.1 秒

DBeaver 执行计划避坑指南:3 步把 5 秒慢查询压到 0.1 秒 【免费下载链接】dbeaver Free universal database tool and SQL client 项目地址: https://gitcode.com/GitHub_Trending/db/dbeaver 周五下午,一条 JOIN 跑了 8 分钟,DBA 在…

作者头像 李华
网站建设 2026/9/13 2:07:05

硬件出海EMC翻车实录:从源头设计到认证整改全指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 2:04:05

PyTorch CNN花卉图像识别实战:从数据增强到模型调优全流程

简介:面向计算机视觉课程设计与期末大作业的基于卷积神经网络的花卉图像识别项目,已通过导师指导并获得九十九分评价,适合计算机相关专业学生用于毕业设计、课程设计或期末项目,也适合希望快速上手图像分类实战的学习者参考。整套…

作者头像 李华