一种报表展现方法和装置与流程

文档序号:16628539发布日期:2019-01-16 06:20阅读:158来源:国知局
本发明涉及数据处理
技术领域
:,特别涉及一种报表展现方法和装置。
背景技术
::报表就是用表格、图表等格式来显示数据。随着计算机的出现,通过计算机处理数据和界面设计的功能来生成、展示报表成为可能,大量的数据处理需求,催生了许多报表软件,报表软件的主要特点是数据动态化,格式多样化,并且实现报表数据和报表格式的完全分离,表头样式和数据都是事先固定好的,只有报表的内容是动态数据,用户可以只修改数据或者只修改格式。现有的报表软件所提供的表头样式都是固定的,使得报表软件在制作表头的过程中如果会涉及合并行、合并列操作时对制作报表用户的技术能力要求较高,只适合专业人员来操作,使用场合受限。技术实现要素:基于本发明的一个目的,本发明提供了一种报表展现方法和装置,以解决报表表头固定带来的报表软件使用场合受限的问题。为达到上述目的,本发明的技术方案是这样实现的:一方面,本发明提供了一种报表展现方法,该方法包括:接收查询请求,所述查询请求携带报表单据号信息;根据所述报表单据号信息在报表数据库中动态拼写sql语句,得到sql查询语句,所述报表数据库中注册有sql语句,每条sql语句对应一报表单据号;根据所述sql查询语句在所述报表数据库中查询相应的结果集,以及根据所述sql查询语句对应的列属性值生成报表的基础表头,该基础表头对应的列属性值可被拖动,生成对应的子表头;对所述结果集中的数据按照生成的表头在所述报表中进行数据展现,所述生成的表头包括基础表头和由列属性值被拖动生成的子表头。另一方面,本发明提供了一种报表展现装置,该装置包括:接收单元,用于接收查询请求,所述查询请求携带报表单据号信息;拼写单元,用于根据所述报表单据号信息在报表数据库中动态拼写sql语句,得到sql查询语句,所述报表数据库中注册有sql语句,每条sql语句对应一报表单据号;创建单元,用于根据所述sql查询语句在所述报表数据库中查询相应的结果集,以及根据所述sql查询语句对应的列属性值生成报表的基础表头,该基础表头对应的列属性值可被拖动,生成对应的子表头;展现单元,用于对所述结果集中的数据按照生成的表头在所述报表中进行数据展现,所述生成的表头包括基础表头和由列属性值被拖动生成的子表头。本发明的有益效果是:本发明在报表数据库中注册sql语句,以根据查询请求携带的报表单据号动态拼写sql查询语句,达到sql语句拼写最优效果,无需每种情况都设计一种sql语句进行查询;并且本发明通过对sql语句查询到的结果集中的数据装载到表头的列属性值可被拖动的报表中,通过拖动操作可生成基础表头的子表头,进而可以动态地改变报表的表头结构,形成对应每个子表头的子报表,使得每个子报表展现相应的数据。本发明的报表展现方法和装置通过对数据进行统计展现和加工处理,只需查询一次数据库,且通过加单的拖拽操作即可对基础表头对应的报表数据进行分组统计,报表数据展现形式新颖,且操作简单,符合用户习惯,适用面广。附图说明图1为本发明实施例提供的报表展现方法流程图;图2为本发明实施例提供的多级报表示意图;图3为本发明实施例提供的报表展现装置结构框图。具体实施方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。图1为本发明实施例提供的报表展现方法流程图,如图1所示,本实施例的方法包括:s100,接收查询请求,该查询请求携带报表单据号信息。s110,根据报表单据号信息在报表数据库中动态拼写sql语句,得到sql查询语句,该报表数据库中注册有sql语句,每条sql语句对应一报表单据号。其中,本实施例的报表数据库为支持sql查询的数据库。s120,根据sql查询语句在报表数据库中查询相应的结果集,以及根据sql查询语句对应的列属性值生成报表的基础表头,该基础表头对应的列属性值可被拖动,生成对应的子表头。本实施例所述的“基础表头对应的列属性值可被拖动”可以理解为:可以对基础表头中的每个列属性值进行拖动操作,如将基础表头中的列属性值拖出该基础表头,生成相应的子表头,或将拖出的列属性值拖回到该基础表头中,通过拖动基础表头的列属性值达到动态更新基础表头的目的,从而生成相应的报表数据。s130,对结果集中的数据按照生成的表头在报表中进行数据展现,所述生成的表头包括基础表头和由列属性值被拖动生成的子表头。示例性地,若基础表头中的列属性值一直未被拖动,或者基础表头中的列属性值被拖出后又被拖回到基础表头中,步骤s130应理解为:对结果集中的数据按照基础表头在报表中进行数据展现。若基础表头中的列数值被拖动,如某些(某个)列属性值被拖出,或者,基础表头中的某些(或某个)列属性值被拖出,其他列属性值被拖回到基础表头中,步骤s130应理解为:对结果集中的数据按照生成的子表头在报表中进行数据展现。本实施例在报表数据库中注册sql语句,以根据查询请求携带的报表单据号动态拼写sql查询语句,达到sql语句拼写最优效果,无需每种情况都设计一种sql语句进行查询;并且本实施例通过对sql语句查询到的结果集中的数据装载到表头的列属性值可被拖动的报表中,通过拖动操作可生成基础表头的子表头,进而可以动态地改变报表的表头结构,形成对应每个子表头的子报表,使得每个子报表展现相应的数据。本实施例的报表展现方法通过对数据进行统计展现和加工处理,只需查询一次数据库,且通过加单的拖拽操作即可对基础表头对应的报表数据进行分组统计,报表数据展现形式新颖,且操作简单,符合用户习惯,适用面广。在本发明的一个实施例中,通过下述方法在报表数据库中注册sql语句:将预先写好的sql语句按照select字段、from字段、where字段和groupby字段进行拆分,并将拆分的数据保存到对应的四张excel表中,该四张excel表通过报表单据号关联,并分别对应于报表数据库中的主表、子表、关系表和查询条件表;将每张excel表对应的数据导入到报表数据库相应的表中。实际应用中,二次开发人员预先写一个大而全的统计报表的sql语句,将所写的sql语句拆分到相应的excel表中,该四张excel表通过报表单据号关联,并且分别报表数据库中的主表(fx_reportconfiggroupmain)、子表(fx_reportconfigcolsub)、关系表(fx_fxconrelationship)和查询条件表(fx_confrepgroupwhere),可以使用jstl工具将每张excel表对应的数据导入到报表数据库相应的表中,完成sql语句的注册,后续根据用户选择的查询字段和分组字段,将相应的字段封装成sql查询语句进行数据查询。在本发明的一个实施例中,在根据sql查询语句对应的列属性值生成报表的基础表头后,图1中的方法还包括:接收对基础表头的列属性值进行拖动的拖动请求,该拖动请求携带被拖动的列属性值和列属性值的拖动方向;根据被拖动的列属性值和列属性值的拖动方向,在报表中生成对应拖动请求的报表。其中,拖动请求可以携带一个或多个被拖动的列属性值,拖动请求中携带的列属性值的拖动方向包括从基础表头中拖出和拖回到基础表头中。在列属性值的拖动方向为从基础表头中拖出时,判断是否存在被拖出其他列属性值,若不存在被拖出的其他列属性值,则基于基础表头以列属性值作为分组字段创建下级表头,并以创建的下级表头生成覆盖报表的子报表;若存在被拖出的其他列属性值,则合并被拖出的列属性值,得到合并后的列属性值,基于基础表头以合并后的列属性值作为分组字段创建下级表头,并以创建的下级表头生成覆盖报表的子报表;在列属性值的拖动方向为拖回到基础表头中时,判断是否存在被拖出的其他列属性值,若不存在被拖出的其他列属性值,则生成基础表头对应的报表;若存在被拖出的其他列属性值,合并已被拖出的列属性值,得到合并后的列属性值,基于基础表头以合并后的列属性值作为分组字段创建下级表头,并以创建的下级表头生成覆盖所述报表的子报表。示例性的,结合图2说明拖动基础表头的列属性值生成子报表的详细过程。如图2所示,图2中的基础表头包括:“分类名称(categoryname)”、“产品名称(productname)”、“产品销售价格(productsales)”、“发货日期(shippeddate)”、“年(year)”、“四等分(quarter)”、“月(month)”和“周(week)”等列属性值。图2中示例性示出,将“分类名称”和“产品名称”从基础表头中拖出,图2示例性地示出将这两个列属性值拖到表头上方的空白处。需要说明的是,在用户通过拖动基础表头的列属性值生成拖动请求时,需要根据列属性值的拖动顺序依次生成报表。假设,先将“分类名称”从基础表头中拖出,再将“产品名称”从基础表头中拖出,此时,先将“分类名称”作为分组字段对基础表头对应的报表数据进行统计,生成一级子报表,然后将“产品名称”和“分类名称”合并,将合并后的“产品名称+分类名称”作为分组字段对基础表头对应的报表数据进行统计,生成二级子报表。需要注意的是,图2中的一级子报表已经被二级子报表覆盖。图2示例性地用树形标识“-”表示每级子报表,其中位于表格最左侧的树形标识“-”为一级子报表标识,位于表格次左侧的树形标识“-”为二级子报表标识,依此标识每级子报表。假设,用户在先将“分类名称”从基础表头中拖出,再将“产品名称”从基础表头中拖出,在生成了图2所示的报表并进行展示后,用户又将“产品名称”拖回到基础表头中,此时,展现的报表为一子级报表。具体的,在用户将“产品名称”拖回到基础表头中时,由于报表中还存在被拖出的列属性值“分类名称”,此时将“分类名称”作为分组字段对基础表头对应的报表数据进行统计,生成一级子报表,进行一级子报表的数据展现。在实际应用中,可以使用corejavaswing来实现上述报表展现方法,利用统一的父类来处理各种报表的展现。示例性的,可以使用报表子类,如报表父类deliverycountui(该报表子类为报表嵌套类reportnestedui等抽象类的报表父类),根据报表单据号来抽取用于准备拼写sql语句的四个对象值vo,即主表对象值reportconfiggroupmainvo、子表对象值reportconfigcolsubvo、关系表对象值fxconrelationshipvo和查询条件对象值confrepgroupwherevo,此事会利用报表工具jtable初始化一个表格供用户显示,但初始化的该表格此时显示的列为所有预显示列的大全集。当用户点击如图2中的查询按钮的时候,会弹出如查询框供用户选择分组列及查询条件列,在用户确定分组列和查询条件列后,reportnestedui父类使用数据加载方法constructgrouptable响应用户的查询请求,将查询到的结果集数据装载到分组表grouptable表格中,本实施例预先设置grouptable表格的模板model,即通过对分组表模板aggregategrouptablemodel表结构进行定义,使该表格的列名(即列属性值)可被拖动。在基础表头中的每个列名被拖动时都都会触发aggregategrouptablemodel调用分组执行方法groupexecute,以获取拖动请求携带的分组字段,基于获取的分组字段对基础表头对应的报表数据进行统计分组,得到该拖动请求对应的子报表。当然,可以如图2所示,在报表中加入合计功能,对数据进行合计,也可以设置打印、excel导出、刷新、调整列宽、设置图标等功能。与上述方法实施例相对应的,本发明还提供了一种报表展现装置实施例。图3为本发明实施例提供的报表展现装置结构框图,如图3所示,该装置包括接收单元31、拼写单元32、创建单元33和展现单元34;接收单元31,用于接收查询请求,该查询请求携带报表单据号信息;拼写单元32,用于根据报表单据号信息在报表数据库中动态拼写sql语句,得到sql查询语句,该报表数据库中注册有sql语句,每条sql语句对应一报表单据号;创建单元33,用于根据所述sql查询语句在所述报表数据库中查询相应的结果集,以及根据所述sql查询语句对应的列属性值生成报表的基础表头,该基础表头对应的列属性值可被拖动,生成对应的子表头;展现单元34,用于对结果集中的数据按照生成的表头在所述报表中进行数据展现,所述生成的表头包括基础表头和由列属性值被拖动生成的子表头。本实施例优选地,图3中的装置还包括注册导入单元;该注册导入单元,用于将预先写好的sql语句按照select字段、from字段、where字段和groupby字段进行拆分,并将拆分的数据保存到对应的四张excel表中,该四张excel表通过报表单据号关联,并分别对应于报表数据库中的主表、子表、关系表和查询条件表;将每张excel表对应的数据导入到所述报表数据库相应的表中。本实施例中的查询请求还携带查询条件信息和分组条件信息;则拼写单元32,还用于根据报表单据号信息抽取用于拼写sql查询语句的四个对象值;根据查询条件信息和分组条件信息调用语句查询方法getsql,基于所述四个对象值拼写该查询请求对应的sql查询语句。在本实施例的一个实现方案中,接收单元31,用于接收对基础表头的列属性值进行拖动的拖动请求,该拖动请求携带被拖动的列属性值和列属性值的拖动方向;创建单元33,用于根据被拖动的列属性值和列属性值的拖动方向,在报表中生成对应拖动请求的报表。在本实现方案中,图3中的装置还包括判断单元,用于在接收单元31接收到拖动请求时,判断是否存在被拖出其他列属性值;相应的,创建单元33,用于在列属性值的拖动方向为从基础表头中拖出,且判断单元判断不存在被拖出的其他列属性值时,基于基础表头以列属性值作为分组字段创建下级表头,并以创建的下级表头生成覆盖报表的子报表;在列属性值的拖动方向为从基础表头中拖出,且判断单元判断存在被拖出的其他列属性值时,合并被拖出的列属性值,得到合并后的列属性值,基于基础表头以合并后的列属性值作为分组字段创建下级表头,并以创建的下级表头生成覆盖报表的子报表;以及,在列属性值的拖动方向为拖回到基础表头中,且判断单元判断不存在被拖出的其他列属性值时,生成基础表头对应的报表;在列属性值的拖动方向为拖回到基础表头中,且判断单元判断存在被拖出的其他列属性值时,合并已被拖出的列属性值,得到合并后的列属性值,基于基础表头以合并后的列属性值作为分组字段创建下级表头,并以创建的下级表头生成覆盖报表的子报表。本发明装置实施例的各单元的具体工作方式可以参见本发明的方法实施例,在此不再赘述。为了便于清楚描述本发明实施例的技术方案,在发明的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分,本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定。以上所述,仅为本发明的具体实施方式,在本发明的上述教导下,本领域技术人员可以在上述实施例的基础上进行其他的改进或变形。本领域技术人员应该明白,上述的具体描述只是更好的解释本发明的目的,本发明的保护范围应以权利要求的保护范围为准。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1