静态嵌入
也称为:独立嵌入或签名嵌入。
通常,嵌入是通过在您的网站中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中启用嵌入功能
- 转到**设置** > **管理员设置** > **嵌入 > 静态**。
- 切换**启用静态嵌入**。
使问题或仪表板可嵌入

创建静态嵌入

将嵌入URL添加到您的网站
问题或仪表板的嵌入URL是将在您的网站iframe中显示的Metabase URL。它由您的Web服务器使用您的Metabase站点URL、签名JWT和参数生成。
metabase_site_url/embed/question/your_jwt_token?parameter_name=value
一旦您使问题或仪表板可嵌入,您就需要将该问题或仪表板的嵌入URL放置在您的网站上。
- 转到问题或仪表板 > **共享图标** > **嵌入**。
- 进行任何更改并复制代码。
- 预览代码
- 将代码添加到构建您网站的服务器代码中。
- 将前端代码添加到生成您希望嵌入项出现的页面的代码中。
有关更多示例,请参阅我们的参考应用程序仓库。
预览嵌入的代码
- 转到问题或仪表板 > **共享图标** > **将此项嵌入应用程序**。
- 点击**代码**。
- 在顶部的代码块中,您将找到Web服务器的示例代码。您还将找到可以插入HTML模板或单页应用程序的iframe代码段。
当您更改外观或参数预览设置时,Metabase将更新代码并突出显示更改。请务必将这些更改复制到您的实际服务器代码中。

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;两者都可以正常工作。
编辑嵌入的问题或仪表板
如果您更改了嵌入项的参数
- 进行更改后,复制Metabase生成的代码。
- 再次点击**发布**。
- 更新服务器上的代码,使其与Metabase生成的代码匹配。
禁用问题或仪表板的嵌入
您可以在**管理员设置** > **嵌入** > **静态**中找到问题和仪表板的所有静态嵌入列表。
- 访问可嵌入的问题或仪表板。
- 点击**共享图标**(带有向上箭头指向右上角的正方形)。
- 选择**嵌入**。
- 选择**静态嵌入**
- 点击**取消发布**。
自定义静态嵌入的外观
请参阅自定义静态嵌入的外观。
自动刷新嵌入式仪表板的结果
自动刷新仅适用于仪表板,不适用于问题。
要以特定节奏刷新仪表板的结果,您可以使用refresh参数化嵌入式URL。例如,要将嵌入式仪表板设置为每60秒刷新一次,您可以将refresh=60添加到URL。
例如,以下用于生成仪表板iframe URL的代码将显示仪表板的标题并每60秒刷新其结果。
var iframeUrl =
METABASE_SITE_URL + "/embed/dashboard/" + token + "#titled=true&refresh=60";
有关可参数化的完整选项列表,请参阅自定义静态嵌入的外观。
移除“Powered by Metabase”横幅

横幅显示在使用Metabase开源版本创建的静态嵌入上。要移除横幅,您需要升级到Pro或Enterprise计划。
重新生成静态嵌入密钥
您的嵌入密钥用于为所有嵌入URL签名JWT。
- 转到**管理员** > **嵌入** > **静态嵌入**。
- 在**重新生成密钥**下,点击**重新生成密钥**。
此密钥在所有静态嵌入之间共享。拥有此密钥访问权限的人都可以访问所有嵌入式工件,因此请妥善保管此密钥。如果您重新生成此密钥,则需要使用新密钥更新您的服务器代码。
调整仪表板大小以适应其内容
仪表板具有固定的宽高比,因此如果您想确保它们在垂直方向上自动调整大小以适应其内容,可以使用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 的文档。