发布日志v2.3
# 数据源
# 扩展文本导入支持的日期模式种类
文本/HTTP(API)数据源,导入时字段数据类型设置为日期之后,系统会尝试自动识别一些常用日期格式,把字符串日期转为数据库日期,其中包括:
本次更新增加了以下四种日期格式的支持,这些格式常见于Power BI、Excel等软件的国际日期数据导出。
- "EEE, MMM d, yyyy", // Thu, Dec 26, 2019
- "MMM d, yyyy", // Dec 26, 2019
- "EEEE, MMMM d, yyyy" // Thursday, December 26, 2019
- "MMMM d, yyyy", // December 26, 2019
# 数据集
# 重要 汇总表达式支持环境变量
此前,实现动态汇总指标,需要在计算字段中使用环境变量新增字段。例如:
`动态指标` = IF('${metric}' = 'count', `批次号`, `货值总金额`)
定义好动态指标
字段后,在汇总表达式中配合固定的汇总函数(如 SUM)使用。 这种方式虽然能实现一定的动态效果,但汇总函数无法随环境变量切换。
SUM(`动态指标`)
在本版本中,环境变量直接支持在汇总表达式中使用。您可以在汇总表达式中,根据环境变量的取值,动态切换聚合字段和聚合函数,例如:
IF (
'${metric}'=='count', count(`批次号`),
IF ('${metric}'=='money', sum(`货值总金额`), sum(`合同/提单量`))
)
2
3
4
在上述示例中,调整 metric
环境变量的值,即可灵活切换汇总逻辑,实现汇总函数和汇总对象字段都以传入变量变化的动态汇总指标。
# 重要 计算字段使用CTE构造
计算字段支持构造 使用CTE(WITH子查询)替代子查询,从而达到简化SQL、优化性能、方便调试的效果。
如上图所示, 右边的查询使用了 WITH
子句(也称为 Common Table Expressions, CTE),与左边的嵌套子查询相比,具有以下优势:
可读性和维护性:
- 左边的查询使用了大量的嵌套子查询,结构较为复杂,阅读和理解起来相对困难。
- 右边的查询通过
WITH
子句将复杂的查询分解成多个逻辑部分,每个部分都有一个清晰的名称(如S0
,S1
,S2
,S3
)。这使得代码更易于理解和维护。
性能优化:
- 嵌套子查询可能会导致重复计算, 尤其是当红色部分数据集定义查询较为复杂,且重复次数过多,而CTE可以避免这种重复计算,从而提高查询性能。
WITH
子句可以被数据库优化器更好地处理。它允许数据库在执行查询时进行更有效的优化,因为每个CTE可以被视为一个独立的表,数据库可以更灵活地选择执行计划。
模块化和重用性:
- 左边的嵌套子查询没有这种模块化特性,每次需要使用相同的逻辑时都需要重新编写。
- 右边的查询中,每个CTE都可以视为一个独立的模块,可以在其他查询中重用。例如,
S0
和S1
可以在其他查询中直接引用。
调试和测试:
- 对于嵌套子查询,调试和测试会更加困难,因为需要同时考虑多个层次的逻辑。
- 使用
WITH
子句时,可以单独测试每个CTE,确保每个部分的正确性后再组合成完整的查询。
减少冗余代码:
- 左边的嵌套子查询可能会导致代码冗余,尤其是在需要多次使用相同逻辑时。
- 右边的查询通过CTE减少了代码的冗余,每个逻辑部分只编写一次。
综上所述,右边使用 WITH
子句的查询在可读性、维护性、性能优化、调试等方面都优于左边的嵌套子查询。
注意
当数据库不支持CTE语法时,该特性自动退回为子查询,如: MySQL5.7
# 明细数据查询支持改写WITH子查询
同上,明细数据查询,数据集预览,计算字段查询调试也同步支持WITH子查询
# 日期维度数据补全: 支持年、月、日、周、季度的日期补全
业务场景:
在业务数据分析中,原始数据常因采集不全或系统问题导致日期断层,例如某电商平台在促销期间部分订单未及时录入,造成日销售数据缺失。若不处理,将导致趋势图出现日期跳跃、从而忽略缺失日期数据,严重影响分析准确性。
功能特点:
此次新增的日期维度补全功能,可以根据用户设定的日期最小时间粒度(年、季度、月、周、日),并生成完整连续的时间序列。系统会将缺失日期自动填充,并对空值进行合理处理(如置零或插值),确保时间轴上无断裂。
# 数据库统一函数增加DECODE函数
DECODE(expression, value, result[, value, result]…[, else])
上面数据集汇总表达式
IF (
'${metric}'=='count', count(`批次号`),
IF ('${metric}'=='money', sum(`货值总金额`), sum(`合同/提单量`))
)
2
3
4
使用DECODE函数实现如下, 避免了IF函数多重嵌套
DECODE('${metric}',
'count', count(`批次号`),
'money', sum(`货值总金额`),
sum(`合同/提单量`)
)
2
3
4
5
# 汇总表达式支持count(*)语法
# 图表
# 重要 类别轴层级显示
本版本在ECharts上用多轴方式实现了类别轴分层显示效果,有效解决了传统单层类别轴因标签过长而导致的显示不全、需旋转或间隔展示等问题。
通过将组合分类按多级结构逐层展开,类别轴得以结构化呈现,大幅缩短单层标签长度,显著提升图表的可读性与美观性。
- 支持值轴为水平轴场景
- 支持图表拆分场景
- 支持时间轴拆分场景
- 优化类别轴分割线, 仅在父级变化时显示分割线
- 除了支持柱线图之外,在箱线图、子弹图、热力图、瀑布图也实现了类别轴分层效果
- 刻度标签自适应, 智能判断刻度标签是否自动旋转或自动截断
- 当每个分类项具备足够宽度时,系统自动截断文本并显示前几位关键文字,保持标签水平排列;
- 当项目宽度较窄、密集排列时,则自动切换为倾斜或垂直旋转显示完整刻度。
- 整个过程无需手动配置,智能平衡空间利用,确保图表在不同布局下均能清晰呈现标签内容。
当然,如果您不喜欢层级化的展示效果,也可以在配置中关闭分层显示,恢复为传统的单层类别轴。
# 重要 维度按表达式排序
维度按表达式排序, 让维度按计算指标汇总排序
支持按表达式对维度进行动态排序,可基于指定的计算指标(如销售额、利润、增长率等)对维度成员进行汇总计算,并按结果自动排序。
该功能突破了维度排序只能基于维度本身排序的限制,实现数据驱动的智能排序,帮助用户快速识别关键类别,提升分析效率与可视化表达的洞察力。
- 行维度按表达式排序
- 列维度按表达式排序
# 案例1: 按行汇总排序
在最后一个行维配置自定义排序表达式
父维度有排序设置优先按父维排序
# 案例2:按列汇总排序
在最后一个列维配置自定义排序表达式
# 案例3: 父级行维按指定列指标排序
通过query函数查询排序指标集合,再汇总作为维度排序依据, 下图中对四个父区域
排序,依赖其中某一指标列进行了计算排序
const subset = query(
'利润', // 查询利润指标列
[
rowFilters(), // 当前所有的行维信息过滤器,如: `区域`='中南'过滤
eq('细分', '公司') // 查询`细分`=='公司'
]
);
sum(subset); // query返回的数组汇总求和作为区域维度的排序依据
2
3
4
5
6
7
8
# 重要 表计算/视图计算增强
- 函数树描述
- 增加窗口计算
- 表达式增加函数
- windowByColumn, windowByRow、
- getSubset,
- last_value, first_value,
- numFormat, decode
# 重要增加query函数
增加query函数可查询视图中任意条件范围的数据
query(metric, predict, includeHidden = true)
- metric: 指标字段名,
metric='指标名.raw'
返回值类型变化之前的原始数据,metric='object'
返回对象 - predict: 过滤条件对象, 使用内置的条件函数构造,
and('field', values)
, 也可以是数组[eq(..), neq(..)]
- includeHidden: 是否包含隐藏结果
- 返回数组
// 样例1: 查找视图中所有 product 等于 desk 且 sales 大于 100 的数据
query('指标名', and(eq('product', 'desk'), gt('sales', 100)))
//样例2: 第二个参数为数组则默认为数组中的条件为and关系
query('指标名', [eq('product', 'desk'), gt('sales', 100)])
2
3
4
5
- 支持返回数据对象
// 查询对象
// lodash 风格数据处理,
// 取数据对象的 '订单日期'字段
// 去重
const data = query('object', colFilters());
return _.chain(data).map('订单日期').uniq().value();
2
3
4
5
6
query
函数在行/列汇总、行/列小计、总计、值类型表达式中全面支持- 条件组合: and/or/not
- 等值: eq/ne
- 区间: gt/gte/lt/lte/between
- 字符串比较: like/notLike
- 动态维度条件: colFilters/rowFilters, 当前单元格维度信息过滤器
- 支持多种条件嵌套组合查询:
and(or(...), and(...), ...)
- 构造倒排索引(Inverted Index)优化查询性能
# 重要 交叉表之外的图形增加汇总
柱线图, 饼图, 仪表图, 环形进度条, 指标卡 支持汇总计算
# 柱线图汇总
- 列汇总: 系列中增加一个汇总项
- 行汇总: 增加汇总系列
# 饼图汇总
- 行汇总: 有列维时: 增加一个汇总类别饼图
# 环形进度条汇总
- 行汇总: 有列维时,增加一个汇总类别总进度
# 指标卡汇总
- 列汇总: 主指标显示为汇总指标
- 行汇总: 有列维时, 增加一个汇总指标卡
# 饼图汇总
细心的用户可能注意到,图表汇总中饼图增加了行汇总,以新的系列(汇总饼图)显示,为什么饼图没有列汇总?
这是因为列汇总以数据项的形式添加到系列,如果在饼图中新增数据项汇会出现半个饼图扇区显示汇总值的情况,但是为此我们单独增加了饼图汇总功能
# 交叉表
# 指标条件格式交叉比较
- 条件样式支持指标交叉比较,不仅限于指标自身
# 行维度宽度配置
# 单元格内容支持html
单元格内容支持html, 利用表达式在单元格展示多个汇总指标,并用<br>
换行连接
const predict = and(
colFilters(),
eq('类别', '技术')
);
const v1 = query('数量', predict);
const v2 = query('销售额', predict);
return ['数量:' + sum(v1), '销售额:' +
numFormat(sum(v2), '0.00') ].join('<br>');
2
3
4
5
6
7
8
9
10
# 条件格式: 柱线、排行、饼图支持条件格式
# 气泡图
# 矩形分区配置
功能背景:
在数据分析场景中,波士顿矩阵(四象限) 是常用的战略分析工具,用于分类评估业务单元、产品等。
以往,搭建此类分析往往依赖开发者模式,需用到开发者模式编写代码,对普通业务用户不友好。本次对矩形分区配置功能优化,让非技术人员也能轻松构建波士顿矩阵分析。
借助矩形分区配置,可灵活设置 X 轴(如业务增长率)、Y 轴(如市场占有率 )的统计维度(均值、中位数等)、数据映射规则,快速将数据分类到 “问题型、明星型、现金牛型、瘦狗型” 等象限,直观呈现业务布局。
# 数字标签自定义
如下图, 销售额增长率
和销售额市场占
比两个指标都是百分数,并且指标都还比较长,使用自定义数字标签组织重新组织和简化标签格式:
# 柱线图图表标记增强
# 线标记
- 增加类别轴标线并支持条件设置
- 统计范围设置: 整体、图、系列
- 整体: 所有图统一计算标线值
- 图: 以拆分的图为单位计算标线值
- 系列: 每个系列单独计算
- 统计方法支持分位数
- 线条样式配置
# 区域标记
值类型支持: 均值、中位数、分位数、常量
# 点标注
- 标记选定指标
- 配置Symbol,SymbolSize
# 系列拆分轴
系列拆分之后不再共用类别轴数据, 下图中按区域
拆分多图,每个区域中的类别轴都包含所有省, 导致拆分之后的子图失去了分组意义
新的拆分逻辑,根据拆分之后的数据,重新计算类别轴,使得每个拆分区域中仅包含对应区域的省份
# 明细表指标栏支持表头等值筛选
在早期版本中,当需要将明细数据的维度列放置在指标列之后时,必须将维度拖拽到指标栏并置于指标之后。但由于原有逻辑中,指标栏内的列默认为连续型数值,因此不支持等值过滤。
在 v2.3 中,我们优化了过滤逻辑,允许用户对指标栏中的字段执行等值过滤。 这意味着明细表的字段顺序与过滤方式将不再受数据类型限制,既能自由调整列位置,又能灵活进行条件筛选。
# 计量图Gauge仪表样式配置
- 圆环起始角度
- 指针 长度/颜色
- splitLine
- Anchor样式,边框/背景色/大小
# 区域地图-区域编辑
- 一键初始化默认的区域匹配
- 一键初始化默认的区域匹配
- 拷贝到剪贴板, 为了方便维护,支持把当前区域映射拷贝到剪贴板,然后贴入文本编辑器或Excel编辑
- 拷贝到剪贴板, 为了方便维护,支持把当前区域映射拷贝到剪贴板,然后贴入文本编辑器或Excel编辑
- 编辑好的区域映射从剪贴板批量导入
- 编辑好的区域映射从剪贴板批量导入
# 热力图
- 类别轴分层
- 支持无列维
- 轴样式配置
# 桑基图数据解析
本版本为桑基图新增多种起始节点数据解析模式,方便应对不同的数据组织结构:
- 多个行维组合 → 多个列维组合: 支持从多个行维组合映射到多个列维组合,适合跨维度的流向分析。
- 多个行维,每个行维为一层数据: 按行维层级逐层展开,适合分级结构的流向展示。
- 两个行维 = 一个行维 + 一个列维: 将两个行维解析为“起点行维 + 终点列维”的模式,适合简单的双节点流向。
# 图表其他
- 对比图两个值轴样式分开设置
- 数字格式化支持非强制显示小数配置
- [优化] 旭日图只有一层时半径过大的问题
- 值轴刻度值默认缩写
# 大屏
- 图标组件支持和图表联动事件定义
- 单选按钮组圆角配置
# 其他
- 问数知识库支持导入、导出
- [兼容] 旧版本的chrome和safari兼容,IntersectionObserver
- [安全] spring 升级5.3.39
- [安全] springboot 升级到2.5.15
- [安全] 更新tomcat驱动到9.0.106
- [安全] 更新H2驱动到2.2.220
- [安全] 更新MySQL, PostgresSQL, Presto驱动版本
# 修复
- [修复] 行小计、列小计重复格式化的问题,遇到除以一个数字之后会出现重复除的问题
- [修复] 交叉表指标样式名以数字开头时不能针对指标设置样式的问题
- [修复] LOD FIXED把换行替换为空白之后引起的语法错误
- [修复] 专题分析增加大屏之后,全屏方式导致下拉框弹窗位置不正确的问题
- [修复] 按时间线拆分之后,单项样式(ItemStyle)配置不起作用的问题