SQL 代码段与已保存问题与视图
了解您可以使用哪些 Metabase 功能来组织您的 SQL 代码。
本文概述了 Metabase 提供的用于组织 SQL 代码的工具,并为何时选择一种工具而不是另一种工具提供了一些指导。
组织 SQL 代码主要有两种工具:代码段和已保存问题。我们还将讨论数据库视图,以区分它们在 Metabase 中与已保存问题的用法,尽管视图特定于您的数据库(即,它们不是 Metabase 的一部分)。
代码段和已保存问题都充当您可以注入到其他 SQL 问题中的模板。至于何时使用哪一个,经验法则是:对于小的、常用的 SQL 片段,使用代码段;对于您想要单独执行的任何代码,使用已保存的 SQL 问题。
SQL 代码段和文件夹
对于关键或常用 SQL 代码,请使用 SQL 代码段。代码段应为简短、可重用的 SQL 代码行。
正如您可以使用查询构建器将官方聚合和过滤器定义为指标和细分一样,您可以使用 SQL 代码段来编纂 KPI 和过滤器。例如,您可能想要准确存储您如何计算收入,或者什么构成活跃用户。将该 SQL 代码保存为代码段,添加描述(您甚至可以包含您的联系信息,以防有人有疑问),您的团队中的每个人现在都可以在您的代码段中引用该具体化的 SQL
SELECT *
FROM users
WHERE {{ snippet: Active Users }} AND {{ snippet: Adults }}
代码段对于整合和标准化您的代码至关重要。如果在任何时候您改进了构成活跃用户的定义,您只需要更新 活跃用户
代码段,更改将传播到每个使用该代码段的问题。
Metabase 企业版还允许您像集合组织问题和仪表盘一样,将 SQL 代码段组织到文件夹中。您可以设置这些文件夹的权限,以限制对敏感 SQL 的访问,或者只是为了确保用户不必浏览与其领域无关的文件夹。
如果您发现自己正在编写一个长代码段,并且该代码段返回一组结果(即,该代码段不仅仅是一个 WHERE
子句——它本身就是一个查询),请考虑将该查询另存为一个问题,供其他人在其查询中引用。
已保存问题作为构建块
对于本身就令人感兴趣的较大 SQL 代码块,请考虑将该代码另存为一个问题。毕竟,这才是大多数人使用 Metabase 所做的事情:他们提出问题。
问题可以分组到仪表盘中,但它们也可以用作较大查询的构建块,就像您可以在查询中将多个代码段拉到一起一样。
假设您编写了一个查询并将其另存为一个问题。您可以像这样将其注入到另一个查询中
SELECT *
FROM {{#123}}
其中 123
是问题的 ID。您也可以将该问题用作公用表表达式 (CTE)
WITH active_users AS {{#123}}
SELECT *
FROM Active Users
已保存问题是模块化分析的一种低成本方式。通过已保存问题(而不是 SQL 代码段)模块化查询的最大优势在于,您可以独立运行已保存问题并查看其结果,这使得问题比代码段更容易调试。
或者,您可以简单地复制一个问题并从上一个问题构建,但这种复制是有代价的。您现在在两个问题中都有相同的代码;如果您稍后在一个问题中发现错误,您还必须更正另一个问题中的错误 - 假设您记得它们共享相同的代码。通过简单地引用已保存的问题,您只需在一个地方更新代码即可。
例如,如果您是一家初创公司,您可能会在规范化表中分散用户数据。在 Metabase 中,您可以以各种方式连接这些表,以创建一组您的用户会感兴趣的问题,这使他们能够基于这些结果进行构建,并在他们自己的查询中引用这些问题,以特定方式切片数据。
数据库视图
如果您认为已保存问题看起来很像数据库中的视图,那么您是对的。问题的优势在于您无需成为管理员即可创建它们,并且您可以即时创建问题并将它们嵌套在其他问题中。缺点是问题是 Metabase 的构造,您将无法获得数据库原生视图的性能优化(如果有的话)。此外,在 SQL 代码中引用另一个问题时,请记住您只能访问问题的结果:您无法访问查询本身,这意味着您无法引用其中可能存在的任何变量。
如果您发现人们经常在 Metabase 中引用一个问题作为其查询的基础,请考虑与您的数据库管理员讨论创建物化视图,该视图返回与该已保存问题相同的结果集。物化视图的优势在于数据库不必每次都重新计算结果;物化视图的行为将非常像数据库中的实际表。
当您无权在数据库中创建视图,或者您只是在探索数据并且不想创建视图时,在 SQL 模板中使用其他已保存问题非常有用。
随着您的成长,将业务逻辑进一步推向上游
许多分析只是以不同的方式切片数据,以便更好地了解它可以讲述的故事。当您找到分析立足点时,您不一定会知道哪些数据切片将帮助您为公司做出最佳决策。
随着您组织的分析设置趋于成熟,您将希望将业务逻辑进一步推向上游,以便人们在 Metabase 中找到的表将业务的逻辑单元组合在一起。整理和构建一组核心的已保存问题是理清哪些数据对您的组织最重要的简单方法。
一般来说,人们分析您的数据越容易,您组织的生产力就越高。请参阅初创公司常犯的常见数据模型错误以了解更多信息。
下一步:使用 SQL 问题向仪表盘添加过滤器
如何在仪表盘中添加过滤器小部件,并将它们连接到 SQL 问题中的字段过滤器变量。