著录项信息
专利名称 | 一种多维数据模型访问方法及装置 |
申请号 | CN201210149800.0 | 申请日期 | 2012-05-15 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2012-09-19 | 公开/公告号 | CN102682118A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0查看分类表>
|
申请人 | 北京久其软件股份有限公司 | 申请人地址 | 北京市北京经济技术开发区西环中路6号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 北京久其软件股份有限公司 | 当前权利人 | 北京久其软件股份有限公司 |
发明人 | 李纪洲;张眸;吴明星;张勇 |
代理机构 | 北京三友知识产权代理有限公司 | 代理人 | 任默闻 |
摘要
本发明提供一种多维数据模型访问方法及装置,该方法包括:接收用户输入的语句,并对所述语句进行解析;将所述语句的查询对象及查询对象过滤条件转化成查询引擎能够接收的多维数据模型查询对象;根据所述的多维数据模型查询对象查询数据仓库,生成查询结果对象。本发明具备语法错误提示功能,方便业务人员修改及书写;业务人员可以根据查询结果校验数据仓库中错误数据模型的配置是否正确;方便了用户对多维数据的访问。
一种多维数据模型访问方法及装置\n技术领域\n[0001] 本发明是关于数据查询技术,特别是关于一种多维数据模型访问方法及装置。\n背景技术\n[0002] 现有技术中,对于多维数据的访问方式,通常通过手写的方式进行查询数据。由于数据多以星型模型和雪花模型存储,查询数据效率很低,缺少业务含义,不利于从多维数据模型的角度对数据进行理解。\n[0003] 例如,通过SQL语句查询数据库中的数据表时,对于ROLAP(Relational On-Line Analytical Processing),主要是通过书写SQL语句的方式对数据进行查询。通过SQL查询多维数据模型存在的缺点是:SQL书写困难,调试困难,一个多维查询要书写很长的SQL,手工书写十分困难,需要业务人员对表之间的关系了解的十分透彻,并且要求业务人员有很强的SQL书写能力。\n[0004] 通过MDX语句对于多维数据模型进行查询时,对于MOLAP(Multidimensional On-Line Analytical Processing),主要通过书写MDX语句的方式进行查询。通过MDX查询多维数据模型存在的缺点是:对于MDX语句,虽然适用于多维数据模型查询,但语句晦涩,难于理解,通常只有专业的人员才能书写,对于普通用户和一般业务人员掌握起来难度大,学习成本高。并且MDX规范不统一,各数据库厂商实现的差异较大,没有通用性。\n[0005] 开发出一种直观快捷的方式来获取数据,以提高商业智能(Business Intelligence BI)系统调试的工作效率,提高BI系统的建设速度,已成为当务之急。\n发明内容\n[0006] 本发明提供一种多维数据模型访问方法及装置,以方便业务人员修改及书写及对多维数据的访问。\n[0007] 为了实现上述目的,本发明提供一种多维数据模型访问方法,该的方法包括:接收用户输入的语句,并对所述语句进行解析;将所述语句的查询对象及查询对象过滤条件转化成查询引擎能够接收的多维数据模型查询对象;根据所述的多维数据模型查询对象查询数据仓库,生成查询结果对象。\n[0008] 进一步地,对所述语句进行解析包括:当所述的语句包含词法错误时,对语法错误的原因及语法错误的位置进行提示;当所述的语句包含语法错误时,对查询内容、查询对象和过滤条件书写的位置错误,以及三者之间不匹配之处进行语义层面的校验,并对语义错误的原因和语义错误的位置进行提示。\n[0009] 进一步地,根据所述的多维数据模型查询对象查询数据仓库,生成查询结果对象,包括:根据所述多维数据模型查询对象的维度、度量及过滤条件信息构建内存语法树;根据所述的内存语法树生成子查询块;根据所述的子查询块生成SQL查询对象,对SQL查询对象进行拼接,生成总体的查询语句;。\n[0010] 进一步地,在根据所述的子查询块生成SQL查询对象之前,所述的方法还包括:定位所述子查询块对应的聚合表或事实表。\n[0011] 进一步地,在生成总体的查询语句之后,所述的方法还包括:生成多维数据模型查询对象对应的SQL查询语句;利用所述的SQL查询语句查询所述的数据仓库,并生成查询结果对象;将所述的查询结果对象输出。\n[0012] 为了实现上述目的,本发明提供了一种多维数据模型访问装置,该装置包括:语句解析单元,用于接收用户输入的语句,并对所述语句进行解析;查询对象构造单元,用于将所述语句的查询对象及查询对象过滤条件转化成查询引擎能够接收的多维数据模型查询对象;数据查询单元,用于根据所述的多维数据模型查询对象查询数据仓库,生成查询结果对象。\n[0013] 进一步地,所述的语句解析单元包括:词法解析模块,用于对词法错误的原因及词法错误的位置进行提示;语法解析模块,用于对查询内容、查询对象和过滤条件书写的位置错误,以及三者之间不匹配之处进行语义层面的校验,并对语义错误的原因和语义错误的位置进行提示。\n[0014] 进一步地,所述的数据查询单元包括:语法树构建模块,用于根据所述多维数据模型查询对象的维度、度量及过滤条件信息构建内存语法树;子查询块生成模块,用于根据所述的内存语法树生成子查询块;SQL查询对象生成模块,用于根据所述的子查询块生成SQL查询对象;拼接模块,用于对于SQL查询对象进行拼接,生成总体的查询语句。\n[0015] 进一步地,所述的数据查询单元还包括:表定位模块,用于定位所述子查询块对应的聚合表或事实表。\n[0016] 进一步地,所述的数据查询单元还包括:语句生成模块,用于生成多维数据模型查询对象对应的SQL查询语句;查询模块,用于利用所述的SQL查询语句查询所述的数据仓库,并生成查询结果对象;查询结果生成模块,用于将所述的查询结果对象输出。\n[0017] 本发明实施例的有益效果在于,本发明具备语法错误提示功能,方便业务人员修改及书写;业务人员可以根据查询结果校验数据仓库中错误数据模型的配置是否正确;方便了用户对多维数据的访问。\n附图说明\n[0018] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。\n[0019] 图1为本发明实施例多维数据模型访问方法流程图;\n[0020] 图2为本发明实施例步骤S103的流程图;\n[0021] 图3为本发明实施例内存语法树的构建示意图;\n[0022] 图4为本发明实施例分析语法树及生成子查询块的示意图;\n[0023] 图5为本发明实施例定位聚合表并生成SQL查询对象的示意图;\n[0024] 图6为本发明实施例拼接子查询块的示意图;\n[0025] 图7为本发明实施例的查询处理流程图;\n[0026] 图8为本发明实施例多维数据模型访问装置的结构示意图;\n[0027] 图9为本发明实施例输出给用户的查询结果示意图。\n具体实施方式\n[0028] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。\n[0029] 本发明提供一种面向多维数据模型的查询方案,使得实施人员可以将更加精力更多的放在业务分析上,而减少实施人员对于查询语句的学习成本。\n[0030] 语句的整体结构包括查询的内容、查询对象和过滤条件,包括select子句,from子句,filter子句和where子句。\n[0031] 语句结构如下所示:\n[0032] select 查询内容1,查询内容2,…\n[0033] from 查询对象1,查询对象2,…\n[0034] [filter维度过滤条件1,维度过滤条件2,…]\n[0035] [where 综合过滤条件1,综合过滤条件2,…]\n[0036] 每条查询语句中必须包含select子句和from子句,而filter子句和where子句为可选内容。\n[0037] select子句中的查询内容包括:维度,度量和表达式。\n[0038] from子句中的查询对象包括:所要查询的多维数据模型对象。\n[0039] filter子句中过滤条件包括只对维度进行限度的过滤条件。\n[0040] where子句中综合过滤条件包括对维度、度量、指标都可以进行限定的过滤条件。\n[0041] 实施例一\n[0042] 如图1所示,本实施例提供一种多维数据模型访问方法,该方法包括:\n[0043] 步骤S101:接收用户输入的语句,并对所述语句进行解析。\n[0044] 在步骤S101中,对所述语句进行解析包括:词法解析步骤及语法解析步骤。当所述的语句包含词法时,对语法错误的原因及语法错误的位置进行提示;当所述的语句包含语法错误时,对查询内容、查询对象和过滤条件书写的位置错误,以及三者之间不匹配之处进行语义层面的校验,并对语义错误的原因和语义错误的位置进行提示。\n[0045] 步骤S102:将所述语句的查询对象及查询对象过滤条件转化成数据查询引擎能够接收的多维数据模型查询对象。语句的查询对象包括维度、度量及指标等信息。\n[0046] 步骤S103:数据查询引擎根据所述的多维数据模型查询对象查询数据仓库,生成查询结果对象。\n[0047] 步骤S103是实现本发明的核心步骤,如图2所示,步骤S103包括:\n[0048] 步骤S201:分析所述多维数据模型查询对象,根据所述多维数据模型查询对象的维度、度量及过滤条件信息构建内存语法树。\n[0049] 步骤S201的具体实施过程如图3所示,多维数据模型查询对象的核心是由维度和度量构成,构建内存语法树主要处理度量部分的解析,通过公式解析引擎将表达式解析为内存语法树结构,公式引擎为独立组件。\n[0050] 步骤S202:分析上述内存语法树,根据所述的内存语法树生成子查询块。\n[0051] 步骤S202的具体实施过程如图4所示,语法树分析处理基于小粒度的语法节点进行处理,将度量值的各语法节点分拆到不同的子查询块中,形成多个独立的子查询块。\n[0052] 步骤S203:根据所述的子查询块生成SQL查询对象。\n[0053] 步骤S203的具体实施过程如图5所示,在根据所述的子查询块生成SQL查询对象之前,首先要定位所述子查询块对应的聚合表或事实表,然后生成子查询SQL的内存对象。\n图5中左侧为查询块对象,右侧为内存查询对象。\n[0054] 步骤S204:对SQL查询对象进行拼接,生成总体的查询语句。\n[0055] 图6为内存查询对象拼接生成对应查询语句的示意图;步骤S204的具体实施过程如图6所示,首先将各个子查询模块的SQL对象进行关联,然后根据语法表达式生成查询字段或计算表达式,最后追加过滤和排序条件。\n[0056] 完成上述操作之后,生成多维数据模型查询对象对应的SQL查询语句;然后执行查询,利用所述的SQL查询语句查询所述的数据仓库,并生成查询结果对象;最后,将所述的查询结果对象输出,将获取的查询结果封装后返回给查询的请求者(用户)。\n[0057] 图7为本发明的查询处理流程图,如图7所示,本发明的查询处理流程包括:\n[0058] 步骤S701:用户输入查询语句。\n[0059] 步骤S702:判断输入是否结束。如果输入结束,进行步骤S703,否则进行步骤S704。\n[0060] 步骤S703:解析查询语句。\n[0061] 步骤S704:进行语法校验内容提示。\n[0062] 步骤S705:构造查询对象,将所述语句的查询对象及查询对象过滤条件转化成数据查询引擎能够接收的多维数据模型查询对象。\n[0063] 步骤S706:查询数据。数据查询引擎根据所述的多维数据模型查询对象查询数据仓库,生成查询结果对象。\n[0064] 步骤S707:获取结果表格展示,及将查询结果输出给用户进行展示。\n[0065] 本发明应用了ANTLR元语言技术工具,实现对于语言的词法和语法的定义。注:\nANTLR(ANother Tool for Language Recognition)它是Java开发的语法分析工具,它可以接受词文法语言描述,并能产生识别这些语言的语句的程序。\n[0066] 在数据仓库建模平台中,打开语言查询编辑器,在编辑器中书写查询语句,在书写语句的过程中,系统提供了内容提示,语法错误提示的功能,方便业务人员书写语句。如实施人员可以书写如下语句对于多维数据集中的对象进行查询。select\n[0067] [DIM_SJ][ND],[DIM_CP][MC],[DIM_DY][MC],\n[0068] [Measures][FACT_SR],[Measures][FACT_CB]from\n[0069] [CUBE_XS]filter\n[0070] [DIM_SJ][ND]=”2009”or[DIM_SJ][ND]=”2008”,[DIM_CP][MC]=”显示器”where[0071] [DIM_DY][MC]=”北京”and[Measures][FACT_SR]>100\n[0072] 其中[DIM_SJ][ND]表示年度维属性,[DIM_CP][MC]表示产品名称维属性,[DIM_DY][MC]表示地域名称维属性,[Measures][FACT_SR]表示收入度量,[Measures][FACT_CB]表示成本度量,[CUBE_XS]表示销售多维数据集。\n[0073] 此语句表示对于销售多维数据集,查询年度、产品名称、收入金额和支出成本信息,年度为“2008”年、“2009”年,产品名称为“显示器”,地域名称为“北京”并且收入大于\n100。\n[0074] 用户书写完语句后,点击建模平台中的语句执行按钮以执行语句。如果语句出现错误,系统会弹出错误提示对话框,提示错误产生的原因和位置,以帮助业务人员修改正确。对于简单的词法错误,系统会直接在语句的错误的位置添加红色下划线。如果语句正确,则会在编辑器的下方显示表格,表格中展示语句查询的数据结果集。\n[0075] 业务人员可以根据查询语句返回的结果,来校验数据仓库中多维模型的配置是否正确。\n[0076] 实施例二\n[0077] 如图8所示,本实施例提供一种多维数据模型访问装置,该多维数据模型访问装置包括:语句解析单元801,查询对象构造单元802及数据查询单元803。\n[0078] 语句解析单元801用于接收用户输入的语句,并对所述语句进行解析。语句解析单元包括:词法解析模块804及语法解析模块805。\n[0079] 当所述的语句包含词法时,词法解析模块804对词法错误的原因及词法错误的位置进行提示,如维度、度量的书写是否符合规则;当所述的语句包含语法错误时,语法解析模块805对查询内容、查询对象和过滤条件书写的位置错误,以及三者之间不匹配之处进行语义层面的校验,并对语义错误的原因和语义错误的位置进行提示。\n[0080] 查询对象构造单元802用于将所述语句的查询对象及查询对象过滤条件转化成查询引擎能够接收的多维数据模型查询对象,语句的查询对象包括维度、度量及指标等信息。查询对象构造单元802可以报考查询项构造模块814及过滤条件构造模块815。\n[0081] 数据查询单元803用于根据所述的多维数据模型查询对象查询数据仓库,生成查询结果对象。\n[0082] 数据查询单元803为访问多维数据模型的核心单元,实现所有的查询分析及执行逻辑。如图8所示,数据查询单元803包括:语法树构建模块806,子查询块生成模块807,SQL查询对象生成模块808、拼接模块809及表定位模块810。\n[0083] 语法树构建模块806用于根据所述多维数据模型查询对象的维度、度量及过滤条件信息构建内存语法树。语法树构建模块806的具体实施如图3所示,多维数据模型查询对象的核心是由维度和度量构成,语法树构建模块806构建内存语法树主要处理度量部分的解析,通过公式解析引擎将表达式解析为内存语法树结构。\n[0084] 子查询块生成模块807用于根据所述的内存语法树生成子查询块,子查询块生成模块807的具体实施如图4所示,语法树分析处理基于小粒度的语法节点进行处理,子查询块生成模块807将度量值的各语法节点分拆到不同的子查询块中,形成多个独立的子查询块。\n[0085] SQL查询对象生成模块808用于根据所述的子查询块生成SQL查询对象,表定位模块810用于定位所述子查询块对应的聚合表或事实。SQL查询对象生成模块808及表定位模块810的具体实施如图5所示,表定位模块810首先要定位所述子查询块对应的聚合表或事实表,然后SQL查询对象生成模块808生成子查询SQL的内存对象。\n[0086] 拼接模块809用于对于SQL查询对象进行拼接,生成总体的查询语句。拼接模块\n809的具体实施如图6所示,拼接模块809首先将各个子查询模块的SQL对象进行关联,然后根据语法表达式生成查询字段或计算表达式,最后追加过滤和排序条件。\n[0087] 数据查询单元803还包括:语句生成模块811,查询模块812及查询结果生成模块\n813。\n[0088] 在拼接模块809完成上述操作之后,语句生成模块811生成多维数据模型查询对象对应的SQL查询语句,查询模块812利用所述的SQL查询语句查询所述的数据仓库,并生成查询结果对象,查询结果生成模块813将所述的查询结果对象输出给用户。图9为输出给用户的查询结果。\n[0089] 本发明实施例的有益效果在于,本发明具备语法错误提示功能,方便业务人员修改及书写;业务人员可以根据查询结果校验数据仓库中错误数据模型的配置是否正确;方便了用户对多维数据的访问。\n[0090] 以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
法律信息
- 2015-02-04
- 2012-11-14
实质审查的生效
IPC(主分类): G06F 17/30
专利申请号: 201210149800.0
申请日: 2012.05.15
- 2012-09-19
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2009-03-11
|
2008-10-24
| | |
2
| |
2012-04-25
|
2012-01-13
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |