CN101021839A - 非线性报表生成方法 - Google Patents

非线性报表生成方法 Download PDF

Info

Publication number
CN101021839A
CN101021839A CN 200710064704 CN200710064704A CN101021839A CN 101021839 A CN101021839 A CN 101021839A CN 200710064704 CN200710064704 CN 200710064704 CN 200710064704 A CN200710064704 A CN 200710064704A CN 101021839 A CN101021839 A CN 101021839A
Authority
CN
China
Prior art keywords
lattice
expansion
cell
nominative
report generating
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.)
Pending
Application number
CN 200710064704
Other languages
English (en)
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.)
BEIJING RUNQIAN INFORMATION SYSTEM TECHNOLOGY Co Ltd
Original Assignee
BEIJING RUNQIAN INFORMATION SYSTEM 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 BEIJING RUNQIAN INFORMATION SYSTEM TECHNOLOGY Co Ltd filed Critical BEIJING RUNQIAN INFORMATION SYSTEM TECHNOLOGY Co Ltd
Priority to CN 200710064704 priority Critical patent/CN101021839A/zh
Publication of CN101021839A publication Critical patent/CN101021839A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明属于计算机信息处理技术领域,涉及一种报表生成方法,具体涉及一种能够与数据库关联的动态报表的生成方法(或称为非线性报表生成方法)。该方法首先确定报表运算时需要用到的数据集,并分别命名;然后在表格中确定某些单元格为扩展格,并设置扩展方向;接着设置各单元格的左、上主格;并在单元格内填入运算表达式;最后对报表进行扩展和计算,即可得到生成后的实际报表。本发明所提供的动态报表生成方法行列方向能力对称,并且具有灵活的多源关联分片功能和灵活的自由格间计算能力。

Description

非线性报表生成方法
技术领域
本发明属于计算机信息处理技术领域,涉及一种报表生成方法,具体涉及一种能够与数据库关联的动态报表的生成方法,或称为非线性报表生成方法。
背景技术
用于制作报表的工具软件可分为两类:一类是以微软公司的Excel为代表的静态报表工具,其特征是绘制的报表是静态的,不会与数据库中的数据联动而自动增加或减少行列数及改变其中的数据。另一类则是动态报表工具,能够与数据库(主要是关系型数据库)关联,动态地从数据库中获取数据并根据用户事先绘制好的报表模板和参数自动生成不同布局(行、列等)和统计内容的报表,这样计算方案相同的报表只需要绘制一次,可以极大地减少报表生成的工作量并提高工作效率。本发明主要针对动态报表生成工具。
在描述动态报表工具(以下简称报表工具)的处理方案前,先介绍数据集的概念,报表工具的数据来源均以数据集的形式组织。
数据集可以理解为一个由有列名和列数据类型的数据构成的二维矩阵,如在关系数据库中使用SELECT语句返回的结果集(可以是多表叉乘的SELECT),数据集的行相当于数据表的一条记录,而列则对应了该数据表的字段。
可以针对数据集执行对列的排序(相当于SELECT中的ORDER BY)和多层分组(GROUP BY)以及针对行内表达式对行的过滤(WHERE)。
传统报表工具主要提供如下几种基本处理方案:
一、单源单片多层分组方案(简称分组方案)
分组方案中每个报表模板只有一个作为数据来源的数据集。
分组方案将报表模板分成几个条带状的区域(BAND),一般命名为表头(Header)、组头(Group Header)、细节(Detail)、组尾(Group Trailer),表尾(Trailer)。细节区与数据集的行一一对应,而分组区(组头、组尾)则与数据集的分组一一对应,报表中可能没有分组区或有多层分组区,这取决于数据集是否被分组及其分组的层数。
在各个区域内均可以添加作用范围在本区域的计算表达式,从而完成一些自由的辅助计算功能,如可在分组区内添加针对本组数据的汇总计算。
采用分组方案的报表有如下的限制:
1.单源:一个报表中不能有多个作为数据来源的数据集,一个直接的后果就是涉及到多数据表的报表就必须采用复杂SQL(JOIN/UNION或嵌套)甚至编辑存储过程才能完成数据获取,使报表制作非常繁琐;
2.单片:数据集可以进行多层分组,但每层分组只能有一片,这样无法实现分片报表(同一批数据按不同的维度去查看,如人员表按学历分组再按年龄分组就必须制作成两个报表)。
二、单源单片多层交叉方案(简称交叉方案)
交叉方案是由OLAP理论发展出来的报表模板,仍仅支持单数据集。它将数据集中的某些列分组后作为报表的左表头,而另一些列分组后作为报表的上表头,其它列的汇总值作为中间数据区的内容,从而形成了行、列均可动态变化的交叉报表。
由于采用了同样的分组机制,交叉方案仍然是单片的。另外,由于交叉方案没有分组方案那样的区域分布编辑能力,其报表布局只能是事先由报表工具规定的死板样式(如汇总数据只能在右下方且要么所有的组全有要么全没有等),难以灵活控制;同时它也没有自由添加计算表达式的能力,这样不能很随意设计各种辅助计算项,只能选择应用报表工具事先设计好的项目。
由于这些限制,交叉方案在实际应用中很少使用。现实中交叉表经常被迫由程序员编写大量代码采用分组方案来实现。
三、多源分片固定多层方案(简称多源方案)
为解决多数据源的问题,某些传统报表工具(以俄罗斯的FastReport为代表)又提出了多源方案,允许在分组方案的细节区上添加子区域(SubBand),该区域可以与另一数据集的数据绑定,从而可支持多数据集的报表;而且可以同时有多个子区域,这样既可支持分片报表,子区域上还可以添二级子区域,从而实现多层的多源分片报表。
但是,子区域的使用仍有如下的限制:
1.子区域对应的数据集不能再分组,只能以明细方式展现;
2.子区域及其主区域对应的数据源集之间的关联是事先设置好的,只能采用类似数据库中外键设置的方案,而不能随意关联,也不能在同一张报表中有两种不同的关联方式(这时必须再做一个数据集);
3.子区域的层数是报表工具事先规定的,不能无限地向子区域添加二级、三级、...子区域,当前的FastReport版本可以支持到六层。
另外,作为上述不足的补充,许多传统报表工具都支持子报表。即允许在(分组或多源方案的)报表模板的区域上添加子报表,而子报表可以采用完全不同的数据源集,并且可以添加多个,从而部分解决多源分片的问题。但是子报表的使用又带来布局困难(主子表的格线很难对齐,特别是在子表由于数据量导致了布局变化后),主子表之间的数据只能通过参数向下传送(方向单一且量太小),因此在实际应用中也较少使用。
上述几种方案除交叉方案(但统计功能太弱)外,其它方案(包括采用子报表)均是在行方向能力远强于列方向能力。无法做到行列对称,但现实中的报表却经常在列方向上要求有与行方向同样的变化能力。这是传统报表工具无法实现的难点。
在统计计算方面,传统报表工具中的数据集分组均以关系数据库原理为基础,只能支持完全划分的分组(即所有元素都必须且只能分到一个组中),但现实中的报表有很多是需要不完全分组的,如不完整的分组(不是所有元素都被分进某组了)和可重分组(某个元素被分到了两个不同的组中),这时就必须事先编写程序代码将不完全的分组转换成完全划分才能完成报表的设计。
同时,传统报表工具中均没有提供在设计阶段对结果报表上数据项的命名引用机制,不能灵活地访问结果报表上的数据,一般只能进行同行内的格间运算或针对全组(或全体)的集合运算,对于跨行组运算相当困难(如计算同期比),而随意的独立格运算则更不可能。只能事先或事后编写代码准备或调整报表上的数据。
发明内容
本发明的目的在于针对传统报表工具的缺陷,提供一种新型的动态报表生成方法,即非线性报表生成方法。该方法在报表生成过程中行列方向能力对称,并且具有灵活的多源关联分片功能、不完全分组及自由的格间运算功能。
为了实现上述发明目的,本发明的技术方案如下:非线性报表生成方法,包括如下步骤:
(1)确定报表运算时需要用到的数据集,并分别命名;
(2)在静态报表中确定某些单元格为扩展格,即主动扩展复制的单元格,并设置其扩展方向;
(3)设置所有单元格的左主格和上主格,即该单元格在纵向和横向扩展时需要跟随的扩展格;
(4)在各单元格内填入运算表达式;
(5)对报表进行扩展和计算,即可得到生成后的实际报表。
进一步,在上述非线性报表生成方法中,步骤(1)中的数据集是多个,多个数据集通过命名加以区分。传统工具常常只能有1个则无须命名。
进一步,在上述非线性报表生成方法中,步骤(2)中扩展格的扩展方向分成纵向扩展和横向扩展两种,一个扩展格同时只能有一个扩展方向。
进一步,在上述非线性报表生成方法中,步骤(3)中的纵向扩展格只能有左主格而没有上主格,而横向扩展格只有上主格而没有左主格;非扩展格既有左主格也有上主格。称单元格为其主格的子格。
更进一步,任何左主格必须是纵向扩展格或根格,上主格必须是横向扩展格或根格,其中根格是一个物理上不存在的逻辑假想格。
再进一步,为了简化设置,约定一个缺省规则:除非被手工设置过左主格/上主格,否则任何单元格的左主格/上主格被缺省地设置为其左边/上边离它最近的纵向/横向扩展格,如果其左边/上边没有纵向/横向扩展格,则其左主格/上主格被缺省地设置为根格。
进一步,在上述非线性报表生成方法中,步骤(4)中在单元格中填入的表达式分成集合运算和单值运算两种,集合运算是指运算结果是由多个元素构成的集合的运算,而单值运算则指运算结果只有一个单一元素的运算。在扩展格中填入的表达式必须是集合运算(但有可能是结果集合元素个数为1的集合),而在非扩展格中填入的表达式则既可以是集合运算也可以是单值运算,大多数情况下是单值运算。
更进一步,上述运算(无论集合运算还是单值运算)均可以自由地引用数据集中数据和单元格中的数据,并允许两者同时混合在一个表达式中。
再进一步,在引用单元格时允许使用所谓层次坐标或位移坐标及其格集表示法。以单元格的主格线(由主格、主格的主格、...、根格构成的序列)上的主格作为基准点,以每个主格(都是扩展格)扩展复制后的实例单元格在其自己主格范围内的顺序号作为偏移量,两者配合即可唯一确定生成报表上的任何一个单元格,从而提供了一种在设计阶段为生成报表单元格命名的方案。该方案有两种形式,采用绝对偏移量时称层次坐标,采用相对偏移量(相对于表达式所在的单元格)时称位移坐标。采用层次坐标或位移坐标命名的多个目标单元格还可以组合成单元格集合(简称格集),用以参与聚合运算(如求和、平均等)。
进一步,在上述非线性报表生成方法中,步骤(5)中对报表进行扩展复制时先对扩展格进行计算和扩展,然后再对非扩展格进行计算。报表上有多个扩展格时,扩展次序是先主后子,即若扩展格的某个主格未扩展前不得先行计算扩展。
更进一步,在对纵向/横向扩展格扩展时,找出包括该格及所有后代格的最小连续行区域/列区域,某扩展格的后代格是指其子格或其子扩展格的后代格。将这片区域整体向下/向右复制多个,复制次数为该扩展格的运算结果(是个集合)的元素个数,而每个元素被依次写入复制出来的区域中对应的扩展格中,复制区域中其它单元格的表达式将被原样复制。
再进一步,对于复制区域中有某单元格不是该扩展格的后代格,若扩展后能将这些复制出来的单元格能连成一片,则将被合并成一个大格,否则不进行合并,除原始格外,这些复制出来的单元格被填空,而原始格中的表达式保持原样。
进一步,在上述非线性报表生成方法中,步骤(5)中对报表中某单元格计算涉及到数据集运算时,如果该单元格的主格线上有某扩展格对同一数据集进行了划分计算(如列表或分组),则在计算该单元格表达式时,其数据集运算将被限制在划分过后的数据集内(如分组后的某个组)。
本发明的有益效果在于:
(1)行列对称
方法中的扩展格可以有纵、横两个扩展方向,所有的规则对于两个方向也都是对称的。这样,行方向拥有的能力在列方向也同样拥有,从而实现报表设计的完全行列对称。
(2)灵活的多源关联分片
方法中数据集仅作为某些单元格的扩展和运算方式存在,报表中有多少个数据集并不影响扩展和运算,因此本方案可以天然支持多数据源集。
方法中的任何扩展格均可以有多个子扩展格,子扩展格还可以有下一级的子扩展格,从而可形成随意的多层分片报表,每个分片的层次还可以不同。
主格与子格的关联关系是通过单元格中的表达式对其它单元格引用完成的,因此其关联关系只要是能用表达式描述就都可以应用,而且同一报表中的两个数据集之间在不同场合可以有不同的关联关系,甚至可以建立常数扩展格与数据集之间的关联关系,而不必象某些改进的传统工具那样必须是事先定义好的唯一死板关系(外键)。
(3)不完全分组
方法中的数据集分组将仅作为一种普通集合运算执行,各级分组和分组统计均与该集合运算并无天然联系,可以自由书写关联表达式完成计算和分组。用户只要编写一个能返回不完全分组的集合运算即可,而不必担心该单元格的表达式会对其它单元格的运算产生不良后果。
(4)自由格间运算
方法中采用层次坐标和格集及其条件表达式的方法提供了一种在设计阶段对结果报表中的数据项(单元格)命名的机制(层次坐标、位移坐标和格集)。从而实现灵活的自由格间计算,无论有规律的跨行组运算还是无规律的独立格计算都可以方便地完成。
附图说明
图1为一个多层交叉汇总报表示意图。
图2为一个多源分片报表示意图。
图3为一个带排名计算报表示意图。
图4是针对图1实例设置扩展格及其内表达式的示意图。
图5是针对图2实例设置扩展格及其内表达式的示意图。
图6是针对图3实例设置扩展格及其内表达式的示意图。
图7是本发明所述方法的流程图。
具体实施方式
下面结合说明书附图给出一种非线性报表生成方法的具体实施案例及基于此实现的部分典型报表制作实例,并对本发明作进一步详细的描述。
1.一些事先约定
采用与EXCEL相同的单元格命名机制,如A1表示左上角的格子,A2表示第2行第1列的格子等。合并格命名为其左上角的单元格的名称。
如:
 A1  B1  C1  D1
 A2  C2
 A3  B3
为叙述方便,用小写字母表示扩展后报表上的单元格,如a1,b3等,而大写字母则表示扩展前报表上的单元格。
不失一般性,数据集内容可以用关系数据库的SELECT语句确定,在指明数据集时常常仅是指明其对应的SELECT语句。
定义几个在例子中需要用到的集合运算:
●list
语法:list(exp1,exp2,...);
函数将其参数中各表达式值计算出来按次序形成一个集合作为结果。
●select
语法:ds.select(exp,filter);
ds指数据集名称,exp是选出表达式,filter过滤条件,不写filter表示无须过滤。函数将ds中的记录先按条件filter过滤,然后逐行计算exp,将计算值构成一个有序的集合作为结果。
●group
语法:ds.group(exp,filter);
参数意义与select相同。group将取出的数据分组后再形成结果集合,即相邻相同的数据将被合并为一个值。若同样参数的select函数的结果为{1,1,1,1,3,3,2,2,3,1,1,2,2,3},则group的结果则为{1,3,2,3,1,2,3}。
select和group函数还都是数据集的划分运算,即将数据集的行划分成了多个部分,每个部分将对应其返回值(集合)中的一个元素。
2.扩展规则举例
例1,扩展前:
    A1     B1     C1     D1     E1
    A2     B2     C2     D2     E2
其中,A2为纵向扩展格,表达式为list(1,2,3,4);其它单元格均是非扩展格(以下未说明的均为非扩展格)。扩展后:
  a1   b1   c1   d1   e1
  1   b2   c2   d2   e2
  2   b3   c3   d3   e3
  3   b4   c4   d4   e4
  4   b5   c5   d5   e5
A2根据本格中运算结果集的元素个数向下复制成多个,依次写入结果集中的各个元素;而子格也随之被复制。
例2,扩展前:
    A1
    A2  B2
    A3  B3
其中B2为横向扩展格,表达式为list(1,2,3,4,5,6)。扩展后:
    a1
    a2   1   2   3   4   5   6
    a3   b3   c3   d3   e3   f3   g3
B2向右复制成多个,依次写入结果集中的各个元素;而其附属格也随之被复制。注意根据规则,B2格扩展时,会把它上面的格子(A1)拉大。
例3,扩展前:
    A1     B1     C1     D1
    A2     B2     C2     D2
其中C2为纵向扩展格,表达式为list(1,2,3),而将A2、B2和D2的左主格均设定为C2,此时A2,B2单元格的左主格C2在其右边。扩展后:
    a1     b1     c1     d1
    a2     b2     1     d2
    a3     b3     2     d3
    a4     b4     3     d4
C2主动向下复制,而子格也随之被复制(无论在左边还是右边)。
例4,扩展前:
    A1     B1     C1     D1     E1
    A2     B2     C2     D2     E2
其中A2为纵向扩展格;B2、C2、E2的左主格为A2,而D2的左主格被设置为根格。扩展后:
    a1     b1     c1     d1     e1
    a2     b2     c2 d2     e2
    a3     b3     c3     e3
    a4     b4     c4     e4
    a5     b5     c5     e5
A2向下复制成多个,其各个子格也随之被复制,而由于D2不是A2的子格,所以扩展后D2格合并成了一个大格d2。
例5,扩展前:
    A1     B1     C1
    A2     B2     C2
其中A2格与B2格均为纵向扩展格,B2的左主格为A2,C2的左主格为B2。在扩展时,先主扩展格后子扩展格,即先扩展A2,再在扩展出来的每一部分中分别扩展B2。扩展后:
a1 b1 c1
a2     b2     c2
    b3     c3
    b4     c4
a5     b5     c5
    b6     c6
a7     b7     c7
    b8     c8
    b9     c9
3.数据集计算举例
例1,扩展前:
  日期   回款额
  A2   B2
数据集ds1=SELECT date,pay FROM income
A2=ds1.select(date),纵向扩展
B2=ds1.pay
扩展后:
    日期   回款额
    2005-2-20   2300
    2005-3-14   1450
    2005-4-28   2369
    2005-6-2   2235
B2作为A2的子格,在扩展时被带动复制,B2运算时引用的数据集列将与A2选定的记录对应。
例2,扩展前:
    客户     产品     销售量
    A2     B2     C2
数据集ds1=SELECT customer,product,quantity FROM buy_record
A2=ds1.group(customer),纵向扩展
B2=ds1.group(product),纵向扩展
C2=ds1.sum(quantity)
其中sum表示求和运算,即将列quantity的值相加。
扩展后:
客户 产品     销售量
无锡食品加工厂 色拉油     200
大豆     400
天津长城化工厂 苯甲酸钠     190
苯丙酮     123
江苏天龙食品集团 色拉油     10
大豆     1000
苯甲酸钠     27
B2在计算时,其中的group函数运算落实将被限定在由A2中group函数划分过后的数据集行范围内进行,而非整个数据集,同时C2中的sum计算又将被限定在B2划分后的数据集行范围内。
例3,扩展前:
班级 姓名   科目 总分
  C2
A3   B3   C3   D3
  班级总分(B4)   D4
数据集ds1=SELECT class,name,subject,score FROM score_record
A3=ds1.group(class),纵向扩展
B3=ds1.group(name),纵向扩展
C2=ds1.group(subject),横向扩展
C3=ds1.score
D3=ds1.sum(score)
D4=ds1.sum(score)
扩展后:
班级 姓名     科目 总分
    数学     语文
  一班   李逵     80     60     140
  林冲     90     90     180
  卢俊义     80     90     170
  孙二娘     80     80     160
  吴用     90     100     190
  武松     90     90     180
    班级总分
二班     关羽     95     90     185
    刘备     80     100     180
    张飞     100     75     175
    班级总分     540
这是一个典型的交叉报表,其中的C3会同时跟随其左主格和上主格扩展成网状。D3和D4虽然表达式相同,但其主格不同,因此对应的数据集行范围也不同,因而计算结果不同。
例4,扩展前:
公司   评分
  B2(项目)
  A3   B3
数据集ds1=SELECT name FROM company
ds2=SELECT name FROM item
ds3=SELECT company_name,item_name,score FROM score
A3=ds1.select(name),纵向扩展
B2=ds2.select(name),纵向扩展
B3=ds3.sum(score,company_name==A3&&item_name==B2)
sum函数的第二个参数表明用于过滤数据集的条件。
扩展后:
公司     评分
    教务***     通用前台     业务平台
  清华创新     450     400     355
  用友软件     490     480     320
  安易软件     365     420     480
B3的表达式同时有数据集(ds3)和单元格(A3,B2)的引用,同时由于A3与B2分别由数据集ds1和ds2获得,从而在无须编写多表叉乘SQL或存储过程的情况下即很好地实现了多源关联的效果。
4.层次坐标与格集举例
在单元格后面的[]写各主格与偏移量构成单元格层次坐标的写法,主格与偏移量用:隔开,相对的偏移量(位移坐标)前将冠以+/-号分别表示向后向前偏移,为简化书写方便偏移量为0的主格及其偏移量可以省略不写,若所有主格偏移都是0,则[]整个可以不定。
例1,扩展前:
 A1  B1  C1  D1
 A2  B2  C2  D2
扩展后:
  a1   b1   c1   d1
  a2   b2   c2   d2
  c3   d3
  b4   c4   d4
  c5   d5
  c6   d6
  a7   b7   c7   d7
  c8   d8
  c9   d9
  b10   c10   d10
  c11   d11
  c12   d12
c8的层次坐标为C2[A2:2,B2:1];
d6的层次坐标为D2[A2:1,B2:2,C2:3];
c10相对于c8的位移坐标为C2[B2:+1,C2:-1](A2上偏移为0省略)。
例2,扩展前:
    B1     比去年同期
  A2     B2     C2
  比上期     B3
数据集ds1=SELECT years,monthes,item,amount FROM income
A2=ds1.group(monthes),纵向扩展
A3的左主格设置为A2
B1=ds1.group(years),横向扩展
B2=ds1.sum(amount)
B3=B2-B2[A2:-1]
C1的上主格设置为B1
C2=B2-B2[B1:-1]
扩展后:
    2004 比去年同期     2005     比去年同期
  1月     123.00     134.00     11.00
  比上期
  2月     234.00     255.00     21.00
  比上期     111.00     121.00
  3月     356.00     378.00     22.00
  比上期     122.00     123.00
B3和C2的表达式中实现了对B2的跨行(列)引用。
在单元格层次坐标(位移坐标)的[]中去掉若干个主格及其偏移量,并在[]后加上{}表示由同一个原始格在扩展过程中复制出来的、且在[]中留下的主格上的偏移量为[]所写的偏移量的一批单元格构成的格集,需要对格集再过滤时则在{}中写上过滤条件。
例3,扩展前:
  A1  B1  C1  D1
 A2  B2  C2  D2
扩展后:
  a1   b1   c1   d1
  a2   b2   c2   d2
  c3   d3
  b4   c4   d4
  c5   d5
  c6   d6
  a7   b7   c7   d7
  c8   d8
  c9   d9
  b10   c10   d10
  c11   d11
  c12   d12
d7,d8,d9在A2和B2上的层次均相同,仅在C2上的层次不同,则可以用格集D2[A2:2,B2:1]{}表示。类似地,C2[A2:1,B2:2]{}={c4,c5,c6}。
相对于d11的格集D2[A2:-1,B2:0]{}则是{d4,d5,d6},而相对于d8的格集D2[A2:-1,B2:0]{}则是{d1,d3}。
例4,扩展前:
客户     类型 总计
    B2
    A3     B3     C3
    总计     B4     C4
数据集ds1=SELECT customer FROM custom_rec
ds2=SELECT style FROM machine
ds3=SELECT customer,quantity,style FROM record
A3=ds1.group(customer),纵向扩展
B2=ds.group(style),横向扩展
B3=ds3.sum(quantity,customer==A3&&style==B2)
B4=SUM(B3{})
C3=SUM(B3{})
C4=SUM(B3{})
其中SUM表示求和运算。
扩展后:
客户    类型 总计
   A型机    B型机     C型机
  北京钢铁公司    6    0     20     26
  北方矿业集团公司    7    25     25     57
  成都电力集团    9    20     10     39
  大连有色金属集团    0    0     90     90
  广东矿业局    20    8     0     28
  总计    42    53     145     240
B4、C3、C4表达式中的格集写法虽然一致,但由于其主格不同,则代表的格集也不同,导致其表达式运算结果不同。
例5,扩展前:
    占比   实际金额
    A2     B2   C2
    A3     B3   C3
    资产总额     B4   C4
数据集ds1=SELECT amount,item FROM record
ds2=SELECT type,id FROM type
A2=ds2.group(type),纵向扩展
A3=ds2.group(id),纵向扩展,左主格设置为A2
B2=SUM(C3[A2:0]{})/C4
B3=C3/C4
C2=SUM(C3{})
C3=ds1.sum(amount,item==A3)
C4=ds1.sum(amount)
扩展后
    占比     实际金额
  非盈利资产     0.019     671.000
  非盈利资产5     0.001     45.000
  非盈利资产4     0.001     35.000
  非盈利资产3     0.013     456.000
  非盈利资产2     0.002     57.000
  非盈利资产1     0.002     78.000
  非收益资产     0.356     12636.000
  非收益资产19     0.191     6778.000
  非收益资产18     0.016     567.000
  非收益资产17     0.123     4356.000
  非收益资产16     0.013     456.000
  非收益资产15     0.010     345.000
  非收益资产14     0.004     134.000
  盈利资产     0.541     19209.000
  其他盈利资产     0.251     8908.000
  债券投资     0.281     9989.000
  存放央行     0.002     78.000
  贷款资产     0.007     234.000
  收益资产     0.085     3018.000
  收益资产13     0.003     124.000
  收益资产12     0.006     214.000
  收益资产11     0.060     2134.000
  收益资产10     0.015     546.000
  资产总额     1.000     35534.000
这里利用格集计算了占比(每一项数据与总和的比例,总和用格集求出)。
例6,扩展前:
A1     B1     C1
有效测量平均值     B2     C2
这里所谓的“有效测量值”是指有效电压(B1)不超100,有效电流(C1)不超过10的测量值。
数据集ds1=SELECT number,v,i FROM result
A1=ds1.select(number),纵向扩展
B1=ds1.v
C1=ds1.i
B2=AVG(B1{B1<=100})
C2=AVG(C1{C1<=10})
其中AVG为求平均运算。
扩展后:
1 76.5 8.54
  2     45.1     7.25
  3     120.0     1.26
  4     25.8     48.5
  5     90.0     8.60
  6     76.2     5.00
  7     35.0     13.3
  8     117.2     5.25
  9     258.5     7.86
  有效测量平均值     58.1     6.25
这个例子中应用了格集的过滤条件。
在格集的条件表达式中,有时候需要使用表达式所在单元格或其主格的值,在格集条件表达式中的单元格前冠以$符号则表示将引用表达式原单元格的值。
例7,扩展前:
         A                     B              C              D
    list(4,8,12) list(1,2,3,4) A1+B1  C1[A1:1]{B1=$B1}
扩展后:
                        a         b           c         d
Figure A20071006470400191
Figure A20071006470400201
格集C1[A1:1]{}={c1,c2,c3,c4},再附加过滤条件{B1=$B1}来选择,该条件中,B1和$B1的含义不同的,B1表示的是格集{c1,c2,c3,c4}中,每个单元格对应的B1的值,所以B1将分别是(1,2,3,4)。而$B1表示的是表达式所在单元格对应的B1的值,它是一个数,如$B1在d1格中表示b1的值1;$B1在d6格中表示b6的值2;$B1在d12格中表示b12的值4等等,导致扩展结果如上。
5.报表制作实例
例1,关联交叉报表
如图1这样的多层交叉汇总报表,设相关的物理表结构为:
create table″CONTRACTSUM″(   ---合同销量表
″CUSTOMER″CHAR(50),         ---厂商
″PRODUCT″CHAR(50),          ---产品
″AMOUNT″DECIMAL(16)          ---销量
);
create table″PRODUCT″(       ---产品表
″PRODUCT_ID″CHAR(10),       ---产品ID
″PRODUCT_NAME″CHAR(40),     ---产品名称
″DESCRIBE″CHAR(255),        ---描述
″TYPE″CHAR(1)                ---产品类型
);
create table″CUSTOMER″(      ---客户表
″CUSTOMER_ID″ CHAR(10),     ---客户ID
″CUSTOMER_NAME″CHAR(20),    ---客户名称
″TEL″CHAR(10),              ---电话
″FAX″CHAR(10),              ---传真
″ADDRESS″CHAR(255),         ---地址
″PROVINCE″CHAR(10),         ---省份
″CITY″CHAR(10),             ---城市
″MEMO″CHAR(255),            ---备注
″CUSTOMERTYPE″CHAR(1)        ---客户类型
);
采用本发明所述的方法设计与生成报表的流程如图7所示:(1)确定报表运算时需要用到的数据集,并分别命名:
ds1=SELECT AMOUNT,CUSTOMER,PRODUCT FROM CONTRACTSUM
ds2=SELECT PRODUCT_ID,PRODUCT_NAME,TYPE FROM PRODUCT
ds3=SELECT CUSTOMERTYPE,CUSTOMER_ID,CUSTOMER_NAME FROM CUSTOMER
(2)在表格中确定扩展格及其扩展方向:
如图4,令A4,B4是纵向扩展格;C2,C3为横向扩展格。
(3)设置单元格的左、上主格:
所有单元格采用缺省规则即可。
(4)在各单元格内填入运算表达式。
A4=ds3.group(CUSTOMERTYPE)
B4=ds3.group(CUSTOMER_ID)
C2=ds2.group(TYPE)
C3=ds2.group(PRODUCT_ID)
为了显示出代码对应的名称,上面这4个单元格还需要设置显示值;
C4=ds1.sum(AMOUNT,CUSTOMER=B3 and PRODUCT=C2)
C5=sum(C4{})
C6=sum(C5{})
(5)对报表进行扩展和计算,即可得到生成后的实例报表。
C4的计算是针对ds1的,其中用到了B3和C2格的内容,即与ds2和ds3进行了关联计算。这种能力在传统工具只能通过事先做好的复杂SQL语句或存储过程实现,无法在报表设计中完成。
例2,多源分片报表
如图2这样的多源分片报表,设相关物理表结构为:
create table″CUSTOMER″(    ---客户表
″CUSTOMER_ID″CHAR(10),    ---客户ID
″CUSTOMER_NAME″CHAR(20),  ---客户名称
″TEL″CHAR(10),            ---电话
″FAX″CHAR(10),            ---传真
″ADDRESS″CHAR(255),       ---地址
″PROVINCE″CHAR(10),        ---省份
″CITY″CHAR(10),            ---城市
″MEMO″CHAR(255),           ---备注
″CUSTOMERTYPE″CHAR(1)       ---客户类型
);
create table″PRODUCT″(      ---产品表
″PRODUCT_ID″CHAR(10),      ---产品ID
″PRODUCT_NAME″CHAR(40),    ---产品名称
″DESCRIBE″CHAR(255),       ---描述
″TYPE″CHAR(1)               ---产品类型
);
create table″CONTRACTSUM″(  ---合同销量表
″CUSTOMER″CHAR(50),        ---厂商
″PRODUCT″CHAR(50),         ---产品
″AMOUNT″DECIMAL(16),       ---销售金额
″SIGNDATE″DATETIME,        ---合同签定日期
″TRANSPORTDATE″DATETIME,   ---合同签定日期
″QUANTITY″DECIMAL(16),     ---销售数量
″PAYAMOUNT″DECIMAL(16)      ---已支付金额
);
采用本发明所述的方法设计与生成报表的流程如图7所示:
(1)确定报表运算时需要用到的数据集,并分别命名:
ds1=SELECT CUSTOMERTYPE,CUSTOMER_ID,CUSTOMER_NAME FROM CUSTOMER
ds2=SELECT PRODUCT_ID,PRODUCT_NAME,TYPE FROM PRODUCT
ds3=SELECT AMOUNT,CUSTOMER,PRODUCT,SIGNDATE,TRANSPORTDATE,
       QUANTITY,PAYAMOUNT FROM CONTRACTSUM
(2)在表格中确定扩展格及其扩展方向:
如图5,令B4,C4,B10是纵向扩展格;E2,E3为横向扩展格。
(3)设置单元格的左、上主格:
所有单元格采用缺省规则即可。
(4)在各单元格内填入运算表达式:
B4=ds1.group(CUSTOMERTYPE)
C4=ds1.group(CUSTOMER_ID)
E2=ds2.group(TYPE)
E3=ds2.group(PRODUCT_ID)
为了显示出代码对应的名称,上面这4个单元格还需要设置显示值;
B10=ds3.group(year(SIGNDATE))
E4=ds3.sum(AMOUNT,CUSTOMER=C4&&PRODUCT=E3)
E5=ds3.sum(QUANTITY,CUSTOMER=C4&&PRODUCT=E3)
E6=ds3.sum(AMOUNT,PRODUCT=E3&&SIGNDATE!=nu11)
E7=ds3.sum(QUANTITY,PRODUCT=E3&&SIGNDATE!=nu11)
E8=ds3.sum(AMOUNT,TRANSPORTDATE!=nu11&&PRODUCT=E3)
E9=ds3.sum(QUANTITY,PRODUCT=E3&&TRANSPORTDATE!=nu11)
E10=ds3.sum(AMOUNT,PRODUCT=E3)
E11=ds3.sum(QUANTITY,PRODUCT=E3)
E12=ds3.sum(AMOUNT,PRODUCT=E3&&PAYAMOUNT>0)
E13=ds3.sum(QUANTITY,PRODUCT=E3&&PAYAMOUNT>0)
(5)对报表进行扩展和计算,即可得到生成后的实例报表,如图2所示。
这张纵向分片报表的数据区从上至下分成了几片,是一个典型的动静片混合分片报表,各片分组层数不同,且片间有数据沟通(某些计算值是由其它行计算)。这种上下格式不一致的报表,其数据源不可能组织成单源(各片列数不同),也就无法被传统工具实现。
例3,带排名计算报表
如图3的带排名计算报表,设相关的物理表结构为:
create table″TELESELL″(    ---电信销售情况表
″AREA″CHAR(50),           ---地区
″TYPE″CHAR(50),           ---业务类型
″AMOUNT″DECIMAL(16)        ---销售额
);
采用本发明所述的方法设计与生成报表的流程如图7所示:
(1)确定报表运算时需要用到的数据集,并分别命名:
ds1=SELECT AREA,TYPE,AMOUNT FROM TELESELL
(2)在表格中确定扩展格及其扩展方向:
如图6所示,令A4是纵向扩展格,E2为横向扩展格。
(3)设置单元格的左、上主格:
所有单元格采用缺省规则即可。
(4)在各单元格内填入运算表达式:
A4=ds1.group(AREA)
B4=sum(E4{})
C4=count(B4[`0]{B4>$B4})+1
E2=ds1.group(TYPE)
E4=ds1.sum(AMOUNT)
F4=count(E4[`0;]{E4>$E4})+1)
C6=sum(B4{C4<=3})
F6=C6/sum(B4{})
其中的`0表示根格。
(5)对报表进行扩展和计算,即可得到生成后的实例报表。
排名计算是典型的跨行计算,需要在同列中找出比当前值大的数的个数。下方的几个单元格中又对表格中部分数进行了带条件引用(前三名),即独立格计算。该报表样式并不复杂,但格间运算会让传统工具非常为难,只能再次依靠程序代码,把数据事先计算好填入报表中。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (12)

1.非线性报表生成方法,包括如下步骤:
(1)确定报表运算时需要用到的数据集,并分别命名;
(2)在静态报表中确定某些单元格为扩展格,即主动扩展复制的单元格,并设置其扩展方向;
(3)设置所有单元格的左主格和上主格,即该单元格在纵向和横向扩展时需要跟随的扩展格;
(4)在各单元格内填入运算表达式;
(5)对报表进行扩展和计算,即可得到生成后的实际报表。
2.根据权利要求1所述的非线性报表生成方法,其特征在于:步骤(1)中所述的数据集为多个。
3.根据权利要求1所述的非线性报表生成方法,其特征在于:步骤(2)中扩展格的扩展方向分成纵向扩展和横向扩展两种,一个扩展格同时只有一个扩展方向。
4.根据权利要求1所述的非线性报表生成方法,其特征在于:步骤(3)中的纵向扩展格只有左主格而没有上主格,而横向扩展格只有上主格而没有左主格;非扩展格既有上主格也有左主格。
5.根据权利要求1或4所述的非线性报表生成方法,其特征在于:步骤(3)中所有的左主格只能是纵向扩展格或一个称为根格的逻辑假想格,所有的上主格只能是横向扩展格或根格。
6.根据权利要求1所述的非线性报表生成方法,其特征在于:步骤(4)中在单元格内填入的表达式分成集合运算和单值运算两种,其中扩展格中填入的表达式必须是集合运算。
7.根据权利要求1或6所述的非线性报表生成方法,其特征在于:步骤(4)中在单元格内的表达式能够自由引用数据集中的数据和单元格中的数据,并允许两者同时混合在一个表达式中。
8.根据权利要求7所述的非线性报表生成方法,其特征在于:步骤(4)中的单元格运算能够使用单元格的层次坐标或位移坐标以及格集的表示法,从而提供了一种在设计阶段为生成报表单元格命名的方案。
9.根据权利要求1所述的非线性报表生成方法,其特征在于:步骤(5)中对报表扩展计算时,先对扩展格进行计算和扩展,然后再对非扩展格计算,报表上有多个扩展格时,扩展次序是先主扩展格后子扩展格。
10.根据权利要求1或9所述的非线性报表生成方法,其特征在于:步骤(5)中对纵向/横向扩展格扩展时,将找出包括该格及所有后代格的最小连续行/列区域,将这片区域整体向下/向右复制多个,复制次数为该扩展格的运算结果的元素个数,而每个元素被依次写入复制出来的区域中对应的扩展格中,复制区域中其它单元格的表达式将被原样复制。
11.根据权利要求10所述的非线性报表生成方法,其特征在于:步骤(5)中扩展某扩展格时,对于复制区域中有某单元格不是该扩展格的子格或子格的子格,若扩展后能将这些复制出来的单元格连成一片,则将被合并成一个大格,否则不进行合并,除原始格外,这些复制出来的单元格被填空,而原始格中的表达式保持原样。
12.根据权利要求10所述的非线性报表生成方法,其特征在于:步骤(5)中对报表中某单元格计算涉及到数据集运算时,如果该单元格的主格线上有某扩展格对同一数据集进行了划分计算,则在计算该单元格表达式时,其数据集运算将被限制在划分过后的数据集内。
CN 200710064704 2007-03-23 2007-03-23 非线性报表生成方法 Pending CN101021839A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200710064704 CN101021839A (zh) 2007-03-23 2007-03-23 非线性报表生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200710064704 CN101021839A (zh) 2007-03-23 2007-03-23 非线性报表生成方法

Publications (1)

Publication Number Publication Date
CN101021839A true CN101021839A (zh) 2007-08-22

Family

ID=38709609

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200710064704 Pending CN101021839A (zh) 2007-03-23 2007-03-23 非线性报表生成方法

Country Status (1)

Country Link
CN (1) CN101021839A (zh)

Cited By (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100552682C (zh) * 2008-05-13 2009-10-21 北京润乾信息***技术有限公司 一种报表计算任务并发控制的方法
CN101308490B (zh) * 2008-04-28 2010-06-09 北京航空航天大学 一种动态报表生成方法及平台
CN101551794B (zh) * 2009-04-30 2011-05-04 用友软件股份有限公司 基于电子表格的多动态区域报表处理***及其方法
CN102567349A (zh) * 2010-12-20 2012-07-11 金蝶软件(中国)有限公司 表格头的处理方法和***
CN102591968A (zh) * 2011-12-31 2012-07-18 深圳联友科技有限公司 一种扩展表格的实现方法及扩展引擎
CN101556579B (zh) * 2009-05-08 2012-10-10 用友软件股份有限公司 用于动态报表区域的公式处理***及其方法
CN102982439A (zh) * 2012-11-12 2013-03-20 中国电子科技集团公司第十五研究所 生成电子公文的方法及电子公文生成***
CN103019728A (zh) * 2012-12-20 2013-04-03 厦门亿力吉奥信息科技有限公司 一种高效复杂报表解析引擎及其解析方法
CN103034553A (zh) * 2012-12-20 2013-04-10 厦门亿力吉奥信息科技有限公司 一种报表设计器智能验证的算法、方法及装置
CN103064689A (zh) * 2013-01-04 2013-04-24 大唐软件技术股份有限公司 一种动态生成报表页面的实现方法及***
CN103810149A (zh) * 2012-11-05 2014-05-21 航天信息软件技术有限公司 生成单据的方法及***
CN104102698A (zh) * 2014-06-30 2014-10-15 湖南中烟工业有限责任公司 基于实体交叉与选择的数据视图切换和旋转方法和装置
CN108021542A (zh) * 2017-11-29 2018-05-11 广州迈安信息科技有限公司 一种数据运算方法
CN108427663A (zh) * 2017-09-30 2018-08-21 平安科技(深圳)有限公司 电子装置、页面表格数据的处理方法及存储介质
CN109634992A (zh) * 2019-02-20 2019-04-16 北京虹晟信息科技有限公司 一种报表结构分解方法、报表生成方法、装置
CN109697211A (zh) * 2018-12-07 2019-04-30 用友网络科技股份有限公司 交叉表导出数据的处理方法及***、计算机可读存储介质
CN110110304A (zh) * 2019-03-29 2019-08-09 东软集团股份有限公司 表单扩展方法、装置、存储介质及电子设备
CN110851506A (zh) * 2018-07-25 2020-02-28 上海柯林布瑞信息技术有限公司 临床大数据的搜索方法及装置、存储介质、服务器
CN112580317A (zh) * 2020-12-29 2021-03-30 江苏金财信息技术有限公司 一种快速生成带层级汇总的动态交叉二维表的方法
CN112685423A (zh) * 2020-12-31 2021-04-20 天津浪淘科技股份有限公司 一种多源数据报表的生成方法、***以及执行方法

Cited By (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101308490B (zh) * 2008-04-28 2010-06-09 北京航空航天大学 一种动态报表生成方法及平台
CN100552682C (zh) * 2008-05-13 2009-10-21 北京润乾信息***技术有限公司 一种报表计算任务并发控制的方法
CN101551794B (zh) * 2009-04-30 2011-05-04 用友软件股份有限公司 基于电子表格的多动态区域报表处理***及其方法
CN101556579B (zh) * 2009-05-08 2012-10-10 用友软件股份有限公司 用于动态报表区域的公式处理***及其方法
CN102567349A (zh) * 2010-12-20 2012-07-11 金蝶软件(中国)有限公司 表格头的处理方法和***
CN102567349B (zh) * 2010-12-20 2015-09-16 金蝶软件(中国)有限公司 表格头的处理方法和***
CN102591968A (zh) * 2011-12-31 2012-07-18 深圳联友科技有限公司 一种扩展表格的实现方法及扩展引擎
CN102591968B (zh) * 2011-12-31 2016-03-16 深圳联友科技有限公司 一种扩展表格的实现方法及扩展引擎
CN103810149A (zh) * 2012-11-05 2014-05-21 航天信息软件技术有限公司 生成单据的方法及***
CN102982439A (zh) * 2012-11-12 2013-03-20 中国电子科技集团公司第十五研究所 生成电子公文的方法及电子公文生成***
CN103019728A (zh) * 2012-12-20 2013-04-03 厦门亿力吉奥信息科技有限公司 一种高效复杂报表解析引擎及其解析方法
CN103034553B (zh) * 2012-12-20 2015-07-15 厦门亿力吉奥信息科技有限公司 一种报表设计器智能验证的算法、方法及装置
CN103019728B (zh) * 2012-12-20 2015-07-15 厦门亿力吉奥信息科技有限公司 一种高效复杂报表解析引擎及其解析方法
CN103034553A (zh) * 2012-12-20 2013-04-10 厦门亿力吉奥信息科技有限公司 一种报表设计器智能验证的算法、方法及装置
CN103064689A (zh) * 2013-01-04 2013-04-24 大唐软件技术股份有限公司 一种动态生成报表页面的实现方法及***
CN103064689B (zh) * 2013-01-04 2016-06-01 大唐软件技术股份有限公司 一种动态生成报表页面的实现方法及***
CN104102698A (zh) * 2014-06-30 2014-10-15 湖南中烟工业有限责任公司 基于实体交叉与选择的数据视图切换和旋转方法和装置
CN104102698B (zh) * 2014-06-30 2017-06-20 湖南中烟工业有限责任公司 基于实体交叉与选择的数据视图切换和旋转方法和装置
CN108427663A (zh) * 2017-09-30 2018-08-21 平安科技(深圳)有限公司 电子装置、页面表格数据的处理方法及存储介质
CN108427663B (zh) * 2017-09-30 2020-08-04 平安科技(深圳)有限公司 电子装置、页面表格数据的处理方法及存储介质
CN108021542A (zh) * 2017-11-29 2018-05-11 广州迈安信息科技有限公司 一种数据运算方法
CN110851506A (zh) * 2018-07-25 2020-02-28 上海柯林布瑞信息技术有限公司 临床大数据的搜索方法及装置、存储介质、服务器
CN109697211A (zh) * 2018-12-07 2019-04-30 用友网络科技股份有限公司 交叉表导出数据的处理方法及***、计算机可读存储介质
CN109697211B (zh) * 2018-12-07 2020-12-01 用友网络科技股份有限公司 交叉表导出数据的处理方法及***、计算机可读存储介质
CN109634992A (zh) * 2019-02-20 2019-04-16 北京虹晟信息科技有限公司 一种报表结构分解方法、报表生成方法、装置
CN110110304A (zh) * 2019-03-29 2019-08-09 东软集团股份有限公司 表单扩展方法、装置、存储介质及电子设备
CN110110304B (zh) * 2019-03-29 2023-10-27 东软集团股份有限公司 表单扩展方法、装置、存储介质及电子设备
CN112580317A (zh) * 2020-12-29 2021-03-30 江苏金财信息技术有限公司 一种快速生成带层级汇总的动态交叉二维表的方法
CN112685423A (zh) * 2020-12-31 2021-04-20 天津浪淘科技股份有限公司 一种多源数据报表的生成方法、***以及执行方法

Similar Documents

Publication Publication Date Title
CN101021839A (zh) 非线性报表生成方法
CN111542813B (zh) 使用异构数据的对象模型来便于建立数据可视化
US20220309066A1 (en) Blending and Visualizing Data from Multiple Data Sources
CN101794280B (zh) 一种基于表格模板集的表格自动生成方法及***
Markusen Trade versus investment liberalization
US7693860B2 (en) Method and system to associate cell and item metadata
CN101308490B (zh) 一种动态报表生成方法及平台
JP6017309B2 (ja) データ分析式
CN102667774B (zh) 当从报告规范生成olap查询时补偿不平衡层级
CN110032720A (zh) 一种基于xml的可视化报告排版及自动生成方法及***
CN102141992B (zh) 多维数据库存储及查询的方法
JPH09326046A (ja) 3次元cadシステム、3次元モデル作成方法、及び3次元モデル作成用記憶媒体
CN102508850A (zh) 表单数据处理装置和表单数据处理方法
CN110543303A (zh) 一种可视化业务平台
CN104820684A (zh) 一种基于空间位置的快速联机分析处理方法
CN109325623A (zh) 订单配置与组板组坯虚拟板坯整体方案优化装置及方法
CN105760370A (zh) 一种插件式报表框架技术
Zhao et al. Co-optimization of design and fabrication plans for carpentry
CN101256553A (zh) 一种基于非线性报表生成方法的数据关联方法
CN102236662A (zh) 数据库查询和控制方法
CN113885859A (zh) 一种基于sis生产运行数据的低代码报表实现方法
US20080126395A1 (en) Automatically creating a relational database from a spreadsheet
CN101488142A (zh) 基于面拓扑关联约束的三维实体模型检索方法
CN101297290A (zh) 用于控制关系型数据库***的方法
CN112560158A (zh) 一种家装设计中的台面预览体生成方法和台面设计***

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C12 Rejection of a patent application after its publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20070822