使用 Metabase 构建记录查找工具
如何使用 Metabase 构建一个内部查找工具,快速查找客户、订单或其他数据的详细信息。
我们曾写过 人们使用 Metabase 的一些有趣方式,其中一种就是将 Metabase 用作内部或后台应用程序(如客户查找工具)的解决方案。与其构建自定义页面来查找客户信息、订单信息或其他对您的组织重要的记录,不如只需启动一个 Metabase 实例并构建一个仪表板,让人们能够快速提取与订单号、SKU、名称或其他字段相关的信息。
在本文中,我们将指导您使用 Metabase 附带的 示例数据库构建一个简单的客户查找工具。我们将向您展示 Metabase 开箱即用的某些功能,以及您可以进行的一些自定义查找工具的操作。示例数据库中的数据相当基础,但我们会尝试创建一个仪表板,该仪表板近似于您实际在野外构建和使用的工具类型。您可以 获取 Metabase 并进行跟进,或者仅通过阅读来获取一些构建自己的工具的想法。
这是我们最终的客户查找工具运行情况

客户查找工具的目标
我们的目标是有一个交互式的客户列表,在我们处理帮助请求或其他与客户相关的任务时会很有用。单击 ID 以显示该客户的详细信息,然后显示该客户下的订单。
为此,我们将使我们的列表可排序和可筛选,并且我们希望能够向下钻取以查看单个记录。以下是我们想要了解的客户的一些信息:
- 姓名、电子邮件、城市和州
- 他们花了多少钱在我们身上
- 我们给予他们的折扣总额
我们还希望能够通过他们的 姓名或 ID 来查找客户。
所以,这是构建工具的高级计划
创建我们的列表
在主导航栏中,我们将选择 **+ 新建**,然后选择 **问题** > **原始数据** > **示例数据库** > **人员** 表(因为我们对客户信息感兴趣)。如果我们单击 **可视化**,Metabase 将进行一些处理,我们会得到一个不错的表格可视化,显示 人员 表中的记录。

Metabase 已经为我们做了一些工作。例如,单击某行中的 ID 会将我们带到一个详细信息页面。

这没什么特别的,但很有用,因为它使信息更易于阅读。实际上,它有点特别。我们单击的 ID 字段是 实体键,它是表中的一个字段,用于唯一标识每个表行,在本例中是 人员 表中的一行。(请查看我们的 文档,了解更多关于如何自定义数据模型的信息。)Metabase 知道它是一个实体键,这就是它知道如何链接到此详细信息视图的原因。请注意,在该客户(Hudson Borer)的详细信息页面上,我们 1) 看到 人员 表中的所有字段,而不仅仅是我们问题中包含的字段,并且 2) 在右上角,有一个链接可查看与 Hudson Borer 的用户 ID 关联的订单。如果一个表包含一个实体键作为另一个表中的 外键,Metabase 将使该数据可在此详细信息页面上进行探索。

到目前为止我们几乎什么都没做,但我们已经取得了不错的进展。要计算每位客户迄今为止在我们这里花费的总金额,我们需要在列表中包含订单信息。这要求我们将 人员 表连接到 订单 表。我们将单击 **编辑器图标** 以调出 **查询生成器**。

接下来,我们将单击 连接数据 选项,通过告诉 Metabase 将 人员 表中的实体键 ID 与 订单 表中的外键 User_ID 链接起来,从而连接 人员 表和 订单 表。(如果您是连接表的新手,请查看我们关于 Metabase 中的连接的文章)。

连接 人员 和 订单 表将生成下表中所示的表,其中客户信息会为他们下的每个订单重复。

这并不理想:我们不希望在查找工具中多次列出客户。如果我们要查看他们的订单,我们只需单击客户的 ID 即可查看其详细信息页面,但现在我们有了订单信息可以使用。
让我们尝试找到他们迄今为止在我们这里花费的总金额。返回 **查询生成器**,我们将选择 **汇总**,然后选择 总和。在连接的 订单 表下,我们将选择 总计。由于我们想查看每个用户的总和,我们将按每个用户的 ID 进行分组。

预览显示了一个更新后的表,只有两列:ID 和我们的新列 订单总计 → 总计($)。我们还将像处理订单总计一样,对折扣进行求和(订单总计 → 折扣($))。
接下来,我们将通过将它们添加到 **汇总** 部分的 **分组依据**框中来添加我们要在表中包含的列。这是我们的完整列列表:
ID电子邮件名称城市州邮政编码创建日期:月份订单总计 → 总计订单总计 → 折扣

填写完笔记本后,让我们单击 **可视化按钮**,Metabase 将向我们展示列表。

到目前为止还不错,但让我们看看是否能对其进行一些改进。让我们更改聚合列的格式,这可以通过单击该列的标题,然后单击 **齿轮图标** 来完成。

我们将 列标题 更改为“总消费金额”,切换 **显示迷你条形图**,并将 **显示货币单位的位置** 设置为每个单元格。

迷你条形图 将显示单元格值相对于列中值的范围,这使得很容易看出我们的客户与其他客户相比花费了多少钱。
我们将对折扣总额列做同样的事情:添加迷你条形图、重命名标题、在每个单元格中显示货币。

我们还可以为整个表添加一些条件格式。在屏幕左下角,我们将单击问题的 **设置按钮**,Metabase 将滑出 **设置侧边栏**。在侧边栏顶部,我们将选择 **条件格式选项卡**。例如,我们可以用蓝色突出显示大额消费者的行(消费超过 1000 美元的客户),并用红色突出显示我们给予他们超过 30 美元折扣的行(以便我们知道我们应该在折扣方面有所收敛)。

装扮好列表后,我们将其另存为 客户列表。
将我们的问题添加到仪表板
为了能够查找客户,我们需要能够按 ID 和姓名筛选此表。我们 *可以* 在问题级别进行筛选,但在本例中,将列表放在仪表板上更好:它为我们提供了更多选项,例如可以有一个筛选器控件,它可以筛选我们将来可能添加的更多列表或图表,或者允许我们自定义当人们单击列中的值时会发生什么。
我们将 创建一个新仪表板 并为其命名(字面上)“客户查找工具”。接下来,我们将把我们的 客户列表 问题添加到我们的新仪表板。
向仪表板添加过滤器
由于我们希望人们能够按 ID 或 姓名 查找客户,因此我们需要为每种查找方法添加一个筛选器控件。要添加筛选器,我们将单击 **铅笔图标** 来编辑仪表板,然后单击 **筛选器图标**。我们将为 ID 筛选器控件添加一个 ID 筛选器,为 姓名 筛选器控件添加一个 类别 筛选器。

我们将每个筛选器连接到 客户列表 卡(“ID”筛选器连接到 Person.ID,**类别** 筛选器连接到 Person.Name)。为了让我们的用户清楚每个筛选器做什么,我们将更改筛选器的标签为 客户 ID 和 客户姓名。查看我们关于 仪表板筛选器 的文档,了解有关如何连接这些筛选器的更多信息。

如果筛选器行为不符合您的预期,您可能需要更改数据模型中的字段类型。查看我们关于 编辑元数据 的文档,其中显示了您如何选择是让筛选器显示所有可用值的列表,还是将其显示为搜索框。
自定义点击行为
在构建客户查找工具时,您可能希望设置列表,以便单击客户姓名或 ID 等值,可以带您到另一个仪表板、第三方应用程序,甚至是您自己的应用程序。要做到这一点,您可以自定义仪表板卡上的点击行为,并设置一个 自定义目标。仅仅是为了演示该功能,我们将进行设置,以便当人们单击某个人的地址时,它会在 Google 地图上打开该地址,并预加载该地址。

我们可以单击 **可引用的值** 下拉列表,查看我们可以作为参数传入的值。根据 Google Maps API 文档,我们将按以下方式格式化 URL:
https://www.google.com/maps/search/?api=1&query={{address}},{{city}},{{state}},{{zip}}
我们传递的参数用双大括号括起来:address、city、state 和 zip,Metabase 将为我们转义逗号。一旦我们保存了自定义目标,我们就可以单击一个地址,Metabase 将在 Google 地图上打开该地址。

将工具嵌入到您的 Wiki 或应用程序中
您可以将查找工具保留在 Metabase 实例中,但您也可以将该工具嵌入到其他应用程序中,例如您组织的 Wiki 或自制应用程序。查看我们关于 嵌入图表和仪表板 的文章。
就是这样!
或者不呢?我们现在有了一个不错的客户查找工具,并且可以随着时间的推移扩展仪表板。我们可以将其他问题和筛选器添加到我们的仪表板,或者设置更多自定义目标以链接到其他仪表板和工具。我们希望本文能为您提供一些关于您可以构建的工具的思路——或者升级您现有的仪表板。