CN112434018B - 报表生成方法、装置、计算机设备和存储介质 - Google Patents

报表生成方法、装置、计算机设备和存储介质 Download PDF

Info

Publication number
CN112434018B
CN112434018B CN202011137858.4A CN202011137858A CN112434018B CN 112434018 B CN112434018 B CN 112434018B CN 202011137858 A CN202011137858 A CN 202011137858A CN 112434018 B CN112434018 B CN 112434018B
Authority
CN
China
Prior art keywords
query
data
formula
memory database
formulas
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202011137858.4A
Other languages
English (en)
Other versions
CN112434018A (zh
Inventor
王凯亮
陈创胜
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Jindiyun Technology Co ltd
Original Assignee
Jindiyun Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Jindiyun Technology Co ltd filed Critical Jindiyun Technology Co ltd
Priority to CN202011137858.4A priority Critical patent/CN112434018B/zh
Publication of CN112434018A publication Critical patent/CN112434018A/zh
Application granted granted Critical
Publication of CN112434018B publication Critical patent/CN112434018B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/215Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请涉及一种报表生成方法、装置、计算机设备和存储介质。所述方法包括:从初始的报表控件中提取取数公式;根据所述取数公式从后台数据库中查询数据;根据查询的数据的数据结构,构建内存数据库,并导入查询的所述数据至所述内存数据库中;根据所述取数公式中的查询参数,对所述内存数据库创建索引;通过所述索引,在所述内存数据库中取出所述取数公式中的查询参数所对应的数据,并基于取出的所述数据进行计算;把对应于所述取数公式的计算结果赋值给所述报表控件,生成报表。采用本方法能够提高在报表生成过程中的计算性能。

Description

报表生成方法、装置、计算机设备和存储介质
技术领域
本申请涉及计算机技术领域,特别是涉及一种报表生成方法、装置、计算机设备和存储介质。
背景技术
随着计算机技术的发展,大数据时代到来,在很多场景中都会涉及到从数据库获取数据并在内存计算后将数据结果显示到报表中。比如,在财务管理方面,从数据库中获取数据,再通过内存中临时保存数据的网格虚拟表技术(DataTable)对数据进行过滤后即完成报表数据的取数。
然而,从数据库获取的数据放到DataTable之后,每个报表公式再从DataTable里面计算结果,然而,使用DataTable计算的时候性能比较差,通常不能够满足实际工作需求。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高计算性能的报表生成方法、装置、计算机设备和存储介质。
一种报表生成方法,所述方法包括:
从初始的报表控件中提取取数公式;
根据所述取数公式从后台数据库中查询数据;
根据查询的数据的数据结构,构建内存数据库,并导入查询的所述数据至所述内存数据库中;
根据所述取数公式中的查询参数,对所述内存数据库创建索引;
通过所述索引,在所述内存数据库中取出所述取数公式中的查询参数所对应的数据,并基于取出的所述数据进行计算;
把对应于所述取数公式的计算结果赋值给所述报表控件,生成报表。
在其中一个实施例中,所述根据所述取数公式从后台数据库中查询数据,包括:
当提取的所述取数公式为多个时,对所述多个公式进行分组;
分别将同组取数公式中的查询参数进行合并,得到各组取数公式分别对应的查询参数集合;
分别根据各所述查询参数集合,从后台数据库中查询数据。
在其中一个实施例中,所述分别根据各所述查询参数集合,从后台数据库中查询数据,包括:
根据同一所述查询参数集合中的查询参数,生成查询语句;
根据所述查询语句,从后台数据库中查询数据。
在其中一个实施例中,所述分别将同组取数公式中的查询参数进行合并,得到各组取数公式分别对应的查询参数集合,包括:
针对同组取数公式中同一类型的多个查询参数,当所述多个查询参数满足接近条件时,则根据所述查询参数中的最小查询参数和最大查询参数,生成对应的范围取数条件。
在其中一个实施例中,所述通过所述索引,在所述内存数据库中取出所述取数公式中的查询参数所对应的数据,并基于取出的所述数据进行计算,包括:
当提取的取数公式为多个时,分别将每个取数公式中的查询参数拼接生成过滤条件;
根据所述索引和每个取数公式所对应的所述过滤条件,从所述内存数据库中取出每个所述取数公式所对应的数据;
基于取出的所述数据进行计算,得到每个取数公式对应的计算结果。
在其中一个实施例中,所述基于取出的所述数据进行计算,包括:
基于取出的所述数据进行计算,生成数据字典;所述数据字典中的键,是由所述取数公式的名称和所述取数公式中的查询参数组成的字符串,所述数据字典中的值,是所述取数公式的计算结果;
所述把对应于所述取数公式的计算结果赋值给所述报表控件,生成报表,包括:
按照所述数据字典中的键确定所述报表控件中相应的取数公式,并根据所述数据字典中的值,将所述计算结果赋值给报表控件中所确定的所述取数公式。
在其中一个实施例中,所述通过所述索引,在所述内存数据库中取出所述取数公式中的查询参数所对应的数据,包括:
根据所述取数公式中的查询参数构建查询表达式;
当所述内存数据库中已缓存与所述查询表达式匹配的执行计划时,则
根据所述已缓存的匹配的执行计划和所述索引,在所述内存数据库中取出所述取数公式中的查询参数所对应的数据。
在其中一个实施例中,所述通过所述索引,在所述内存数据库中取出所述取数公式中的查询参数所对应的数据还包括:
当所述内存数据库中未缓存与所述查询表达式匹配的执行计划时,则
通过所述内存数据库对所述查询表达式进行编译解析,生成执行计划,并将所述执行计划进行缓存;
按照所述索引和生成的所述执行计划,在所述内存数据库中取出所述取数公式中的查询参数所对应的数据。
一种报表生成装置,所述装置包括:
提取模块,用于从初始的报表控件中提取取数公式;
查询模块,用于根据所述取数公式从后台数据库中查询数据;
构建模块,用于根据查询的数据的数据结构,构建内存数据库,并导入查询的所述数据至所述内存数据库中;
创建模块,用于根据所述取数公式中的查询参数,对所述内存数据库创建索引;
计算模块,用于通过所述索引,在所述内存数据库中取出所述取数公式中的查询参数所对应的数据,并基于取出的所述数据进行计算;
生成模块,用于把对应于所述取数公式的计算结果赋值给所述报表控件,生成报表。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
从初始的报表控件中提取取数公式;
根据所述取数公式从后台数据库中查询数据;
根据查询的数据的数据结构,构建内存数据库,并导入查询的所述数据至所述内存数据库中;
根据所述取数公式中的查询参数,对所述内存数据库创建索引;
通过所述索引,在所述内存数据库中取出所述取数公式中的查询参数所对应的数据,并基于取出的所述数据进行计算;
把对应于所述取数公式的计算结果赋值给所述报表控件,生成报表。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
从初始的报表控件中提取取数公式;
根据所述取数公式从后台数据库中查询数据;
根据查询的数据的数据结构,构建内存数据库,并导入查询的所述数据至所述内存数据库中;
根据所述取数公式中的查询参数,对所述内存数据库创建索引;
通过所述索引,在所述内存数据库中取出所述取数公式中的查询参数所对应的数据,并基于取出的所述数据进行计算;把对应于所述取数公式的计算结果赋值给所述报表控件,生成报表。
上述报表生成方法、装置、计算机设备和存储介质,从初始的报表控件中提取取数公式,根据所述取数公式从后台数据库中查询数据,再根据查询的数据的数据结构,构建内存数据库,并导入查询的所述数据至所述内存数据库中。通过在缓存中建立内存数据库,并将后台数据库查询到的取数公式要用到的数据存储到内存数据库中,使用取数公式便可以直接在本地内存数据库取数,减少了和后台数据库之间的交互频率,提升数据访问速度。根据所述取数公式中的查询参数,对所述内存数据库创建索引,通过所述索引,在所述内存数据库中取出所述取数公式中的查询参数所对应的数据,并基于取出的所述数据进行计算,把对应于所述取数公式的计算结果赋值给所述报表控件,生成报表。通过在内存数据库创建与所述取数公式中的查询参数对应的索引,有利于所述取数公式根据所述索引在所述内存数据库中快速取出对应的数据,节省了取数的时间。最后将取到的数据进行计算得到计算结果赋值给所述报表控件,生成报表。因此,该报表生成方法,能够有效提高报表生成所需的终端的计算性能。
附图说明
图1为一个实施例中报表生成方法的应用环境图;
图2为一个实施例中报表生成方法的流程示意图;
图3为一个实施例中报表生成步骤的流程示意图;
图4为一个实施例中报表生成装置的结构框图;
图5为一个实施例中计算机设备的内部结构图;
图6为另一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的报表生成方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
服务器104中有后台数据库,终端102可以通过与服务器104之间的通信,根据报表控件中的取数公式,从后台数据库中查询数据。终端102可以根据查询的数据的数据结构,在内存中构建内存数据库,并导入查询的数据至所述内存数据库中。终端102可以根据取数公式中的查询参数,对内存数据库创建索引;通过所述索引,在内存数据库中取出所述取数公式中的查询参数所对应的数据,并基于取出的所述数据进行计算。终端102可以把对应于所述取数公式的计算结果赋值给报表控件,从而生成报表。
在一个实施例中,如图2所示,提供了一种报表生成方法,以该方法应用于图1中的终端为例进行说明,包括以下步骤:
步骤202,从初始的报表控件中提取取数公式。
其中,初始的报表控件,是尚未根据所含的取数公式展示计算结果的报表空白单元格。即,初始的报表控件中仅包括取数公式,而并未获得相应的计算结果。取数公式,是报表控件含的用于获取数据的公式。
具体地,在需要生成报表时,终端可以从待生成的报表的初始的报表控件中,提取出报表控件所含的取数公式。
可以理解,一个报表控件中的取数公式可以为至少一个,即可以为一个或多个。
步骤204,根据取数公式从后台数据库中查询数据。
其中,后台数据库,是安装在服务器的通过后台程序进行管理的数据库。
具体地,终端根据提取的取数公式生成数据查询请求,并将生成的数据查询请求发送至服务器。服务器接收到终端发送的数据查询请求后,根据数据查询请求在后台数据库查询数据。
在一个实施例中,终端可以对取数公式进行解析,得到查询表达式,根据查询表达式生成查询语句,根据查询语句从后台数据库中查询数据。其中,查询语句,是由一种或者多种查询表达式组成的查询指令。
在一个实施例中,当取数公式为多个时,可以将多个取数公式进行合并处理后,生成一个总的数据查询请求,从后台数据库中查询所有取数公式所对应的数据。从而避免各个取数公式单独生成数据查询请求进行查询导致的资源浪费。
步骤206,根据查询的数据的数据结构,构建内存数据库,并导入查询的数据至内存数据库中。
其中,数据结构,是取数公式所查询到的数据的数据结构。
内存数据库,是将后台数据库查询的数据放在终端内存中直接操作的数据库。
具体地,从后台数据库中查询到的数据是放在一个临时表中,终端可以根据该临时表的表结构(即,查询到的数据的数据结构),在本地内存构建内存数据库中的表,从而构建得到内存数据库。终端可以将在后台数据库中查询的数据导入至内存数据库中。
步骤208,根据取数公式中的查询参数,对内存数据库创建索引。
其中,查询参数,是根据取数公式进行查询时所使用的参数。
索引是指向内存数据库的数据的逻辑指针。
可以理解,索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。索引提供指向内存数据库的数据的指针,顺着指针可以快速访问内存数据库的对应的数据。
具体地,取数公式中可以包括一个或多个查询参数,终端将取数公式中的查询参数所涉及的字段,创建成索引。比如,取数公式计算时会把账簿、科目、取数类型、币别、年度、期间等查询参数建成索引。
步骤210,通过索引,在内存数据库中取出取数公式中的查询参数所对应的数据,并基于取出的数据进行计算。
具体地,终端可以在内存数据库中进行找到取数公式的查询参数对应的索引指针,顺着指针取出取数公式中的查询参数所对应的数据,并基于取出的数据进行在内存中进行计算。
在一个实施例中,当取数公式为多个时,每个取数公式可以根据自身的查询参数,从内存数据库中取出相应的数据,并基于取出的数据,计算每个取数公式的计算结果。
步骤212,把对应于取数公式的计算结果赋值给报表控件,生成报表。
具体地,终端将内存中计算得到的对应于取数公式的计算结果赋值给报表控件,通过该报表控件展示该计算结果,从而生成报表。可以理解,生成的报表中展示的计算结果,即,展示的是具体的报表数据。
在一个实施例中,当取数公式为多个时,通过步骤210可以计算的每个取数公式的计算结果,终端可以在报表控件中定位各个取数公式,并将各个计算结果分别赋值给报表控件中相应的取数公式,从而生成报表。
上述报表生成方法、装置、计算机设备和存储介质,从初始的报表控件中提取取数公式,根据所述取数公式从后台数据库中查询数据,再根据查询的数据的数据结构,构建内存数据库,并导入查询的所述数据至所述内存数据库中。通过在缓存中建立内存数据库,并将后台数据库查询到的取数公式要用到的数据存储到内存数据库中,使用取数公式便可以直接在本地内存数据库取数,减少了和后台数据库之间的交互频率,提升数据访问速度。根据所述取数公式中的查询参数,对所述内存数据库创建索引,通过所述索引,在所述内存数据库中取出所述取数公式中的查询参数所对应的数据,并基于取出的所述数据进行计算,把对应于所述取数公式的计算结果赋值给所述报表控件,生成报表。通过在内存数据库创建与所述取数公式中的查询参数对应的索引,有利于所述取数公式根据所述索引在所述内存数据库中快速取出对应的数据,节省了取数的时间。最后将取到的数据进行计算得到计算结果赋值给所述报表控件,生成报表。因此,该报表生成方法,能够有效提高报表生成所需的终端的计算性能。
在一个实施例中,根据取数公式从后台数据库中查询数据,包括:当提取的取数公式为多个时,对多个公式进行分组;分别将同组取数公式中的查询参数进行合并,得到各组取数公式分别对应的查询参数集合;分别根据各查询参数集合,从后台数据库中查询数据。
其中,查询参数集合,是对查询参数去重后,获取的查询参数的全集。可以理解,查询参数集合包括单个的参数和参数范围。比如,查询参数集合中年期这个参数可以是2020年1月到2020年5月的参数范围,又比如,币别编码这个参数可以是01这一单个的参数值。
具体地,终端检测到从初始的报表控件中提取的取数公式为多个时,根据预先设置的分组规则,对提取的多个公式进行分组。进一步,终端可以将同组取数公式中的查询参数进行合并,得到各组取数公式分别对应的查询参数集合。终端再根据查询参数集合,从后台数据库中查询数据。
在一个具体的实施例中,对公式进行分组的方式,可以是按照初始报表控件中的取数公式的类型进行分组,也可以是按照初始报表控件中的取数公式的参数类型对多个取数公式进行分组,具体取决于报表类型和业务计算逻辑,在这里不再赘述。
在一个具体的实施例中,参考图3报表生成步骤的流程示意图,根据取数公式的类型,以类型“ACCT”和类型“AcctCash”为例,将取数公式划分成两组。以一组类型为“ACCT”的取数公式为例,
ACCT("001","1401:1408","Y","01",2020,1,1)
ACCT("001","5001:5201","Y","01",2020,2,2)
ACCT("001","1471","Y","01",2020,3,3)
ACCT("001","2203","C","01",2020,3,3)
ACCT("002","1122","C","01",2020,4,4)
类型为“ACCT”的这组取数公式有7个参数,分别是:账簿编码,科目编码(可以是单个,也可以是一个范围),取数类型(如,Y-期末数,C-本期发生数……),年度,开始期间,结束期间。终端这组类型为“ACCT”的取数公式涉及7个查询参数合并,形成查询参数集合。
在一个实施例中,在进行查询参数的合并时,可以把所有的查询参数搜集起来用逗号分隔,从而将各个查询参数表达为散列取值的形式。比如,针对,“001”、“002”以及“003”这三个查询参数,可以基于逗号分隔,合并为(001,002,003),后续可以基于该合并结果,分别依据各个查询参数进行散列取值。
在另一个实施例中,也可以从待合并的查询参数中分别取一个最小值一个最大值,并用冒号分隔,从而表达为连续取值的形式。比如,针对,“001”、“002”以及“003”这三个查询参数,可以将最小值“001”和最大值“003”基于冒号分隔,合并为(001:003)这么一个范围取值条件,后续则可以基于该范围取值条件,进行连续取值。
本实施例中,通过对取数公式进行分组后再将同组的取数公式中的查询参数进行合并,得到对应的查询参数集合,相较于直接对所有取数公式直接合并查询参数集合去后台数据库进行取数,节省了重复的查询参数的查询过程,只需要查询一次,就能获取所有相应的查询参数。
在一个实施例中,分别根据各查询参数集合,从后台数据库中查询数据,包括:根据同一查询参数集合中的查询参数,生成查询语句;根据查询语句,从后台数据库中查询数据。
具体地,终端根据同一查询参数集合中的查询参数,生成查询语句后,发送至服务器。服务器通过查询语句从后台数据库中查询数据。
在一个具体的实施例中,参考图3报表生成步骤的流程示意图,终端根据同一查询参数集合中的查询参数,生成查询语句,即“生成取数SQL”(其中,SQL即为StructuredQuery Language,结构化查询语言),发送至服务器。服务器通过“生成取数SQL”从后台数据库中查询数据。
本实施例中,通过对同一取数公式的查询参数集合中的查询参数生成查询语句并发送至服务器取数,相比于根据每一个取数公式的查询参数都生成查询语句并发送至服务器取数,减少了与服务器交互的次数,节省了时间开销。
在一个实施例中,分别将同组取数公式中的查询参数进行合并,得到各组取数公式分别对应的查询参数集合,包括:针对同组取数公式中同一类型的多个查询参数,当多个查询参数满足接近条件时,则根据查询参数中的最小查询参数和最大查询参数,生成对应的范围取数条件。
其中,范围取数条件,是指用于取数的范围。
在一个实施例中,满足接近条件,是指查询参数与查询参数之间的数值跨度比较小。范围取数条件,是在后台数据库取范围内的数的条件。可以理解,范围取数条件能够涵盖大部分的查询参数,因而使用范围取数条件能够查询到大部分查询参数所对应的数据,相较于依据单个查询参数进行查询而言,能够提高效率。
具体地,针对同组取数公式中同一类型的多个查询参数,当多个查询参数满足接近条件时,对于满足接近条件的查询参数,终端即可以将查询参数中的最小查询参数和最大查询参数作为端点值,分隔生成对应的范围取数条件。
在一个实施例中,终端可以将最小查询参数和最大查询参数用冒号分隔,生成范围取数条件。在其他实施例中,终端也可以将范围取数条件以其他方式进行表达,并不限定于冒号分隔。
在其他实施例中,当多个查询参数个数不多且容易列举时,即使其满足接近条件,也可以不对应生成范围取数条件,而是以单值取数条件进行取数。
在一个具体的实施例中,当同时存在不满足接近条件的查询参数,合并的时候终端会把这类的参数搜集起来,作为单值取数条件分隔。其中,不满足接近条件的查询参数,是指跨度比较大的查询参数。单值取数条件,用于以单个的查询参数进行取数。
可以理解,如果用不满足解决条件的查询参数生成范围查询条件,会导致范围查询条件中涵盖的查询参数大部分是不必要的,因而会导致查询大量额外多余的数据,所以,这种情况下用范围查询条件就不合适。比如,如果取数年期涉及2020-01、2020-10,实际用到的年期比较少,但是跨度比较大,用范围查询就不太合适,这种情况的取数条件是年期等于2020-01或者年期等于2020-10这种单值取数条件。
需要说明的是,对于一些数值型的查询参数而言,也是无法进行生成范围查询条件,而是采用单值取数条件进行取数。
进一步地,终端可以将针对同组取数公式所对应的范围查询条件和单值查询条件进行合并,得到该组取数公式最终的对应的取数条件。
在一个具体的实施例中,仍然以类型为“ACCT”的这组取数公式为例,
ACCT("001","1401:1408","Y","01",2020,1,1)
ACCT("001","5001:5201","Y","01",2020,2,2)
ACCT("001","1471","Y","01",2020,3,3)
ACCT("001","2203","C","01",2020,3,3)
ACCT("002","1122","C","01",2020,4,4)
例如本次计算涉及001,002这两个账簿编码,最小科目编码是1122、最大科目编码是5201,取数类有Y-期末数、C-本期发生数,币别编码是01-人民币,年期范围是2020年1月到2020年4月。
将该组取数公式中的查询参数进行合并。对于查询参数满足接近条件时,终端则根据查询参数中的最小查询参数和最大查询参数,生成对应的范围取数条件,比如,最小科目编码是1122、最大科目编码是5201,即生成"1122:5201"这一范围取数条件。可以理解,Y-期末数、C-本期发生数并不是数值型的查询参数,所以二者无法合并为范围取数条件,分别以单值取数条件进行取数。因此,终端可以将001,002这两个账簿编码,取数类有Y-期末数、C-本期发生数,币别编码是01-人民币,合并为即"001,002","Y,C","01"。可以理解,年期范围是2020年1月到2020年4月,即可以合并为2020,1,4。最后,得到该组取数公式分别对应的查询参数集合“ACCT("001,002","1122:5201","Y,C","01",2020,1,4)”。
本实施例中,根据查询参数中的最小查询参数和最大查询参数,生成对应的范围取数条件,经过这样的处理,可以减少最终的发送到服务器的查询语句的查询参数集合的数据量。
在一个实施例中,通过索引,在内存数据库中取出取数公式中的查询参数所对应的数据,并基于取出的数据进行计算,包括:当提取的取数公式为多个时,分别将每个取数公式中的查询参数拼接生成过滤条件;根据索引和每个取数公式所对应的过滤条件,从内存数据库中取出每个取数公式中所对应的数据;基于取出的数据进行计算,得到每个取数公式对应的计算结果。
其中,过滤条件,由查询参数和内存数据库语言组成的一条或者多条命令语句。
可以理解,过滤条件,用于从内存数据库中存储的所有取数公式的数据中,筛选查询出单个取数公式所对应的数据。
具体地,当从初始报表控件提取的取数公式为多个时,终端分别将每个取数公式中的查询参数,通过与内存数据库查询语言拼接在一起生成过滤条件。终端获取到过滤条件后,再根据索引和每个取数公式所对应的过滤条件,从内存数据库中取出每个取数公式中所对应的数据。当终端获取取数公式中所对应的数据后,基于取出的数据进行计算,得到每个取数公式对应的计算结果。
在一个具体的实施例中,可以将过滤条件需要应用的内存数据库查询语言设置成模板。当需要针对取数公式在内存数据库查询时,终端自动在设置的模板中填入每个取数公式的查询参数,生成完整的过滤条件。当需要针对取数公式在内存数据库查询时,也可以是人工在设置的模板中填入每个取数公式的查询参数,生成完整的过滤条件。
在一个具体的实施例中,参考图3报表生成步骤的流程示意图,仍然以类型为“ACCT”的这组取数公式为例,“生成取数SQL”,分别将每个取数公式中的查询参数拼接生成过滤条件,如将001,002这两个账簿编码通过与内存数据库查询语言拼接在一起生成过滤条件,即“WHERE FBOOKNUMBER IN(‘001,002’)”。
本实施例中,每个取数公式中的查询参数拼接生成过滤条件,从内存数据库中取出每个取数公式中所对应的数据,由于取出内存数据库中的数据,相较于磁盘或者是后台数据库的数据的取数和计算的速度要快,所以,本实施例能够更快速取出每个取数公式对应的数据,而且能够更快速得到每个取数公式对应的计算结果。
在一个实施例中,基于取出的数据进行计算,包括:基于取出的数据进行计算,生成数据字典;把对应于取数公式的计算结果赋值给报表控件,生成报表,包括:按照数据字典中的键确定报表控件中相应的取数公式,并根据数据字典中的值,将计算结果赋值给报表控件中所确定的取数公式。
其中,数据字典是对内存数据库中使用的所有数据元素的定义的集合。数据字典中的键,是由取数公式的名称和取数公式中的查询参数组成的字符串。数据字典中的值,是取数公式的计算结果。
具体地,针对每个取数公式,终端可以根据从内存数据库中针对取数公式取出的数据进行计算,将取数公式的名称和取数公式中的查询参数组成字符串,作为数据字典的键,将计算得到的取数公式的计算结果作为数据字典的值,从而生成数据字典。终端可以按照数据字典中的键从报表控件中,确定相应的取数公式,并根据数据字典中的值,将计算结果赋值给报表控件中所确定的取数公式,进而生成包括计算结果的报表。
在一个具体的实施例中,以取数公式ACCT("001","1401:1408","Y","01",2020,1,1)为例,相应的数据字典即为Dictionary[(ACCT_001_1401:1408_Y_01_2020_1_1)]=1000.00。其中,(ACCT_001_1401:1408_Y_01_2020_1_1)是数据字典的键,表示取数公式的名称和取数公式中的查询参数。1000即为数据字典的值,表示根据取数公式对应的数据进行计算的结算结果,即需要赋值给对应于取数公式为ACCT("001","1401:1408","Y","01",2020,1,1)的报表控件。
本实施例中,通过数据字典,可以便于终端的操作报表的***查询相应的计算结果并快速、准确地赋值给对应的报表控件。
在一个实施例中,通过索引,在内存数据库中取出取数公式中的查询参数所对应的数据,包括:根据取数公式中的查询参数构建查询表达式;当内存数据库中已缓存与查询表达式匹配的执行计划时,则根据已缓存的匹配的执行计划和索引,在内存数据库中取出取数公式中的查询参数所对应的数据。
其中,查询表达式,是指根据取数公式中的查询参数由运算符和运算对象构建的表达式,或者根据取数公式中的查询参数由单独的一个运算对象构建的表达式。
执行计划,是对一条查询语句在内存数据库查找数据的执行过程或访问路径的描述。
具体地,终端想要从内存数据库中查询数据时,可以根据取数公式中的查询参数构建查询表达式。当内存数据库中已缓存与查询表达式匹配的执行计划时,终端则直接根据已缓存的匹配的执行计划和索引,在内存数据库中取出取数公式中的查询参数所对应的数据。
在一个具体的实施例中,终端可以根据构建的查询表达式做匹配,当匹配出现重复查询表达式,直接按照针对重复的查询表达式的缓存的执行计划,在内存数据库取出取数公式中的查询参数所对应的数据。
本实施例中,对于已经执行过的执行计划,内存数据库会使用之前已经存在的执行计划,不用重新编辑解析查询表达式,由此使用内存数据库能够提高终端对取数公式中的查询参数所对应的数据做计算的计算性能。
在一个实施例中,通过索引,在内存数据库中取出取数公式中的查询参数所对应的数据还包括:当内存数据库中未缓存与查询表达式匹配的执行计划时,则通过内存数据库对查询表达式进行编译解析,生成执行计划,并将执行计划进行缓存;按照索引和生成的执行计划,在内存数据库中取出取数公式中的查询参数所对应的数据。
具体地,当内存数据库中未缓存与查询表达式匹配的执行计划时,终端则通过内存数据库对查询表达式进行编译解析,生成执行计划,并将执行计划进行缓存。终端执行生成的执行计划,顺着索引中的指针,在内存数据库中取出取数公式中的查询参数所对应的数据。
在一个具体的实施例中,执行计划由内存数据库在对查询表达式进行编译解析后生成并缓存。用户也可以通过发送相应的指令,查看内存数据库针对查询表达式进行编译解析生成的执行计划。
本实施例中,内存数据库仅对未缓存与查询表达式匹配的执行计划的查询表达式做编译,不需要对所有的查询表达式做编译,由此提高了终端对取数公式中的查询参数所对应的数据做计算的计算性能。
应该理解的是,虽然图2的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,该报表生成方法还包括,在终端对内存数据库实例做了封装。
本实施例中,由于报表每次计算都会构建一个新的内存数据库实例,用完之后自动释放。经过对内存数据库实例做封装之后,所有的操作(连接字符串、打开连接、关闭连接等)都不需要在调用时重新构建,便于作为本地对象进行使用。
在一个实施例中,如图4所示,提供了一种报表生成装置400,包括:提取模块402、查询模块404、构建模块406、创建模块408、计算模块410和生成模块412,其中:
提取模块402,用于从初始的报表控件中提取取数公式。
查询模块404,用于根据取数公式从后台数据库中查询数据。
构建模块406,用于根据查询的数据的数据结构,构建内存数据库,并导入查询的数据至内存数据库中。
创建模块408,用于根据取数公式中的查询参数,对内存数据库创建索引。
计算模块410,用于通过索引,在内存数据库中取出取数公式中的查询参数所对应的数据,并基于取出的数据进行计算。
生成模块412,用于把对应于取数公式的计算结果赋值给报表控件,生成报表。
在一个实施例中,查询模块404还用于当提取的取数公式为多个时,对多个公式进行分组;分别将同组取数公式中的查询参数进行合并,得到各组取数公式分别对应的查询参数集合;分别根据各查询参数集合,从后台数据库中查询数据。
在一个实施例中,查询模块404还用于根据同一查询参数集合中的查询参数,生成查询语句;根据查询语句,从后台数据库中查询数据。
在一个实施例中,查询模块404还用于针对同组取数公式中同一类型的多个查询参数,当多个查询参数满足接近条件时,则根据查询参数中的最小查询参数和最大查询参数,生成对应的范围取数条件。
在一个实施例中,计算模块410还用于当提取的取数公式为多个时,分别将每个取数公式中的查询参数拼接生成过滤条件;根据索引和每个取数公式所对应的过滤条件,从内存数据库中取出每个取数公式所对应的数据;基于取出的数据进行计算,得到每个取数公式对应的计算结果。
在一个实施例中,计算模块410还用于基于取出的数据进行计算,生成数据字典;数据字典中的键,是由取数公式的名称和取数公式中的查询参数组成的字符串,数据字典中的值,是取数公式的计算结果;按照数据字典中的键确定报表控件中相应的取数公式,并根据数据字典中的值,将计算结果赋值给报表控件中所确定的取数公式。
在一个实施例中,计算模块410还用于根据取数公式中的查询参数构建查询表达式;当内存数据库中已缓存与查询表达式匹配的执行计划时,则根据已缓存的匹配的执行计划和索引,在内存数据库中取出取数公式中的查询参数所对应的数据。
在一个实施例中,计算模块410还用于当内存数据库中未缓存与查询表达式匹配的执行计划时,则通过内存数据库对查询表达式进行编译解析,生成执行计划,并将执行计划进行缓存;按照索引和生成的执行计划,在内存数据库中取出取数公式中的查询参数所对应的数据。
关于报表生成装置的具体限定可以参见上文中对于报表生成方法的限定,在此不再赘述。上述报表生成装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图5所示。该计算机设备包括通过***总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作***、计算机程序和数据库。该内存储器为非易失性存储介质中的操作***和计算机程序的运行提供环境。该计算机设备的数据库用于存储报表取数公式需要的数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种报表生成方法。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图6所示。该计算机设备包括通过***总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作***和计算机程序。该内存储器为非易失性存储介质中的操作***和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种报表生成方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图6中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各种实施例的报表生成方法。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述各种实施例的报表生成方法。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

Claims (11)

1.一种报表生成方法,其特征在于,所述方法包括:
从初始的报表控件中提取取数公式;
当提取的所述取数公式为多个时,对所述多个公式进行分组,分别将同组取数公式中的查询参数进行合并,得到各组取数公式分别对应的查询参数集合,分别根据各所述查询参数集合,从后台数据库中查询数据;
根据查询的数据的数据结构,构建内存数据库,并导入查询的所述数据至所述内存数据库中;
根据所述取数公式中的查询参数,对所述内存数据库创建索引;
通过所述索引,在所述内存数据库中取出所述取数公式中的查询参数所对应的数据,并基于取出的所述数据进行计算;
把对应于所述取数公式的计算结果赋值给所述报表控件,生成报表。
2.根据权利要求1所述的方法,其特征在于,所述对所述多个公式进行分组包括:按照所述报表控件中的取数公式的类型进行分组;或者,按照所述报表控件中的取数公式的参数类型进行分组。
3.根据权利要求1所述的方法,其特征在于,所述分别根据各所述查询参数集合,从后台数据库中查询数据,包括:
根据同一所述查询参数集合中的查询参数,生成查询语句;
根据所述查询语句,从后台数据库中查询数据。
4.根据权利要求1所述的方法,其特征在于,所述分别将同组取数公式中的查询参数进行合并,得到各组取数公式分别对应的查询参数集合,包括:
针对同组取数公式中同一类型的多个查询参数,当所述多个查询参数满足接近条件时,则根据所述查询参数中的最小查询参数和最大查询参数,生成对应的范围取数条件。
5.根据权利要求1所述的方法,其特征在于,所述通过所述索引,在所述内存数据库中取出所述取数公式中的查询参数所对应的数据,并基于取出的所述数据进行计算,包括:
当提取的取数公式为多个时,分别将每个取数公式中的查询参数拼接生成过滤条件;
根据所述索引和每个取数公式所对应的所述过滤条件,从所述内存数据库中取出每个所述取数公式所对应的数据;
基于取出的所述数据进行计算,得到每个取数公式对应的计算结果。
6.根据权利要求1所述的方法,其特征在于,所述基于取出的所述数据进行计算,包括:
基于取出的所述数据进行计算,生成数据字典;所述数据字典中的键,是由所述取数公式的名称和所述取数公式中的查询参数组成的字符串,所述数据字典中的值,是所述取数公式的计算结果;
所述把对应于所述取数公式的计算结果赋值给所述报表控件,生成报表,包括:
按照所述数据字典中的键确定所述报表控件中相应的取数公式,并根据所述数据字典中的值,将所述计算结果赋值给报表控件中所确定的所述取数公式。
7.根据权利要求1所述的方法,其特征在于,所述通过所述索引,在所述内存数据库中取出所述取数公式中的查询参数所对应的数据,包括:
根据所述取数公式中的查询参数构建查询表达式;
当所述内存数据库中已缓存与所述查询表达式匹配的执行计划时,则
根据所述匹配的执行计划和所述索引,在所述内存数据库中取出所述取数公式中的查询参数所对应的数据。
8.根据权利要求7所述的方法,其特征在于,所述通过所述索引,在所述内存数据库中取出所述取数公式中的查询参数所对应的数据还包括:
当所述内存数据库中未缓存与所述查询表达式匹配的执行计划时,则
通过所述内存数据库对所述查询表达式进行编译解析,生成执行计划,并将所述执行计划进行缓存;
按照所述索引和生成的所述执行计划,在所述内存数据库中取出所述取数公式中的查询参数所对应的数据。
9.一种报表生成装置,其特征在于,所述装置包括:
提取模块,用于从初始的报表控件中提取取数公式;
查询模块,用于当提取的所述取数公式为多个时,对所述多个公式进行分组,分别将同组取数公式中的查询参数进行合并,得到各组取数公式分别对应的查询参数集合,分别根据各所述查询参数集合,从后台数据库中查询数据;
构建模块,用于根据查询的数据的数据结构,构建内存数据库,并导入查询的所述数据至所述内存数据库中;
创建模块,用于根据所述取数公式中的查询参数,对所述内存数据库创建索引;
计算模块,用于通过所述索引,在所述内存数据库中取出所述取数公式中的查询参数所对应的数据,并基于取出的所述数据进行计算;
生成模块,用于把对应于所述取数公式的计算结果赋值给所述报表控件,生成报表。
10.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至8中任一项所述的方法的步骤。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至8中任一项所述的方法的步骤。
CN202011137858.4A 2020-10-22 2020-10-22 报表生成方法、装置、计算机设备和存储介质 Active CN112434018B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011137858.4A CN112434018B (zh) 2020-10-22 2020-10-22 报表生成方法、装置、计算机设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011137858.4A CN112434018B (zh) 2020-10-22 2020-10-22 报表生成方法、装置、计算机设备和存储介质

Publications (2)

Publication Number Publication Date
CN112434018A CN112434018A (zh) 2021-03-02
CN112434018B true CN112434018B (zh) 2024-06-04

Family

ID=74695817

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011137858.4A Active CN112434018B (zh) 2020-10-22 2020-10-22 报表生成方法、装置、计算机设备和存储介质

Country Status (1)

Country Link
CN (1) CN112434018B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101866350A (zh) * 2010-05-11 2010-10-20 中兴通讯股份有限公司 报表生成方法、装置及web服务器
CN102521416A (zh) * 2011-12-28 2012-06-27 用友软件股份有限公司 数据关联查询方法和数据关联查询装置
CN108182630A (zh) * 2018-02-02 2018-06-19 金蝶软件(中国)有限公司 一种集团财务报表中的抵销方法及装置
CN110909014A (zh) * 2018-09-14 2020-03-24 阿里巴巴集团控股有限公司 优化建议生成及数据库查询方法、装置、设备及存储介质
CN111506606A (zh) * 2020-04-14 2020-08-07 深圳市金蝶天燕云计算股份有限公司 一种报表查询方法及相关设备

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10977224B2 (en) * 2014-07-31 2021-04-13 Quickbase, Inc. Dynamic modeling of data in relational databases
US10997196B2 (en) * 2018-10-30 2021-05-04 Elasticsearch B.V. Systems and methods for reducing data storage overhead

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101866350A (zh) * 2010-05-11 2010-10-20 中兴通讯股份有限公司 报表生成方法、装置及web服务器
CN102521416A (zh) * 2011-12-28 2012-06-27 用友软件股份有限公司 数据关联查询方法和数据关联查询装置
CN108182630A (zh) * 2018-02-02 2018-06-19 金蝶软件(中国)有限公司 一种集团财务报表中的抵销方法及装置
CN110909014A (zh) * 2018-09-14 2020-03-24 阿里巴巴集团控股有限公司 优化建议生成及数据库查询方法、装置、设备及存储介质
CN111506606A (zh) * 2020-04-14 2020-08-07 深圳市金蝶天燕云计算股份有限公司 一种报表查询方法及相关设备

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"一种自定义动态报表***的设计与应用";巫乔顺 等;《机械设计与制造工程》;20130131;第42卷(第1期);第80-82页 *

Also Published As

Publication number Publication date
CN112434018A (zh) 2021-03-02

Similar Documents

Publication Publication Date Title
CN110795455B (zh) 依赖关系解析方法、电子装置、计算机设备及可读存储介质
CN108874924B (zh) 搜索服务的创建方法、装置及计算机可读存储介质
CN112930529B (zh) 从概念数据模型生成软件工件
CN112560100B (zh) 数据脱敏方法及装置、计算机可读存储介质、电子设备
CN105550206B (zh) 结构化查询语句的版本控制方法及装置
JP2021530778A (ja) テキスト・マイニングと統合した辞書編集システム
CN111488143A (zh) 一种基于Springboot2代码自动生成装置和方法
US11663288B2 (en) Just-in-time front end template generation using logical document object models
CN112860727B (zh) 基于大数据查询引擎的数据查询方法、装置、设备及介质
CN111177113B (zh) 数据迁移方法、装置、计算机设备和存储介质
US20160063107A1 (en) Data retrieval via a telecommunication network
CN111581271A (zh) 接口参数确定方法、装置、计算机设备和存储介质
CN110795697A (zh) 逻辑表达式的获取方法、装置、存储介质以及电子装置
CA3149710A1 (en) Data collecting method, device, computer equipment and storage medium
CN113468204A (zh) 一种数据查询方法、装置、设备、介质
CN113918149A (zh) 接口开发方法、装置、计算机设备和存储介质
CN113703777A (zh) 基于数据库表的代码生成方法、装置、存储介质和设备
CN111159227B (zh) 数据查询方法、装置、设备及存储介质
CN103809915A (zh) 一种磁盘文件的读写方法和装置
CN112434018B (zh) 报表生成方法、装置、计算机设备和存储介质
CN112115150A (zh) 嵌入式内存数据库的数据管理方法、终端设备及介质
CN111090668A (zh) 数据检索方法及装置、电子设备和计算机可读存储介质
CN113010550A (zh) 结构化数据的批处理对象生成、批处理方法和装置
Yang et al. Acquisition of ERA models from data intensive code
JP7472078B2 (ja) データ仮想化装置及び方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant