静态嵌入

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

通常,嵌入是通过在您的网站中显示 Metabase URL 在 iframe 内完成的。一个 静态嵌入(或签名嵌入)是一个 iframe,它加载一个使用签名的 JSON Web Token (JWT) 进行安全保护的 Metabase URL。只有当请求提供了使用您的应用程序和 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="http://metabase.example.com/app/iframeResizer.js"></script>
<iframe
  src="http://metabase.example.com/embed/dashboard/TOKEN"
  onload="iFrameResize({}, this)"
></iframe>

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

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

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

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

延伸阅读

阅读其他Metabase 版本的文档。

© . All rights reserved.