多租户自助分析

嵌入整个 Metabase 应用程序(包括查询构建器),以便人们安全、个性化地访问数据。

因此,您正在考虑在您的应用程序中嵌入 Metabase,以便向您的客户交付分析功能。这将如何运作?

在本文中,我们将:

  • 首先从您将交付给客户的目标体验开始。
  • 简要介绍向多个租户提供自助报告的挑战。
  • 讨论 Metabase 提供的相关功能,以及它们如何协同工作以解决这些问题。

目标用户体验

让我们首先从您的客户的角度来看一下完成的分析体验会是什么样子。

参与者

  • 您的公司:Megafauna Analytics
  • 客户 1:MammothCo
  • 客户 2:RhinoCo

故事

您是一家 B2B 公司 Megafauna Analytics,您正在使用 Metabase 通过在 megafauna-analytics.com 上的应用程序中嵌入 Metabase 来为您的客户提供报告。

以下是客户体验的概述:MammothCo 的 Woolly 登录到您的应用程序 megafauna-analytics.com,然后导航到您为 MammothCo 设置的分析页面。在那里,Woolly 将看到一系列屏幕,其中包含精美的仪表板和图表,显示 MammothCo 订单、交易以及您提供的其他沙盒数据,所有这些都具有您(Megafauna)的品牌颜色。

Woolly 不仅仅可以查看静态仪表板,还可以点击图表上绘制的数据并下钻。例如,他可以放大查看特定一周的交易,或单击图表中的条形以拉出一个表格,其中列出了填充该条形的未聚合行。

An example of drilling through a question in Metabase using the Sample Database included with your installation.

此外,借助 Metabase 的图形化查询构建器,Woolly 可以切片和切块他的 MammothCo 数据。他可以使用编辑器的强大查询功能以及自定义表达式进行更复杂的查询,以找到您的仪表板未解决的问题的答案,所有这些都无需查看来自 RhinoCo 或其他客户的任何数据。

The query builder in Metabase allows people to explore their data and create new questions. They can join data, filter it, summarize it, sort it, use custom expressions, and more.

您还可以通过设置自定义目标(例如另一个仪表板、问题或 URL)来自定义用户点击仪表板上的图表时发生的情况。您还可以设置图表以更新过滤器

这就是故事。我们如何实现这一目标?

创建多租户自助分析的挑战

通过多租户,我们指的是共享应用程序实例,其中人群组(如 MammothCo 或 RhinoCo)可以访问不同的权限,因此可以访问不同的数据。通过自助服务,我们指的是除了报告管理员提供的报告之外,应用程序还应该让人们能够创建自己的报告

在我们深入了解 Metabase 如何交付多租户自助分析之前,我们首先需要确定我们需要解决的问题。为了给 Woolly 提供上面概述的体验,我们需要:

  • 以允许人们访问查询构建器和下钻功能的方式,将 Metabase 嵌入到您的应用程序 (megafauna-analytics.com) 中。
  • 使仪表板和图表与您 (Megafauna) 的品牌颜色相匹配。
  • 将 megafauna-analytics.com 中的给定用户与嵌入式 Metabase 实例中的用户关联起来。
  • 将用户可以看到的数据限制为仅限于他们被允许查看的行和列。

让我们看看 Metabase 如何解决这些问题。

设置多租户自助报告所需的四个功能

我们将详细介绍每个功能,但以下是它们的一览

  • 交互式嵌入:向嵌入式图表和仪表板添加下钻功能、管理集合、公开预先填充数据集的查询构建器,甚至公开整个 Metabase 界面。
  • 白标(品牌化):使 Metabase 图表和仪表板的外观和风格与您的应用程序相匹配。
  • 单点登录 (SSO):使您的应用程序和 Metabase 就其用户是谁以及他们可以看到的数据达成一致。
  • 数据沙盒:让您的用户探索他们的数据,而无需看到任何其他人的数据。

完整 Metabase 应用程序嵌入

虽然我们的重点将放在交互式嵌入上,但有几种方法可以处理在您的应用程序中嵌入 Metabase。并且由于“嵌入”是一个如此含义丰富的术语,因此值得了解您可以使用 Metabase 在应用程序中嵌入图表和仪表板的不同方式。

让我们从开源选项开始

Metabase 嵌入选项

公共链接嵌入

最简单的选项(它甚至可能在技术上不符合嵌入的条件)。您在 Metabase 实例中放置一个问题或仪表板,向某人发送一个链接,并告诉他们不要共享它。

公共嵌入

公共嵌入更进一步,因为链接仍然是公共的,但图表通过嵌入式 iframe 在您的应用程序中可见。

静态嵌入

这看起来与公共嵌入相同,但它是由签名 JSON Web 令牌 (JWT) 保护的 iframe。要设置静态嵌入,您需要在前端使用指向问题或仪表板的链接的 iframe,以及在后端使用服务器代码来创建令牌。然后,您可以使用用户 ID 对令牌进行签名,并通过参数化执行一些很酷的操作。

The static embedding wizard. Static embeds require publishing. You can change the chart

例如,您可以在仪表板上创建可以接受参数的过滤器,并根据这些参数过滤仪表板中的数据。您可以拥有一个参数化仪表板,该仪表板接受用户 ID,因此当用户登录时,仪表板将仅显示限制为用户 ID 的用户数据。换句话说,您可以为用户数据创建一个通用仪表板,任何用户都可以访问该仪表板,但每个用户都只会看到与其相关的数据。

安全嵌入的最大缺点是人们无法下钻数据,因为 Metabase 不知道用户具有哪些数据权限。Metabase 可能知道用户是 user_id: 13,但用户 13 与 Metabase 中的用户帐户(以及用户有权访问的组和权限)之间没有联系。为了链接您的应用程序和 Metabase 实例中的帐户,我们将需要交互式嵌入和单点登录。

如果您想深入了解上述选项,请查看我们的关于嵌入的文档。有关代码示例,请参阅我们的嵌入参考应用程序存储库,其中包含使用公共嵌入和静态嵌入的应用程序。

交互式嵌入

交互式嵌入与 SSO 和数据沙盒相结合,使自助报告成为可能。与上面更简单的嵌入选项一样,您仍然使用 iframe 嵌入 Metabase,只是这次您可以嵌入您想要的任何 Metabase 屏幕,并具有完整的交互性。与 SSO 和数据沙盒相结合,您的嵌入式 Metabase 实例将知道 Woolly 是谁以及他可以查看哪些数据,这意味着 Metabase 可以让 Woolly 下钻查看他的数据,而无法查看来自 RhinoCo 用户或其他租户的任何数据。

并且由于您可以使用完整的 Metabase 应用程序,因此您可以为 MammothCo 用户提供集合、仪表板和预定义问题,例如每周交易量。您还可以公开 Metabase 的查询构建器,这将允许像 Woolly 这样的客户根据他们不断发展的数据需求创建自己的问题和仪表板(并使用 Markdown 对其进行注释)。

请参阅我们的关于交互式嵌入的文档以了解更多信息,或查看交互式嵌入的代码示例

白标(品牌化)

Metabase 的外观自定义功能允许您更改字体、颜色、徽标等,以便您的嵌入式 Metabase 看起来和感觉像是您应用程序的一部分。您可以设置最多 24 种颜色,并从各种预加载字体中进行选择,或上传您自己的字体。查看我们关于外观自定义的文档。

In the Admin panel, you can change Metabase

单点登录

单点登录 (SSO) 允许您将应用程序中的用户与 Metabase 中的用户关联起来。通过使用 SSO,您可以避免图表应有的尴尬登录屏幕。如果没有 SSO,用户将登录到您的应用程序,但仍必须登录到您的 Metabase 实例才能查看各个嵌入式仪表板和图表,这是一种不太理想的用户体验。

SSO 如何与 Metabase 协同工作

假设您在您的应用程序 megafauna-analytics.com 中为 MammothCo 用户设置了name: Woolly; user_id: 13。为了与您的 Metabase 实例协调,您随后将(手动或以编程方式)为 Woolly 在您的 Metabase 应用程序中设置一个用户帐户。接下来,您需要将 Woolly 在您的应用程序 megafauna-analytics.com 中的 ID 与 Woolly 在您的 Metabase 实例中的帐户关联起来。为此,您只需向 Woolly 在 Metabase 中的帐户添加一个属性,以指示 Woolly 在您的应用程序中的 user_id13

Add attributes to people in Metabase to coordinate user permissions between your app and your embedded Metabase instance.

设置 SSO 后,当 Woolly 登录 megafauna-analytics.com 时,会生成一个签名令牌,证明他的身份以及您在 Metabase 实例中为他设置的属性。当 Woolly 导航到带有嵌入式 Metabase 图表或仪表板的页面时,Metabase 可以从附加到令牌的 user_id 属性中得知 Woolly 是用户 13,并且应该只能看到您为该用户 ID 提供的数据。

这是基本思路,并且有几种设置方法

对于内部分析,公司通常使用 SAML、LDAP 或 Google 登录。对于外部分析,公司通常更喜欢(并且我们推荐)JWT SSO。

您希望如何处理身份验证取决于您,但您必须设置 SSO 才能协调您的应用程序和 Metabase 实例之间的权限。要了解更多信息,请参阅有关以下内容的文档:

数据沙盒

现在,您的 SSO 正在为 Metabase 提供有关您的用户的详细信息,这些属性可用于过滤每个用户看到的内容,直至特定表的列和行。这就是数据沙盒,它是一个强大的工具,因此我们只能概述其工作原理。

例如,如果您的 orders 表包含所有客户订单,您可以根据列(例如 user_id)过滤该表。您可以将属性 user_id 分配给 Metabase 中的用户(并将该属性附加到他们的登录令牌),以便当用户登录并查看 orders 时,他们只会看到与其 user_id 匹配的行的数据。

Sandboxing the Orders table by filtering the orders by the User ID column. Users will only see orders that correspond to their user_id attribute.

如果您需要更多控制,可以使用已保存的问题创建表的自定义视图。例如,假设您不希望任何用户看到 orders 表中的特定列。在这种情况下,您可以使用自定义视图表,并在 Metabase 中提出并保存问题,从而省略相关列。

要了解有关沙盒的更多信息,请查看

回顾

我们希望本文能让您对如何使用嵌入在您的 Web 应用程序中的多租户 Metabase 实例交付自助报告有一个高层次的了解。以下是包含指向我们文档的链接的快速摘要,如果您想了解有关特定主题的更多信息。

  • 将 iframe 放入您的应用程序中,并嵌入完整的 Metabase 应用程序
  • 使用白标来品牌化您的 Metabase 实例。
  • 使用 SAMLJWT 设置 SSO,以将您的应用程序中的用户与您的嵌入式 Metabase 实例链接起来,并将用户属性附加到签名令牌。
  • 使用这些属性沙盒化数据,以确保用户只能看到他们有权查看的数据。

如上所述,交互式嵌入对于大多数公司来说是一个不错的选择,但它并不是提供自助报告的唯一选择。请参阅如何使用 Metabase 向您的客户交付分析功能,以概述您可以使用 Metabase 的不同方式(从简单的设置(无需嵌入)到提供惊人可定制性的设置),以找到适合您组织的方法。

下一步:品牌化您的 Metabase

自定义您的 Metabase 的名称、调色板、徽标、网站图标和主页。

下一篇文章