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

news/2024/12/2 6:44:48/

有没有人发觉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源代码的深入理解。


http://www.ppmy.cn/news/1091794.html

相关文章

Knowledge Graph Prompting for Multi-Document Question Answering

本文是LLM系列文章&#xff0c;针对《Knowledge Graph Prompting for Multi-Document Question Answering》的翻译。 多文档问答中的知识图谱提示 摘要1 引言2 符号3 知识图谱构建4 LM引导的图形遍历器5 实验6 相关工作7 结论 摘要 大型语言模型的“预训练、提示、预测”范式…

如何在VueJS应用程序中设置Toast通知

通知是开发者提升应用程序互动性和改善用户体验的强大工具。通过利用通知&#xff0c;开发者可以在用户与应用程序互动的同时&#xff0c;有效地向用户传达重要事件。 通知在应用程序中起着至关重要的作用&#xff0c;可以及时通知用户有关各种操作和事件的信息。它们可以用于通…

Unity——LitJSON的安装

一、LitJSON介绍 特点 LitJSON是一个轻量级的C# JSON库&#xff0c;用于在Unity游戏开发中进行JSON数据的序列化和反序列化操作。它提供了简单而高效的接口&#xff0c;帮助开发者处理JSON数据。 以下是LitJSON库的一些主要特点和功能&#xff1a; 1. 高性能&#xff1a;Lit…

Docker Desktop 设置镜像环境变量

点击run 展开Optional settings container name &#xff1a;容器名称 Ports&#xff1a;根据你需要的端口进行输入&#xff0c;不输入则默认 后面这个 比如我这个 5432 Volumes&#xff1a;卷&#xff0c;也就是做持久化 需要docker 数据保存的地方 Environment variables…

功率放大器的功能是什么功能

功率放大器是一种电子设备&#xff0c;用于放大输入信号的功率&#xff0c;并输出对应增强后的信号。功率放大器的功能主要包括增强信号的功率、保持信号的形状和质量、提供足够的电流和电压驱动负载&#xff0c;以满足不同应用需求。 功率放大器的主要功能是增强信号的功率。输…

耐蚀点蚀镀铜工艺

引言 随着5G技术的推出&#xff0c;导致电子电路和IC基板在设计中要求更高的密度。由于5G应用的性质&#xff0c;这些设计中的高可靠性和出色的电气性能也越来越重要。为了满足5G应用和其他下一代设备平台的需求&#xff0c;逐渐建立了使用改良半加成加工(mSAP)制造电路板的制…

如何远程访问Linux MeterSphere一站式开源持续测试平台

文章目录 前言1. 安装MeterSphere2. 本地访问MeterSphere3. 安装 cpolar内网穿透软件4. 配置MeterSphere公网访问地址5. 公网远程访问MeterSphere6. 固定MeterSphere公网地址 前言 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能&am…

存储管理呀

世界太吵&#xff0c;别听&#xff0c;别看&#xff0c;别管&#xff0c;别怕&#xff0c;向前走 一. 存储管理 初识硬盘 机械 HDD 固态 SSDSSD的优势 SSD采用电子存储介质进行数据存储和读取的一种技术&#xff0c;拥有极高的存储性能&#xff0c;被认为是存储技术发展的未来…