您可以通过添加以下内容来自定义嵌入式仪表盘:
预过滤器。 将
preFilter
选项与Charts Embedding SDK 结合使用,或将各种查询参数附加到 iframe URL。筛选器。 将
filter
选项与Charts Embedding SDK 结合使用,或将各种查询参数附加到 iframe URL。
您可以在同一图表中同时使用预筛选器和筛选器,尽管它们是可选的。 预筛选器(如果指定)始终在视图之后、仪表盘的查询和筛选器之前运行。 要学习;了解有关管道段顺序的更多信息,请参阅聚合管道。
指定可筛选字段
仪表盘作者指定可包含在由嵌入式应用程序代码设立或由仪表盘查看器添加的预筛选器和筛选器中的字段。 仪表盘作者可以通过仅允许筛选某些字段来限制对数据的访问权限。 默认,不允许使用任何字段,这意味着在您明确允许至少一个字段之前,无法筛选仪表盘。
要定义可筛选字段,请执行以下操作:
对于所需的仪表盘,单击按钮,然后从下拉列表中选择 Embed 。
在Allowed filter fields部分中,单击按钮。
注意
仅当您已启用“未验证”或“已验证”嵌入访问权限时,才会显示此选项。
您可以指定仪表盘查看器可以按哪些字段筛选数据:
使用下拉列表选择字段
手动键入值以添加下拉列表中未列出的字段
选择 Allow all fields in the data source used in this dashboard
选择所有所需字段后,单击下拉列表下方的Save 。
仪表盘查看器和呈现仪表盘的应用程序现在可以使用基于指定字段的筛选器来显示原始仪表盘数据的子集。 如果查看器尝试对未包含在允许的筛选器字段列表中的字段使用筛选器,Atlas Charts 将返回错误。
为具有嵌入式文档的字段指定可筛选子字段
当您将字段添加到值为嵌入式文档的Allowed filter fields列表时,您还必须指定要允许的每个单独的子字段。
例子
请考虑以下文档:
{ "name": "Alice", "favorites" : { "color": "green", "animal": "turtle", "season": "autumn" } }
如果您仅将favorites
字段添加到允许字段列表中,则不会授予查看器根据favorites
的任何子字段进行筛选的权限。 相反,您可以通过指定favorites.color
、 favorites.animal
或favorites.season
,将一个或多个子字段单独添加到列表中。
对 iframe 中嵌入的仪表盘上的数据进行预过滤
对包含大量集合的嵌入式图表和仪表盘使用预筛选器。 预筛选器在嵌入式图表管道的早期阶段运行,可实现以下结果:
及早过滤数据,以减少查询运行时间
在视图之后、查询执行之前应用筛选器,并筛选包含聚合的查询
预过滤器的行为与过滤器完全相同,并使用相同的语法。 它们唯一的区别是在视图之后、查询和筛选器开始之前运行。 要学习;了解有关管道段顺序的更多信息,请参阅聚合管道。
在 iframe 中嵌入的仪表盘上筛选数据
使用filter
查询参数,仅显示与 iframe 中嵌入的仪表盘中指定的 MQL筛选器匹配的数据。
您只能在Unauthenticated仪表盘上使用filter
查询参数。 对于未经身份验证的仪表盘,仪表盘作者会指定可包含在由嵌入式应用程序代码设立或由仪表盘查看器添加的筛选器中的字段。 要学习;了解如何指定可筛选字段,请参阅指定可筛选字段。
过滤器语法
您可以指定 MQL 文档作为filter
查询参数,前提是筛选器中使用的字段位于允许的可筛选字段列表中。
您的筛选器必须与$match查询中使用的格式匹配,并且可以是:
顶级查询
例子
{ "quantity": { $gte: 20 } } 例子
{ $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] }
注意
您必须对筛选器参数的特殊字符进行 URL 编码。
例子
以下 iframe src
URL 呈现一个仪表盘,该仪表盘仅显示imdb.rating
大于或等于8
的文档:
https://charts.mongodb.com/charts-atlasproject1-piocy/embed/dashboards? id=93584ddb-1115-4a12-afd9-5129e47bbb0d& filter={"imdb.rating":%20{$gte:%208}}
该 URL 使用{"imdb.rating":%20{$gte:%208}}
的编码filter
参数。 解码后,该筛选器为:
{"imdb.rating": {$gte: 8}}
对使用 SDK 嵌入的仪表盘上的数据进行预过滤
您可以使用preFilter
选项将预过滤器添加到嵌入式仪表盘。 预筛选允许仪表盘作者在执行查询之前运行过滤。
在Embed模式中,您必须指定要包含在预筛选器中的字段。 Embed模式包含允许筛选的字段下拉菜单。
以下使用preFilter
选项仅表示澳大利亚的文档:
createDashboard({ baseUrl: '<your-base-url>', dashboardId: '<your-chart-id>', width: 500, height: 500, preFilter: { "address.country": "Australia" } })
在使用 SDK 嵌入的仪表盘上筛选数据
您可以使用filter
选项将筛选器添加到嵌入式仪表盘。 筛选允许仪表盘作者仅显示嵌入式仪表盘中与指定MQL筛选器匹配的数据。
在Embed模式中,您必须指定要包含在过滤中的字段。 Embed模式包含允许筛选的字段下拉菜单。
以下示例使用filter
选项,仅表示total
字段大于100
的文档:
createDashboard({ baseUrl: '<your-base-url>', dashboardId: '<your-dashboard-id>', width: 500, height: 500, filter: { "total": { "$gt": 100 } } })
注入特定于用户的筛选器
当您嵌入需要Authenticated访问权限的仪表盘时,可以使用Injected function设置注入特定于查看仪表盘的每个用户的 MongoDB 筛选器文档。 该函数可以通过context.token
访问嵌入式身份验证提供程序的令牌,并且可以根据该令牌筛选仪表盘数据。
此筛选器可确保嵌入式仪表盘的查看者只能看到自己的数据,这在嵌入包含潜在敏感信息的仪表盘时非常有用。
要注入特定于每个用户的筛选器,请在Embed对话框的Authenticated标签页中设置Injected function`setting to :guilabel:`On 。 指定一个函数并单击Save 。
例子
以下筛选器函数仅呈现文档的ownerId
字段与嵌入式身份验证提供程序的令牌的sub
字段的值匹配的数据:
function getFilter(context) { return { ownerId: context.token.sub }; }