supersetDashboard superset 仪表盘
|
此组件需要安装免费的 Superset 扩展组件。 |
supersetDashboard 可以在应用程序视图中嵌入 Apache Superset 配置的仪表盘。
XML 元素 |
|
|---|---|
Java 类 |
|
基本用法
在视图的 XML 中声明 superset 命名空间:
<view xmlns="http://jmix.io/schema/flowui/view"
xmlns:superset="http://jmix.io/schema/superset/ui"
title="msg://dashboardView.title">
|
当使用顶部操作面板中的 Add Component 操作添加组件时,Studio 会自动添加该命名空间。请参见 组件面板。 |
然后将 supersetDashboard 添加到视图,并指定 id、大小以及从 Apache Superset 获取的 embeddedId:
<superset:dashboard id="dashboard" width="100%" height="100%"
embeddedId="b6f53731-1da2-4768-b545-fff4fd2659c6"/>
此外,还可以将组件注入控制器以编程方式交互:
@ViewComponent
private SupersetDashboard dashboard;
@Subscribe
public void onInit(final InitEvent event) {
dashboard.setEmbeddedId("1aec5c74-f143-4051-818b-fcf9d77c8501");
}
数据集约束
Superset 中的仪表盘可以包含多个图表,显示来自不同数据集的数据。SupersetDashboard 组件可以对这些数据集设置约束。约束可以在组件的 XML 元素中静态定义,也可以在运行时动态计算。
如需使用约束,先定义数据集的 ID,再编写一个原生 SQL 条件,该条件将追加到数据集查询的 WHERE 子句中。
无法直观地从 Superset UI 中找到数据集 ID。当从数据集列表打开数据集时,可以从地址栏显示的 URL 的 datasource_id 参数中获取。
|
静态约束
考虑在 superset 入门 部分创建的 Employees' salaries 仪表盘中使用静态数据集约束。它使用的数据集加载员工、部门和薪资。假设需要限制薪资的下限,例如薪资 80,000 及以上员工。
约束在 dashboard 组件的 datasetConstraint 内部元素定义。可以在 Studio 中通过组件的 Add 操作添加,也可以在 XML 中手动添加。
所需的约束定义如下所示:
<superset:dashboard id="dashboard"
width="100%"
height="100%"
embeddedId="940f36ff-6c97-4a35-a4ff-4e4aeee3a9c7">
<superset:datasetConstraints>
<superset:datasetConstraint datasetId="24">
<![CDATA[salary >= 80000]]>
</superset:datasetConstraint>
</superset:datasetConstraints>
</superset:dashboard>
这里的 salary 是数据集的列。
约束 provider
数据集约束还可以在运行时动态计算,并在 Jmix 应用中打开仪表盘时传递给 Superset。通过这种方式可以根据当前用户权限或其他条件过滤仪表盘数据。
数据集约束由 DatasetConstraint Java 类表示。可以通过下列方式为 SupersetDashboard 组件提供约束列表:
-
在视图中创建
datasetConstraintsProvider处理器并返回约束列表。 -
创建一个实现
DatasetConstraintsProvider接口的 Spring bean,并使用setDatasetConstraintsProvider()方法将其传递给组件。
假设现在有一个需求:部门经理只能查看自己部门的薪资信息。数据集约束可以使用分配给当前用户的行级角色。
在下面的示例中,使用第一种方法,在视图中定义 datasetConstraintsProvider 处理器,但逻辑被提取到 Spring bean 中:
package com.company.supersetsample.app;
import com.company.supersetsample.entity.Department;
import com.company.supersetsample.entity.User;
import com.company.supersetsample.security.DepartmentConstraintRole;
import io.jmix.core.security.CurrentAuthentication;
import io.jmix.security.SecurityProperties;
import io.jmix.supersetflowui.component.dataconstraint.DatasetConstraint;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class DepartmentDatasetConstraintProvider {
private final CurrentAuthentication currentAuthentication;
private final SecurityProperties securityProperties;
public DepartmentDatasetConstraintProvider(CurrentAuthentication currentAuthentication,
SecurityProperties securityProperties) {
this.currentAuthentication = currentAuthentication;
this.securityProperties = securityProperties;
}
public List<DatasetConstraint> getConstraints() {
Department department = getDepartment();
if (hasDepartmentConstraintRole() && department != null) {
return List.of(new DatasetConstraint(24, "department_name = '" + department.getName() + "'"));
}
return List.of();
}
private boolean hasDepartmentConstraintRole() {
Authentication authentication = currentAuthentication.getAuthentication();
return authentication.getAuthorities().stream()
.anyMatch(grantedAuthority ->
grantedAuthority.getAuthority().equals(
securityProperties.getDefaultRowLevelRolePrefix() + DepartmentConstraintRole.CODE));
}
private Department getDepartment() {
User user = (User) currentAuthentication.getUser();
return user.getDepartment();
}
}
然后在视图的 datasetConstraintsProvider 处理器中使用上面定义的 bean,该处理器 方法可以通过 Jmix UI 组件属性面板生成:
@Autowired
private DepartmentDatasetConstraintProvider departmentDatasetConstraintProvider;
@Install(to = "dashboard", subject = "datasetConstraintsProvider")
private List<DatasetConstraint> dashboardDatasetConstraintsProvider() {
return departmentDatasetConstraintProvider.getConstraints();
}
XML 属性
下面是 dashboard 的特殊属性:
| 名称 | 描述 | 默认值 |
|---|---|---|
设置图表控件是否可见。
|
|
|
— |
||
设置过滤器栏是否展开。 |
|
|
设置标题栏是否可见。
|
|
下面是 dashboard 支持的其他通用属性:
事件和处理器
下面是 dashboard 的特殊事件和处理器:
|
在 Jmix Studio 生成处理器桩代码时,可以使用 Jmix UI 组件面板的 Handlers 标签页或者视图类顶部面板的 Generate Handler 添加,也可以通过 Code → Generate 菜单(Alt+Insert / Cmd+N)生成。 |
| 名称 | 描述 |
|---|---|
当仪表盘请求访客令牌时动态提供数据集约束。请参见 约束 provider。 |
下面是 dashboard 支持的其他通用事件:
元素
一个 dashboard 可以包含 datasetConstraints 元素,其中包含零个或多个 datasetConstraint 元素。每个 datasetConstraint 需要一个 datasetId 属性,并将其中的文本内容作为 SQL 条件。请参见 静态数据集约束。