静态嵌入

也称为:独立嵌入,或签名嵌入。

通常,嵌入是通过在您的网站中的 iframe 内显示 Metabase URL 来实现的。**静态嵌入**(或签名嵌入)是一个加载了用已签名的 JSON Web Token (JWT) 保护的 Metabase URL 的 iframe。只有当请求提供了用您的应用和 Metabase 共享的密钥签名的 JWT 时,Metabase 才会加载该 URL。JWT 还包含要加载的资源的引用,例如仪表盘 ID,以及任何锁定参数的值。

您不能将静态嵌入与行级和列级安全穿透钻取一起使用,并且用户特定的数据不会在使用情况分析中捕获,因为签名的 JWT 不会创建用户会话(服务器端会话)。对于这些功能,请查看交互式嵌入

但是,您可以通过锁定参数来限制特定人员或群组在静态嵌入中看到的数据。

静态嵌入的工作原理

如果您想在 iframe 中设置交互式 Metabase 筛选器,您的 Web 服务器将需要在每次网站访问者更新筛选器小部件时向 Metabase 发出请求以获取更新后的数据。

为了向 Metabase 请求更新的数据,您的 Web 服务器将生成一个新的 Metabase 嵌入 URL。例如,如果网站访问者在嵌入的筛选器小部件中输入值“true”,您的 Web 服务器将生成一个带有多余参数的新嵌入 URL。

your_metabase_embedding_url?filter=true

为防止人们编辑嵌入 URL 以访问 Metabase 的其他部分(例如,通过将参数更改为filter=company_secrets),您的 Web 服务器将向新的嵌入 URL 添加一个已签名的 JWT。

your_metabase_embedding_url/your_signed_jwt?filter=true

已签名的 JWT 是使用您的 Metabase 密钥生成的。该密钥告诉 Metabase,请求筛选数据的请求是可信的,因此在新嵌入 URL 上显示结果是安全的。请注意,此密钥是所有静态嵌入共享的,因此任何有权访问该密钥的人都将有权访问所有嵌入的工件。

如果您想嵌入具有额外交互功能的图表,如向下钻取自助查询,请参阅交互式嵌入

在 Metabase 中开启嵌入功能

  1. 前往**设置** > **管理员设置** > **嵌入**。
  2. 切换**启用嵌入**。

使问题或仪表盘可嵌入

Sharing button to embed dashboard

要创建静态嵌入

  1. 转到您想要嵌入到网站中的问题或仪表盘。
  2. 点击**分享图标**。
  3. 选择**嵌入**。
  4. 选择**静态嵌入**。
  5. 可选:自定义嵌入的外观
  6. 可选:向嵌入添加参数
  7. 点击**发布**。

Preview

将嵌入 URL 添加到您的网站

问题或仪表盘的嵌入 URL 是将显示在您网站 iframe 中的 Metabase URL。它由您的 Web 服务器使用您的 Metabase 站点 URL已签名的 JWT参数生成。

metabase_site_url/embed/question/your_jwt_token?parameter_name=value

一旦您使问题或仪表盘可嵌入,您需要将该问题或仪表盘的嵌入 URL 放置到您的网站上。

  1. 转到问题或仪表盘 > **分享图标** > **嵌入**。
  2. 进行任何更改并复制代码。
  3. 预览代码。
  4. 将代码添加到构建您网站的服务器代码中。
  5. 将前端代码添加到生成您希望嵌入项出现的页面的代码中。

更多示例,请参见我们的 参考应用仓库

预览嵌入的代码

  1. 转到问题或仪表盘 > **分享图标** > **将此项嵌入到应用程序中**。
  2. 点击**代码**。
  3. 在顶部的代码块中,您将找到您的 Web 服务器的示例代码。您还将找到要插入到您的 HTML 模板或单页应用中的 iframe 片段。

当您对外观或参数预览设置进行更改时,Metabase 将更新代码并高亮显示更改。请确保将这些更改复制到您的实际服务器代码中。

Code samples for embedding

Metabase 生成以下语言的服务器代码:

  • Clojure
  • Node.js
  • Python
  • Ruby

对于 iframe 片段:

  • ERB
  • JSX
  • Mustache
  • Pug/Jade

如果您序列化 Metabase,请在静态嵌入中使用实体 ID

在静态嵌入中使用实体 ID将确保在从一个 Metabase 导出并导入到另一个 Metabase 时 ID 保持稳定。

要在静态嵌入中使用实体 ID,您需要做的就是编辑用于签署令牌的 payload 中的 resource 映射。将项目的(自动填充的)ID 替换为其实体 ID 即可。

所以,在下面的代码中,您需要将 { question: <ID> } 更改为:

const payload = {
  resource: { question: <Entity ID goes here> },
  params: {},
  exp: Math.round(Date.now() / 1000) + (10 * 60) // 10 minute expiration
};

如果您不序列化您的 Metabase,则无需担心使用哪个 ID;两者都可以正常工作。

编辑嵌入的问题或仪表盘

如果您更改了嵌入项的参数

  1. 进行更改后,复制 Metabase 生成的代码。
  2. 再次点击**发布**。
  3. 更新您服务器上的代码,使其与 Metabase 生成的代码匹配。

禁用问题或仪表盘的嵌入

您可以从**管理员设置** > **嵌入** > **静态嵌入** > **管理**中找到所有问题和仪表盘的静态嵌入列表。

  1. 访问可嵌入的问题或仪表盘。
  2. 点击**分享图标**(带有指向右上角箭头的方块)。
  3. 选择**嵌入**。
  4. 选择**静态嵌入**。
  5. 点击**取消发布**。

自定义静态嵌入的外观

请参阅自定义静态嵌入的外观

自动刷新嵌入式仪表盘的结果

自动刷新仅适用于仪表盘,不适用于问题。

要以特定频率刷新仪表盘的结果,您可以使用 refresh 参数化嵌入的 URL。例如,要将嵌入的仪表盘设置为每 60 秒刷新一次,您将在 URL 后附加 refresh=60

例如,以下用于生成仪表盘 iframe URL 的代码将显示仪表盘的标题并每 60 秒刷新其结果。

var iframeUrl =
  METABASE_SITE_URL + "/embed/dashboard/" + token + "#titled=true&refresh=60";

有关您可以参数化的完整选项列表,请参阅自定义静态嵌入的外观

移除“由 Metabase 驱动”横幅

Powered by Metabase

该横幅出现在使用 Metabase 开源版本创建的静态嵌入上。要移除该横幅,您需要升级到专业版企业版计划。

重新生成静态嵌入密钥

您的嵌入密钥用于为所有嵌入 URL 签署 JWT。

  1. 前往**设置** > **管理员设置** > **嵌入**。
  2. 在**静态嵌入**卡片上,点击**管理**。
  3. 在**重新生成密钥**下,点击**重新生成密钥**。

此密钥在所有静态嵌入之间共享。任何有权访问此密钥的人都可以访问所有嵌入的工件,因此请确保此密钥的安全。如果您重新生成此密钥,您需要使用新密钥更新您的服务器代码。

调整仪表盘大小以适应其内容

仪表盘的宽高比是固定的,因此如果您希望确保它们能自动垂直调整大小以适应其内容,您可以使用 iFrame Resizer 脚本。为方便起见,Metabase 提供了一个副本。

<script src="https://metabase.example.com/app/iframeResizer.js"></script>
<iframe
  src="https://metabase.example.com/embed/dashboard/TOKEN"
  onload="iFrameResize({}, this)"
></iframe>

由于 iframe-resizer 的许可变更,我们建议您使用 iframe-resizer 4.3.2 或更低版本。

静态嵌入仪表盘中的自定义目标

对于静态嵌入的仪表盘,您只能使用**URL**选项作为自定义目标。外部 URL 将在新标签页或新窗口中打开。

您可以将筛选器值传播到外部 URL,除非该筛选器被锁定。

翻译静态嵌入

请参阅翻译嵌入的问题和仪表盘

延伸阅读

阅读其他版本的 Metabase 的文档。

这有帮助吗?

感谢您的反馈!
想要改进这些文档?提出更改建议。
© . This site is unofficial and not affiliated with Metabase, Inc.