新增两个关键配置项,控制排序逻辑下沉:
以下场景可通过配置项触发排序下沉,优化性能(附 MDX 与优化后 SQL 对比):
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
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
支持维度排序与原始度量排序的组合下沉(示例略,逻辑为多条件排序组合)。
仅当 “除最后一个维度外,其他维度均设置维度排序” 时可优化;其他组合无法下沉。
以下情况排序逻辑仍需在内存执行,无法通过配置项优化:
由于数据库排序规则(如字符集、排序算法)与 Java 内存排序规则(如语言环境、空值处理)存在差异,启用配置项后可能导致排序结果与原逻辑不一致,需提前告知用户。
在报表 / 透视分析制作过程中,若存在 “先添加维度排序(触发 nativeOrderBy
),后添加计算度量排序(无法触发 nativeOrderBy
)” 的操作,可能导致:
总结:本次优化通过排序下沉显著提升多维查询性能,但需明确适用场景与限制,避免因配置启用或混合操作导致结果不一致。建议在文档中补充 “配置生效条件”“排序差异示例” 等说明,并在前端交互中增加风险提示。