【BI看板】Superset时间过滤控件二次开发

有没有人发觉Superset时间过滤组件非常高级,😟但又有点复杂,没有选择时间区间的快捷方式。

Superset的时间过滤控件可以通过在代码中进行二次开发来进行定制。以下是一些可能有用的提示:

  1. 查找源代码:可以在Superset的源代码中找到时间过滤器的相关代码,在superset/assets/src/explore/components/controls目录下搜索时间控件的名称,比如DateFilterControl.jsx

  2. 深入理解时间控件:了解时间控件是如何工作的非常重要,可以通过阅读Superset的源代码和官方文档来学习。

  3. 编写自定义时间控件:可以使用React等工具编写自定义时间控件,然后将其与Superset集成。可以在前端开发人员手册中找到相关的信息。

  4. 集成自定义时间控件:集成自定义时间控件的过程取决于它的实现方式和您的Superset部署环境。可以参考官方文档中的信息来集成您的自定义时间控件。

  5. 测试:一旦自定义时间控件被集成,需要对其进行测试以确保它正常工作。这包括测试常见的时间过滤器用例,以及测试它在不同的浏览器和设备上是否正常显示。

过滤参数,入参time_range

图表有两种接口

/superset/explore_json/?form_data

目录:\superset-2.0\superset\views\core.py

@api@has_access_api@handle_api_exception@event_logger.log_this@expose("/explore_json/<datasource_type>/<int:datasource_id>/",methods=EXPLORE_JSON_METHODS,)@expose("/explore_json/", methods=EXPLORE_JSON_METHODS)@etag_cache()@check_resource_permissions(check_datasource_perms)def explore_json(self, datasource_type: Optional[str] = None, datasource_id: Optional[int] = None) -> FlaskResponse:"""Serves all request that GET or POST form_dataThis endpoint evolved to be the entry point of many differentrequests that GETs or POSTs a form_data.`self.generate_json` receives this input and returns differentpayloads based on the request args in the first blockTODO: break into one endpoint for each return shape"""response_type = ChartDataResultFormat.JSON.valueresponses: List[Union[ChartDataResultFormat, ChartDataResultType]] = list(ChartDataResultFormat)responses.extend(list(ChartDataResultType))for response_option in responses:if request.args.get(response_option) == "true":response_type = response_optionbreak# Verify user has permission to export CSV fileif (response_type == ChartDataResultFormat.CSVand not security_manager.can_access("can_csv", "Superset")):return json_error_response(_("You don't have the rights to ") + _("download as csv"),status=403,)form_data = get_form_data()[0]try:datasource_id, datasource_type = get_datasource_info(datasource_id, datasource_type, form_data)force = request.args.get("force") == "true"# TODO: support CSV, SQL query and other non-JSON typesif (is_feature_enabled("GLOBAL_ASYNC_QUERIES")and response_type == ChartDataResultFormat.JSON):# First, look for the chart query results in the cache.try:viz_obj = get_viz(datasource_type=cast(str, datasource_type),datasource_id=datasource_id,form_data=form_data,force_cached=True,force=force,)payload = viz_obj.get_payload()# If the chart query has already been cached, return it immediately.if payload is not None:return self.send_data_payload_response(viz_obj, payload)except CacheLoadError:pass# Otherwise, kick off a background job to run the chart query.# Clients will either poll or be notified of query completion,# at which point they will call the /explore_json/data/<cache_key># endpoint to retrieve the results.try:async_channel_id = async_query_manager.parse_jwt_from_request(request)["channel"]job_metadata = async_query_manager.init_job(async_channel_id, g.user.get_id())load_explore_json_into_cache.delay(job_metadata, form_data, response_type, force)except AsyncQueryTokenException:return json_error_response("Not authorized", 401)return json_success(json.dumps(job_metadata), status=202)viz_obj = get_viz(datasource_type=cast(str, datasource_type),datasource_id=datasource_id,form_data=form_data,force=force,)return self.generate_json(viz_obj, response_type)except SupersetException as ex:return json_error_response(utils.error_msg_from_exception(ex), 400)

/api/v1/chart/data?form_data=

目录:\superset\charts\data\api.py

该接口还比较难找哈

class ChartDataRestApi(ChartRestApi):include_route_methods = {"get_data", "data", "data_from_cache"}@expose("/<int:pk>/data/", methods=["GET"])@protect()@statsd_metrics@event_logger.log_this_with_context(action=lambda self, *args, **kwargs: f"{self.__class__.__name__}.data",log_to_statsd=False,)def get_data(self, pk: int) -> Response:chart = self.datamodel.get(pk, self._base_filters)if not chart:return self.response_404()try:json_body = json.loads(chart.query_context)except (TypeError, json.decoder.JSONDecodeError):json_body = Noneif json_body is None:return self.response_400(message=_("Chart has no query context saved. Please save the chart again."))# override saved query contextjson_body["result_format"] = request.args.get("format", ChartDataResultFormat.JSON)json_body["result_type"] = request.args.get("type", ChartDataResultType.FULL)
。。。。。
。。。。。
。。。。。# TODO: support CSV, SQL query and other non-JSON typesif (is_feature_enabled("GLOBAL_ASYNC_QUERIES")and query_context.result_format == ChartDataResultFormat.JSONand query_context.result_type == ChartDataResultType.FULL):return self._run_async(json_body, command)try:form_data = json.loads(chart.params)except (TypeError, json.decoder.JSONDecodeError):form_data = {}return self._get_data_response(command=command, form_data=form_data, datasource=query_context.datasource)

时间过滤控件

计算时间范围

venv38\Lib\site-packages\marshmallow\schema.py

再往下,计算日期地方

data = processor(data, many=many, **kwargs)

再往下在superset\common\query_object_factory.py,可以看到from_dttm和to_dttm

        processed_extras = self._process_extras(extras)result_type = kwargs.setdefault("result_type", parent_result_type)row_limit = self._process_row_limit(row_limit, result_type)from_dttm, to_dttm = self._get_dttms(time_range, time_shift, processed_extras)kwargs["from_dttm"] = from_dttmkwargs["to_dttm"] = to_dttmreturn QueryObject(datasource=datasource_model_instance,extras=extras,row_limit=row_limit,time_range=time_range,time_shift=time_shift,**kwargs,)

进行定制或二次开发

如果需要对Superset中的时间过滤控件进行定制或二次开发,可以按照以下步骤进行:

  • 复制时间过滤控件的源代码

Superset中的时间过滤控件源代码位于superset/assets/src/explore/components/controls/DateFilterControl.jsx,可以将该文件复制到本地进行修改。

  • 修改时间过滤控件的样式或行为

可以根据需要修改时间过滤控件的样式或行为,比如修改日期格式、修改默认时间段等。修改完成后,可以运行npm run build命令进行编译。

  • 将修改后的时间过滤控件发布到Superset中

将修改后的时间过滤控件发布到Superset中有两种方法:

  • 将修改后的代码替换掉原来的文件,然后重新启动Superset;
  • 将修改后的代码打包成一个插件,然后通过Superset的插件机制进行安装和使用。

至此,定制化或二次开发Superset的时间过滤控件就完成了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/71139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis之bigkey问题解读

目录 什么是bigkey&#xff1f; bigkey引发的问题 如何查找bigkey redis-cli --bigkeys MEMORY USAGE bigKey如何删除 渐进式删除 unlink bigKey生产调优 什么是bigkey&#xff1f; bigkey简单来说就是存储本身的key值空间太大&#xff0c;或者hash&#xff0c;list&…

意向客户的信息获取到底是怎样的,快来get一下

客户信息获取技术真的可以为企业提供精准客源吗&#xff1f;这个渠道到底安不安全&#xff0c;技术到底成不成熟&#xff1f;效果到底如何&#xff1f;下面简单的和大家分析一下。 客户信息获取技术是怎样的 手机采集引流方面&#xff0c;上量不精准&#xff0c;精准不上量的说…

浅探Android 逆向前景趋势~

前段时间&#xff0c;我和朋友偶然间谈起安卓逆向&#xff0c;他问我安卓逆向具体是什么&#xff0c;能给我们带来什么实质性的东西&#xff0c;我也和朋友大概的说了一下&#xff0c;今天在这里拿出来和大家讨论讨论&#xff0c;也希望帮助大家来了解安卓逆向。 谈起安卓逆向…

工作中提高CSS的编写效率,可以多用这三个CSS伪类

:where 基本使用 :where() CSS 伪类函数接受选择器列表作为它的参数&#xff0c;将会选择所有能被该选择器列表中任何一条规则选中的元素。 以下代码&#xff0c;文本都会变成 yellow 颜色 :where(div p) span {color: yellow; }<div class"test-div"><…

基于RabbitMQ的模拟消息队列之六——网络通信设计

自定义基于TCP的应用层通信协议。实现客户端对服务器的远程调用 编写服务器及客户端代码 文章目录 基于TCP的自定义应用层协议一、请求1.请求格式2.创建Request类 二、响应1.响应格式2.创建Response类 三、客户端-服务器交互四、type五、请求payload1.BasicAruguments(方法公共…

10、哈希函数与哈希表

哈希函数 出现次数最多的 32G 小文件方法&#xff1a;利用哈希函数在种类上均分 设计RandomPool结构 设计一种结构&#xff0c;在该结构中有如下三个功能: insert(key):将某个key加入到该结构&#xff0c;做到不重复加入 delete(key):将原本在结构中的某个key移除 getRando…

MySQL 使用规范 —— 如何建好字段和索引

一、案例背景 二、库表规范 1. 建表相关规范 2. 字段相关规范 3. 索引相关规范 4. 使用相关规范 三、建表语句 三、语句操作 1. 插入操作 2. 查询操作 四、其他配置 1. 监控活动和性能&#xff1a; 2. 连接数查询和配置 本文的宗旨在于通过简单干净实践的方式教会读…

2023百度云智大会:科技与创新的交汇点

​ 这次的百度云智大会&#xff0c;可谓是亮点云集—— 发布了包含42个大模型、41个数据集、10个精选应用范式的全新升级千帆大模型平台2.0&#xff0c;发布首个大模型生态伙伴计划&#xff0c;而且也预告了文心大模型4.0的发布&#xff0c;大模型服务的成绩单也非常秀&#x…

【autodesk】浏览器中渲染rvt模型

使用Forge完成渲染 Forge是什么 为什么能够渲染出来rvt模型 Forge是由Autodesk开发的一套云端开发平台和工具集。在Forge平台中&#xff0c;有一个名为"Model Derivative"的服务&#xff0c;它可以将包括RVT&#xff08;Revit&#xff09;在内的多种BIM&#xff08…

98. 验证二叉搜索树

给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例 1&#xff1a; 输入&am…

嵌入式学习笔记(17)代码重定位实战 上篇

3.5.1任务&#xff1a;在iSRAM中将代码从0xd0020010重定位到0xd0024000 注解&#xff1a;本练习对代码本身运行无实际意义&#xff0c;我们做这个重定位纯粹是为了练习重定位技能。但是某些情况重定位就是必须的&#xff0c;譬如在uboot中。 3.5.2思路 &#xff08;1&#xff…

蓝队追踪者工具TrackAttacker,以及免杀马生成工具

蓝队追踪者工具TrackAttacker&#xff0c;以及免杀马生成工具。 做过防守的都知道大HW时的攻击IP量&#xff0c;那么对于这些攻击IP若一个个去溯源则显得效率低下&#xff0c;如果有个工具可以对这些IP做批量初筛是不是更好&#xff1f; 0x2 TrackAttacker获取 https://githu…

如何从ChatGPT中获得最佳聊天对话效果

从了解ChatGPT工作原理开始&#xff0c;然后从互动中学习&#xff0c;这是一位AI研究员的建议。 人们利用ChatGPT来撰写文章、论文、生成文案和计算机代码&#xff0c;或者仅仅作为学习或研究工具。然而&#xff0c;大多数人不了解它的工作原理或它能做什么&#xff0c;所以他…

电商3D资产优化管线的自动化

如果你曾经尝试将从 CAD 程序导出的 3D 模型上传到 WebGL 或 AR 服务&#xff0c;那么可能会遇到最大文件大小、永无休止的进度条和糟糕的帧速率等问题。 为了创作良好的在线交互体验&#xff0c;优化 3D 数据的大小和性能至关重要。 这也有利于你的盈利&#xff0c;因为较小的…

2023高教社杯全国大学生数学建模竞赛选题建议

如下为C君的2023高教社杯全国大学生数学建模竞赛&#xff08;国赛&#xff09;选题建议&#xff0c; 提示&#xff1a;DS C君认为的难度&#xff1a;C<B<A&#xff0c;开放度&#xff1a;B<A<C 。 D、E题推荐选E题&#xff0c;后续会直接更新E论文和思路&#xf…

MaskVO: Self-Supervised Visual Odometry with a Learnable Dynamic Mask 论文阅读

论文信息 题目&#xff1a;MaskVO: Self-Supervised Visual Odometry with a Learnable Dynamic Mask 作者&#xff1a;Weihao Xuan, Ruijie Ren, Siyuan Wu, Changhao Chen 时间&#xff1a;2022 来源&#xff1a; IEEE/SICE International Symposium on System Integration …

正版软件 | CloudDrive 多云盘本地挂载管理工具

前言&#xff1a; CloudDrive 是一个强大的多云盘管理工具&#xff0c;提供一站式的多云盘解决方案&#xff0c;包括云盘本地挂载。旨在无缝集成多个云存储服务&#xff0c;统一整合到一个界面。轻松管理和访问所有云存储服务&#xff0c;无需在不同的应用程序和界面之间切换。…

【Go基础】编译、变量、常量、基本数据类型、字符串

面试题文档下链接点击这里免积分下载 go语言入门到精通点击这里免积分下载 编译 使用 go build 1.在项目目录下执行 2.在其他路径下编译 go build &#xff0c;需要再后面加上项目的路径&#xff08;项目路径从GOPATH/src后开始写起&#xff0c;编译之后的可执行文件就保存再…

matlab和python做zscore结果不一样的问题

解决matlab和python做zscore标准化结果不一样的问题 总结: matlab和python做zscore时使用的求std公式的默认方法有差异&#xff0c;导致了结果差异。 想要结果相同则使用以下代码&#xff1a; td rand(50,15,39)%td是三维矩阵&#xff0c;求zscore结果 #Python代码&#xf…

人工智能客服:是跨境电商未来的趋势吗?

随着跨境电商的快速发展&#xff0c;客户服务成为了商家们越来越关注的焦点。而在客户服务领域中&#xff0c;人工智能客服正逐渐崭露头角。那么&#xff0c;人工智能客服是否是跨境电商未来的趋势呢&#xff1f;本文将探讨这个问题&#xff0c;并揭示人工智能客服的潜力和优势…