仪表盘上的自定义点击目标
您可以设置仪表板卡片,将用户发送到仪表板、已保存的问题和 URL,并使用卡片中的值更新目标筛选器,或将链接参数化到外部站点。
Metabase 提供了一些简单的构建块,让您可以自定义用户点击仪表板上的图表时发生的情况。您可以组合这些基元,创建通过报表的路径,仪表板更新后续仪表板,甚至将用户发送到外部站点。
对于本文,我们将重点介绍自定义点击行为的其中一个选项:**转到自定义目的地**。我们将通过一个使用 Metabase [示例数据库](/glossary/sample-database) 的场景,向您展示自定义目的地的工作原理,并向您展示一些创建交互式体验的巧妙技巧。
我们将创建两个快速仪表板——一个**订单概览**仪表板和一个**产品详情**仪表板。我们希望创建的用户体验是:当用户查看我们的订单概览仪表板时,他们应该能够点击一个产品,Metabase 将他们带到产品详情仪表板,该仪表板会根据用户点击的产品进行更新。一旦用户到达产品详情仪表板,Metabase 应该能够根据他们点击的产品类别将他们发送到不同的外部 URL。
之后,我们还将通过[另一个使用 SQL 问题](/custom-destinations-with-sql-questions)的示例,展示自定义目的地是如何为仪表板上的 SQL 问题添加交互元素的绝佳方式。
如果您已经有自己的仪表板,可以直接[跳到](/customizing-click-behavior-orders-overview-dashboard)我们开始自定义目的地。
创建订单概览和产品详情仪表板
让我们首先构建**订单概览**仪表板,并向其中添加两个问题。我们将快速浏览此部分——如果您想了解更详细的信息,请查看我们关于[提问](/docs/latest/questions/introduction)和[创建仪表板](/docs/latest/dashboards/introduction)的文档
继续创建一个新仪表板,将其命名为“订单概览”,并将其保存到合适的位置。
我们将提出两个关于订单的问题
- **我们的订单表是什么样的?**:首先浏览
Orders
表,然后点击保存。 - **订单如何按州细分?**:首先选择
Orders
表,然后按侧边栏**用户**下的State
字段进行汇总。由于我们按州进行汇总,Metabase 会为我们生成一个[区域地图](/docs/latest/questions/visualizations/map#region-maps)。务必也保存此问题。
接下来,我们可以将这些保存的问题添加到我们的新仪表板。在查看空白仪表板时,单击**铅笔图标**进入编辑模式,并通过选择**+**添加已保存的问题。添加这些问题并保存仪表板后,结果应类似于
接下来,我们需要制作**产品详细信息**仪表板,我们最终会将其链接到“订单概览”。产品详细信息将更仔细地查看我们库存中的单个商品,因此我们还将连接一个[仪表板过滤器](/docs/latest/dashboards/filters),该过滤器允许我们根据用户想要查看的产品输入 ID 值。
创建此仪表板,将其命名为“产品详细信息”,然后保存。
接下来,我们将提出两个新问题并将其添加到此仪表板
- **产品名称是什么?**:从
Products
表开始,单击**可视化**,然后选择**数字**,在**要显示的字段**下拉列表中选择Title
。保存此问题。 - **此产品有多少订单?**:从
Orders
表开始,按Orders
列表下的Product ID
计数进行汇总。也通过**数字**进行可视化,在**要显示的字段**下拉列表中选择Count
,然后保存问题。
返回产品详情仪表板。在编辑模式下,添加我们新保存的问题,别忘了我们还需要一个仪表板筛选器。要添加一个,请点击右上角的**添加筛选器**图标,然后选择**ID**。为每张卡片选择要筛选的相应列——我们的产品名称卡片将筛选 Product.ID
,而我们的订单计数应筛选 Order.Product ID
。我们将这些问题的数据可视化设置为**数字**,以便它们可以像可变文本卡片一样操作,根据筛选器中的值更改其文本。
以下是仪表板筛选器的设置示例
点击**完成**并保存您的仪表板。
现在我们将展示如何链接到外部网站。举例来说,我们将使用Metabase文档的[搜索结果页](/search?query=interactive+dashboards),并搜索用户点击的产品。
这是完整的点击路径
**订单概览**仪表板 → **产品详情**仪表板 → 外部网站
此 GIF 展示了实际的点击路径
自定义点击行为:订单概览仪表板
让我们回到**订单概览**仪表板。我们可以为此仪表板上的每个问题[卡片](/glossary/card)添加自定义点击行为,但我们只关注为一张卡片添加自定义目的地。假设我们希望设置 订单
卡片(包含订单表的卡片),以便当用户点击 产品 ID
[列](/glossary/column)时,Metabase 将他们发送到产品详情页面,并使用用户点击的产品的 产品 ID
填充产品详情仪表板上的筛选器。
从“订单概览”页面开始,我们将点击**铅笔图标**进入仪表板编辑模式。接下来,我们将鼠标悬停在要自定义的卡片上。右上角将出现一个菜单。点击**点击行为图标**菜单(它是卡片上带有鼠标指针的图标)。
Metabase 将滑出一个侧边栏供您设置用户点击此表时发生的情况。
让我们了解一下情况
- 卡片网格:由于我们为订单卡片选择了**点击行为**,Metabase 将其**点击时**标签高亮显示为蓝色。我们可以通过点击另一张卡片的标签来选择其点击时行为。
- 右上角:主编辑菜单,包含添加问题、文本框或筛选器的选项。
- 右侧边栏:用于自定义当前卡片的点击时行为的选项。
由于我们使用查询构建器编写了“订单”问题,Metabase 将默认点击行为设置为**打开钻取菜单**,允许用户[钻取数据](/learn/metabase-basics/querying-and-dashboards/questions/drill-through)。
让我们更改点击行为,将用户发送到我们的**产品详情**仪表板。
表格和自定义目的地是特别棒的组合,因为我们可以为表格中的每一列设置不同的自定义目的地。在此示例中,我们只为一列设置点击行为。我们将在订单问题卡片上设置一个自定义目的地,以便当用户点击 产品 ID
列中的值时,Metabase 将 1) 将他们发送到产品详情仪表板,并 2) 根据点击的 产品 ID
筛选该仪表板。
我们的选择是
- 打开操作菜单(查询构建器生成的问题的默认设置)。
- 前往自定义目的地。
- 更新仪表板筛选器。
我们将选择**前往自定义目的地**。
Metabase 将提供三个自定义目的地选项
- 仪表盘
- 已保存的问题
- 网址
要将用户发送到**产品详情**仪表板,我们将选择**仪表板**选项,然后选择我们的**产品详情**仪表板。
这是一个检查点
将值传递到目的地
到目前为止,我们已将 产品 ID
列设置为**转到自定义目的地**,我们已将其设置为链接到**产品详情**仪表板,但我们尚未完全设置此链接。接下来,我们要**将值传递到此仪表板的筛选器**。您会注意到仪表板上可用的筛选器列表。在本例中,我们的**产品详情**仪表板只有一个筛选器可以传递值:**ID**。
点击**ID**,您会注意到您可以从表中的任何列传递值,而不仅仅是产品ID
列。但在我们的例子中,我们将从产品ID
列传递值。
Metabase 将提供摘要
在此,Metabase 确认我们已将 产品 ID
列的点击行为设置为
- 前往自定义目的地。
- 链接到**产品详情**仪表板。
- 将
产品 ID
列的值传递给**产品详情**仪表板上的ID
过滤器。
我们来试试看:从**订单概览**中,我们将点击产品 ID
列,Metabase 将我们带到**产品详情**仪表板,其中14
值已插入到ID
筛选器中。
自定义目的地:URL
接下来,我们将设置“产品详情”仪表板,以便当用户点击“产品名称”卡片时,Metabase 会将他们发送到外部网站,并使用卡片中的值对 URL 进行参数化。我们可以将他们发送到任何外部网站,但在此示例中,我们将他们发送到 Metabase 文档的搜索页面,以便您可以看到参数化的实际操作(因为阅读我们的文档会使您变得更好)。
这是那个仪表板
和以前一样,我们将进入仪表板编辑模式,将鼠标悬停在**产品名称**卡片上,然后选择**点击行为**。
我们将看到与之前相同的菜单
- 打开操作菜单。
- 前往自定义目的地。
- 更新仪表板筛选器。
我们将选择**转到自定义目的地**和**URL**。接下来,我们将输入我们的 URL,并通过双大括号(例如:{{parameter}})将[参数](/glossary/parameter)括起来。在这种情况下,我们将使用 Title
作为 URL 中的参数
https://metabase.net.cn/search?query={{Title}}
您可以查看**可引用值**下拉列表,以查看可在 URL 中用作参数的完整值列表。您可以使用 URL 中的任何(或所有)值,包括重复使用相同的值。
添加文本框导航
除了[为您的仪表板添加上下文](/learn/metabase-basics/querying-and-dashboards/dashboards/markdown)之外,您还可以使用文本卡片为仪表板添加有用的导航链接,例如添加一个文本卡片,让您返回到我们开始时的**订单概览**仪表板。您可以创建一个文本卡片,居中文本,并使用 Markdown 创建一个链接到**订单概览**仪表板的链接,这只是为了方便您的读者轻松浏览您的点击路径。以下是带有该链接的仪表板的显示效果
SQL 问题自定义目的地
我们上面使用的示例仪表板只包含使用 Metabase [查询构建器](/glossary/query-builder)提出的问题,但您可能也有[原生查询](/glossary/native-query),您希望在仪表板上使其具有交互性。
让我们首先在我们的**产品详情**仪表板中添加一个 SQL 问题,这次是关于产品类别的。导航到原生查询构建器后,我们将输入以下 SQL 问题
select CATEGORY
from PRODUCTS
where
{{TITLE}} and
{{ID}}
Metabase 滑出侧边栏,您将看到两个变量:TITLE
和 ID
。我们希望当在 ID 或 Title 字段中输入值时,此问题能显示产品类别。从下拉菜单中,将两者的**变量类型**设置为**字段筛选器**。继续将 TITLE
变量映射到 Product.Title
字段,并将 ID
映射到 Product.ID
。
您可以通过在字段筛选器中添加示例 ID 来确认问题是否运行;此处我们使用产品 ID 34 进行测试,并运行查询。因为我们的可视化是**数字**,所以我们看到此产品的类别(Gadget)作为文本呈现在问题下方
现在保存问题并将其添加到我们的**产品详情**仪表板。在编辑模式下,请务必将现有仪表板筛选器链接到我们的新卡片,该卡片应筛选我们新**产品类别**卡片的 ID
列。
接下来,点击新卡片上的**点击行为图标**,您将看到与之前略有不同的菜单
- 什么都不做
- 前往自定义问题
- 更新仪表板筛选器
之所以有“什么都不做”选项,是因为我们用 SQL 编写了 产品类别
问题,而 SQL 问题不包含**操作菜单**。
这就是我们向您展示一个巧妙技巧的地方。如果返回到 产品类别
问题,我们可以使用 concat
创建根据筛选器值更新的字符串。
select concat('Category is ', CATEGORY)
from PRODUCTS
where
{{TITLE}} and
{{ID}}
最后,我们可以将自定义目的地设置为像我们之前那样的特定参数化 URL,或者将此卡片链接到另一个包含按产品类别分类的订单统计数据的仪表板。
回顾
我们已经向您展示了如何设置简单的点击路径,以及如何为原生查询和使用 Metabase 查询构建器构建的查询设置自定义目的地。但这些示例只展示了一条点击路径。您可以自定义仪表板上每个问题卡片的行为!例如,您可以创建一个州详情仪表板,并自定义美国地图上的点击行为,以便 Metabase 将用户发送到州详情仪表板,并根据点击的州进行筛选。
使用 Metabase 查询构建器构建的问题将默认显示操作菜单,允许用户[钻取数据](/learn/metabase-basics/querying-and-dashboards/questions/drill-through),但对于 SQL 问题,我们建议自定义目的地(在合适的情况下)。有关[交互式仪表板](/docs/latest/dashboards/interactive)的更多信息,请查看我们的文档。
您还可以[将用户属性传递到 URL 或目的地筛选器](/learn/metabase-basics/querying-and-dashboards/dashboards/markdown),从而为特定用户定制体验。
因此,发挥您的创意,设置数据点击路径,并在[我们的论坛](https://discourse.metabase.com/t/programmatically-create-questions/12109)上分享您想出的任何技巧。