三 报表示例
3.1网格报表
网格报表是我们最常见的报表之一,一般情况下,网格报表会根据数据集纵向扩展,我们将这样的网格报表称之为普通的网格报表;在实际的业务需求中,横向扩展的网格报表也会经常被应用到,下面我们对这两类网格报表做一下介绍。
3.1.1普通网格报表
设计时:
# 合并单元格B2、C2、D2、E2、F2、G2、H2,输入标题名称,并居中显示
# 选择 B4----H5为报表区域,设置报表边框
# 在B4、C4、D4、E4、F4、G4、H4中输入业务字段的名称,并将背景色设置为蓝色
# 在B5中,输入表达式p1.select(p1.产品ID),表示引用产品ID的全部数据。
# 在C5中,输入表达式p1.产品类别,其他单元格输入的表达式与C5类似。
运行时:
3.1.2横向扩展网格报表
横向扩展网格报表设计图:
横向扩展网格报表标题扩展属性设置图:
2
# B2输入标题名,为了使标题居中,添加批注colspan:$ALL.PR4C3+3,意思为根据第四行第三列的表达式selecth进行全列扩展,
# B4-B10添加表头。
# C4-C10添加业务字段。
# C4输入表达式p1.selecth(p1.产品ID),表示引用产品ID的全部数据进行横向扩展。
运行时:
3.2分组报表
3.2.1一级分组报表
设计时:
# 在B4、C4、D4、E4、F4、G4中输入需要显示的业务字段名称
# 在B5中输入p1.group(p1.产品类别),表示数据根据产品类别进行分组显示。
# 在C5中输入p1.select(p1.产品名称),意思是引用产品名称的全部数据。
# 在D5中输入p1.供应商, E5-G5 输入与D5类似。
运行时:
3.2.2二级分组报表
设计时:
# 在B4、C4、D4、E4、F4、G4中输入需要显示的业务字段名称
# 在B5中输入p1.group(p1.供应商),意思是对字段供应商的数据进行分组。
# 在C5中输入p1.group(p1.产品类别),意思是对字段产品类别的数据进行分组。
# 在D5中输入p1.select(p1.产品名称),意思是引用产品名称的数据。
# 在E5中输入p1.单位数量, E5-G5 输入与D5类似。
运行时:
3.2.3二级分组报表(行统计)
设计时:
# 合并B5、B6,输入表达式p1.group(p1.供货商),表示以供货商的数据进行分组。
# 在C5中,输入表达式p1.group(p1.产品类别),表示以产品类别的数据进行分组。
# 在D5中,输入表达式p1.select(p1.产品名称),表示引用产品名称的全部数据。
# 在E5-G5中,分别输入表达式p1.单位数量、p1.单价、p1.库存数量,表示这里引用的哪个关系的数据。
# 在F6中,输入表达式=SUM(F5),表示每个供货商中每个产品类别的各产品的单价之和。
# 在F7中,输入表达式=SUM(F5),表示为每种供货商的单价之和。
# 同理,在G6、G7中输入的表达式=SUM(G5),表示计算每个分组中库存数量的合计。
# 在H6、H7中输入的表达式=SUM(H5),表示计算每个分组中单价x数量的合计。
运行时:
3.2.4二级分组报表(行列统计)
设计时:
# 合并B5、B6,输入表达式p1.group(p1.产品类别),表示以产品类别的进行分组。
# 在C5中,输入表达式p1.group(p1.产品名称),表示以产品名称的数据进行分组。
# 在D5中,输入表达式p1.select(p1.供货商),表示引用供货商的全部数据。
# 在E5-G5中,分别输入表达式p1.单位数量、p1.单价、p1.库存数量,表示引用的关系数据。
# 在H5中,输入表达式=F5*G6,表示该单元格的值为单价x数量。
# 在F6中,输入表达式=SUM(F5),表示每个产品类别中每个产品的各供货商的单价之和。
# 在F7中,输入表达式=SUM(F6),表示为每种产品类别的单价之和。
# 同理,在G6、G7中输入的表达式=SUM(G5),表示计算每个分组中库存数量的合计。
# 在H6、H7中输入的表达式=SUM(H5),表示计算每个分组中单价x数量的合计。
运行时:
3.2.5二级分组报表(分组统计)
设计时:
# 合并B5、B6、B7,输入表达式p1.group(p1.供货商),表示以供货商的数据进行分组。
# 合并C5、C6中,输入表达式p1.group(p1.产品类别),表示以产品类别的数据进行分组。
# 在D5中,输入表达式p1.select(p1.产品名称),表示引用产品名称的全部数据。
# 在E5-G5中,分别输入表达式p1.单位数量、p1.单价、p1.库存数量,表示这里引用的哪个关系的数据。
# 在F6中,输入表达式=SUM(F5),表示每个供货商中每个产品类别的各产品的单价之和。
# 在F7中,输入表达式=SUM(F5),表示为每种供货商的单价之和。
# 在F8中,输入表达式=SUM(F5),表示为所有数据单价总合计。
# 同理,在G5、G6、G7中输入的表达式=SUM(G5),表示计算每个分组中库存数量的合计。
# 在H5、H6、H7中输入的表达式=SUM(H5),表示计算每个分组中单价x数量的合计。
运行时:
3.3交叉报表
3.3.1二维交叉报表
设计时:
# 在B5中,输入p1.group(p1.产品名称),表示纵向以产品名称进行分组。
# 在C4中,输入p1.grouph(p1.供应商),表示横向以供应商进行分组。
# 在C5中,输入=SUM(单价x库存数量),表示该单元格的值为对应的单价x库存数量。
# 在B2中,输入标题,添加批注colspan:$ALL.PR4C3 $PR4C3,表示标题根据第四行第三列的数据进行扩展,并在最终结果上加一列(因为计算居中时要包含B列)。
# 在B4中,添加批注display-type:slant-line,表示该单元格显示斜线。
# 在C5中,添加批注default-value:0,表示单元格默认值为0。
运行时:
3.3.2多维交叉报表
设计时:
# 在B6中,输入p1.group(p1.产品类别),表示以产品类别进行分组。
# 在C6中,输入p1.group(p1.产品名称),表示纵向以产品名称进行分组。
# 在D4中,输入p1.grouph(p1.地区),表示以地区进行分组。
# 在D5中,输入p1.grouph(p1.供应商),表示横向以供应商进行分组。
# 在D6中,输入=SUM(p1.单价*p1.库存数据),表示该单元格的值为对应的单价x库存数量。
# 在B2中,输入标题,添加批注colspan:$ALL.PR4C4+2,表示标题根据第四行第三列的数据进行扩展,并在最终结果上加两列(因为计算居中时要包含B和C列)。
# 合并B4、B5、C4、C5中,添加批注display-type:slant-line,表示该单元格显示斜线。
# 在D6中,添加批注default-value:0,表示单元格默认值为0。
运行时:
3.3.3二维交叉报表(行列统计)
设计时:
# 在B5中,输入p1.group(p1.产品名称),表示纵向以产品名称进行分组。
# 在C4中,输入p1.grouph(p1.供应商),表示横向以供应商进行分组。
# 在C5中,输入=SUM(p1.单价*p1.库存数据),表示该单元格的值为对应的单价x库存数量。
# 在C6中,输入=SUM(C5),表示计算每个供应商所有产品名称的采购成本(单价x库存数量)合计。
# 在D5中,输入=SUM(C5),表示计算所有供应商的每个产品名称的采购成本(单价x库存数量)合计。
# 在D6中,输入=SUM(D5),表示计算全部供应商产品的总成本。
# 在B2中,输入标题,添加批注colspan:$ALL.PR4C3+1,表示标题根据第四行第三列的数据进行扩展,并在最终结果上加一列(因为计算居中时要包含B)。
# 在B4中,添加批注display-type:slant-line,表示该单元格显示斜线。
# 在C5中,添加批注default-value:0,表示单元格默认值为0。
运行时:
3.3.4多维交叉报表(行统计)
设计时:
# 合并B6、B7、B8,输入p1.group(p1.产品类别),表示以产品类别进行分组。
# 合并C6、C7,输入p1.group(p1.产品名称),表示纵向以产品名称进行分组。
# 在D4中,输入p1.grouph(p1.地区),表示以地区进行分组。
# 在D5中,输入p1.grouph(p1.供应商),表示横向以供应商进行分组。
# 在D6中,输入=SUM(p1.单价*p1.库存数据),表示该单元格的值为对应的单价x库存数量。
# 在E6中,输入=SUM(D6),表示所有供应商中,每个产品的采购成本合计。
# 在D7-D9中,分别输入=SUM(D6),表示按照单元格所在行、列对应的分组数据,分别计算各分组的采购成本。
# 在E7-E9中,分别输入=SUM(E6),表示按照单元格所在行对应的分组数据,分别计算各分组的采购成本。
# 在B2中,输入标题,添加批注colspan:$ALL.PR4C4+2,表示标题根据第四行第三列的数据进行扩展,并在最终结果上加两列(因为计算居中时要包含B和C列)。
# 合并B4、B5、C4、C5中,添加批注display-type:slant-line,表示该单元格显示斜线。
# 在D6中,添加批注default-value:0,表示单元格默认值为0。
运行时:
3.3.5多维交叉报表(行列统计)
设计时:
# 合并B6、B7,输入p1.group(p1.产品类别),表示以产品类别进行分组。
# 在C6中,输入p1.group(p1.产品名称),表示纵向以产品名称进行分组。
# 合并D4、E4,输入p1.grouph(p1.地区),表示以地区进行分组。
# 在D5中,输入p1.grouph(p1.供应商),表示横向以供应商进行分组。
# 在D6中,输入=SUM(p1.单价*p1.库存数据),表示该单元格的值为对应的单价x库存数量。
# 在E6中,输入=SUM(D6),表示所有供应商中,每个产品的采购成本合计。
# 在D7-D8中,分别输入=SUM(D6),表示按照单元格所在行、列对应的分组数据,分别计算各分组的采购成本。
# 在E7-E8中,分别输入=SUM(E6),表示按照单元格所在行对应的分组数据,分别计算各分组的采购成本。
# 在F6-F7中,分别输入=SUM(E6)、=SUM(E7)、=SUM(E8),表示分别计算各分组数据上列的合计。
# 在B2中,输入标题,添加批注colspan:$ALL.PR4C4+2,表示标题根据第四行第三列的数据进行扩展,并在最终结果上加两列(因为计算居中时要包含B和C列)。
# 合并B4、B5、C4、C5中,添加批注display-type:slant-line,表示该单元格显示斜线。
# 在D6中,添加批注default-value:0,表示单元格默认值为0。
运行时:
3.4卡片报表
卡片式报表在其他报表工具中,有称其为“自由报表”,它是将数据库表中的每一条数据都以一个卡片的形式展现,在这一节,我们讲解一下卡片报表在X5report中的设计。
设计时:
# 合并单元格A4、A5、A6、A7、A8 ,对于卡片报表,合并第一列的单元格目的是将该部分作为一个整体进行显示。该方法也适用于“主从报表”的制作。
# 合并单元格B2、C2、D2、E2、F2、G2,输入标题名称,并居中显示
# 在C4中输入e1.select(e1.雇员ID),
# 在E4中输入e1.姓名, C5、C6、C7、C8、E5、E6输入方式与E4类似。
运行时:
3.5主从报表
3.5.1普通主从报表
设计时:
# 合并B1-G1,输入标题,并居中显示。
# 在B3-G6区域中,输入主表字段标题与引用业务字段。
# 在B7-G8区域中,输入从表字段标题与引用业务字段。
# 在C3中,输入p1.select(p1.订单ID),表示主表引用p1数据集的数据。
# 在C3中,添加批注is-master-dataset:true,表示p1数据集为主表。
# 在C3中,添加批注individual-table:true,表示该区域独立成一张表。
# 在C8中,输入e1.select(e1.订单ID,'e1.订单ID=p1.订单ID'),表示从表引用e1数据集的数据,并使用订单ID作为外键关联主表。
# 在C8中,添加批注master-dataset:p1,表示e1数据集的主表是p1。
# 在C8中,添加批注page-record:1,表示打印时,每页显示一张主从报表。
# 在B8中,输入=COUNT(C8),并添加批注v-acc:true、v-group:$PR3C3,表示该列单元格按照e1数据集的数据进行序号递增。
# 合并A3-A9,表示A3-A9所在的行作为一个整体显示。
运行时:
3.5.2分组主从报表
设计时:
# 合并B1-G1,输入标题,并居中显示。
# 在B3-G6区域中,输入主表字段标题与引用业务字段。
# 在B7-G8区域中,输入从表字段标题与引用业务字段。
# 在C3中,输入p1.select(p1.订单ID),表示主表引用p1数据集的数据。
# 在C3中,添加批注is-master-dataset:true,表示p1数据集为主表。
# 在C3中,添加批注individual-table:true,表示该区域独立成一张表。
# 在B8中,输入e1.group(e1.订单ID,'e1.订单ID=p1.订单ID'),表示引用e1数据集的数据并根据订单ID进行分组。使用自身的订单ID作为外键关联主表。
# 在B8中,添加批注master-dataset:p1,表示e1数据集的主表是p1。
# 在B8中,添加批注page-record:1,表示打印时,每页显示一张主从报表。
# 在C8中,输入e1.select(e1.产品名称),表示引用e1数据集的全部数据。
# 合并A3-A9,表示A3-A9所在的行作为一个整体显示。
运行时:
3.6多源关联分片报表
3.6.1多源交叉报表
设计时:
# 在B2中,输入标题,添加批注colspan:$ALL.PR4C3+1,表示标题会以第四行第三列的数据进行扩展,并最终结果+1列(因为计算居中时要包含B列)。
# 在B5中,输入s1.group(s1.产品名称),表示纵向使用s1数据集进行扩展,并对产品名称进行分组。
# 在C4中,输入s2.grouph(s2.供应商),表示横向根据s2数据集进行扩展,并对供货商进行分组。
# 在C5中,输入=SUM(s1.单价*s1.库存数据),表示该单元格的值为单价乘以库存数量。
# 在C5中,添加批注conditionv:s2.供应商ID=s1.供应商ID,表示以供应商ID作为s1和s2数据集的关联关系。
运行时:
3.6.2多源纵向分片报表
设计时:
# 在B6中,输入s1.group(s1.产品类别),表示以产品类别进行分组。
# 在C6中,输入s1.group(s1.产品名称),表示纵向以产品名称进行分组。
# 在D4中,输入s1.grouph(s1.地区),表示以地区进行分组。
# 在D5中,输入s1.grouph(s1.供应商),表示横向以供应商进行分组。
# 在D6中,输入=SUM(s1.单价*s1.库存数据),表示该单元格的值为对应的单价x库存数量。
# 在B2中,输入标题,添加批注colspan:$ALL.PR4C4+2,表示标题根据第四行第四列的数据进行扩展,并在最终结果上加两列(因为计算居中时要包含B、C列)。
# 在B4中,添加批注display-type:slant-line,表示该单元格显示斜线。
# 类似的,在B7-D7的区域,输入对应的s2数据集的表达式。
# 在D7中,添加批注main-dataset:s1,conditionv:s2.供应商ID=s1.供应商ID,表示s2以s1数据集为主表,通过供应商ID相关联。
运行时:
3.6.3多源横向分片报表
设计时:
# 在B6中,输入s1.group(s1.产品类别),表示以产品类别进行分组。
# 在C6中,输入s1.group(s1.产品名称),表示以产品名称进行分组。
# 在D4中,输入s1.grouph(s1.地区),表示以地区进行分组。
# 在D5中,输入s1.grouph(s1.供应商),表示横向以供应商进行分组。
# 在D6中,输入=SUM(s1.单价*s1.库存数据),表示该单元格的值为对应的单价x库存数量。
# 在B2中,输入标题,添加批注colspan:$ALL.PR4C4+2,表示标题根据第四行第四列的数据进行扩展,并在最终结果上加两列(因为计算居中时要包含B、C列)。
# 合并B4、B6、C4、C5,添加批注display-type:slant-line,表示该单元格显示斜线。
# 类似的,在E4-E6的区域,输入对应的s2数据集的表达式。
# 在E6中,添加批注conditionh:s2.产品ID=s1.产品ID,表示s2和s1数据集通过产品ID相关联。
运行时:
3.6.4多源双向分片报表
设计时:
# 在B6中,输入s1.group(s1.订单年份),表示以订单年份)进行分组。
# 在C6中,输入s1.group(s1.订单月份),表示以订单月份进行分组。
# 在D4中,输入s1.grouph(s1.地区),表示以地区进行分组。
# 在D5中,输入s1.grouph(s1.城市),表示以城市进行分组。
# 在D6中,输入=SUM(s1.单价*s1.数量),表示该单元格的值为对应的单价x数量单位。
# 在B2中,输入标题,添加批注colspan:$ALL.PR4C4+2,表示标题根据第四行第四列的数据进行扩展,并在最终结果上加两列(因为计算居中时要包含B、C列)。
# 合并B4、B6、C4、C5,添加批注display-type:slant-line,表示该单元格显示斜线。
# 在B7中,输入s2.group(s2.职务),表示以职务进行分组。
# 在C7中,输入s2.group(s2.雇员姓名),表示以雇员姓名进行分组。
# 在D7中,添加批注main-dataset:s1和conditionv:s2.雇员ID=s1.雇员ID,表示s2和s1数据集通过雇员ID相关联。
# 在E4中,输入产品类别。
# 在E5中,输入s3.grouph(s3.产品类别),表示以产品类别进行分组。
# 在E6中,添加批注main-dataset:s1和conditionh:s3.产品ID=s1.产品ID,表示s3和s1数据集通过产品ID相关联。
# 在E7中,添加批注main-dataset:s1和conditionh:s3.产品ID=s1.产品ID和conditionv:s2.雇员ID=s1.雇员ID,表示该单元格计算的数据必须符合批注里给定的两个关联条件。
运行时:
3.7报表特性
3.7.1递增序号
以普通网格报表为例。设计时:
# 添加新列(B列)。
# 在B4中,输入文字“序号”。
# 在B5中,输入=COUNT(C5),并添加批注v-acc:true、v-group:$ALL,表示根据C5单元格的全部数据进行序号递增。
运行时:
3.7.2单元格扩展
对于列会自动扩展,即使用表达式selecth、grouph的报表。为了保证标题可以在列扩展之后仍可以居中显示。我们使用批注colspan和rowspan进行设置。
设计时:
在B2中,插入批注colspan:$ALL.PR4C3+1。
colspan:$ALL:固定值,列的扩展。
PR3C3+1:表示标题按照第三行,第三列进行显示。由于B列并没有在C4的计算之中,所以最后要加上这一列。
3.7.3行列隐藏
在使用报表时,常常会遇到这样的情况:例如,用户希望某些数据不显示,或希望只显示某些数据。根据该需求,我们提供了行、列、指定值或条件隐藏的方法来设计报表。
行隐藏:
# 在A3中,添加v-visible:false,表示第四行在报表中不显示。
注意:v-visible:false为行属性,所以需要添加在行的第一个单元格。
列隐藏:
# 在F1中,添加h-visible:false,表示第F列在报表中不显示。
注意:h-visible:false为列属性,所以需要添加在列的第一个单元格。
条件隐藏:
# 在A1中,添加批注v-visible:(产品ID = '1' or 产品ID = '3') and 产品类别 ='调味品',表示显示符合给定条件的数据。
注意:v-visible:false为行属性,所以需要添加在行的第一个单元格。
3.7.4排序与条件过滤
语法:
group/grouph(分组字段, 过滤条件, 排序方式)
select/selecth(关键字段, 过滤条件, 排序方式)
排序方式:field:排序字段;order:{ ascending|descending };type:{ text|number }
说明:
field:需要排序的字段
order:顺序,ascending表示升序,descending表示降序。默认为升序。
type:字段类型,text为文本类型,number为数字类型。
如:产品信息表需要按照产品单价排序,那么我们要在单元格内写:p1.select(p1.产品名称,'','field:单价;order:ascending;type:number')
(第二个参数过滤条件为空,需要写一个’’来占位)
表示按照字段单价升序排序,字段类型为number型。也可以写成p1.select(p1.产品名称,'','field:单价')。
过滤条件:
如:主从报表的从表定义,e1.group(e1.订单ID,'','订单ID=p1.订单ID')
表示自身订单ID字段要关联p1数据集的订单ID字段。
3.7.5报表链接
设计时:
# 在B5中,插入批注:href="$UI/pc/property/reportLinks.w?Category-Name=$RCATEGORYNAME" title="产品明细-{$RCATEGORYNAME}"/
# 表示弹出标题为产品明细-{$RPRODUCTNAME}的对话框(model=’dialog’),并传入参数Category-Name。
说明:model为打开链接模式,包括dialog(对话框),window(portal)
运行时:
3.8报表运算
3.8.1合计值
请参考网格报表、分组报表、交叉报表中都进行了计算合计的演示。
3.8.2平均值
我们以二级分组报表(行统计为例)
设计时:
# 将F6单元格中的内容修改为=avg(F5),表示计算各个类别产品单价的平均值。
运行时:
3.8.3占比
设计时:
# 添加一列G。
# 在G5中,输入=F5 div F7,表示该单元格的值为F5除以F7的值,即该产品的库存占总库存的百分比。
# 在G6中,输入=F6 div F7,表示该单元格的值为F6除以F7的值,即该类产品的库存占总库存的百分比。
运行时: