多租户自助式分析
嵌入整个 Metabase 应用程序(包括查询构建器),为人们提供安全、个性化的数据访问。
那么,您正在考虑将 Metabase 嵌入到您的应用程序中,以便为您的客户提供分析功能。这将如何实现?
在本文中,我们将首先介绍您将为客户提供的目标体验,然后讨论 Metabase 提供的相关功能以及它们如何协同工作以提供自助服务分析。
目标客户体验
让我们从客户角度来看,最终的分析体验会是什么样子。
参与者
- 您的公司:巨兽分析
- 客户 1:猛犸公司
- 客户 2:犀牛公司
这就是我们要构建的
您是一家 B2B 公司,巨兽分析,您正在使用 Metabase 通过将 Metabase 嵌入到您的应用程序中来为客户提供报告。
以下是客户体验概述:猛犸公司的 Woolly 登录 megafauna-analytics.com 上的应用程序,然后导航到您为猛犸公司设置的分析页面。在那里,Woolly 看到一组屏幕,其中包含精美的仪表盘和图表,显示猛犸公司的订单、交易和您提供的猛犸公司其他数据,所有这些都具有您的(巨兽分析的)品牌颜色。
除了查看静态仪表盘,Woolly 还可以点击图表上绘制的数据并钻取。例如,他可以放大某个特定周的交易,或者点击图表中的条形图以拉出列出构成该条形图的未聚合行的表格。
Woolly 还可以使用查询构建器提出自己的问题。
设置
要为 Woolly 提供上述体验,我们需要设置以下内容
- 将 Metabase 放入您的应用程序中:为嵌入式图表和仪表盘添加钻取功能,策划集合,公开预填充数据集的查询构建器,甚至公开整个 Metabase 界面。
- 白标(品牌化):使 Metabase 图表和仪表盘与您的应用程序的外观和感觉相匹配,确保它们与您的(巨兽分析的)品牌颜色相匹配。
- 单点登录 (SSO):使您的应用程序和 Metabase 能够就其用户身份及其可查看的数据达成一致,将 megafauna-analytics.com 中的特定人员与嵌入式 Metabase 中的帐户关联起来。
- 权限管理:让人们探索自己的数据,而不会看到其他人的数据。
我们将在下面的章节中详细介绍每个功能。
将 Metabase 放入您的应用程序中
有几种方法可以处理将 Metabase 嵌入到您的应用程序中。对于完整的自助服务,您会希望选择交互式嵌入或嵌入式分析 SDK。但这里是选项概述。
公共链接
最简单的选项(甚至可能在技术上不属于嵌入)。您在 Metabase 中提出一个问题或仪表盘,将其链接发送给某人,并告诉他们不要分享。
公共嵌入
公共嵌入更进一步,因为链接仍然是公共的,但图表通过嵌入式 iframe 在您的应用程序中可见。
静态嵌入
静态嵌入看起来与公共嵌入相同,但静态嵌入是通过签名的 JSON Web Token (JWT) 保护的 iframe。通过静态嵌入,您可以在仪表盘上创建接受参数并根据这些参数筛选数据的过滤器。例如,您可以有一个接受用户 ID 的参数化仪表盘,因此当该用户登录时,仪表盘将只显示仅限于其用户 ID 的数据。换句话说,您可以为用户数据创建一个通用仪表盘,任何用户都可以访问,但每个用户将只看到与他们相关的数据。
静态嵌入的主要缺点是人们无法钻取数据或使用查询构建器,因为 Metabase 不知道该人员拥有什么数据权限。要将您的应用程序和 Metabase 之间的帐户关联起来,我们需要交互式嵌入和单点登录。
交互式嵌入
交互式嵌入与 SSO 以及行和列安全性相结合,使得自助服务报告成为可能。与上面更简单的嵌入选项一样,您仍然使用 iframe 嵌入 Metabase,只是这次您可以嵌入您想要的任何 Metabase 屏幕,并具有完整的交互性。结合 SSO 以及行和列安全性,您的嵌入式 Metabase 将知道 Woolly 是谁以及他可以查看哪些数据,这意味着 Metabase 可以让 Woolly 钻取他的数据,而无需查看犀牛公司用户或其他租户的任何数据。
由于您可以完全使用 Metabase 应用程序,因此您可以为 MammothCo 用户提供集合、仪表盘和预定义问题,例如周环比交易。您还可以公开 Metabase 的查询构建器,这将允许像 Woolly 这样的客户根据他们不断变化的数据需求创建自己的问题和仪表盘(并使用 Markdown 进行注释)。
请参阅我们关于交互式嵌入的文档。
嵌入式分析 SDK
它类似于交互式嵌入,但您可以嵌入应用程序的单个组件。SDK 为您提供了对样式和交互的最大控制。您可以使用 JWT 或 SAML 进行 SSO。但问题是:它比交互式嵌入工作量更大,而且您的应用程序必须使用 React。
请查阅我们的SDK 文档。
白标(品牌化)
您可以自定义 Metabase 的外观以匹配您的应用程序的外观和感觉。更改字体、颜色、徽标等,使其感觉像是您应用程序的自然组成部分。
单点登录
单点登录 (SSO) 允许您将应用程序中的用户与 Metabase 中的用户关联起来。通过使用 SSO,您可以避免在图表应该显示的地方出现尴尬的登录屏幕。如果没有 SSO,用户将登录到您的应用程序,但仍然需要登录到您的 Metabase 才能查看单个嵌入式仪表盘和图表——这是一种不理想的用户体验。
假设您在您的应用程序 megafauna-analytics.com 中设置了一个猛犸公司用户,其 name: Woolly; user_id: 13
。为了与您的 Metabase 协调,您需要在您的 Metabase 应用程序中为 Woolly 设置一个用户帐户。接下来,您需要将 Woolly 在您的应用程序 megafauna-analytics.com 中的 ID 与 Woolly 在您的 Metabase 中的帐户关联起来。为此,您可以在 Metabase 中 Woolly 的帐户中添加一个属性,以指示 Woolly 在您的应用程序中的 user_id
是 13
。
设置 SSO 后,当 Woolly 登录 megafauna-analytics.com 时,他可以导航到带有嵌入式 Metabase 的页面,该页面将知道他是谁以及他应该拥有哪些权限。
查阅我们关于 SSO 的文档
权限管理
现在您的 SSO 正在向 Metabase 提供有关谁在使用您的应用程序的详细信息,Metabase 可以使用这些属性来筛选每个人看到的内容,直至特定表的列和行。
您如何管理权限取决于您如何存储客户数据
- 混合(所有客户共享一个数据库):您可以使用行和列安全性或模拟,以及其他控制措施。
- 隔离(每个客户一个数据库):您可以使用数据库路由(除了行和列安全性、模拟以及 Metabase 附带的所有其他访问控制工具)。
行和列安全
行和列通过基于用户属性筛选所有查询来工作。
例如,如果您的 orders
表包含所有客户订单,您可以根据列(例如 user_id
)筛选该表。您可以为 Metabase 中的用户分配一个属性 user_id
(并将其附加到他们的登录令牌),以便当用户登录并查看 orders
时,他们将只看到与他们的 user_id
匹配的数据行。
请参阅我们关于行和列安全性的文档。
模拟
模拟允许您将权限“外包”给数据库中的角色。当您希望通过数据库中的角色管理权限时,请使用模拟,这对于授予人们对表的 SQL 访问权限特别有用。请参阅关于模拟的文档。
数据库路由
数据库路由用于每个客户一个数据库的设置。数据库路由允许您针对主数据库(一种模板数据库)构建单个仪表盘,但根据登录用户不同,仪表盘会切换查询的数据库。请参阅数据库路由。