From 96dff53e0042386d639cd311aabec1597fd32673 Mon Sep 17 00:00:00 2001 From: JonasBollack <825545356@qq.com> Date: Tue, 20 Oct 2020 16:59:42 +0800 Subject: [PATCH] =?UTF-8?q?KERNEL-5825=20=E4=B8=8A=E4=BC=A0=E6=89=93?= =?UTF-8?q?=E5=8C=85=E8=AF=B7=E6=B1=82=E5=90=8E=E7=AB=AF=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin.xml | 9 +- pom.xml | 24 ++- .../com/fr/plugin/pack/PackConstants.java | 14 ++ .../fr/plugin/pack/PackHandlerProvider.java | 19 +++ .../fr/plugin/pack/PackURLAliasProvider.java | 20 +++ .../pack/PackWidgetExecuteProvider.java | 62 ++++++++ .../com/fr/plugin/pack/bean/WidgetsBean.java | 23 +++ .../fr/plugin/pack/conf/PackPluginConfig.java | 74 +++++++++ .../pack/exception/ReportExceedException.java | 16 ++ .../pack/exception/WidgetExceedException.java | 16 ++ .../fr/plugin/pack/http/PackHttpHandler.java | 150 ++++++++++++++++++ .../pack/source/PackDBSourceEngine.java | 25 +++ .../fr/plugin/pack/traffic/PackTraffic.java | 12 ++ .../pack/traffic/PackTrafficFactory.java | 22 +++ .../plugin/pack/traffic/PackTrafficImpl.java | 48 ++++++ .../plugin/pack/http/PackHttpHandlerTest.java | 103 ++++++++++++ 16 files changed, 634 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/fr/plugin/pack/PackConstants.java create mode 100644 src/main/java/com/fr/plugin/pack/PackHandlerProvider.java create mode 100644 src/main/java/com/fr/plugin/pack/PackURLAliasProvider.java create mode 100644 src/main/java/com/fr/plugin/pack/PackWidgetExecuteProvider.java create mode 100644 src/main/java/com/fr/plugin/pack/bean/WidgetsBean.java create mode 100644 src/main/java/com/fr/plugin/pack/conf/PackPluginConfig.java create mode 100644 src/main/java/com/fr/plugin/pack/exception/ReportExceedException.java create mode 100644 src/main/java/com/fr/plugin/pack/exception/WidgetExceedException.java create mode 100644 src/main/java/com/fr/plugin/pack/http/PackHttpHandler.java create mode 100644 src/main/java/com/fr/plugin/pack/source/PackDBSourceEngine.java create mode 100644 src/main/java/com/fr/plugin/pack/traffic/PackTraffic.java create mode 100644 src/main/java/com/fr/plugin/pack/traffic/PackTrafficFactory.java create mode 100644 src/main/java/com/fr/plugin/pack/traffic/PackTrafficImpl.java create mode 100644 src/test/java/com/fr/plugin/pack/http/PackHttpHandlerTest.java diff --git a/plugin.xml b/plugin.xml index 70bde70..c7fa5b3 100644 --- a/plugin.xml +++ b/plugin.xml @@ -1,4 +1,5 @@ - + + com.fr.plugin.pack.request yes @@ -13,5 +14,11 @@ + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index dcf2c23..350d050 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ 5.0-RELEASE-SNAPSHOT ../nuclear-maven/pom.xml - + 4.0.0 plugin-pack-request @@ -20,6 +20,24 @@ direct-adapter-sdk ${foundation-version} + + com.finebi + web-action + 5.0-RELEASE-SNAPSHOT + compile + + + org.jmockit + jmockit + 1.35 + test + + + com.finebi + web-test + 5.0-RELEASE-SNAPSHOT + test + @@ -34,7 +52,9 @@ - /Users/leezerofly/env/direct-bi/WEB-INF/plugins/plugin-com.fr.plugin.pack.request-0.0.1/classes + + /Users/jonas/Desktop/代码/FineBI5.1/env/WebReport/WEB-INF/plugins/plugin-com.fr.plugin.pack.request-0.0.1/classes + \ No newline at end of file diff --git a/src/main/java/com/fr/plugin/pack/PackConstants.java b/src/main/java/com/fr/plugin/pack/PackConstants.java new file mode 100644 index 0000000..0a00124 --- /dev/null +++ b/src/main/java/com/fr/plugin/pack/PackConstants.java @@ -0,0 +1,14 @@ +package com.fr.plugin.pack; + +/** + * @author Jonas + * @version 5.1.3 + * Created by Jonas on 2020-10-19 + */ +public class PackConstants { + public final static String WIDGET_EXCEED_ERROR = "61310099"; + public final static String REPORT_EXCEED_ERROR = "61310098"; + + public final static String WIDGET_TRAFFIC_NAME = "Widget"; + public final static String REPORT_TRAFFIC_NAME = "Report"; +} diff --git a/src/main/java/com/fr/plugin/pack/PackHandlerProvider.java b/src/main/java/com/fr/plugin/pack/PackHandlerProvider.java new file mode 100644 index 0000000..8ac0834 --- /dev/null +++ b/src/main/java/com/fr/plugin/pack/PackHandlerProvider.java @@ -0,0 +1,19 @@ +package com.fr.plugin.pack; + +import com.fr.decision.fun.HttpHandler; +import com.fr.decision.fun.impl.AbstractHttpHandlerProvider; +import com.fr.plugin.pack.http.PackHttpHandler; + +/** + * @author Jonas + * @version 5.1.3 + * Created by Jonas on 2020-10-19 + */ +public class PackHandlerProvider extends AbstractHttpHandlerProvider { + @Override + public HttpHandler[] registerHandlers() { + return new HttpHandler[]{ + new PackHttpHandler() + }; + } +} diff --git a/src/main/java/com/fr/plugin/pack/PackURLAliasProvider.java b/src/main/java/com/fr/plugin/pack/PackURLAliasProvider.java new file mode 100644 index 0000000..efdf429 --- /dev/null +++ b/src/main/java/com/fr/plugin/pack/PackURLAliasProvider.java @@ -0,0 +1,20 @@ +package com.fr.plugin.pack; + +import com.fr.decision.fun.impl.AbstractURLAliasProvider; +import com.fr.decision.webservice.url.alias.URLAlias; +import com.fr.decision.webservice.url.alias.URLAliasFactory; +import com.fr.plugin.pack.http.PackHttpHandler; + +/** + * @author Jonas + * @version 5.1.3 + * Created by Jonas on 2020-10-19 + */ +public class PackURLAliasProvider extends AbstractURLAliasProvider { + @Override + public URLAlias[] registerAlias() { + return new URLAlias[]{ + URLAliasFactory.createPluginAlias(PackHttpHandler.PATH, PackHttpHandler.PATH,false) + }; + } +} diff --git a/src/main/java/com/fr/plugin/pack/PackWidgetExecuteProvider.java b/src/main/java/com/fr/plugin/pack/PackWidgetExecuteProvider.java new file mode 100644 index 0000000..944217d --- /dev/null +++ b/src/main/java/com/fr/plugin/pack/PackWidgetExecuteProvider.java @@ -0,0 +1,62 @@ +package com.fr.plugin.pack; + +import com.finebi.common.api.vo.table.parameter.Parameters; +import com.finebi.common.exception.FineEngineException; +import com.finebi.common.exception.execute.FineWidgetNoDataException; +import com.finebi.dashboard.api.bean.widget.WidgetBean; +import com.finebi.dashboard.api.cell.DashboardCellCreator; +import com.finebi.dashboard.api.fun.AbstractWidgetExecuteProvider; +import com.finebi.dashboard.api.structure.result.preview.BIPreViewResult; +import com.finebi.dashboard.impl.widget.EngineResultToPreViewResultVisitor; +import com.finebi.dashboard.impl.widget.FineWidget; +import com.finebi.dashboard.impl.widget.visitor.DefaultBeanToWidget; +import com.finebi.dashboard.impl.widget.visitor.TableAbsentChecker; +import com.finebi.dashboard.impl.widget.visitor.UrlParameterProcessor; +import com.finebi.dashboard.impl.widget.visitor.WidgetBeanToFineWidgetVisitor; +import com.finebi.foundation.api.structure.result.BIResult; +import com.fr.decision.authority.data.User; +import com.fr.plugin.pack.exception.WidgetExceedException; +import com.fr.plugin.pack.traffic.PackTraffic; +import com.fr.plugin.pack.traffic.PackTrafficFactory; + +import java.util.Optional; + +/** + * @author Jonas + * @version 5.1.3 + * Created by Jonas on 2020-10-19 + */ +public class PackWidgetExecuteProvider extends AbstractWidgetExecuteProvider { + private PackTraffic widgetTraffic = PackTrafficFactory.getWidgetTraffic(); + + @Override + public BIPreViewResult getPreViewResult(WidgetBean widgetBean, User user, Parameters parameters) throws FineEngineException { + String widgetId = null; + try { + widgetId = widgetBean.getWid(); + if (!widgetTraffic.offer(widgetId)) { + throw new WidgetExceedException(); + } + return getResult(widgetBean, user, parameters); + } finally { + widgetTraffic.release(widgetId); + } + } + + private BIPreViewResult getResult(WidgetBean widgetBean, User user, Parameters parameters) throws FineEngineException { + // bean转widget + TableAbsentChecker.check(widgetBean); + FineWidget widget = new DefaultBeanToWidget<>(new WidgetBeanToFineWidgetVisitor(user)) + .addProcess(new UrlParameterProcessor(parameters)) + .translate(widgetBean); + // 从引擎拿计算数据 + BIResult engineResult = getEngineExecutorResult(widget); + EngineResultToPreViewResultVisitor resultTranVisitor = new EngineResultToPreViewResultVisitor(engineResult, parameters); + return widget.accept(resultTranVisitor); + } + + private BIResult getEngineExecutorResult(FineWidget fineWidget) throws FineEngineException { + Optional execute = DashboardCellCreator.widgetExecutor().execute(fineWidget); + return execute.orElseThrow(() -> new FineWidgetNoDataException("widget result is null !widget name is : " + fineWidget.getWidgetName())); + } +} diff --git a/src/main/java/com/fr/plugin/pack/bean/WidgetsBean.java b/src/main/java/com/fr/plugin/pack/bean/WidgetsBean.java new file mode 100644 index 0000000..f3379d4 --- /dev/null +++ b/src/main/java/com/fr/plugin/pack/bean/WidgetsBean.java @@ -0,0 +1,23 @@ +package com.fr.plugin.pack.bean; + +import com.finebi.dashboard.api.bean.widget.WidgetBean; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author Jonas + * @version 5.1.3 + * Created by Jonas on 2020-10-19 + */ +public class WidgetsBean { + private Map widgets = new HashMap<>(); + + public Map getWidgets() { + return widgets; + } + + public void setWidgets(Map widgets) { + this.widgets = widgets; + } +} diff --git a/src/main/java/com/fr/plugin/pack/conf/PackPluginConfig.java b/src/main/java/com/fr/plugin/pack/conf/PackPluginConfig.java new file mode 100644 index 0000000..6b2ec0e --- /dev/null +++ b/src/main/java/com/fr/plugin/pack/conf/PackPluginConfig.java @@ -0,0 +1,74 @@ +package com.fr.plugin.pack.conf; + +import com.fr.config.ConfigContext; +import com.fr.config.DefaultConfiguration; +import com.fr.config.Identifier; +import com.fr.config.Status; +import com.fr.config.Visualization; +import com.fr.config.holder.Conf; +import com.fr.config.holder.factory.Holders; + +/** + * @author Jonas + * @version 5.1.3 + * Created by Jonas on 2020-10-20 + */ +@Visualization(category = "打包插件参数") +public class PackPluginConfig extends DefaultConfiguration { + private static volatile PackPluginConfig config = null; + + // sql查询超时时间(JDBC属性)单位秒 + @Identifier(value = "sqlQueryTimeout", status = Status.SHOW, name = "SQL查询超时时间", description = "单位秒(JDBC设置queryTimeout)") + private Conf sqlQueryTimeout = Holders.simple(60); + + // 组件查询超时时间单位毫秒 + @Identifier(value = "widgetQueryTimeout", status = Status.SHOW, name = "组件查询超时时间", description = "单位毫秒") + private Conf widgetQueryTimeout = Holders.simple(3 * 60 * 1000); + + // 最大模板并发访问度 + @Identifier(value = "reportQueryMax", status = Status.SHOW, name = "最大模板并发访问度", description = "模板并发个数") + private Conf reportQueryMax = Holders.simple(3); + + // 最大组件并发组件并发访问度 + @Identifier(value = "widgetQueryMax", status = Status.SHOW, name = "最大组件并发组件并发访问度", description = "组件并发个数") + private Conf widgetQueryMax = Holders.simple(6); + + public static PackPluginConfig getInstance() { + if (config == null) { + config = ConfigContext.getConfigInstance(PackPluginConfig.class); + } + return config; + } + + public int getSqlQueryTimeout() { + return sqlQueryTimeout.get(); + } + + public void setSqlQueryTimeout(int sqlQueryTimeout) { + this.sqlQueryTimeout.set(sqlQueryTimeout); + } + + public int getWidgetQueryTimeout() { + return widgetQueryTimeout.get(); + } + + public void setWidgetQueryTimeout(int widgetQueryTimeout) { + this.widgetQueryTimeout.set(widgetQueryTimeout); + } + + public int getReportQueryMax() { + return reportQueryMax.get(); + } + + public void setReportQueryMax(int reportQueryMax) { + this.reportQueryMax.set(reportQueryMax); + } + + public int getWidgetQueryMax() { + return widgetQueryMax.get(); + } + + public void setWidgetQueryMax(int widgetQueryMax) { + this.widgetQueryMax.set(widgetQueryMax); + } +} diff --git a/src/main/java/com/fr/plugin/pack/exception/ReportExceedException.java b/src/main/java/com/fr/plugin/pack/exception/ReportExceedException.java new file mode 100644 index 0000000..a6654a4 --- /dev/null +++ b/src/main/java/com/fr/plugin/pack/exception/ReportExceedException.java @@ -0,0 +1,16 @@ +package com.fr.plugin.pack.exception; + +import com.finebi.common.exception.FineEngineException; +import com.fr.plugin.pack.PackConstants; + +/** + * @author Jonas + * @version 5.1.3 + * Created by Jonas on 2020-10-19 + */ +public class ReportExceedException extends FineEngineException { + @Override + public String errorCode() { + return PackConstants.REPORT_EXCEED_ERROR; + } +} diff --git a/src/main/java/com/fr/plugin/pack/exception/WidgetExceedException.java b/src/main/java/com/fr/plugin/pack/exception/WidgetExceedException.java new file mode 100644 index 0000000..583f5b6 --- /dev/null +++ b/src/main/java/com/fr/plugin/pack/exception/WidgetExceedException.java @@ -0,0 +1,16 @@ +package com.fr.plugin.pack.exception; + +import com.finebi.common.exception.FineEngineException; +import com.fr.plugin.pack.PackConstants; + +/** + * @author Jonas + * @version 5.1.3 + * Created by Jonas on 2020-10-19 + */ +public class WidgetExceedException extends FineEngineException { + @Override + public String errorCode() { + return PackConstants.WIDGET_EXCEED_ERROR; + } +} diff --git a/src/main/java/com/fr/plugin/pack/http/PackHttpHandler.java b/src/main/java/com/fr/plugin/pack/http/PackHttpHandler.java new file mode 100644 index 0000000..5506015 --- /dev/null +++ b/src/main/java/com/fr/plugin/pack/http/PackHttpHandler.java @@ -0,0 +1,150 @@ +package com.fr.plugin.pack.http; + +import com.finebi.activate.foundation.StableManager; +import com.finebi.base.concurrent.DefaultThreadFactory; +import com.finebi.common.api.vo.table.parameter.Parameters; +import com.finebi.dashboard.api.bean.widget.WidgetBean; +import com.finebi.dashboard.api.service.FineDashBoardService; +import com.finebi.dashboard.api.service.FineWidgetExecutorService; +import com.finebi.dashboard.api.structure.result.preview.BIPreViewResult; +import com.finebi.dashboard.impl.helper.FineDashBoardUtils; +import com.finebi.foundation.api.reponse.FineRespond; +import com.finebi.foundation.api.service.FineService; +import com.finebi.selector.api.DirectSourceEngineFactory; +import com.finebi.utils.CollectionUtils; +import com.finebi.utils.StringUtils; +import com.finebi.web.action.v5.BaseAction; +import com.fr.decision.authority.data.User; +import com.fr.decision.fun.impl.BaseHttpHandler; +import com.fr.general.IOUtils; +import com.fr.invoke.Reflect; +import com.fr.log.FineLoggerFactory; +import com.fr.plugin.pack.bean.WidgetsBean; +import com.fr.plugin.pack.conf.PackPluginConfig; +import com.fr.plugin.pack.exception.ReportExceedException; +import com.fr.plugin.pack.exception.WidgetExceedException; +import com.fr.plugin.pack.source.PackDBSourceEngine; +import com.fr.plugin.pack.traffic.PackTraffic; +import com.fr.plugin.pack.traffic.PackTrafficFactory; +import com.fr.third.fasterxml.jackson.databind.ObjectMapper; +import com.fr.third.springframework.web.bind.annotation.RequestMethod; +import com.fr.web.utils.WebUtils; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.stream.Collectors; + +/** + * @author Jonas + * @version 5.1.3 + * Created by Jonas on 2020-10-19 + */ +public class PackHttpHandler extends BaseHttpHandler { + private PackTraffic reportTraffic = PackTrafficFactory.getReportTraffic(); + public static String PATH = "/widgets/data"; + private ExecutorService executorService = Executors.newCachedThreadPool(new DefaultThreadFactory("pack-widget-execute")); + + { + DirectSourceEngineFactory.INSTANCE.register(new PackDBSourceEngine()); + } + + @Override + public RequestMethod getMethod() { + return RequestMethod.POST; + } + + @Override + public String getPath() { + return PATH; + } + + @Override + public boolean isPublic() { + return false; + } + + @Override + public void handle(HttpServletRequest request, HttpServletResponse response) throws Exception { + ObjectMapper mapper = new ObjectMapper(); + String reportId = null; + try { + String body = IOUtils.inputStream2String(request.getInputStream()); + WidgetsBean widgetsBean = mapper.readValue(body, WidgetsBean.class); + + Map result = new HashMap<>(); + Set reportIds = widgetsBean.getWidgets().values().stream().map(WidgetBean::getReportId).collect(Collectors.toSet()); + if (CollectionUtils.isEmpty(reportIds)) { + throw new UnsupportedOperationException(); + } else { + reportId = reportIds.iterator().next(); + if (StringUtils.isEmpty(reportId)) { + throw new UnsupportedOperationException("reportId must be not emtpy"); + } + } + if (!reportTraffic.offer(reportId)) { + throw new ReportExceedException(); + } + try { + List> futures = new ArrayList<>(); + for (Map.Entry entry : widgetsBean.getWidgets().entrySet()) { + WidgetBean widgetBean = entry.getValue(); + User user = FineDashBoardUtils.getUserFromReq(request, widgetBean.getReportId()); + boolean mobile = FineDashBoardUtils.isMobile(request); + Parameters parameterFromRequest = FineDashBoardUtils.getParameterFromRequest(request); + String widgetId = entry.getKey(); + Future future = executorService.submit(() -> { + try { + BIPreViewResult widgetData = Reflect.on(FineDashBoardUtils.class) + .call("getWidgetData", widgetBean, user, mobile, parameterFromRequest, + getBean(FineDashBoardService.class), getBean(FineWidgetExecutorService.class)) + .get(); + result.put(widgetId, FineRespond.success(widgetData)); + } catch (Exception e) { + FineLoggerFactory.getLogger().debug(e.getMessage(), e); + result.put(widgetId, handleException(e)); + } + }); + futures.add(future); + } + for (Future future : futures) { + try { + // 设置超时时间,不能一直在等着 + future.get(PackPluginConfig.getInstance().getWidgetQueryTimeout(), TimeUnit.MILLISECONDS); + } catch (TimeoutException e) { + future.cancel(true); + } + } + WebUtils.printAsString(response, mapper.writeValueAsString(FineRespond.success(result))); + } finally { + reportTraffic.release(reportId); + } + } catch (Exception e) { + e.printStackTrace(); + WebUtils.printAsString(response, mapper.writeValueAsString(FineRespond.fail("500", mapper.writeValueAsString(handleException(e))))); + } + } + + private static FineRespond handleException(Exception e) { + if (e instanceof ReportExceedException) { + return FineRespond.fail(((ReportExceedException) e).errorCode(), e.getMessage()); + } + if (e instanceof WidgetExceedException) { + return FineRespond.fail(((WidgetExceedException) e).errorCode(), e.getMessage()); + } + return Reflect.on(BaseAction.class).call("getExceptionRespond", e).get(); + } + + private static T getBean(Class annotatedClass) { + return StableManager.getContext().getServiceBean(annotatedClass); + } +} diff --git a/src/main/java/com/fr/plugin/pack/source/PackDBSourceEngine.java b/src/main/java/com/fr/plugin/pack/source/PackDBSourceEngine.java new file mode 100644 index 0000000..1967547 --- /dev/null +++ b/src/main/java/com/fr/plugin/pack/source/PackDBSourceEngine.java @@ -0,0 +1,25 @@ +package com.fr.plugin.pack.source; + +import com.finebi.api.criterion.Table; +import com.finebi.base.datasource.ConnectionCreator; +import com.fr.data.core.db.dialect.Dialect; +import com.fr.engine.sql.database.DataBaseSourceEngine; +import com.fr.plugin.pack.conf.PackPluginConfig; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +/** + * @author Jonas + * @version 5.1.3 + * Created by Jonas on 2020-10-20 + */ +public class PackDBSourceEngine extends DataBaseSourceEngine { + @Override + protected ResultSet executeQuery(Connection conn, Statement statement, String sql, Table table, ConnectionCreator connectionCreator, Dialect dialect) throws SQLException { + statement.setQueryTimeout(PackPluginConfig.getInstance().getSqlQueryTimeout()); + return dialect.executeQuery(statement, sql, conn); + } +} diff --git a/src/main/java/com/fr/plugin/pack/traffic/PackTraffic.java b/src/main/java/com/fr/plugin/pack/traffic/PackTraffic.java new file mode 100644 index 0000000..e843338 --- /dev/null +++ b/src/main/java/com/fr/plugin/pack/traffic/PackTraffic.java @@ -0,0 +1,12 @@ +package com.fr.plugin.pack.traffic; + +/** + * @author Jonas + * @version 5.1.3 + * Created by Jonas on 2020-10-19 + */ +public interface PackTraffic { + boolean offer(String id); + + void release(String id); +} diff --git a/src/main/java/com/fr/plugin/pack/traffic/PackTrafficFactory.java b/src/main/java/com/fr/plugin/pack/traffic/PackTrafficFactory.java new file mode 100644 index 0000000..37e18ef --- /dev/null +++ b/src/main/java/com/fr/plugin/pack/traffic/PackTrafficFactory.java @@ -0,0 +1,22 @@ +package com.fr.plugin.pack.traffic; + +import com.fr.plugin.pack.PackConstants; +import com.fr.plugin.pack.conf.PackPluginConfig; + +/** + * @author Jonas + * @version 5.1.3 + * Created by Jonas on 2020-10-19 + */ +public class PackTrafficFactory { + private static PackTraffic widgetTraffic = new PackTrafficImpl(PackConstants.WIDGET_TRAFFIC_NAME,() -> PackPluginConfig.getInstance().getWidgetQueryMax()); + private static PackTraffic reportTraffic = new PackTrafficImpl(PackConstants.REPORT_TRAFFIC_NAME,() -> PackPluginConfig.getInstance().getReportQueryMax()); + + public static PackTraffic getWidgetTraffic() { + return widgetTraffic; + } + + public static PackTraffic getReportTraffic() { + return reportTraffic; + } +} diff --git a/src/main/java/com/fr/plugin/pack/traffic/PackTrafficImpl.java b/src/main/java/com/fr/plugin/pack/traffic/PackTrafficImpl.java new file mode 100644 index 0000000..8669405 --- /dev/null +++ b/src/main/java/com/fr/plugin/pack/traffic/PackTrafficImpl.java @@ -0,0 +1,48 @@ +package com.fr.plugin.pack.traffic; + +import com.fr.log.FineLoggerFactory; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Supplier; + +/** + * @author Jonas + * @version 5.1.3 + * Created by Jonas on 2020-10-19 + */ +public class PackTrafficImpl implements PackTraffic { + private Map mapCount = new ConcurrentHashMap<>(); + private Supplier maxCount; + private String name; + + public PackTrafficImpl(String name, Supplier maxCount) { + this.name = name; + this.maxCount = maxCount; + } + + @Override + public synchronized boolean offer(String id) { + Integer count = mapCount.get(id); + if (count == null) { + count = 0; + } + int addCount = count + 1; + if (addCount > maxCount.get()) { + FineLoggerFactory.getLogger().info("PackTraffic({}) false {} addCount {}", name, id, addCount); + return false; + } + mapCount.put(id, addCount); + FineLoggerFactory.getLogger().info("PackTraffic({}) true {} addCount {}", name, id, addCount); + return true; + } + + @Override + public synchronized void release(String id) { + Integer count = mapCount.get(id); + if (count <= 1) { + mapCount.remove(id); + } + mapCount.put(id, count - 1); + } +} diff --git a/src/test/java/com/fr/plugin/pack/http/PackHttpHandlerTest.java b/src/test/java/com/fr/plugin/pack/http/PackHttpHandlerTest.java new file mode 100644 index 0000000..14a8a3e --- /dev/null +++ b/src/test/java/com/fr/plugin/pack/http/PackHttpHandlerTest.java @@ -0,0 +1,103 @@ +package com.fr.plugin.pack.http; + +import com.finebi.activate.foundation.StableManager; +import com.finebi.common.api.vo.table.parameter.Parameters; +import com.finebi.common.exception.FineEngineException; +import com.finebi.dashboard.api.bean.report.ReportBean; +import com.finebi.dashboard.api.bean.widget.WidgetBean; +import com.finebi.dashboard.api.service.FineDashBoardService; +import com.finebi.dashboard.api.service.FineWidgetExecutorService; +import com.finebi.dashboard.impl.helper.FineDashBoardUtils; +import com.finebi.dashboard.impl.service.FineDashBoardServiceImpl; +import com.finebi.dashboard.impl.service.FineWidgetExecutorServiceImpl; +import com.finebi.dashboard.impl.widget.visitor.TableAbsentChecker; +import com.finebi.foundation.api.reponse.FineRespond; +import com.finebi.web.mock.web.test.DelegatingServletInputStream; +import com.fr.decision.authority.data.User; +import com.fr.plugin.pack.conf.PackPluginConfig; +import mockit.Expectations; +import mockit.Mock; +import mockit.MockUp; +import mockit.Mocked; +import org.junit.Test; +import sun.misc.IOUtils; + +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import java.io.ByteArrayInputStream; +import java.io.IOException; + +import static org.junit.Assert.*; + +/** + * @author Jonas + * @version 5.1.3 + * Created by Jonas on 2020-10-20 + */ +public class PackHttpHandlerTest { + private String body = "{\"widgets\":{\"4339cd8362f546e99fc90d54e3755ddb\":{\"type\":1,\"tableName\":\"kyligence_NULLCS_D\",\"timeStamp\":1602758845193,\"bounds\":{\"left\":0,\"top\":0,\"width\":742.2222222222223,\"height\":248.61111111111111},\"name\":\"未命名组件\",\"viewAttr\":{\"10000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0},\"20000\":{\"type\":1,\"size\":0},\"30000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0}},\"allowOverlap\":false,\"showTitle\":true,\"mobile\":false,\"view\":{\"10000\":[],\"20000\":[],\"30000\":[\"8c4ed96759776abd\"]},\"dimensions\":{\"16e524b5e619b609\":{\"name\":\"NAME\",\"type\":1,\"notShowNull\":false,\"id\":\"16e524b5e619b609\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"toCountType\":0,\"group\":{\"type\":2},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}},\"8c4ed96759776abd\":{\"name\":\"ID\",\"type\":2,\"notShowNull\":false,\"id\":\"8c4ed96759776abd\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_ID\",\"toCountType\":0,\"group\":{\"type\":3},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}}},\"page\":0,\"realData\":false,\"allData\":false,\"templateChartColorChange\":false,\"detailSetting\":false,\"settings\":{\"chartAttr\":{\"graphic\":{\"dimensionId\":\"\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":-1,\"roundRadius\":-1,\"pointRadius\":-1,\"heatRadius\":-1,\"lineWidth\":-1,\"funnelWidth\":-1,\"gaugeRadius\":-1,\"lastSliderPosition\":0},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"allowOverlap\":false,\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"},\"entire\":{\"dimensionId\":\"entire\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1,\"borderColor\":\"\",\"nonField\":{\"color\":\"\"},\"dimension\":{\"auto\":true,\"customize\":false,\"colors\":[],\"colorMap\":{}},\"measure\":{\"gradientType\":\"continuous\",\"name\":\"auto\",\"autoInterval\":true,\"count\":2,\"custom\":{\"min\":0,\"max\":0,\"ranges\":[]}},\"gauge\":{\"pointColor\":\"\",\"tickColor\":\"\",\"tickSlotColor\":\"\",\"hubColor\":\"\",\"hubBackgroundColor\":\"\",\"backgroundColor\":\"\"}},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":30,\"roundRadius\":0,\"pointRadius\":11,\"heatRadius\":40,\"square\":{\"width\":30,\"innerRadiusRatio\":0.5,\"convert2MultiPie\":false},\"lineWidth\":-1,\"text\":{\"size\":50,\"valid\":true},\"funnelWidth\":1,\"gaugeRadius\":0.7,\"pieRadius\":{\"sameRadius\":true,\"radius\":40,\"innerRadiusRatio\":0.75},\"lastSliderPosition\":-1},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"position\":\"outside\",\"showWay\":\"all\",\"allowOverlap\":false,\"autoAdjust\":\"hide\",\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"background\":\"\",\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"}},\"chartStyle\":{\"legend\":{\"enabled\":true,\"fontStyle\":{\"auto\":true,\"type\":0,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"fontColor\":\"\",\"fontBold\":false,\"bold\":false,\"italic\":false,\"fontAlign\":0},\"borderColor\":\"transparent\",\"position\":\"right\"},\"axis\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"hGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"vGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"adaptive\":{\"type\":\"standard\"}},\"tableStyle\":{\"form\":1,\"style\":0,\"themeColor\":null,\"showTitle\":false,\"freezeDim\":true,\"transmitLinkages\":false,\"expandRowHeader\":false,\"expandColHeader\":false,\"showRowSum\":true,\"showColSum\":true,\"showSequence\":false,\"textWrapper\":false,\"rowHeight\":25,\"rowCounts\":20,\"colCounts\":7,\"totalRows\":1000,\"sumRowText\":\"\",\"showChildRowSum\":true,\"showChildColSum\":true,\"headerTextWrapper\":false,\"headerRowHeight\":25,\"rowPosition\":\"bottom\",\"colPosition\":\"right\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"fontAlign\":null,\"fontColor\":null},\"body\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"dimFontAlign\":null,\"tarFontAlign\":null,\"fontColor\":null}},\"metric\":{\"show\":true,\"position\":3,\"type\":2}},\"transmitLinkages\":false,\"tableAttr\":{\"equalDivideColumn\":false,\"color\":{\"all\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]},\"8c4ed96759776abd\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]}},\"shape\":{\"all\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]},\"8c4ed96759776abd\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]}},\"filterValue\":{}},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleHeight\":25,\"nameStyleType\":1,\"gisBackground\":{\"show\":true,\"layer\":null,\"zoomIn\":\"放大\",\"zoomOut\":\"缩小\"}},\"linkage\":{},\"jump\":[],\"openJump\":true,\"facet\":{\"hCustomUnit\":false,\"vCustomUnit\":false,\"hUnit\":0,\"vUnit\":0,\"hCustomSize\":false,\"vCustomSize\":false,\"hSize\":0,\"vSize\":0},\"dimensionGroups\":{\"4339cd8362f546e99fc90d54e3755ddb_kyligence[5f]NULLCS[5f]D_NAME_2\":{\"group\":\"4339cd8362f546e99fc90d54e3755ddb_kyligence[5f]NULLCS[5f]D_NAME_2\",\"dimensionIds\":[\"16e524b5e619b609\"]},\"4339cd8362f546e99fc90d54e3755ddb_kyligence[5f]NULLCS[5f]D_ID_3_0\":{\"group\":\"4339cd8362f546e99fc90d54e3755ddb_kyligence[5f]NULLCS[5f]D_ID_3_0\",\"dimensionIds\":[\"8c4ed96759776abd\"]}},\"drillOrder\":[],\"resultFilter\":[\"16e524b5e619b609\"],\"columnSize\":[],\"regionColumnSize\":[],\"uploadedImages\":[],\"wId\":\"4339cd8362f546e99fc90d54e3755ddb\",\"measures\":[{\"name\":\"NAME\",\"id\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"type\":16,\"geoType\":0,\"transform\":false,\"transferName\":\"NAME\",\"copied\":false,\"drilled\":false,\"group\":{\"group_2\":{\"sort\":{\"details\":[],\"type\":2},\"filter\":{\"filterValue\":{\"type\":1,\"assist\":[\"分组1\",\"\"],\"value\":[\"July\",\"分组\"]},\"targetId\":\"4339cd8362f546e99fc90d54e3755ddb_kyligence[5f]NULLCS[5f]D_NAME_2\",\"filterType\":1},\"customGroup\":{\"value\":{\"details\":[{\"content\":[{\"value\":\"Alice\"},{\"value\":\"B\"},{\"value\":\"Billy\"}],\"id\":\"4a8fc652fa22fbed\",\"value\":\"分组\"},{\"content\":[{\"value\":\"Bob\"},{\"value\":\"Clay\"},{\"value\":\"Dewei\"}],\"id\":\"b619db2a53785904\",\"value\":\"分组1\"}],\"useOther\":\"\"},\"type\":2},\"repeatCal\":true,\"useDataBar\":false,\"showMissingTime\":false}}}],\"templateStyle\":{\"id\":\"DEFAULT\",\"theme\":\"bi-theme-default\",\"widgetGap\":1,\"templateBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleFont\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":1},\"chart\":{\"chartColor\":[\"#ffbf53\",\"#04b1c2\",\"#f07474\",\"#c55784\",\"#9a5fb3\",\"#cf62d7\",\"#5e78ea\",\"#51b3f0\",\"#69d4dc\",\"#49b788\",\"#9ccc66\",\"#ffdb03\",\"#c18c00\",\"#363636\",\"#426fb3\",\"#66bf7f\",\"#f9cd76\",\"#392884\",\"#00ae71\",\"#93aad6\",\"#490761\",\"#faf14b\",\"#955305\",\"#016241\",\"#7388c1\",\"#8f1e20\",\"#d69b01\",\"#b7b7b7\",\"#511f90\",\"#99d0b9\",\"#c7c300\"],\"font\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\"},\"gradient\":[\"#4FDEFF\",\"#439DF7\",\"#526EFA\"]},\"table\":{\"tableStyle\":1,\"themeColor\":\"#CDE1FC\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":2},\"body\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"dimFontAlign\":1,\"tarFontAlign\":3}}},\"controlTheme\":\"\"},\"filter\":{\"filterType\":34,\"filterValue\":[]},\"widgetIdValueMap\":{},\"parameter\":{},\"rowExpand\":[],\"headerExpand\":{},\"filterValues\":[],\"globalFilter\":null,\"sessionId\":\"848a8ed5-456c-48cf-bda7-3f252a4d5c27\",\"reportId\":\"ecf4554aa851409199fbf224068d0c32\"},\"3a6851fb36bb68a4\":{\"type\":1,\"tableName\":\"kyligence_NULLCS_D\",\"timeStamp\":1603087265407,\"bounds\":{\"left\":0,\"top\":248.61111111111111,\"width\":742.2222222222223,\"height\":248.61111111111111},\"name\":\"未命名组件1\",\"viewAttr\":{\"10000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0},\"20000\":{\"type\":1,\"size\":0},\"30000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0}},\"allowOverlap\":false,\"showTitle\":true,\"mobile\":false,\"view\":{\"10000\":[],\"20000\":[],\"30000\":[\"133462a3c153cb76\"]},\"dimensions\":{\"01167ed690b6cd3e\":{\"name\":\"NAME\",\"type\":1,\"notShowNull\":false,\"id\":\"01167ed690b6cd3e\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"toCountType\":0,\"group\":{\"type\":2},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}},\"133462a3c153cb76\":{\"name\":\"ID\",\"type\":2,\"notShowNull\":false,\"id\":\"133462a3c153cb76\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_ID\",\"toCountType\":0,\"group\":{\"type\":3},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}}},\"page\":0,\"realData\":false,\"allData\":false,\"templateChartColorChange\":false,\"detailSetting\":false,\"settings\":{\"chartAttr\":{\"graphic\":{\"dimensionId\":\"\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":-1,\"roundRadius\":-1,\"pointRadius\":-1,\"heatRadius\":-1,\"lineWidth\":-1,\"funnelWidth\":-1,\"gaugeRadius\":-1,\"lastSliderPosition\":0},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"allowOverlap\":false,\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"},\"entire\":{\"dimensionId\":\"entire\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1,\"borderColor\":\"\",\"nonField\":{\"color\":\"\"},\"dimension\":{\"auto\":true,\"customize\":false,\"colors\":[],\"colorMap\":{}},\"measure\":{\"gradientType\":\"continuous\",\"name\":\"auto\",\"autoInterval\":true,\"count\":2,\"custom\":{\"min\":0,\"max\":0,\"ranges\":[]}},\"gauge\":{\"pointColor\":\"\",\"tickColor\":\"\",\"tickSlotColor\":\"\",\"hubColor\":\"\",\"hubBackgroundColor\":\"\",\"backgroundColor\":\"\"}},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":30,\"roundRadius\":0,\"pointRadius\":11,\"heatRadius\":40,\"square\":{\"width\":30,\"innerRadiusRatio\":0.5,\"convert2MultiPie\":false},\"lineWidth\":-1,\"text\":{\"size\":50,\"valid\":true},\"funnelWidth\":1,\"gaugeRadius\":0.7,\"pieRadius\":{\"sameRadius\":true,\"radius\":40,\"innerRadiusRatio\":0.75},\"lastSliderPosition\":-1},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"position\":\"outside\",\"showWay\":\"all\",\"allowOverlap\":false,\"autoAdjust\":\"hide\",\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"background\":\"\",\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"}},\"chartStyle\":{\"legend\":{\"enabled\":true,\"fontStyle\":{\"auto\":true,\"type\":0,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"fontColor\":\"\",\"fontBold\":false,\"bold\":false,\"italic\":false,\"fontAlign\":0},\"borderColor\":\"transparent\",\"position\":\"right\"},\"axis\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"hGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"vGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"adaptive\":{\"type\":\"standard\"}},\"tableStyle\":{\"form\":1,\"style\":0,\"themeColor\":null,\"showTitle\":false,\"freezeDim\":true,\"transmitLinkages\":false,\"expandRowHeader\":false,\"expandColHeader\":false,\"showRowSum\":true,\"showColSum\":true,\"showSequence\":false,\"textWrapper\":false,\"rowHeight\":25,\"rowCounts\":20,\"colCounts\":7,\"totalRows\":1000,\"sumRowText\":\"\",\"showChildRowSum\":true,\"showChildColSum\":true,\"headerTextWrapper\":false,\"headerRowHeight\":25,\"rowPosition\":\"bottom\",\"colPosition\":\"right\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"fontAlign\":null,\"fontColor\":null},\"body\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"dimFontAlign\":null,\"tarFontAlign\":null,\"fontColor\":null}},\"metric\":{\"show\":true,\"position\":3,\"type\":2}},\"transmitLinkages\":false,\"tableAttr\":{\"equalDivideColumn\":false,\"color\":{\"all\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]},\"133462a3c153cb76\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]}},\"shape\":{\"all\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]},\"133462a3c153cb76\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]}},\"filterValue\":{}},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleHeight\":25,\"nameStyleType\":1,\"gisBackground\":{\"show\":true,\"layer\":null,\"zoomIn\":\"放大\",\"zoomOut\":\"缩小\"}},\"linkage\":{},\"jump\":[],\"openJump\":true,\"facet\":{\"hCustomUnit\":false,\"vCustomUnit\":false,\"hUnit\":0,\"vUnit\":0,\"hCustomSize\":false,\"vCustomSize\":false,\"hSize\":0,\"vSize\":0},\"dimensionGroups\":{\"3a6851fb36bb68a4_kyligence[5f]NULLCS[5f]D_NAME_2\":{\"group\":\"3a6851fb36bb68a4_kyligence[5f]NULLCS[5f]D_NAME_2\",\"dimensionIds\":[\"01167ed690b6cd3e\"]},\"3a6851fb36bb68a4_kyligence[5f]NULLCS[5f]D_ID_3_0\":{\"group\":\"3a6851fb36bb68a4_kyligence[5f]NULLCS[5f]D_ID_3_0\",\"dimensionIds\":[\"133462a3c153cb76\"]}},\"drillOrder\":[],\"resultFilter\":[\"01167ed690b6cd3e\"],\"columnSize\":[],\"regionColumnSize\":[],\"uploadedImages\":[],\"wId\":\"3a6851fb36bb68a4\",\"measures\":[{\"name\":\"NAME\",\"id\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"type\":16,\"geoType\":0,\"transform\":false,\"transferName\":\"NAME\",\"copied\":false,\"drilled\":false,\"group\":{\"group_2\":{\"sort\":{\"details\":[],\"type\":2},\"filter\":{\"filterValue\":{\"type\":1,\"assist\":[\"分组1\",\"\"],\"value\":[\"July\",\"分组\"]},\"targetId\":\"3a6851fb36bb68a4_kyligence[5f]NULLCS[5f]D_NAME_2\",\"filterType\":1},\"customGroup\":{\"value\":{\"details\":[{\"content\":[{\"value\":\"Alice\"},{\"value\":\"B\"},{\"value\":\"Billy\"}],\"id\":\"4a8fc652fa22fbed\",\"value\":\"分组\"},{\"content\":[{\"value\":\"Bob\"},{\"value\":\"Clay\"},{\"value\":\"Dewei\"}],\"id\":\"b619db2a53785904\",\"value\":\"分组1\"}],\"useOther\":\"\"},\"type\":2},\"repeatCal\":true,\"useDataBar\":false,\"showMissingTime\":false}}}],\"templateStyle\":{\"id\":\"DEFAULT\",\"theme\":\"bi-theme-default\",\"widgetGap\":1,\"templateBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleFont\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":1},\"chart\":{\"chartColor\":[\"#ffbf53\",\"#04b1c2\",\"#f07474\",\"#c55784\",\"#9a5fb3\",\"#cf62d7\",\"#5e78ea\",\"#51b3f0\",\"#69d4dc\",\"#49b788\",\"#9ccc66\",\"#ffdb03\",\"#c18c00\",\"#363636\",\"#426fb3\",\"#66bf7f\",\"#f9cd76\",\"#392884\",\"#00ae71\",\"#93aad6\",\"#490761\",\"#faf14b\",\"#955305\",\"#016241\",\"#7388c1\",\"#8f1e20\",\"#d69b01\",\"#b7b7b7\",\"#511f90\",\"#99d0b9\",\"#c7c300\"],\"font\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\"},\"gradient\":[\"#4FDEFF\",\"#439DF7\",\"#526EFA\"]},\"table\":{\"tableStyle\":1,\"themeColor\":\"#CDE1FC\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":2},\"body\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"dimFontAlign\":1,\"tarFontAlign\":3}}},\"controlTheme\":\"\"},\"filter\":{\"filterType\":34,\"filterValue\":[]},\"widgetIdValueMap\":{},\"parameter\":{},\"rowExpand\":[],\"headerExpand\":{},\"filterValues\":[],\"globalFilter\":null,\"sessionId\":\"848a8ed5-456c-48cf-bda7-3f252a4d5c27\",\"reportId\":\"ecf4554aa851409199fbf224068d0c32\"},\"08489dc8412178ec\":{\"type\":1,\"tableName\":\"kyligence_NULLCS_D\",\"timeStamp\":1603087269478,\"bounds\":{\"left\":0,\"top\":497.22222222222223,\"width\":742.2222222222223,\"height\":248.61111111111111},\"name\":\"未命名组件11\",\"viewAttr\":{\"10000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0},\"20000\":{\"type\":1,\"size\":0},\"30000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0}},\"allowOverlap\":false,\"showTitle\":true,\"mobile\":false,\"view\":{\"10000\":[],\"20000\":[],\"30000\":[\"fb3d7d6bb78805d8\"]},\"dimensions\":{\"8c36dd275da0a6fe\":{\"name\":\"NAME\",\"type\":1,\"notShowNull\":false,\"id\":\"8c36dd275da0a6fe\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"toCountType\":0,\"group\":{\"type\":2},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}},\"fb3d7d6bb78805d8\":{\"name\":\"ID\",\"type\":2,\"notShowNull\":false,\"id\":\"fb3d7d6bb78805d8\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_ID\",\"toCountType\":0,\"group\":{\"type\":3},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}}},\"page\":0,\"realData\":false,\"allData\":false,\"templateChartColorChange\":false,\"detailSetting\":false,\"settings\":{\"chartAttr\":{\"graphic\":{\"dimensionId\":\"\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":-1,\"roundRadius\":-1,\"pointRadius\":-1,\"heatRadius\":-1,\"lineWidth\":-1,\"funnelWidth\":-1,\"gaugeRadius\":-1,\"lastSliderPosition\":0},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"allowOverlap\":false,\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"},\"entire\":{\"dimensionId\":\"entire\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1,\"borderColor\":\"\",\"nonField\":{\"color\":\"\"},\"dimension\":{\"auto\":true,\"customize\":false,\"colors\":[],\"colorMap\":{}},\"measure\":{\"gradientType\":\"continuous\",\"name\":\"auto\",\"autoInterval\":true,\"count\":2,\"custom\":{\"min\":0,\"max\":0,\"ranges\":[]}},\"gauge\":{\"pointColor\":\"\",\"tickColor\":\"\",\"tickSlotColor\":\"\",\"hubColor\":\"\",\"hubBackgroundColor\":\"\",\"backgroundColor\":\"\"}},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":30,\"roundRadius\":0,\"pointRadius\":11,\"heatRadius\":40,\"square\":{\"width\":30,\"innerRadiusRatio\":0.5,\"convert2MultiPie\":false},\"lineWidth\":-1,\"text\":{\"size\":50,\"valid\":true},\"funnelWidth\":1,\"gaugeRadius\":0.7,\"pieRadius\":{\"sameRadius\":true,\"radius\":40,\"innerRadiusRatio\":0.75},\"lastSliderPosition\":-1},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"position\":\"outside\",\"showWay\":\"all\",\"allowOverlap\":false,\"autoAdjust\":\"hide\",\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"background\":\"\",\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"}},\"chartStyle\":{\"legend\":{\"enabled\":true,\"fontStyle\":{\"auto\":true,\"type\":0,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"fontColor\":\"\",\"fontBold\":false,\"bold\":false,\"italic\":false,\"fontAlign\":0},\"borderColor\":\"transparent\",\"position\":\"right\"},\"axis\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"hGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"vGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"adaptive\":{\"type\":\"standard\"}},\"tableStyle\":{\"form\":1,\"style\":0,\"themeColor\":null,\"showTitle\":false,\"freezeDim\":true,\"transmitLinkages\":false,\"expandRowHeader\":false,\"expandColHeader\":false,\"showRowSum\":true,\"showColSum\":true,\"showSequence\":false,\"textWrapper\":false,\"rowHeight\":25,\"rowCounts\":20,\"colCounts\":7,\"totalRows\":1000,\"sumRowText\":\"\",\"showChildRowSum\":true,\"showChildColSum\":true,\"headerTextWrapper\":false,\"headerRowHeight\":25,\"rowPosition\":\"bottom\",\"colPosition\":\"right\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"fontAlign\":null,\"fontColor\":null},\"body\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"dimFontAlign\":null,\"tarFontAlign\":null,\"fontColor\":null}},\"metric\":{\"show\":true,\"position\":3,\"type\":2}},\"transmitLinkages\":false,\"tableAttr\":{\"equalDivideColumn\":false,\"color\":{\"all\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]},\"fb3d7d6bb78805d8\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]}},\"shape\":{\"all\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]},\"fb3d7d6bb78805d8\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]}},\"filterValue\":{}},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleHeight\":25,\"nameStyleType\":1,\"gisBackground\":{\"show\":true,\"layer\":null,\"zoomIn\":\"放大\",\"zoomOut\":\"缩小\"}},\"linkage\":{},\"jump\":[],\"openJump\":true,\"facet\":{\"hCustomUnit\":false,\"vCustomUnit\":false,\"hUnit\":0,\"vUnit\":0,\"hCustomSize\":false,\"vCustomSize\":false,\"hSize\":0,\"vSize\":0},\"dimensionGroups\":{\"08489dc8412178ec_kyligence[5f]NULLCS[5f]D_NAME_2\":{\"group\":\"08489dc8412178ec_kyligence[5f]NULLCS[5f]D_NAME_2\",\"dimensionIds\":[\"8c36dd275da0a6fe\"]},\"08489dc8412178ec_kyligence[5f]NULLCS[5f]D_ID_3_0\":{\"group\":\"08489dc8412178ec_kyligence[5f]NULLCS[5f]D_ID_3_0\",\"dimensionIds\":[\"fb3d7d6bb78805d8\"]}},\"drillOrder\":[],\"resultFilter\":[\"8c36dd275da0a6fe\"],\"columnSize\":[],\"regionColumnSize\":[],\"uploadedImages\":[],\"wId\":\"08489dc8412178ec\",\"measures\":[{\"name\":\"NAME\",\"id\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"type\":16,\"geoType\":0,\"transform\":false,\"transferName\":\"NAME\",\"copied\":false,\"drilled\":false,\"group\":{\"group_2\":{\"sort\":{\"details\":[],\"type\":2},\"filter\":{\"filterValue\":{\"type\":1,\"assist\":[\"分组1\",\"\"],\"value\":[\"July\",\"分组\"]},\"targetId\":\"08489dc8412178ec_kyligence[5f]NULLCS[5f]D_NAME_2\",\"filterType\":1},\"customGroup\":{\"value\":{\"details\":[{\"content\":[{\"value\":\"Alice\"},{\"value\":\"B\"},{\"value\":\"Billy\"}],\"id\":\"4a8fc652fa22fbed\",\"value\":\"分组\"},{\"content\":[{\"value\":\"Bob\"},{\"value\":\"Clay\"},{\"value\":\"Dewei\"}],\"id\":\"b619db2a53785904\",\"value\":\"分组1\"}],\"useOther\":\"\"},\"type\":2},\"repeatCal\":true,\"useDataBar\":false,\"showMissingTime\":false}}}],\"templateStyle\":{\"id\":\"DEFAULT\",\"theme\":\"bi-theme-default\",\"widgetGap\":1,\"templateBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleFont\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":1},\"chart\":{\"chartColor\":[\"#ffbf53\",\"#04b1c2\",\"#f07474\",\"#c55784\",\"#9a5fb3\",\"#cf62d7\",\"#5e78ea\",\"#51b3f0\",\"#69d4dc\",\"#49b788\",\"#9ccc66\",\"#ffdb03\",\"#c18c00\",\"#363636\",\"#426fb3\",\"#66bf7f\",\"#f9cd76\",\"#392884\",\"#00ae71\",\"#93aad6\",\"#490761\",\"#faf14b\",\"#955305\",\"#016241\",\"#7388c1\",\"#8f1e20\",\"#d69b01\",\"#b7b7b7\",\"#511f90\",\"#99d0b9\",\"#c7c300\"],\"font\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\"},\"gradient\":[\"#4FDEFF\",\"#439DF7\",\"#526EFA\"]},\"table\":{\"tableStyle\":1,\"themeColor\":\"#CDE1FC\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":2},\"body\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"dimFontAlign\":1,\"tarFontAlign\":3}}},\"controlTheme\":\"\"},\"filter\":{\"filterType\":34,\"filterValue\":[]},\"widgetIdValueMap\":{},\"parameter\":{},\"rowExpand\":[],\"headerExpand\":{},\"filterValues\":[],\"globalFilter\":null,\"sessionId\":\"848a8ed5-456c-48cf-bda7-3f252a4d5c27\",\"reportId\":\"ecf4554aa851409199fbf224068d0c32\"},\"5a9ffed4248bdb96\":{\"type\":1,\"tableName\":\"kyligence_NULLCS_D\",\"timeStamp\":1603087272887,\"bounds\":{\"left\":0,\"top\":745.8333333333334,\"width\":742.2222222222223,\"height\":248.61111111111111},\"name\":\"未命名组件2\",\"viewAttr\":{\"10000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0},\"20000\":{\"type\":1,\"size\":0},\"30000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0}},\"allowOverlap\":false,\"showTitle\":true,\"mobile\":false,\"view\":{\"10000\":[],\"20000\":[],\"30000\":[\"43beee183bf6c1bf\"]},\"dimensions\":{\"70b4bf7cbd0aeafb\":{\"name\":\"NAME\",\"type\":1,\"notShowNull\":false,\"id\":\"70b4bf7cbd0aeafb\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"toCountType\":0,\"group\":{\"type\":2},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}},\"43beee183bf6c1bf\":{\"name\":\"ID\",\"type\":2,\"notShowNull\":false,\"id\":\"43beee183bf6c1bf\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_ID\",\"toCountType\":0,\"group\":{\"type\":3},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}}},\"page\":0,\"realData\":false,\"allData\":false,\"templateChartColorChange\":false,\"detailSetting\":false,\"settings\":{\"chartAttr\":{\"graphic\":{\"dimensionId\":\"\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":-1,\"roundRadius\":-1,\"pointRadius\":-1,\"heatRadius\":-1,\"lineWidth\":-1,\"funnelWidth\":-1,\"gaugeRadius\":-1,\"lastSliderPosition\":0},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"allowOverlap\":false,\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"},\"entire\":{\"dimensionId\":\"entire\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1,\"borderColor\":\"\",\"nonField\":{\"color\":\"\"},\"dimension\":{\"auto\":true,\"customize\":false,\"colors\":[],\"colorMap\":{}},\"measure\":{\"gradientType\":\"continuous\",\"name\":\"auto\",\"autoInterval\":true,\"count\":2,\"custom\":{\"min\":0,\"max\":0,\"ranges\":[]}},\"gauge\":{\"pointColor\":\"\",\"tickColor\":\"\",\"tickSlotColor\":\"\",\"hubColor\":\"\",\"hubBackgroundColor\":\"\",\"backgroundColor\":\"\"}},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":30,\"roundRadius\":0,\"pointRadius\":11,\"heatRadius\":40,\"square\":{\"width\":30,\"innerRadiusRatio\":0.5,\"convert2MultiPie\":false},\"lineWidth\":-1,\"text\":{\"size\":50,\"valid\":true},\"funnelWidth\":1,\"gaugeRadius\":0.7,\"pieRadius\":{\"sameRadius\":true,\"radius\":40,\"innerRadiusRatio\":0.75},\"lastSliderPosition\":-1},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"position\":\"outside\",\"showWay\":\"all\",\"allowOverlap\":false,\"autoAdjust\":\"hide\",\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"background\":\"\",\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"}},\"chartStyle\":{\"legend\":{\"enabled\":true,\"fontStyle\":{\"auto\":true,\"type\":0,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"fontColor\":\"\",\"fontBold\":false,\"bold\":false,\"italic\":false,\"fontAlign\":0},\"borderColor\":\"transparent\",\"position\":\"right\"},\"axis\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"hGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"vGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"adaptive\":{\"type\":\"standard\"}},\"tableStyle\":{\"form\":1,\"style\":0,\"themeColor\":null,\"showTitle\":false,\"freezeDim\":true,\"transmitLinkages\":false,\"expandRowHeader\":false,\"expandColHeader\":false,\"showRowSum\":true,\"showColSum\":true,\"showSequence\":false,\"textWrapper\":false,\"rowHeight\":25,\"rowCounts\":20,\"colCounts\":7,\"totalRows\":1000,\"sumRowText\":\"\",\"showChildRowSum\":true,\"showChildColSum\":true,\"headerTextWrapper\":false,\"headerRowHeight\":25,\"rowPosition\":\"bottom\",\"colPosition\":\"right\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"fontAlign\":null,\"fontColor\":null},\"body\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"dimFontAlign\":null,\"tarFontAlign\":null,\"fontColor\":null}},\"metric\":{\"show\":true,\"position\":3,\"type\":2}},\"transmitLinkages\":false,\"tableAttr\":{\"equalDivideColumn\":false,\"color\":{\"all\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]},\"43beee183bf6c1bf\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]}},\"shape\":{\"all\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]},\"43beee183bf6c1bf\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]}},\"filterValue\":{}},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleHeight\":25,\"nameStyleType\":1,\"gisBackground\":{\"show\":true,\"layer\":null,\"zoomIn\":\"放大\",\"zoomOut\":\"缩小\"}},\"linkage\":{},\"jump\":[],\"openJump\":true,\"facet\":{\"hCustomUnit\":false,\"vCustomUnit\":false,\"hUnit\":0,\"vUnit\":0,\"hCustomSize\":false,\"vCustomSize\":false,\"hSize\":0,\"vSize\":0},\"dimensionGroups\":{\"5a9ffed4248bdb96_kyligence[5f]NULLCS[5f]D_NAME_2\":{\"group\":\"5a9ffed4248bdb96_kyligence[5f]NULLCS[5f]D_NAME_2\",\"dimensionIds\":[\"70b4bf7cbd0aeafb\"]},\"5a9ffed4248bdb96_kyligence[5f]NULLCS[5f]D_ID_3_0\":{\"group\":\"5a9ffed4248bdb96_kyligence[5f]NULLCS[5f]D_ID_3_0\",\"dimensionIds\":[\"43beee183bf6c1bf\"]}},\"drillOrder\":[],\"resultFilter\":[\"70b4bf7cbd0aeafb\"],\"columnSize\":[],\"regionColumnSize\":[],\"uploadedImages\":[],\"wId\":\"5a9ffed4248bdb96\",\"measures\":[{\"name\":\"NAME\",\"id\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"type\":16,\"geoType\":0,\"transform\":false,\"transferName\":\"NAME\",\"copied\":false,\"drilled\":false,\"group\":{\"group_2\":{\"sort\":{\"details\":[],\"type\":2},\"filter\":{\"filterValue\":{\"type\":1,\"assist\":[\"分组1\",\"\"],\"value\":[\"July\",\"分组\"]},\"targetId\":\"5a9ffed4248bdb96_kyligence[5f]NULLCS[5f]D_NAME_2\",\"filterType\":1},\"customGroup\":{\"value\":{\"details\":[{\"content\":[{\"value\":\"Alice\"},{\"value\":\"B\"},{\"value\":\"Billy\"}],\"id\":\"4a8fc652fa22fbed\",\"value\":\"分组\"},{\"content\":[{\"value\":\"Bob\"},{\"value\":\"Clay\"},{\"value\":\"Dewei\"}],\"id\":\"b619db2a53785904\",\"value\":\"分组1\"}],\"useOther\":\"\"},\"type\":2},\"repeatCal\":true,\"useDataBar\":false,\"showMissingTime\":false}}}],\"templateStyle\":{\"id\":\"DEFAULT\",\"theme\":\"bi-theme-default\",\"widgetGap\":1,\"templateBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleFont\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":1},\"chart\":{\"chartColor\":[\"#ffbf53\",\"#04b1c2\",\"#f07474\",\"#c55784\",\"#9a5fb3\",\"#cf62d7\",\"#5e78ea\",\"#51b3f0\",\"#69d4dc\",\"#49b788\",\"#9ccc66\",\"#ffdb03\",\"#c18c00\",\"#363636\",\"#426fb3\",\"#66bf7f\",\"#f9cd76\",\"#392884\",\"#00ae71\",\"#93aad6\",\"#490761\",\"#faf14b\",\"#955305\",\"#016241\",\"#7388c1\",\"#8f1e20\",\"#d69b01\",\"#b7b7b7\",\"#511f90\",\"#99d0b9\",\"#c7c300\"],\"font\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\"},\"gradient\":[\"#4FDEFF\",\"#439DF7\",\"#526EFA\"]},\"table\":{\"tableStyle\":1,\"themeColor\":\"#CDE1FC\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":2},\"body\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"dimFontAlign\":1,\"tarFontAlign\":3}}},\"controlTheme\":\"\"},\"filter\":{\"filterType\":34,\"filterValue\":[]},\"widgetIdValueMap\":{},\"parameter\":{},\"rowExpand\":[],\"headerExpand\":{},\"filterValues\":[],\"globalFilter\":null,\"sessionId\":\"848a8ed5-456c-48cf-bda7-3f252a4d5c27\",\"reportId\":\"ecf4554aa851409199fbf224068d0c32\"},\"d5ec8c19ccbb087f\":{\"type\":1,\"tableName\":\"kyligence_NULLCS_D\",\"timeStamp\":1603087276883,\"bounds\":{\"left\":0,\"top\":994.4444444444445,\"width\":742.2222222222223,\"height\":248.61111111111111},\"name\":\"未命名组件111\",\"viewAttr\":{\"10000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0},\"20000\":{\"type\":1,\"size\":0},\"30000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0}},\"allowOverlap\":false,\"showTitle\":true,\"mobile\":false,\"view\":{\"10000\":[],\"20000\":[],\"30000\":[\"a0fabe036eda698e\"]},\"dimensions\":{\"cbbdb1d2f935bbf1\":{\"name\":\"NAME\",\"type\":1,\"notShowNull\":false,\"id\":\"cbbdb1d2f935bbf1\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"toCountType\":0,\"group\":{\"type\":2},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}},\"a0fabe036eda698e\":{\"name\":\"ID\",\"type\":2,\"notShowNull\":false,\"id\":\"a0fabe036eda698e\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_ID\",\"toCountType\":0,\"group\":{\"type\":3},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}}},\"page\":0,\"realData\":false,\"allData\":false,\"templateChartColorChange\":false,\"detailSetting\":false,\"settings\":{\"chartAttr\":{\"graphic\":{\"dimensionId\":\"\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":-1,\"roundRadius\":-1,\"pointRadius\":-1,\"heatRadius\":-1,\"lineWidth\":-1,\"funnelWidth\":-1,\"gaugeRadius\":-1,\"lastSliderPosition\":0},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"allowOverlap\":false,\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"},\"entire\":{\"dimensionId\":\"entire\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1,\"borderColor\":\"\",\"nonField\":{\"color\":\"\"},\"dimension\":{\"auto\":true,\"customize\":false,\"colors\":[],\"colorMap\":{}},\"measure\":{\"gradientType\":\"continuous\",\"name\":\"auto\",\"autoInterval\":true,\"count\":2,\"custom\":{\"min\":0,\"max\":0,\"ranges\":[]}},\"gauge\":{\"pointColor\":\"\",\"tickColor\":\"\",\"tickSlotColor\":\"\",\"hubColor\":\"\",\"hubBackgroundColor\":\"\",\"backgroundColor\":\"\"}},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":30,\"roundRadius\":0,\"pointRadius\":11,\"heatRadius\":40,\"square\":{\"width\":30,\"innerRadiusRatio\":0.5,\"convert2MultiPie\":false},\"lineWidth\":-1,\"text\":{\"size\":50,\"valid\":true},\"funnelWidth\":1,\"gaugeRadius\":0.7,\"pieRadius\":{\"sameRadius\":true,\"radius\":40,\"innerRadiusRatio\":0.75},\"lastSliderPosition\":-1},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"position\":\"outside\",\"showWay\":\"all\",\"allowOverlap\":false,\"autoAdjust\":\"hide\",\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"background\":\"\",\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"}},\"chartStyle\":{\"legend\":{\"enabled\":true,\"fontStyle\":{\"auto\":true,\"type\":0,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"fontColor\":\"\",\"fontBold\":false,\"bold\":false,\"italic\":false,\"fontAlign\":0},\"borderColor\":\"transparent\",\"position\":\"right\"},\"axis\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"hGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"vGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"adaptive\":{\"type\":\"standard\"}},\"tableStyle\":{\"form\":1,\"style\":0,\"themeColor\":null,\"showTitle\":false,\"freezeDim\":true,\"transmitLinkages\":false,\"expandRowHeader\":false,\"expandColHeader\":false,\"showRowSum\":true,\"showColSum\":true,\"showSequence\":false,\"textWrapper\":false,\"rowHeight\":25,\"rowCounts\":20,\"colCounts\":7,\"totalRows\":1000,\"sumRowText\":\"\",\"showChildRowSum\":true,\"showChildColSum\":true,\"headerTextWrapper\":false,\"headerRowHeight\":25,\"rowPosition\":\"bottom\",\"colPosition\":\"right\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"fontAlign\":null,\"fontColor\":null},\"body\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"dimFontAlign\":null,\"tarFontAlign\":null,\"fontColor\":null}},\"metric\":{\"show\":true,\"position\":3,\"type\":2}},\"transmitLinkages\":false,\"tableAttr\":{\"equalDivideColumn\":false,\"color\":{\"all\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]},\"a0fabe036eda698e\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]}},\"shape\":{\"all\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]},\"a0fabe036eda698e\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]}},\"filterValue\":{}},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleHeight\":25,\"nameStyleType\":1,\"gisBackground\":{\"show\":true,\"layer\":null,\"zoomIn\":\"放大\",\"zoomOut\":\"缩小\"}},\"linkage\":{},\"jump\":[],\"openJump\":true,\"facet\":{\"hCustomUnit\":false,\"vCustomUnit\":false,\"hUnit\":0,\"vUnit\":0,\"hCustomSize\":false,\"vCustomSize\":false,\"hSize\":0,\"vSize\":0},\"dimensionGroups\":{\"d5ec8c19ccbb087f_kyligence[5f]NULLCS[5f]D_NAME_2\":{\"group\":\"d5ec8c19ccbb087f_kyligence[5f]NULLCS[5f]D_NAME_2\",\"dimensionIds\":[\"cbbdb1d2f935bbf1\"]},\"d5ec8c19ccbb087f_kyligence[5f]NULLCS[5f]D_ID_3_0\":{\"group\":\"d5ec8c19ccbb087f_kyligence[5f]NULLCS[5f]D_ID_3_0\",\"dimensionIds\":[\"a0fabe036eda698e\"]}},\"drillOrder\":[],\"resultFilter\":[\"cbbdb1d2f935bbf1\"],\"columnSize\":[],\"regionColumnSize\":[],\"uploadedImages\":[],\"wId\":\"d5ec8c19ccbb087f\",\"measures\":[{\"name\":\"NAME\",\"id\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"type\":16,\"geoType\":0,\"transform\":false,\"transferName\":\"NAME\",\"copied\":false,\"drilled\":false,\"group\":{\"group_2\":{\"sort\":{\"details\":[],\"type\":2},\"filter\":{\"filterValue\":{\"type\":1,\"assist\":[\"分组1\",\"\"],\"value\":[\"July\",\"分组\"]},\"targetId\":\"d5ec8c19ccbb087f_kyligence[5f]NULLCS[5f]D_NAME_2\",\"filterType\":1},\"customGroup\":{\"value\":{\"details\":[{\"content\":[{\"value\":\"Alice\"},{\"value\":\"B\"},{\"value\":\"Billy\"}],\"id\":\"4a8fc652fa22fbed\",\"value\":\"分组\"},{\"content\":[{\"value\":\"Bob\"},{\"value\":\"Clay\"},{\"value\":\"Dewei\"}],\"id\":\"b619db2a53785904\",\"value\":\"分组1\"}],\"useOther\":\"\"},\"type\":2},\"repeatCal\":true,\"useDataBar\":false,\"showMissingTime\":false}}}],\"templateStyle\":{\"id\":\"DEFAULT\",\"theme\":\"bi-theme-default\",\"widgetGap\":1,\"templateBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleFont\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":1},\"chart\":{\"chartColor\":[\"#ffbf53\",\"#04b1c2\",\"#f07474\",\"#c55784\",\"#9a5fb3\",\"#cf62d7\",\"#5e78ea\",\"#51b3f0\",\"#69d4dc\",\"#49b788\",\"#9ccc66\",\"#ffdb03\",\"#c18c00\",\"#363636\",\"#426fb3\",\"#66bf7f\",\"#f9cd76\",\"#392884\",\"#00ae71\",\"#93aad6\",\"#490761\",\"#faf14b\",\"#955305\",\"#016241\",\"#7388c1\",\"#8f1e20\",\"#d69b01\",\"#b7b7b7\",\"#511f90\",\"#99d0b9\",\"#c7c300\"],\"font\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\"},\"gradient\":[\"#4FDEFF\",\"#439DF7\",\"#526EFA\"]},\"table\":{\"tableStyle\":1,\"themeColor\":\"#CDE1FC\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":2},\"body\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"dimFontAlign\":1,\"tarFontAlign\":3}}},\"controlTheme\":\"\"},\"filter\":{\"filterType\":34,\"filterValue\":[]},\"widgetIdValueMap\":{},\"parameter\":{},\"rowExpand\":[],\"headerExpand\":{},\"filterValues\":[],\"globalFilter\":null,\"sessionId\":\"848a8ed5-456c-48cf-bda7-3f252a4d5c27\",\"reportId\":\"ecf4554aa851409199fbf224068d0c32\"},\"95a2a6ec6d0d0ae7\":{\"type\":1,\"tableName\":\"kyligence_NULLCS_D\",\"timeStamp\":1603087280841,\"bounds\":{\"left\":0,\"top\":1243.0555555555554,\"width\":742.2222222222223,\"height\":248.61111111111111},\"name\":\"未命名组件1111\",\"viewAttr\":{\"10000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0},\"20000\":{\"type\":1,\"size\":0},\"30000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0}},\"allowOverlap\":false,\"showTitle\":true,\"mobile\":false,\"view\":{\"10000\":[],\"20000\":[],\"30000\":[\"ffbd37dd6a882c5b\"]},\"dimensions\":{\"098a57676b82a917\":{\"name\":\"NAME\",\"type\":1,\"notShowNull\":false,\"id\":\"098a57676b82a917\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"toCountType\":0,\"group\":{\"type\":2},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}},\"ffbd37dd6a882c5b\":{\"name\":\"ID\",\"type\":2,\"notShowNull\":false,\"id\":\"ffbd37dd6a882c5b\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_ID\",\"toCountType\":0,\"group\":{\"type\":3},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}}},\"page\":0,\"realData\":false,\"allData\":false,\"templateChartColorChange\":false,\"detailSetting\":false,\"settings\":{\"chartAttr\":{\"graphic\":{\"dimensionId\":\"\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":-1,\"roundRadius\":-1,\"pointRadius\":-1,\"heatRadius\":-1,\"lineWidth\":-1,\"funnelWidth\":-1,\"gaugeRadius\":-1,\"lastSliderPosition\":0},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"allowOverlap\":false,\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"},\"entire\":{\"dimensionId\":\"entire\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1,\"borderColor\":\"\",\"nonField\":{\"color\":\"\"},\"dimension\":{\"auto\":true,\"customize\":false,\"colors\":[],\"colorMap\":{}},\"measure\":{\"gradientType\":\"continuous\",\"name\":\"auto\",\"autoInterval\":true,\"count\":2,\"custom\":{\"min\":0,\"max\":0,\"ranges\":[]}},\"gauge\":{\"pointColor\":\"\",\"tickColor\":\"\",\"tickSlotColor\":\"\",\"hubColor\":\"\",\"hubBackgroundColor\":\"\",\"backgroundColor\":\"\"}},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":30,\"roundRadius\":0,\"pointRadius\":11,\"heatRadius\":40,\"square\":{\"width\":30,\"innerRadiusRatio\":0.5,\"convert2MultiPie\":false},\"lineWidth\":-1,\"text\":{\"size\":50,\"valid\":true},\"funnelWidth\":1,\"gaugeRadius\":0.7,\"pieRadius\":{\"sameRadius\":true,\"radius\":40,\"innerRadiusRatio\":0.75},\"lastSliderPosition\":-1},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"position\":\"outside\",\"showWay\":\"all\",\"allowOverlap\":false,\"autoAdjust\":\"hide\",\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"background\":\"\",\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"}},\"chartStyle\":{\"legend\":{\"enabled\":true,\"fontStyle\":{\"auto\":true,\"type\":0,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"fontColor\":\"\",\"fontBold\":false,\"bold\":false,\"italic\":false,\"fontAlign\":0},\"borderColor\":\"transparent\",\"position\":\"right\"},\"axis\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"hGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"vGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"adaptive\":{\"type\":\"standard\"}},\"tableStyle\":{\"form\":1,\"style\":0,\"themeColor\":null,\"showTitle\":false,\"freezeDim\":true,\"transmitLinkages\":false,\"expandRowHeader\":false,\"expandColHeader\":false,\"showRowSum\":true,\"showColSum\":true,\"showSequence\":false,\"textWrapper\":false,\"rowHeight\":25,\"rowCounts\":20,\"colCounts\":7,\"totalRows\":1000,\"sumRowText\":\"\",\"showChildRowSum\":true,\"showChildColSum\":true,\"headerTextWrapper\":false,\"headerRowHeight\":25,\"rowPosition\":\"bottom\",\"colPosition\":\"right\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"fontAlign\":null,\"fontColor\":null},\"body\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"dimFontAlign\":null,\"tarFontAlign\":null,\"fontColor\":null}},\"metric\":{\"show\":true,\"position\":3,\"type\":2}},\"transmitLinkages\":false,\"tableAttr\":{\"equalDivideColumn\":false,\"color\":{\"all\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]},\"ffbd37dd6a882c5b\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]}},\"shape\":{\"all\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]},\"ffbd37dd6a882c5b\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]}},\"filterValue\":{}},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleHeight\":25,\"nameStyleType\":1,\"gisBackground\":{\"show\":true,\"layer\":null,\"zoomIn\":\"放大\",\"zoomOut\":\"缩小\"}},\"linkage\":{},\"jump\":[],\"openJump\":true,\"facet\":{\"hCustomUnit\":false,\"vCustomUnit\":false,\"hUnit\":0,\"vUnit\":0,\"hCustomSize\":false,\"vCustomSize\":false,\"hSize\":0,\"vSize\":0},\"dimensionGroups\":{\"95a2a6ec6d0d0ae7_kyligence[5f]NULLCS[5f]D_NAME_2\":{\"group\":\"95a2a6ec6d0d0ae7_kyligence[5f]NULLCS[5f]D_NAME_2\",\"dimensionIds\":[\"098a57676b82a917\"]},\"95a2a6ec6d0d0ae7_kyligence[5f]NULLCS[5f]D_ID_3_0\":{\"group\":\"95a2a6ec6d0d0ae7_kyligence[5f]NULLCS[5f]D_ID_3_0\",\"dimensionIds\":[\"ffbd37dd6a882c5b\"]}},\"drillOrder\":[],\"resultFilter\":[\"098a57676b82a917\"],\"columnSize\":[],\"regionColumnSize\":[],\"uploadedImages\":[],\"wId\":\"95a2a6ec6d0d0ae7\",\"measures\":[{\"name\":\"NAME\",\"id\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"type\":16,\"geoType\":0,\"transform\":false,\"transferName\":\"NAME\",\"copied\":false,\"drilled\":false,\"group\":{\"group_2\":{\"sort\":{\"details\":[],\"type\":2},\"filter\":{\"filterValue\":{\"type\":1,\"assist\":[\"分组1\",\"\"],\"value\":[\"July\",\"分组\"]},\"targetId\":\"95a2a6ec6d0d0ae7_kyligence[5f]NULLCS[5f]D_NAME_2\",\"filterType\":1},\"customGroup\":{\"value\":{\"details\":[{\"content\":[{\"value\":\"Alice\"},{\"value\":\"B\"},{\"value\":\"Billy\"}],\"id\":\"4a8fc652fa22fbed\",\"value\":\"分组\"},{\"content\":[{\"value\":\"Bob\"},{\"value\":\"Clay\"},{\"value\":\"Dewei\"}],\"id\":\"b619db2a53785904\",\"value\":\"分组1\"}],\"useOther\":\"\"},\"type\":2},\"repeatCal\":true,\"useDataBar\":false,\"showMissingTime\":false}}}],\"templateStyle\":{\"id\":\"DEFAULT\",\"theme\":\"bi-theme-default\",\"widgetGap\":1,\"templateBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleFont\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":1},\"chart\":{\"chartColor\":[\"#ffbf53\",\"#04b1c2\",\"#f07474\",\"#c55784\",\"#9a5fb3\",\"#cf62d7\",\"#5e78ea\",\"#51b3f0\",\"#69d4dc\",\"#49b788\",\"#9ccc66\",\"#ffdb03\",\"#c18c00\",\"#363636\",\"#426fb3\",\"#66bf7f\",\"#f9cd76\",\"#392884\",\"#00ae71\",\"#93aad6\",\"#490761\",\"#faf14b\",\"#955305\",\"#016241\",\"#7388c1\",\"#8f1e20\",\"#d69b01\",\"#b7b7b7\",\"#511f90\",\"#99d0b9\",\"#c7c300\"],\"font\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\"},\"gradient\":[\"#4FDEFF\",\"#439DF7\",\"#526EFA\"]},\"table\":{\"tableStyle\":1,\"themeColor\":\"#CDE1FC\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":2},\"body\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"dimFontAlign\":1,\"tarFontAlign\":3}}},\"controlTheme\":\"\"},\"filter\":{\"filterType\":34,\"filterValue\":[]},\"widgetIdValueMap\":{},\"parameter\":{},\"rowExpand\":[],\"headerExpand\":{},\"filterValues\":[],\"globalFilter\":null,\"sessionId\":\"848a8ed5-456c-48cf-bda7-3f252a4d5c27\",\"reportId\":\"ecf4554aa851409199fbf224068d0c32\"},\"89326c80be396f6f\":{\"type\":1,\"tableName\":\"kyligence_NULLCS_D\",\"timeStamp\":1603087287453,\"bounds\":{\"left\":0,\"top\":1491.6666666666667,\"width\":742.2222222222223,\"height\":248.61111111111111},\"name\":\"未命名组件11111\",\"viewAttr\":{\"10000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0},\"20000\":{\"type\":1,\"size\":0},\"30000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0}},\"allowOverlap\":false,\"showTitle\":true,\"mobile\":false,\"view\":{\"10000\":[],\"20000\":[],\"30000\":[\"f1f9da64495a6743\"]},\"dimensions\":{\"d20986640f019197\":{\"name\":\"NAME\",\"type\":1,\"notShowNull\":false,\"id\":\"d20986640f019197\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"toCountType\":0,\"group\":{\"type\":2},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}},\"f1f9da64495a6743\":{\"name\":\"ID\",\"type\":2,\"notShowNull\":false,\"id\":\"f1f9da64495a6743\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_ID\",\"toCountType\":0,\"group\":{\"type\":3},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}}},\"page\":0,\"realData\":false,\"allData\":false,\"templateChartColorChange\":false,\"detailSetting\":false,\"settings\":{\"chartAttr\":{\"graphic\":{\"dimensionId\":\"\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":-1,\"roundRadius\":-1,\"pointRadius\":-1,\"heatRadius\":-1,\"lineWidth\":-1,\"funnelWidth\":-1,\"gaugeRadius\":-1,\"lastSliderPosition\":0},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"allowOverlap\":false,\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"},\"entire\":{\"dimensionId\":\"entire\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1,\"borderColor\":\"\",\"nonField\":{\"color\":\"\"},\"dimension\":{\"auto\":true,\"customize\":false,\"colors\":[],\"colorMap\":{}},\"measure\":{\"gradientType\":\"continuous\",\"name\":\"auto\",\"autoInterval\":true,\"count\":2,\"custom\":{\"min\":0,\"max\":0,\"ranges\":[]}},\"gauge\":{\"pointColor\":\"\",\"tickColor\":\"\",\"tickSlotColor\":\"\",\"hubColor\":\"\",\"hubBackgroundColor\":\"\",\"backgroundColor\":\"\"}},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":30,\"roundRadius\":0,\"pointRadius\":11,\"heatRadius\":40,\"square\":{\"width\":30,\"innerRadiusRatio\":0.5,\"convert2MultiPie\":false},\"lineWidth\":-1,\"text\":{\"size\":50,\"valid\":true},\"funnelWidth\":1,\"gaugeRadius\":0.7,\"pieRadius\":{\"sameRadius\":true,\"radius\":40,\"innerRadiusRatio\":0.75},\"lastSliderPosition\":-1},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"position\":\"outside\",\"showWay\":\"all\",\"allowOverlap\":false,\"autoAdjust\":\"hide\",\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"background\":\"\",\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"}},\"chartStyle\":{\"legend\":{\"enabled\":true,\"fontStyle\":{\"auto\":true,\"type\":0,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"fontColor\":\"\",\"fontBold\":false,\"bold\":false,\"italic\":false,\"fontAlign\":0},\"borderColor\":\"transparent\",\"position\":\"right\"},\"axis\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"hGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"vGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"adaptive\":{\"type\":\"standard\"}},\"tableStyle\":{\"form\":1,\"style\":0,\"themeColor\":null,\"showTitle\":false,\"freezeDim\":true,\"transmitLinkages\":false,\"expandRowHeader\":false,\"expandColHeader\":false,\"showRowSum\":true,\"showColSum\":true,\"showSequence\":false,\"textWrapper\":false,\"rowHeight\":25,\"rowCounts\":20,\"colCounts\":7,\"totalRows\":1000,\"sumRowText\":\"\",\"showChildRowSum\":true,\"showChildColSum\":true,\"headerTextWrapper\":false,\"headerRowHeight\":25,\"rowPosition\":\"bottom\",\"colPosition\":\"right\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"fontAlign\":null,\"fontColor\":null},\"body\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"dimFontAlign\":null,\"tarFontAlign\":null,\"fontColor\":null}},\"metric\":{\"show\":true,\"position\":3,\"type\":2}},\"transmitLinkages\":false,\"tableAttr\":{\"equalDivideColumn\":false,\"color\":{\"all\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]},\"f1f9da64495a6743\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]}},\"shape\":{\"all\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]},\"f1f9da64495a6743\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]}},\"filterValue\":{}},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleHeight\":25,\"nameStyleType\":1,\"gisBackground\":{\"show\":true,\"layer\":null,\"zoomIn\":\"放大\",\"zoomOut\":\"缩小\"}},\"linkage\":{},\"jump\":[],\"openJump\":true,\"facet\":{\"hCustomUnit\":false,\"vCustomUnit\":false,\"hUnit\":0,\"vUnit\":0,\"hCustomSize\":false,\"vCustomSize\":false,\"hSize\":0,\"vSize\":0},\"dimensionGroups\":{\"89326c80be396f6f_kyligence[5f]NULLCS[5f]D_NAME_2\":{\"group\":\"89326c80be396f6f_kyligence[5f]NULLCS[5f]D_NAME_2\",\"dimensionIds\":[\"d20986640f019197\"]},\"89326c80be396f6f_kyligence[5f]NULLCS[5f]D_ID_3_0\":{\"group\":\"89326c80be396f6f_kyligence[5f]NULLCS[5f]D_ID_3_0\",\"dimensionIds\":[\"f1f9da64495a6743\"]}},\"drillOrder\":[],\"resultFilter\":[\"d20986640f019197\"],\"columnSize\":[],\"regionColumnSize\":[],\"uploadedImages\":[],\"wId\":\"89326c80be396f6f\",\"measures\":[{\"name\":\"NAME\",\"id\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"type\":16,\"geoType\":0,\"transform\":false,\"transferName\":\"NAME\",\"copied\":false,\"drilled\":false,\"group\":{\"group_2\":{\"sort\":{\"details\":[],\"type\":2},\"filter\":{\"filterValue\":{\"type\":1,\"assist\":[\"分组1\",\"\"],\"value\":[\"July\",\"分组\"]},\"targetId\":\"89326c80be396f6f_kyligence[5f]NULLCS[5f]D_NAME_2\",\"filterType\":1},\"customGroup\":{\"value\":{\"details\":[{\"content\":[{\"value\":\"Alice\"},{\"value\":\"B\"},{\"value\":\"Billy\"}],\"id\":\"4a8fc652fa22fbed\",\"value\":\"分组\"},{\"content\":[{\"value\":\"Bob\"},{\"value\":\"Clay\"},{\"value\":\"Dewei\"}],\"id\":\"b619db2a53785904\",\"value\":\"分组1\"}],\"useOther\":\"\"},\"type\":2},\"repeatCal\":true,\"useDataBar\":false,\"showMissingTime\":false}}}],\"templateStyle\":{\"id\":\"DEFAULT\",\"theme\":\"bi-theme-default\",\"widgetGap\":1,\"templateBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleFont\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":1},\"chart\":{\"chartColor\":[\"#ffbf53\",\"#04b1c2\",\"#f07474\",\"#c55784\",\"#9a5fb3\",\"#cf62d7\",\"#5e78ea\",\"#51b3f0\",\"#69d4dc\",\"#49b788\",\"#9ccc66\",\"#ffdb03\",\"#c18c00\",\"#363636\",\"#426fb3\",\"#66bf7f\",\"#f9cd76\",\"#392884\",\"#00ae71\",\"#93aad6\",\"#490761\",\"#faf14b\",\"#955305\",\"#016241\",\"#7388c1\",\"#8f1e20\",\"#d69b01\",\"#b7b7b7\",\"#511f90\",\"#99d0b9\",\"#c7c300\"],\"font\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\"},\"gradient\":[\"#4FDEFF\",\"#439DF7\",\"#526EFA\"]},\"table\":{\"tableStyle\":1,\"themeColor\":\"#CDE1FC\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":2},\"body\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"dimFontAlign\":1,\"tarFontAlign\":3}}},\"controlTheme\":\"\"},\"filter\":{\"filterType\":34,\"filterValue\":[]},\"widgetIdValueMap\":{},\"parameter\":{},\"rowExpand\":[],\"headerExpand\":{},\"filterValues\":[],\"globalFilter\":null,\"sessionId\":\"848a8ed5-456c-48cf-bda7-3f252a4d5c27\",\"reportId\":\"ecf4554aa851409199fbf224068d0c32\"}}}"; + + @Test + public void testHandle(@Mocked HttpServletRequest request, @Mocked HttpServletResponse response) throws Exception { + StableManager.getContext().register(FineDashBoardServiceImpl.class); + StableManager.getContext().register(FineWidgetExecutorServiceImpl.class); + new MockUp() { + @Mock + public void check(WidgetBean widgetBean) throws FineEngineException { + } + }; + new MockUp() { + @Mock + private FineRespond handleException(Exception e) { + return FineRespond.fail(); + } + }; + new MockUp() { + @Mock + private ReportBean getReportById(String reportId) throws Exception { + return new ReportBean(); + } + }; + new MockUp() { + @Mock + public PackPluginConfig getInstance() { + return new PackPluginConfig(); + } + + public int getSqlQueryTimeout() { + return 1; + } + + public int getWidgetQueryTimeout() { + return 1; + } + + public int getReportQueryMax() { + return 3; + } + + public int getWidgetQueryMax() { + return 3; + } + }; + new Expectations(FineDashBoardUtils.class) { + { + request.getInputStream(); + result = new DelegatingServletInputStream(new ByteArrayInputStream(body.getBytes())); + + FineDashBoardUtils.getUserFromReq(request, (String) any); + result = new User(); + + FineDashBoardUtils.isMobile(request); + result = false; + + FineDashBoardUtils.getParameterFromRequest(request); + result = new Parameters.Builder().build(); + } + }; + + new PackHttpHandler().handle(request, response); + } +} \ No newline at end of file