多租户自助分析
嵌入整个 Metabase 应用程序(包括查询构建器),为用户提供安全、个性化的数据访问权限。
那么,您正在考虑将 Metabase 嵌入到您的应用程序中,以便为客户提供分析功能。这将如何实现呢?
在本文中,我们将
- 首先介绍您将为客户提供的目标体验。
- 简要介绍向多个租户提供自助报告的挑战。
- 讨论 Metabase 提供的相关功能,以及它们如何协同工作来解决这些问题。
目标用户体验
让我们从客户的角度,看看最终的分析体验会是什么样子。
参与者
- 您的公司:Megafauna Analytics
- 客户 1:猛犸公司
- 客户 2:犀牛公司
背景故事
您是一家 B2B 公司,Megafauna Analytics,您正在使用 Metabase 通过在 megafauna-analytics.com 上的应用程序中嵌入 Metabase 来为客户提供报告。
以下是客户体验概述:猛犸公司的 Woolly 登录 megafauna-analytics.com 上的您的应用程序,然后导航到您为猛犸公司设置的分析页面。在那里,Woolly 将看到一系列屏幕,展示了精美的仪表板和图表,显示了猛犸公司的订单、交易以及您提供的其他沙盒数据,所有这些都带有您(Megafauna)的品牌颜色。
Woolly 不仅可以查看静态仪表板,还可以点击图表上的数据并进行下钻。例如,他可以放大查看特定一周的交易,或者点击图表中的柱子,调出显示该柱子所代表的未聚合行的表格。
此外,借助 Metabase 的图形查询构建器,Woolly 可以对他的猛犸公司数据进行切片和分析。他可以使用编辑器的强大查询功能,以及更复杂的查询的自定义表达式,来找到您的仪表板未解决的问题的答案——所有这些都不会看到来自犀牛公司或其他客户的任何数据。
您还可以通过设置自定义目标(例如另一个仪表板、问题或 URL)来自定义用户点击仪表板上图表时的行为。您还可以设置图表以更新筛选器。
这就是背景故事。我们如何实现它呢?
创建多租户自助分析的挑战
所谓多租户,我们指的是一个共享的应用程序实例,其中不同的用户组(例如猛犸公司或犀牛公司)拥有不同的权限,因此可以访问不同的数据。而自助服务则意味着应用程序除了管理员提供的报告之外,还应该允许用户创建自己的报告。
在深入探讨 Metabase 如何提供多租户自助分析之前,我们首先要明确需要解决的问题。为了给 Woolly 提供上述体验,我们必须做到以下几点:
- 以一种允许用户访问查询构建器和下钻功能的方式,将 Metabase 嵌入到您的应用程序 (megafauna-analytics.com) 中。
- 使仪表板和图表与您(Megafauna)的品牌颜色保持一致。
- 将 megafauna-analytics.com 中的给定用户与您嵌入的 Metabase 实例中的用户关联起来。
- 将用户可见数据限制为他们被允许查看的行和列。
让我们看看 Metabase 如何解决这些问题。
设置多租户自助报告所需的四个功能
我们将详细介绍每个功能,但这里是它们的一览:
- 交互式嵌入:为嵌入式图表和仪表板添加下钻功能,管理集合,公开预填充数据集的查询构建器,甚至公开整个 Metabase 界面。
- 白标(品牌化):使 Metabase 图表和仪表板与您的应用程序外观和风格保持一致。
- 单点登录 (SSO):使您的应用程序和 Metabase 能够就用户身份及其可查看的数据达成一致。
- 数据沙盒:让您的用户探索他们的数据,而不会看到其他任何人的数据。
完整的 Metabase 应用程序嵌入
虽然我们的重点是交互式嵌入,但有几种方法可以在您的应用程序中处理 Metabase 嵌入。由于“嵌入”是一个含义丰富的术语,因此值得详细介绍您可以使用 Metabase 将图表和仪表板嵌入到应用程序中的不同方式。
让我们从开源选项开始
Metabase 嵌入选项
公共链接嵌入
最简单的选项(可能甚至不完全符合嵌入的定义)。您在 Metabase 实例中创建一个问题或仪表板,然后将链接发送给某人,并告诉他们不要共享该链接。
公共嵌入
一个公共嵌入是更进一步的选项,因为链接仍然是公开的,但图表通过嵌入式 iframe 在您的应用程序中可见。
静态嵌入
这看起来与公共嵌入相同,但它是一个由签名 JSON Web Token (JWT) 保护的 iframe。要设置静态嵌入,您需要在前端使用指向问题或仪表板的 iframe 链接,以及后端用于创建令牌的服务器代码。然后您可以使用用户 ID 签署令牌,并通过参数化实现一些很棒的功能。
例如,您可以在仪表板上创建筛选器,这些筛选器可以接受参数,并根据这些参数筛选仪表板中的数据。您可以拥有一个接受用户 ID 的参数化仪表板,这样当该用户登录时,仪表板将只显示限制为其用户 ID 的数据。换句话说,您可以为用户数据创建一个通用仪表板,任何用户都可以访问,但每个用户都将只看到与他们相关的数据。
安全嵌入的主要缺点是用户无法下钻数据,因为 Metabase 不知道用户拥有哪些数据权限。Metabase 可能知道用户是 user_id: 13
,但用户 13 与 Metabase 中的用户账户(以及因此用户可访问的组和权限)之间没有连接。要在您的应用程序和 Metabase 实例之间链接账户,我们需要交互式嵌入和单点登录。
如果您想深入了解上述选项,请查看我们的嵌入文档。有关代码示例,请参阅我们使用公共和静态嵌入的嵌入参考应用程序仓库。
交互式嵌入
交互式嵌入与 SSO 和数据沙盒相结合,使自助报告成为可能。与上述简单的嵌入选项一样,您仍然使用 iframe 嵌入 Metabase,只不过这次您可以嵌入任何您想要的 Metabase 屏幕,并具有完整的交互性。结合 SSO 和数据沙盒,您嵌入的 Metabase 实例将知道 Woolly 是谁以及他可以查看哪些数据,这意味着 Metabase 可以让 Woolly 下钻他的数据,而不会看到来自犀牛公司用户或其他租户的任何数据。
由于您拥有完整的 Metabase 应用程序,您可以为猛犸公司用户提供集合、仪表板和预定义问题,例如每周交易。您还可以公开 Metabase 的查询构建器,这将允许像 Woolly 这样的客户根据他们不断变化的数据需求创建自己的问题和仪表板(并使用 Markdown 添加注释)。
查看我们的交互式嵌入文档以了解更多信息,或查看交互式嵌入的代码示例。
白标(品牌化)
Metabase 的外观自定义功能允许您更改字体、颜色、徽标等,使您嵌入的 Metabase 看起来和感觉上像是您应用程序的一部分。您可以设置多达 24 种颜色,并且可以选择预加载的多种字体,或者上传您自己的字体。查看我们的外观自定义文档。
单点登录
单点登录 (SSO) 允许您将应用程序中的用户与 Metabase 中的用户关联起来。通过使用 SSO,您可以避免在应该显示图表的地方出现不便的登录屏幕。如果没有 SSO,用户将登录您的应用程序,但仍必须登录您的 Metabase 实例才能查看单个嵌入式仪表板和图表——这是一种不理想的用户体验。
SSO 如何与 Metabase 协作
假设您在您的应用程序 megafauna-analytics.com 中为猛犸公司设置了一个用户,其 name: Woolly; user_id: 13
。为了与您的 Metabase 实例协同工作,您需要(手动或以编程方式)在您的 Metabase 应用程序中为 Woolly 设置一个用户帐户。接下来,您需要将 Woolly 在您的应用程序 megafauna-analytics.com 中的 ID 与 Woolly 在您的 Metabase 实例中的帐户关联起来。为此,您只需在 Woolly 的 Metabase 帐户中添加一个属性,以表明 Woolly 在您的应用程序中的 user_id
为 13
。
设置好 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
匹配的行数据。
如果您需要更多控制,您可以使用已保存的问题创建表的自定义视图。例如,假设您不希望任何用户看到 orders
表中的特定列。在这种情况下,您可以通过在 Metabase 中提问并保存问题,来创建该表的自定义视图,并省略相关列。
要了解更多关于沙盒的信息,请查看:
总结
我们希望本文能让您对如何通过嵌入到您的 Web 应用程序中的多租户 Metabase 实例提供自助报告有一个高层次的理解。这里是一个快速总结,包含指向我们文档的链接,如果您想了解特定主题,可以深入学习。
- 在您的应用程序中放置 iframe,并嵌入完整的 Metabase 应用程序。
- 使用白标功能为您的 Metabase 实例进行品牌化。
- 使用 SAML 或 JWT 设置 SSO,将您应用程序中的用户与您嵌入的 Metabase 实例关联起来,并将用户属性附加到签名令牌中。
- 使用这些属性对数据进行沙盒处理,以确保用户只能看到他们有权限查看的数据。
如上所述,交互式嵌入是大多数公司的一个绝佳选择,但它并非提供自助报告的唯一选择。请参阅如何使用 Metabase 为您的客户提供分析功能,以了解使用 Metabase 的不同方式——从简单的设置(无需嵌入)到提供惊人可定制性的设置——从而找到适合您组织的方法。
下一步:品牌化您的 Metabase
自定义您的 Metabase 的名称、调色板、徽标、网站图标和主页。