Superset二次开发之新增复选框Checkbox筛选器
一. 背景
Superset目前支持的筛选类型:值、数值范围、时间列、时间粒度、时间范围 5种类型,显然无法满足业务需求。根据产品需要,需要支持复选框、单选框、级联选择等类型的筛选器。本文探讨复选框、单选框的技术实现方式。
二. 效果预览
![]() | ![]() |
三. 实现思路
复用 '值' 筛选器模块,然后看板筛选器渲染时,修改为Checkbox 组件。
四. 前端逻辑
1. 新增复选框选项
1.1 新增CheckBox文件夹
目录 superset-frontend\src\filters\components,新增CheckBox 文件夹
1.2 注册插件
superset-frontend\src\visualizations\presets\MainPreset.js
69行新增 CheckboxFilterPlugin, } from 'src/filters/components';
160行新增 new CheckboxFilterPlugin().configure({ key: 'filter_checkbox' }),
superset-frontend\src\dashboard\components\nativeFilters\FiltersConfigModal\FiltersConfigForm\FiltersConfigForm.tsx
FILTER_TYPE_NAME_MAPPING 参数新增
[t('Check Box')]:t('Check box'),
superset-frontend\src\filters\components\index.ts
export { default as CheckboxFilterPlugin } from './CheckBox';
superset-frontend\cypress-base\cypress\e2e\dashboard\utils.ts
exportconsttestItems = 的 filterType 新增
checkbox: 'Check box',
2. 国际化支持
superset\translations\en\LC_MESSAGES\messages.json
"Check box": [""],
superset\translations\en\LC_MESSAGES\messages.po
#:
msgid "Check box"
msgstr ""
superset\translations\zh\LC_MESSAGES\messages.json
"Check box": ["复选框"],
superset\translations\zh\LC_MESSAGES\messages.po
#:
msgid "Check box"
msgstr "复选框"
3.核心逻辑
superset-frontend\src\filters\components\CheckBox\buildQuery.ts
/*** Licensed to the Apache Software Foundation (ASF) under one* or more contributor license agreements. See the NOTICE file* distributed with this work for additional information* regarding copyright ownership. The ASF licenses this file* to you under the Apache License, Version 2.0 (the* "License"); you may not use this file except in compliance* with the License. You may obtain a copy of the License at** http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing,* software distributed under the License is distributed on an* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY* KIND, either express or implied. See the License for the* specific language governing permissions and limitations* under the License.*/
import {buildQueryContext,GenericDataType,getColumnLabel,isPhysicalColumn,QueryObject,QueryObjectFilterClause,BuildQuery,} from '@superset-ui/core';import { DEFAULT_FORM_DATA, PluginFilterCheckboxQueryFormData } from './types';// 构建查询函数,用于根据表单数据和选项生成查询对象。const buildQuery: BuildQuery<PluginFilterCheckboxQueryFormData> = (formData: PluginFilterCheckboxQueryFormData,options,) => {const { search, coltypeMap } = options?.ownState || {};const { sortAscending, sortMetric } = { ...DEFAULT_FORM_DATA, ...formData };// 使用 buildQueryContext 函数构建查询上下文,传入表单数据和基础查询对象。return buildQueryContext(formData, baseQueryObject => {const { columns = [], filters = [] } = baseQueryObject;// 初始化额外的过滤器数组。const extraFilters: QueryObjectFilterClause[] = [];if (search) {// 如果搜索字段不为空,则遍历列并添加额外的过滤器。columns.filter(isPhysicalColumn).forEach(column => {const label = getColumnLabel(column);if (coltypeMap[label] === GenericDataType.STRING ||(coltypeMap[label] === GenericDataType.NUMERIC &&!Number.isNaN(Number(search)))) {// 如果列的类型是字符串或数字,则添加一个 ILIKE 过滤器。 extraFilters.push({col: column,op: 'ILIKE',val: `%${search}%`,});}});}// 如果排序字段不为空,则将排序字段添加到排序列数组中。 const sortColumns = sortMetric ? [sortMetric] : columns;// 构建查询对象,包括基础查询对象、列、指标、过滤器和排序。const query: QueryObject[] = [{...baseQueryObject,columns,metrics: sortMetric ? [sortMetric] : [],filters: filters.concat(extraFilters),orderby:sortMetric || sortAscending !== undefined? sortColumns.map(column => [column, !!sortAscending]): [],},];return query;});};export default buildQuery;
superset-frontend\src\filters\components\CheckBox\CheckboxFilterPlugin.tsx
实现了复选框/单选按钮过滤器的主要逻辑和 UI
/*** Licensed to the Apache Software Foundation (ASF) under one* or more contributor license agreements. See the NOTICE file* distributed with this work for additional information* regarding copyright ownership. The ASF license相关文章:
Superset二次开发之新增复选框Checkbox筛选器
一. 背景 Superset目前支持的筛选类型:值、数值范围、时间列、时间粒度、时间范围 5种类型,显然无法满足业务需求。根据产品需要,需要支持复选框、单选框、级联选择等类型的筛选器。本文探讨复选框、单选框的技术实现方式。 二. 效果预览 三. 实现思路 复用 值 筛选器模块,…...
PromQL 语法
什么是 PromQL PromQL (Prometheus Query Language) 是 Prometheus 监控系统中用于查询时间序列数据的语言。它允许用户编写查询,以从 Prometheus 中检索并处理监控数据。 PromQL 的基础概念 1. 时间序列 Prometheus 中的时间序列由以下几个部分组成:…...
掌握Go语言中的时间与日期操作
Go语言中的时间与日期操作 在编写程序时,处理时间和日期看似是一项无关紧要的任务,但在需要同步多个任务或从文本文件中读取时间时,它的重要性便凸显出来。Go语言中的time包为我们提供了丰富的时间与日期操作功能。本文将详细介绍如何在Go语…...
4G模块、WIFI模块、NBIOT模块通过AT指令连接华为云物联网服务器(MQTT协议)
MQTT协议概述 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,它被设计用来提供一对多的消息分发和应用之间的通讯,尤其适用于远程位置的设备和高延迟或低带宽的网络。MQTT协议基于客户端-服务器架构&…...
spring数据校验Validation
文章目录 需要的依赖创建校验对象Validator 需要的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency>创建校验对象Validator 测试的实体类 //创建…...
Uniapp基于uni拦截器+Promise的请求函数封装
最近在学Uniapp,到封装请求的时候本来还想用axios,但是看到一些教学视频有更简单的方法, 基于uni的拦截器和Promise封装的请求函数 但是他们是用TS写的,还没学到TS,我就把JS写了,最终也是请求成功 // src/…...
【工具】使用 Jackson 实现优雅的 JSON 格式化输出
说明 在 Java 开发中,我们经常需要处理 JSON 数据。无论是从服务器端返回的数据,还是本地存储的数据,JSON 格式都因其轻量级和易于解析的特点而被广泛使用。当我们需要查看或调试 JSON 数据时,优雅、格式化的输出将大大提高我们的…...
ApacheKafka中的设计
文章目录 1、介绍1_Kafka&MQ场景2_Kafka 架构剖析3_分区&日志4_生产者&消费者组5_核心概念总结6_顺写&mmap7_Kafka的数据存储形式 2、Kafka的数据同步机制1_高水位(High Watermark)2_LEO3_高水位更新机制4_副本同步机制解析5_消息丢失问…...
.NET 自定义过滤器 - ActionFilterAttribute
这个代码片段定义了一个自定义的 ASP.NET Core 过滤器(GuardModelStateAttribute),用于在控制器动作执行之前验证模型状态(ModelState)。如果模型状态无效,则构造一个 ProblemDetails 对象来描述错误&#…...
VMware Fusion Pro 13 for Mac虚拟机软件
Mac分享吧 文章目录 效果一、下载软件二、开始安装安装完成!!! 效果 一、下载软件 下载软件 地址:www.macfxb.cn 二、开始安装 安装完成!!!...
HarmonyOS应用开发环境搭建
本文主要讲述的是HarmonyOS应用开发环境的搭建,HUAWEI DevEco Studio是基于IntelliJ IDEA Community开源版本打造,为运行在HarmonyOS系统上的应用和服务提供一站式的开发平台。具体下载链接DevEco Studio 一、下载 DevEco Studio 只需要下载对应的版本&…...
YOLOv8改进实战 | 注意力篇 | 引入ICCV2023顶会LSKNet:大选择性卷积注意力模块LSKA,助力小目标检测
YOLOv8专栏导航:点击此处跳转 前言 YOLOv8 是由 YOLOv5 的发布者 Ultralytics 发布的最新版本的 YOLO。它可用于对象检测、分割、分类任务以及大型数据集的学习,并且可以在包括 CPU 和 GPU 在内的各种硬件上执行。 YOLOv8 是一种尖端的、最先进的 (SOTA) 模型,它建立在以前…...
00Mac安装playwright
文章目录 前言一、执行以下命令安装二、安装如果报错zsh: command not found: pip三、安装浏览器驱动 前言 现在常用的三个自动化测试(或者爬虫)库,是Selenium、Puppeteer、Playwright。Playwright是未来趋势,主要学习Playwright…...
materail3 CircularProgressIndicator和LinearProgressIndicator有难看的白块和断点
看看,就是这个垃圾效果: 圆圈的进度条有断点,不连接; 横线进度条,有尾部亮色,进度处又有分割。 它的原出处在这里:https://m3.material.io/components/progress-indicators/overview࿰…...
菜鸟入门Docker
初始Docker Docker的概念 Docker的用途 DOcke的安装 Docker架构 配置Docker镜像加速器 Docker常用命令 Docker服务相关的命令。 Docker镜像相关的命令 Docker容器相关的命令 容器的数据卷 数据卷的概念和作用 配置数据卷 Docker应用部署 Docker部署mysql Docker…...
什么是单片机?为什么要学习单片机?
实现目标 1、熟悉单片机定义、特点、应用场景、发展历史等; 2、理解为什么要学习单片机?怎样学习单片机? 一、单片机是什么? 1、定义 单片机是集成在一块(单)芯片上的微型计算机。平时我们把 MCU&#x…...
电子发射与气体导电
物理电磁学练习题:电子发射与气体导电 说明: 以下题目考察对电子发射和气体导电基本概念的理解和应用。 1. 解释以下概念: (a) 热电子发射 (b) 光电效应 © 逸出功 (d) 等离子体 2. 比较并对比热电子发射和光电效应的异同。 …...
【数据库】MySQL表的Updata(更新)和Delete(删除)操作
目录 1.Update 案例1:将孙悟空同学的数学成绩变更为 80 分 案例2:将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分 案例3:将总成绩倒数前三的 3 位同学的数学成绩加上 30 分 案例4:将所有同学的语文成绩…...
Unity Adressables 使用说明(六)加载(Load) Addressable Assets
【概述】Load Addressable Assets Addressables类提供了加载 Addressable assets 的方法。你可以一次加载一个资源或批量加载资源。为了识别要加载的资源,你需要向加载方法传递一个键或键列表。键可以是以下对象之一: Address:包含你分配给…...
视频监控系统布局策略:EasyCVR视频汇聚平台构建高效、全面的安全防线
随着科技的飞速发展,视频监控系统已成为现代社会安全防范的重要组成部分,广泛应用于公共场所、企业园区、住宅小区等各个领域。一个科学合理的视频监控系统布局与选型策略,不仅能够显著提升安全监控的效率和效果,还能在关键时刻提…...
Midscene.js:重塑UI自动化的革命性AI视觉驱动方案
Midscene.js:重塑UI自动化的革命性AI视觉驱动方案 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 你是否曾为编写复杂的UI自动化脚本而头疼ÿ…...
OpenClaw成本优化方案:Qwen3.5-9B-AWQ-4bit自部署省下80%Token
OpenClaw成本优化方案:Qwen3.5-9B-AWQ-4bit自部署省下80%Token 1. 为什么需要关注OpenClaw的Token消耗 第一次用OpenClaw完成图片处理任务时,我的信用卡账单给我上了深刻的一课——单月API调用费用直接突破2000元。这个数字让我意识到:如果…...
用PyTorch从零复现SiamFC:手把手教你搭建自己的单目标跟踪器(附完整代码)
用PyTorch从零复现SiamFC:手把手教你搭建自己的单目标跟踪器(附完整代码) 单目标跟踪是计算机视觉领域的经典问题之一,它的核心任务是在视频序列中持续定位特定目标的位置。想象一下这样的场景:你正在开发一个智能监控…...
从HAL_Delay到精准定时:STM32 HAL库中微秒与毫秒延时方案的深度解析与实战
1. HAL库延时函数的基本原理与局限性 在STM32开发中,HAL_Delay()可能是我们最早接触的延时函数。这个看似简单的函数背后,其实隐藏着精妙的系统设计。HAL库默认使用SysTick定时器来实现毫秒级延时,每次调用HAL_Delay()时,实际上是…...
Qwen3.5-2B图文对话教程:‘描述这张图’‘提取表格数据’‘生成营销文案’三类实操
Qwen3.5-2B图文对话教程:描述这张图提取表格数据生成营销文案三类实操 1. 认识Qwen3.5-2B轻量化多模态模型 Qwen3.5-2B是阿里云推出的轻量化多模态基础模型,属于Qwen3.5系列的小参数版本(20亿参数)。这个模型特别适合在资源有限…...
告别除法器!用BCD8421码在Nexys4 DDR FPGA上高效驱动8位数码管(附完整Vivado工程)
基于BCD8421码的FPGA数码管驱动优化设计与实现 在数字系统设计中,FPGA开发者经常面临如何在有限硬件资源下实现高效数据转换的挑战。传统方法使用除法器进行二进制到十进制转换,不仅消耗大量逻辑资源,还会引入额外的时序延迟。本文将深入探讨…...
Windows Defender的MsMpEng.exe为什么总在“瞎忙”?从机制到应对的深度解读
Windows Defender的MsMpEng.exe高占用现象:机制解析与精准优化策略 你是否经历过这样的场景:正在紧急编译代码时,风扇突然狂转,任务管理器里MsMpEng.exe的CPU使用率飙升至90%;或者拷贝大型设计文件时,系统卡…...
如何快速掌握mruby生态系统:第三方库、工具和资源的完整指南
如何快速掌握mruby生态系统:第三方库、工具和资源的完整指南 【免费下载链接】mruby Lightweight Ruby 项目地址: https://gitcode.com/gh_mirrors/mr/mruby mruby是一个轻量级的Ruby实现,专为嵌入式系统和资源受限环境设计。这个强大的轻量级Rub…...
Python开发者必看:用SMSBoom给你的短信服务做个‘压力体检’(附完整配置流程)
Python开发者必看:用SMSBoom给你的短信服务做个‘压力体检’(附完整配置流程) 短信服务作为现代应用的关键组件,其稳定性直接影响用户体验。想象一下,当你的电商平台在促销活动期间需要发送大量验证码时,短…...
DeepSeek-OCR-2应用实战:快速提取发票信息,财务效率翻倍
DeepSeek-OCR-2应用实战:快速提取发票信息,财务效率翻倍 1. 财务人的痛点:发票处理的效率黑洞 每个月末,财务部门总要面对这样的场景: 堆积如山的纸质发票需要手工录入电子发票PDF需要逐个打开复制粘贴关键信息&…...

