
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即可选择如何查询数据 New Question使用图形化查询构建器Query Builder创建问题适合不写代码的用户参见查询编辑器 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]))其中FieldX、FieldY为当前选中表的字段。详见 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 问题无法再转回构建器问题。从源码看构建器的每一步操作最终都会落成结构化的MBQLMetabase 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 enterMac 下按⌘ 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 widgets4.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 语句如CREATE、ALTER、DROP。部分操作可能因连接权限不同而侥幸成功但均非官方支持。在使用数据库冒充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 ExplorerMetrics 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链接会编码你的探索配置他人打开即可看到相同视图。需要持久化分析时请用查询构建器创建保存问题。七、分享结果可视化表格适合查数图表适合看趋势。查询构建器会自动为结果挑选合适的图表类型原生查询则需要手动选择。切换方式构建器问题点击最后一步下方的VisualizeSQL 问题点击屏幕底部的Visualization按钮。所有图表类型除透视表外对原生查询同样可用——只要结果形状匹配例如指标 日期列适合趋势图。Metabase 内置的图表类型包括面积图、柱状图、箱线图、组合图、明细视图、漏斗图、仪表图、折线图、地图、数字、饼图/环形图/旭日图、透视表、矩形树图、进度条、行图、表格、趋势图、直方图、桑基图、瀑布图、散点图与气泡图完整说明见可视化总览及各分文档。每个图表都有独立的高级选项点击左下角Gear图标打开可视化设置可配置数据、显示与坐标轴以及列的格式还支持自定义格式参见格式默认值。企业版管理员还可通过自定义可视化上传自研图表类型。八、分享结果预警Alerts预警用于按计划运行问题并在结果有趣时通过邮件、Slack 或 Webhook通知相关人员。注意预警只针对问题仪表板的结果推送请使用仪表板订阅。8.1 前提条件管理员需至少配置一个通知渠道邮件、Slack 或 WebhooksWebhook 仅管理员与具备设置访问权限的用户可用。8.2 创建预警的通用步骤保存问题点击右上角三个点图标选择Create an alert选择预警类型取决于问题类型结果预警、目标线预警适用于带目标线的折线/柱状/面积时间序列图、进度条预警选择检查频率按分钟、小时、每日、每周、每月或使用 Quartz cron 语法自定义计划选择接收渠道邮件、Slack 或 Webhook配置其他选项如一次性预警点击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),仅供参考