DataEase

N_Docker N_Docker Compose Apache Doris

DataEase 是开源的数据可视化分析工具, 能够通过拖拉拽方式快速制作图表 比以前的大屏项目, 可好太多了…

DataEase 文档 开发 文档 Git hub

源码启动

.
├── Dockerfile                                      # 构建容器镜像使用的 dockerfile
├── LICENSE                                         # License 申明
├── README.md                                       
├── backend                                         # 后端项目主目录
├── frontend                                        # 前端项目主目录
├── mobile                                          # 移动端项目主目录
└── pom.xml                                         # 整体 maven 项目使用的 pom 文件
 

后端

后端主源码在: /DataEase/core/backend

数据库配置

  1. 数据库配置在 backend/src/main/resources/generatorConfig.xml 引用了 file:///opt/dataease/conf/dataease.properties 文件 读取 ${spring.datasource.url} 等数据库配置变量
<!-- 配置数据库连接的位置-->
<properties url="file:///opt/dataease/conf/dataease.properties"/>
......
   <!-- jdbc连接信息 --> <!-- EduLoanManage EduTestDataBase -->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="${spring.datasource.url}&amp;nullCatalogMeansCurrent=true"
                        userId="${spring.datasource.username}" password="${spring.datasource.password}"/>

修改 opt/dataease/conf/dataease.properties 文件位置或 增加spring.datasource.url 等配置在Spring 上下文内;

下用 spring active 的方式修改

  1. 新建一个 active 配置文件 backend/src/main/resources/application-dev.properties 内容
spring.datasource.url=jdbc:mysql://192.168.2.254:3306/db_dataease?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
spring.datasource.username=
spring.datasource.password=.com
 
carte.host=kettle
carte.port=18080
carte.user=cluster
carte.passwd=cluster
 
doris.db=dataease
doris.user=root
doris.password=Password123@doris
doris.host=doris-fe
doris.port=9030
doris.httpPort=8030
 
#新建用户初始密码
dataease.init_password=de123456
#登录超时时间单位min  如果不设置 默认8小时也就是480
dataease.login_timeout=480
 
logger.level=INFO
 
#DE运行模式,可选值有 local、simple、cluster,分别对应本地模式、精简模式、集群模式
engine_mode=simple
  1. 修改 backend/src/main/resources/application.properties spring 的 active spring.profiles.active=dev

DataEase 使用 MySQL 数据库,推荐使用 MySQL 5.7 版本。同时 DataEase 对数据库部分配置项有要求,请参考下附的数据库配置,修改开发环境中的数据库配置文件(以下配置有部分参数可能并不适用 MySQL 8.x 版本)

MySQL 8.x 实际能设的 sql_mode

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

logback.xml

也用到数据库??

替换之

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
   <!-- logback -->
   <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
   <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
   <conversionRule conversionWord="wEx"
               converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
   <!-- 彩色日志格式 -->
   <property name="CONSOLE_LOG_PATTERN"
           value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39})::%M-%L%clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />
   <!-- Console 输出设置 -->
   <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
      <encoder>
         <pattern>${CONSOLE_LOG_PATTERN}</pattern>
         <charset>utf8</charset>
      </encoder>
   </appender>
 
 
   <appender name="INFO_FILE"
      class="ch.qos.logback.core.rolling.RollingFileAppender">
      <file>./logs/info.log</file>
      <filter class="ch.qos.logback.classic.filter.LevelFilter">
         <level>INFO</level>
         <onMatch>ACCEPT</onMatch>
         <onMismatch>DENY</onMismatch>
      </filter>
      <!-- 按天来回滚,如果需要按小时来回滚,则设置为{yyyy-MM-dd_HH} -->
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      	<!-- 回滚文件名 -->
         <fileNamePattern>./logs/info-%d{yyyy-MM-dd}.log</fileNamePattern>
         <!-- 如果按天来回滚,则最大保存时间为maxHistory 天,maxHistory天之前的都将被清理掉 -->
         <maxHistory>60</maxHistory>
      </rollingPolicy>
 
      <!-- 日志输出格式 -->
      <encoder>
         <Pattern>%d -%-4r [%t] %-5p %c: %m%n</Pattern>
         <charset>UTF-8</charset>
      </encoder>
   </appender>
 
   <appender name="WARN_FILE"
      class="ch.qos.logback.core.rolling.RollingFileAppender">
      <file>./logs/warn.log</file>
      <filter class="ch.qos.logback.classic.filter.LevelFilter">
         <level>WARN</level>
         <onMatch>ACCEPT</onMatch>
         <onMismatch>DENY</onMismatch>
      </filter>
      <!-- 按天来回滚,如果需要按小时来回滚,则设置为{yyyy-MM-dd_HH} -->
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      	<!-- 回滚文件名 -->
         <fileNamePattern>./logs/warn-%d{yyyy-MM-dd}.log</fileNamePattern>
         <!-- 如果按天来回滚,则最大保存时间为maxHistory 天,maxHistory天之前的都将被清理掉 -->
         <maxHistory>90</maxHistory>
      </rollingPolicy>
 
      <!-- 日志输出格式 -->
      <encoder>
         <Pattern>%d -%-4r [%t] %-5p %c: %m%n</Pattern>
         <charset>UTF-8</charset>
      </encoder>
   </appender>
   
   <appender name="ERROR_FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
      <file>./logs/error.log</file>
      <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
         <level>ERROR</level>
      </filter>
      <!-- 按天来回滚,如果需要按小时来回滚,则设置为{yyyy-MM-dd_HH} -->
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
         <fileNamePattern>./logs/error-%d{yyyy-MM-dd}.log</fileNamePattern>
         <!-- 如果按天来回滚,则最大保存时间为maxHistory天,maxHistory天之前的都将被清理掉 -->
         <maxHistory>120</maxHistory>
      </rollingPolicy>
 
      <!-- 日志输出格式 -->
      <encoder>
         <Pattern>%d -%-4r [%t] %-5p %c: %m%n</Pattern>
      </encoder>
   </appender>
   <!-- 异步输出,异步的log片段必须在同步段后面,否则不起作用 -->
   <appender name="ASYNC_INFO_FILE" class="ch.qos.logback.classic.AsyncAppender">
      <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
      <discardingThreshold>0</discardingThreshold>
      <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
      <queueSize>10000</queueSize>
      <!-- 添加附加的appender,最多只能添加一个 -->
      <appender-ref ref="INFO_FILE" />
   </appender>
   
      <appender name="ASYNC_WARN_FILE" class="ch.qos.logback.classic.AsyncAppender">
      <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
      <discardingThreshold>0</discardingThreshold>
      <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
      <queueSize>10000</queueSize>
      <!-- 添加附加的appender,最多只能添加一个 -->
      <appender-ref ref="WARN_FILE" />
   </appender>
 
   <appender name="ASYNC_ERROR_FILE" class="ch.qos.logback.classic.AsyncAppender">
      <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
      <discardingThreshold>0</discardingThreshold>
      <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
      <queueSize>10000</queueSize>
      <!-- 添加附加的appender,最多只能添加一个 -->
      <appender-ref ref="ERROR_FILE" />
   </appender>
   <root level="INFO">
      <appender-ref ref="CONSOLE" />
      <appender-ref ref="ASYNC_INFO_FILE" />
      <appender-ref ref="ASYNC_WARN_FILE" />
      <appender-ref ref="ASYNC_ERROR_FILE" />
   </root>
 
    <!--监控sql日志输出 -->
    <logger name="jdbc.sqlonly" level="INFO" additivity="false">
        <appender-ref ref="CONSOLE" />
    </logger>
 
    <logger name="jdbc.resultset" level="ERROR" additivity="false">
        <appender-ref ref="CONSOLE" />
    </logger>
 
    <logger name="jdbc.resultsettable" level="OFF" additivity="false">
        <appender-ref ref="CONSOLE" />
    </logger>
 
    <logger name="jdbc.connection" level="OFF" additivity="false">
        <appender-ref ref="CONSOLE" />
    </logger>
 
    <logger name="jdbc.sqltiming" level="OFF" additivity="false">
        <appender-ref ref="CONSOLE" />
    </logger>
 
    <logger name="jdbc.audit" level="OFF" additivity="false">
        <appender-ref ref="CONSOLE" />
    </logger>
</configuration>

前端

前端主要源码: /DataEase/core/frontend

cd frontend/
npm install 
npm serve

DataEase 成功安装后,默认内置了两个用户:

  • 管理员用户为 admin ,密码为 dataease
  • 体验用户为 demo ,密码为 dataease

踩坑

演示数据 DataEaseException: java.lang.Exception?

io.dataease.exception.DataEaseException: java.lang.Exception: 无效数据源,无法正常显示 有点不兼容 mysql 8 ? Row 28 was cut by GROUP_CONCAT() 数据会被剪切?

调整 GROUP_CONCAT 函数最大值限制: SET group_concat_max_len = 102400 my.ini

sync_binlog=0
group_concat_max_len=1024000
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

字符集问题, 建库语句应该是

 
CREATE DATABASE `db_dataease` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
set collation_database=utf8_general_ci;
set collation_connection=utf8_general_ci;
set collation_server=utf8_general_ci;

丢失geo数据? /geo/full/156/156650000_full.json not found.

DataEase 从 1.2 版本开始支持地图组件。在 DataEase 源码工程的目录下有一个地图文件目录 mapFiles/full,需要将该目录下的文件放置到 /opt/dataease/data/feature/full 目录下。 如果是 Windows 的话,可以在工程目录所在盘的根目录下,创建 opt/dataease/data/feature/full 目录。

插件

DataEase 从 1.9 版本开始支持以插件的形式导入组件与数据源,可以下载 dataease-extensions 工程源码,在本地打包下,需要将打包后生成的 jar 包放置到 /opt/dataease/plugins/default 目录下。 如果是 Windows 的话,可以在工程所在盘的根目录下,创建 /opt/dataease/plugins/default 目录,如下示例图。

在线安装

https://dataease.io/docs/installation/online_installation/

安装模式介绍

v1.9.0 及以后版本安装模式分为本地模式(local)、精简模式(simple)、集群模式(cluster),v1.9.0 以前版本不涉及该内容,等同于安装的本地模式。
安装模式对应 DataEase 中的配置参数为 DE_ENGINE_MODE,在不做修改的情况下,系统默认安装精简模式

本地模式

DE_ENGINE_MODE=local 或源码application.properties的 engine_mode=local 使用本地模式安装,DataEase 会自带 Doris 与 Kettle 组件,无需再做额外配置,但各组件均为单点,不具备高可用特性。
在此模式下,Excel 数据集、API 数据集以及定时同步的数据默认保存在自带的 Doris 组件中。

精简模式

DE_ENGINE_MODE=simple 或源码application.properties的 engine_mode=simple 使用精简模式安装,系统不会额外安装 Doris 与 Kettle 组件,提供用户轻量级的应用系统,尤其是对接数据量较小的情况。
在此模式下,Excel 数据集或 API 数据集的相关数据存储在数据引擎中(默认配置自带的 MySQL 组件,用户可在系统管理界面配置数据引擎,数据引擎目前仅支持 MySQL 类型)。
注意:由于精简模式未配置 Kettle 与 Doris,故精简模式不提供定时同步模式。

集群模式

DE_ENGINE_MODE=cluster 或源码application.properties的 engine_mode=cluster 使用集群模式安装,系统不会额外安装 Doris 与 Kettle 组件,但会在系统管理模块提供 Doris 与 Kettle 的链接配置界面(请参考【系统管理】的【系统参数】说明),用户可独立安装 Doris 集群及 Kettle 并配置在 DataEase 中。集群模式下 Excel 数据集,API 数据集以及定时同步的数据通过 Kettle 抽取到 Doris 集群中。

下载安装

curl -sSL https://dataease.oss-cn-hangzhou.aliyuncs.com/quick_start.sh | sh 简而言之: 下载这个脚本执行之

它默认部署模式为 simple,如需切换模式 请修改 /opt/dataease/.env 中的 DE_ENGINE_MODE 变量后,重新执行该脚本

最终拉取了五个镜像

CONTAINER IDIMAGENAMES
c521c24aedb6/dataease/dataease:v1.18.11dataease
043b28a73d20/dataease/doris:v1.2.4.1-0606doris-be
35dfa29d1578/dataease/mysql:5.7.43mysql
cc037825c831/dataease/doris:v1.2.4.1-0606doris-fe
b8fea1e7f85f/dataease/kettle:v8.3-0318kettle

dataease 绑定的端口: 0.0.0.0:808081/tcp, :::808081/tcp mysql 绑定的端口: 0.0.0.0:33063306/tcp, :::33063306/tcp, 33060/tcp

图表数据 获取流程

逻辑是:

  1. 先保存图表 POST http://localhost:8081/chart/view/viewEditSave/063f5896-ac4c-11ed-9018-19daa611788c
{
    "id": "35b4cff9-d21c-4bba-9f09-bbbb27595a51",
    "type": "bar",
    "name":"新建视图",
    ....
    "customAttr": {自定义属性},
    "customStyle": {样式?},
    "senior":{高级?},
    "customFilter":[过滤器],
    "yaxis": [X轴配置],
    "xaxis": [Y轴配置],
    "yaxisExt": "[]",
    "xaxisExt": "[]"
}
  1. 再获取图表的数据 POST http://localhost:8081/chart/view/getData/35b4cff9-d21c-4bba-9f09-bbbb27595a51/063f5896-ac4c-11ed-9018-19daa611788c

请求结构

{
    "filter": [],
    "linkageFilters": [],
    "drill": [],
    "resultCount": 1000,
    "resultMode": "all",
    "queryFrom": "panel_edit",
    "cache": false
}

响应数据结构

{
    "success": true,
    "message": null,
    "data": {
        "id": "6a9913ff-6231-4695-896d-001b0950688b",
        "name": "基地地块数量",
        "title": "基地地块数量",
        "sceneId": "aaac1c8e-6743-11ee-a201-cd89cd525b5e",
        "tableId": "38acdf9f-bdec-4957-bce8-37b46fa77593",
...
        "extBubble": "[]",
        "customAttr": "{}",//"自定义配置",
        "customStyle": "{}",// "样式"配置?,
        "customFilter": "[]",
        "drillFields": "[]",//下取维度 配置
        "senior": "{\"functionCfg\":{\"sliderShow\":false,\"sliderRange\":[0,10],\"sliderBg\":\"#FFFFFF\",\"sliderFillBg\":\"#BCD6F1\",\"sliderTextClolor\":\"#999999\",\"emptyDataStrategy\":\"ignoreData\",\"emptyDataFieldCtrl\":[]},\"assistLine\":[],\"threshold\":{}}",
        "snapshot": null,
        "viewFields": "[]",
        "data": {
            "sourceFields": [
                {
                    "id": "22cb2d39-d74d-4c27-b213-2fd19d0a5c22",
                    "tableId": "38acdf9f-bdec-4957-bce8-37b46fa77593",
                    "originName": "f_c0c1567d70077c90",
                    "dataeaseName": "C_0a9c90b025084d4a36d3a4da188e23eb",
                    "name": "地块数量",
                    "type": "VARCHAR",
                    "checked": true,
                    "columnIndex": 23,
                    "lastSyncTime": 1696925167686,
                    "chartType": "bar",
                    "compareCalc": {
                        "type": "none",
                        "resultData": "percent",
                        "field": "",
                        "custom": {
                            "field": "",
                            "calcType": "0",
                            "timeType": "0",
                            "currentTime": "",
                            "compareTime": "",
                            "currentTimeRange": [],
                            "compareTimeRange": []
                        }
                    },
                    "logic": null,
                    "filterType": null,
                    "chartId": null,
                    "dateFormat": "",
                    "filter": [],
                    "customSort": null,
                    "busiType": null
                },
                {
                    "id": "006bec8f-6ef8-4817-8554-8a97fb7e210c",
                    "tableId": "38acdf9f-bdec-4957-bce8-37b46fa77593",
                    "originName": "f_7c9f9a1117f7678d",
                    "dataeaseName": "C_6aa304939d53a47fd02d2c4d8afb1a66",
                    "name": "人员数量",
                    "type": "INT",
                    "extField": 0,
                    "chartType": "bar",
                    "compareCalc": {
                        "type": "none",
                        "resultData": "percent",
                        "field": "",
                        "custom": {
                            "field": "",
                            "calcType": "0",
                            "timeType": "0",
                            "currentTime": "",
                            "compareTime": "",
                            "currentTimeRange": [],
                            "compareTimeRange": []
                        }
                    },
                    "logic": null,
                    "filterType": null,
                    "chartId": null,
                    "dateFormat": "",
                    "filter": [],
                    "customSort": null,
                    "busiType": null
                }
            ],
            "tableRow": [
                {
                    "C_886021df717a21beac4ed40c45a42ce9": "123445",
                    "C_0a9c90b025084d4a36d3a4da188e23eb": "0",
                    "C_641585573956b1555f6ad60c7c82fa43": "4028a82b873cbc51018749da50a20011",
                    "C_6aa304939d53a47fd02d2c4d8afb1a66": 1.00000000
                },
                {
                    "C_886021df717a21beac4ed40c45a42ce9": "农装基地",
                    "C_0a9c90b025084d4a36d3a4da188e23eb": "15",
                    "C_641585573956b1555f6ad60c7c82fa43": "4028a82b8736a06401873c3ded3d003c",
                    "C_6aa304939d53a47fd02d2c4d8afb1a66": 15.00000000
                }
            ]
        },
        "privileges": null,
        "isLeaf": null,
        "pid": null,
        // base64 编码的 sql 语句
        "sql": "U0VMRUNUDQogICAgKg0KRlJPTQ0KICAgIChTRUxFQ1QNCiAgICAgICAgdF9hXzAuYGZfZWM2ZWIzMzZiZDk4Y2JhNGAgQVMgZl9heF8wLA0KICAgICAgICB0X2FfMC5gZl8xYWU3YjY4M2ZlZmYyN2E2YCBBUyBmX2F4XzENCiAgICAgICAgLA0KICAgICAgICBjb3VudCh0X2FfMC5gZl9jMGMxNTY3ZDcwMDc3YzkwYCkgQVMgZl9heV8wLA0KICAgICAgICBjb3VudChDQVNUKHRfYV8wLmBmXzdjOWY5YTExMTdmNzY3OGRgIEFTIERFQ0lNQUwoMjAsMCkpKSBBUyBmX2F5XzENCiAgICBGUk9NDQogICAgICAgIChTRUxFQ1QgYG9yZ19sYW5kX2luZm9gLmBpZGAgQVMgZl9lYzZlYjMzNmJkOThjYmE0LGBvcmdfbGFuZF9pbmZvYC5gbmFtZV9gIEFTIGZfMWFlN2I2ODNmZWZmMjdhNixgb3JnX2xhbmRfaW5mb2AuYGNvZGVfYCBBUyBmXzhmNGFmZmQyYTNmMTgyYjUsYG9yZ19sYW5kX2luZm9gLmBhcmVhX2AgQVMgZl9hYTNhMjZhOTdkMGE5MGJmLGBvcmdfbGFuZF9pbmZvYC5gYWRkcmVzc19gIEFTIGZfZTNhMWQzYThlNDVmOTMxMixgb3JnX2xhbmRfaW5mb2AuYGxvbmdpdHVkZV9gIEFTIGZfNzUyY2EyODFmZTgzY2MyZCxgb3JnX2xhbmRfaW5mb2AuYHdkX2AgQVMgZl9hOGFmZThlNTdmNzljN2Y4LGBvcmdfbGFuZF9pbmZvYC5gbGlua01hbl9gIEFTIGZfNWY5MTM4NGI1ZDgxZDI3YSxgb3JnX2xhbmRfaW5mb2AuYHBpY19gIEFTIGZfZmY5YjEzODcxMzUwYzdiOSxgb3JnX2xhbmRfaW5mb2AuYG1hc3NpZl9udW1fYCBBUyBmXzJmOTY4ZDE1NWE0YzZhYTUsYG9yZ19sYW5kX2luZm9gLmBkZXZfbnVtX2AgQVMgZl9jZTVhZGMyNGQ4MDdlMTI4LGBvcmdfbGFuZF9pbmZvYC5gcGVyc29uX251bV9gIEFTIGZfN2M5ZjlhMTExN2Y3Njc4ZCxgb3JnX2xhbmRfaW5mb2AuYGxhbmRfc19gIEFTIGZfYmI4OTgxYjY0NWQ3ZTc4MSxgb3JnX2xhbmRfbWFzc2lmYC5gbmFtZV9gIEFTIGZfMDA5ZTlkMWY0ZmFjYjA5NSxgb3JnX2xhbmRfbWFzc2lmYC5gY29kZV9gIEFTIGZfZjZiZTIwMTJhY2RjZGI0NSxgb3JnX2xhbmRfbWFzc2lmYC5gZmFybV9pbmZvX2NvZGVfYCBBUyBmXzc2YTY1OGFmZTExNGJiZjcsYG9yZ19sYW5kX21hc3NpZmAuYG1hcEdlb21ldHJ5X2AgQVMgZl80MWVjYjQwZTI5NDQ3OWJhLGBvcmdfbGFuZF9tYXNzaWZgLmBmYXJtX2luZm9faWRfYCBBUyBmXzY2MGE4YThhMGRhMGNhMTUsYG9yZ19sYW5kX21hc3NpZmAuYGhlYWRNYW5fbmFtZV9gIEFTIGZfNGViMWQ5MGQ0ZjY4M2Q4Myxgb3JnX2xhbmRfbWFzc2lmYC5gcGljX2AgQVMgZl8yY2I5ZmQxMGQ1ODQ1OGM1LGBvcmdfbGFuZF9tYXNzaWZgLmBpc0VuYWJsZWRfYCBBUyBmXzBkMmI2MzYwYzY5YzZmMTUsYG9yZ19sYW5kX21hc3NpZmAuYG9yZ19mYXJtX2luZm9faWRfYCBBUyBmXzRjMDI2OTc4NWI2ZWE1ZGQsYG9yZ19sYW5kX21hc3NpZmAuYGFkZHJlc3NfYCBBUyBmXzc4YzVjZDRiNjRiODk0ODIsYG9yZ19sYW5kX21hc3NpZmAuYGlkYCBBUyBmX2MwYzE1NjdkNzAwNzdjOTAgRlJPTSBgb3JnX2xhbmRfaW5mb2AgIExFRlQgSk9JTiAgYG9yZ19sYW5kX21hc3NpZmAgT04gYG9yZ19sYW5kX2luZm9gLmBpZGAgPSBgb3JnX2xhbmRfbWFzc2lmYC5gZmFybV9pbmZvX2lkX2ApICAgdF9hXzANCiAgICBHUk9VUCBCWQ0KICAgICAgICB0X2FfMC5gZl9lYzZlYjMzNmJkOThjYmE0YCwNCiAgICAgICAgdF9hXzAuYGZfMWFlN2I2ODNmZWZmMjdhNmANCiAgICApICAgdF9hXzENCk9SREVSIEJZDQogICAgZl9heF8xIGFzYw0KIExJTUlUIDAsMTAwMA==",
        "drill": false,
        "drillFilters": [],
        "position": null,
        "totalPage": 0,
        "totalItems": 0,
        "datasetMode": 0,
        "datasourceType": "mysql",
        "xaxisExt": "[]",
        "yaxis": "[]",//x轴配置
        "xaxis": "[]",//y轴配置
        "yaxisExt": "[]"
    }
}