静态嵌入

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

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

您不能将静态嵌入与行和列安全钻取一起使用,并且由于签名JWT不会创建用户会话(服务器端会话),因此用户特定数据不会捕获在使用情况分析中。有关这些功能,请参阅嵌入式分析JS

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

静态嵌入的工作原理

如果您想在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处显示结果是安全的。请注意,此密钥是所有静态嵌入共享的,因此拥有该密钥访问权限的人将拥有所有嵌入式工件的访问权限。

如果您想嵌入具有其他交互功能的图表,例如下钻自助服务查询,请参阅嵌入式分析JS

在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秒刷新一次,您可以将refresh=60添加到URL。

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

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

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

移除“Powered by Metabase”横幅

Powered by Metabase

横幅显示在使用Metabase开源版本创建的静态嵌入上。要移除横幅,您需要升级到ProEnterprise计划。

重新生成静态嵌入密钥

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

  1. 转到**管理员** > **嵌入** > **静态嵌入**。
  2. 在**重新生成密钥**下,点击**重新生成密钥**。

此密钥在所有静态嵌入之间共享。拥有此密钥访问权限的人都可以访问所有嵌入式工件,因此请妥善保管此密钥。如果您重新生成此密钥,则需要使用新密钥更新您的服务器代码。

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

仪表板具有固定的宽高比,因此如果您想确保它们在垂直方向上自动调整大小以适应其内容,可以使用iFrame Resizer脚本。Metabase提供了一个副本以方便使用。

<script src="{your-metabase-url}/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.