1 背景
2 配置项说明
新增两个关键配置项,控制排序逻辑下沉:
3 可优化场景及示例
以下场景可通过配置项触发排序下沉,优化性能(附 MDX 与优化后 SQL 对比):
1. 纯维度排序优化
MDX 示例:
sql
select [Measures].[Store Sales] on columns,
non empty nonemptysubset( orderex(
nonemptycrossjoin( nonemptycrossjoin( [部门].members, [行业].members), [收入类型].members)
, [行业].currentMember.caption, desc
), 0, 100 )
on rows from [cube]
优化后 SQL:
sql
select 部门, 行业, 收入类型 from ...... group by 部门, 行业, 收入类型
order by 部门 desc, 行业 desc, 收入类型 asc limit 100
2. 原始度量全局排序优化
MDX 示例:
sql
select [Measures].[Store Sales] on columns,
non empty nonemptysubset( orderex(
nonemptycrossjoin( nonemptycrossjoin( [部门].members, [行业].members), [收入类型].members)
, [Measures].[Store Sales], bdesc
), 0, 100 )
on rows from [cube]
优化后 SQL:
sql
select 部门, 行业, 收入类型, sum(Store Sales) from ...... group by 部门, 行业, 收入类型
order by sum(Store Sales) desc, 部门 asc, 行业 asc, 收入类型 asc limit 100
3. 维度排序与原始度量全局排序组合优化
支持维度排序与原始度量排序的组合下沉(示例略,逻辑为多条件排序组合)。
4. 维度排序与度量组内排序组合优化(有限条件)
仅当 “除最后一个维度外,其他维度均设置维度排序” 时可优化;其他组合无法下沉。
四、无法优化的场景
以下情况排序逻辑仍需在内存执行,无法通过配置项优化:
五、排序结果差异说明
由于数据库排序规则(如字符集、排序算法)与 Java 内存排序规则(如语言环境、空值处理)存在差异,启用配置项后可能导致排序结果与原逻辑不一致,需提前告知用户。
六、特别注意:混合排序的不一致风险
在报表 / 透视分析制作过程中,若存在 “先添加维度排序(触发 nativeOrderBy
),后添加计算度量排序(无法触发 nativeOrderBy
)” 的操作,可能导致:
总结:本次优化通过排序下沉显著提升多维查询性能,但需明确适用场景与限制,避免因配置启用或混合操作导致结果不一致。建议在文档中补充 “配置生效条件”“排序差异示例” 等说明,并在前端交互中增加风险提示。