包括ERP,EPM等企业软件功能中经常会包括数据报表功能,主要是通过自定义或固化条件查询数据并以报表方式呈现。本文通过对比关系型数据库SQL语法,和多维数据库MDX语法两种生成报表方式,说明数据报表生成的效率,多维数据库要远高于关系型数据库。
对比数据库类型:
关系型数据库:Oracle 11g
多维数据库:智达方通多维数据库 Intcube Booster V4.5
多维数据模型信息:
维度:科目,组织,期间,场景、版本、产品,共计6个
对比应用场景:
1、聚合计算
SQL方式:脚本字符数:6919
MDX方式:脚本字数:204
2、期间累计场景
SQL方式:脚本字符数:2260
MDX方式:脚本字符数:242
3、上年同期增长额场景
SQL方式:脚本字符数:1658
MDX方式:脚本字符数:248
4、预实增减比场景
SQL方式:脚本字符数:1628
MDX方式:脚本字符数:274
比较以上四种应用场景下的报表查询脚本,关系型数据库的SQL脚本,复杂度远高于多维数据仓库MDX脚本。脚本的可读性也是MDX更高,更易于业务人员自行维护。
以下为测试场景详情:
数据库实例
科目表,总行数:358
组织表,总行数:15
期间表,总行数:37
场景表,总行数:29
版本表,总行数:8
产品表,总行数:32
事实数据表,总行数:1000000
常见分析场景对比
一、聚合场景
分析场景描述:
备注:因篇幅原因此处截图列上只有2022年1季度及其子项
示例:
SQL实现
- 聚合查询条件:四季度+销售费用合计
- 聚合查询条件:四季度+销售费用合计子项
- 聚合查询条件:四季度子项+销售费用合计
- 聚合查询条件:四季度子项+销售费用合计子项
- 因SQL较长,此处不再列出,详细查看附录中SQL脚本case1.sql。
- 备注:如展示效果要求的层级越深,则所需的SQL越多。
MDX实现
二、期间累计场景对比
分析场景描述
示例:
SQL实现
- 查询期间2022年下有哪些子项
- 查询每个季度下的子项(此处列出其中一个季度的SQL)
- 查询事实数据
- 此场景下的例子除期间维度外只使用的一个成员,如复杂分析情况下,SQL会更加复杂。
MDX实现
三、上年同期增长额场景对比
分析场景描述
示例:
SQL实现
- 查询期间该层级的成员
- 查询[2022年]和上年[2021]的预算数据
查询结果:
MDX实现
四、预实增减比场景对比
分析场景描述
示例:
SQL实现
- 查询期间该层级的成员
- 查询[2022年]和上年[2021]的预算,实际确认数据并进行计算
查询结果:
MDX实现
总结
● MDX查询对应的是多维视图,可以轻易的实现聚合查询,且根据多维场景优化,查询效率较高;而SQL对应的是关系视图,聚合查询的复杂度高很多,且查询效率很低。
● MDX的语法更为清晰和简单,提供丰富的函数和接口,方便用户学习和使用;而SQL接口暴露的语义模型相对简单,需要面对数据库表和列,想要实现效果需复杂的SQL逻辑,学习成本较高。
● MDX的计算表达能力更加丰富,能够更好的支持复杂分析场景。
附录:case1.sql