报表示例
网格报表
网格报表是我们最常见的报表之一,一般情况下,网格报表会根据数据集纵向扩展,我们将这样的网格报表称之为普通的网格报表;在实际的业务需求中,横向扩展的网格报表也会经常被应用到,下面我们对这两类网格报表做一下介绍。
普通网格报表
设计时:
- 合并单元格 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 类似。
运行时:
横向扩展网格报表
横向扩展网格报表设计图:
横向扩展网格报表标题扩展属性设置图:
- B2 输入标题名,为了使标题居中,添加批注 colspan:$ALL.PR4C3+3,意思为根据第四行第三列的表达式 selecth 进行全列扩展,
- B4-B10 添加表头。
- C4-C10 添加业务字段。
- C4 输入表达式 p1.selecth(p1.产品 ID),表示引用产品 ID 的全部数据进行横向扩展。
运行时:
分组报表
一级分组报表
设计时:
- 在 B4、C4、D4、E4、F4、G4 中输入需要显示的业务字段名称
- 在 B5 中输入 p1.group(p1.产品类别),表示数据根据产品类别进行分组显示。
- 在 C5 中输入 p1.select(p1.产品名称),意思是引用产品名称的全部数据。
- 在 D5 中输入 p1.供应商,E5-G5 输入与 D5 类似。
运行时:
二级分组报表
设计时:
- 在 B4、C4、D4、E4、F4、G4 中输入需要显示的业务字段名称
- 在 B5 中输入 p1.group(p1.供应商),意思是对字段供应商的数据进行分组。
- 在 C5 中输入 p1.group(p1.产品类别),意思是对字段产品类别的数据进行分组。
- 在 D5 中输入 p1.select(p1.产品名称),意思是引用产品名称的数据。
- 在 E5 中输入 p1.单位数量,E5-G5 输入与 D5 类似。
运行时:
二级分组报表(行统计)
设计时:
- 合并 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数量的合计。
运行时:
二级分组报表(行列统计)
设计时:
- 合并 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数量的合计。
运行时:
二级分组报表(分组统计)
设计时:
- 合并 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),表示为每种供货商的单价之和。
- 在 F 8中,输入表达式 =SUM(F5),表示为所有数据单价总合计。
- 同理,在 G5、G6、G7 中输入的表达式 =SUM(G5),表示计算每个分组中库存数量的合计。
- 在 H5、H6、H7 中输入的表达式 =SUM(H5),表示计算每个分组中单价x数量的合计。
运行时:
交叉报表
二维交叉报表
设计时:
- 在 B5 中,输入 p1.group(p1.产品名称),表示纵向以产品名称进行分组。
- 在 C4 中,输入 p1.grouph(p1.供应商),表示横向以供应商进行分组。
- 在 C5 中,输入 =SUM(单价x库存数量),表示该单元格的值为对应的单价x库存数量。
- 在 B2 中,输入标题,添加批注 colspan:$ALL.PR4C3 + 1,表示标题根据第四行第三列的数据进行扩展,并在最终结果上加一列(因为计算居中时要包含B列)。
- 在 B4 中,添加批注 display-type:slant-line,表示该单元格显示斜线。
- 在 C5 中,添加批注 default-value:0,表示单元格默认值为0。
运行时:
多维交叉报表
设计时:
- 在 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,表示该单元格显示斜线。
- 在 D 6中,添加批注 default-value:0,表示单元格默认值为0。
运行时:
二维交叉报表(行列统计)
设计时:
- 在 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。
运行时:
多维交叉报表(行统计)
设计时:
- 合并 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。
运行时:
多维交叉报表(行列统计)
设计时:
- 合并 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。
运行时:
卡片报表
卡片式报表在其他报表工具中,有称其为“自由报表”,它是将数据库表中的每一条数据都以一个卡片的形式展现,在这一节,我们讲解一下卡片报表的设计。
设计时:
- 合并单元格 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 类似。
运行时:
主从报表
普通主从报表
设计时:
- 合并 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 所在的行作为一个整体显示。
运行时:
分组主从报表
设计时:
- 合并 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 所在的行作为一个整体显示。
运行时:
多源关联分片报表
多源交叉报表
设计时:
- 在 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 数据集的关联关系。
运行时:
多源纵向分片报表
设计时:
- 在 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 相关联。
运行时:
多源横向分片报表
设计时:
- 在 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 相关联。
运行时:
多源双向分片报表
设计时:
- 在 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,表示该单元格计算的数据必须符合批注里给定的两个关联条件。
运行时:
报表特性
递增序号
以普通网格报表为例。设计时:
- 添加新列(B列)。
- 在 B4 中,输入文字“序号”。
- 在 B5 中,输入 =COUNT(C5),并添加批注 v-acc:true、v-group:$ALL,表示根据 C5 单元格的全部数据进行序号递增。
运行时:
单元格扩展
对于列会自动扩展,即使用表达式 selecth、grouph 的报表。为了保证标题可以在列扩展之后仍可以居中显示。我们使用批注 colspan 和 rowspan 进行设置。
设计时:
在 B2 中,插入批注 colspan:$ALL.PR4C3+1。
- colspan:$ALL:固定值,列的扩展。
- PR3C3+1:表示标题按照第三行,第三列进行显示。由于 B 列并没有在 C4 的计算之中,所以最后要加上这一列。
行列隐藏
在使用报表时,常常会遇到这样的情况:例如,用户希望某些数据不显示,或希望只显示某些数据。根据该需求,我们提供了行、列、指定值或条件隐藏的方法来设计报表。
行隐藏:
- 在 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 为行属性,所以需要添加在行的第一个单元格。
排序与条件过滤
- 语法:
group/grouph(分组字段, 过滤条件, 排序方式) select/selecth(关键字段, 过滤条件, 排序方式)
- 过滤条件:
扩展函数的第二个参数是过滤条件,例如:主从报表的从表定义,e1.group(e1.订单 ID,'订单 ID=p1.订单 ID') 表示自身订单 ID 字段要关联 p1 数据集的订单 ID 字段。
- 排序方式:
扩展函数的第三个参数是过滤条件,由三部分组成: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:单价')。
报表链接
设计时:
- 在 B5 中,插入批注:href="$UI/pc/property/reportLinks.w?Category-Name=$RCATEGORYNAME" title="产品明细-{$RCATEGORYNAME}"/
- 表示弹出标题为产品明细-{$RPRODUCTNAME}的对话框(model=’dialog’),并传入参数 Category-Name。
说明:model 为打开链接模式,包括 dialog(对话框),window(portal)
运行时:
报表二维码
设计时:
- 打开报表设计页面,内容的值即位二维码的值,内容可以是字符串常量或者数据集的列,切到“样式设置”,选择二维码,配置二维码选项即可。
- 特别说明:二维码请按照设计大小调整单元格的宽和高,尽量使用原始大小设计,避免自动缩放的二维码扫描识别困难。
运行时:
报表条形码
设计时:
- 打开报表设计页面,“内容”的值即位条形码的值,内容可以是字符串常量或者数据集的列,切到“样式设置”,选择条形码,配置条形码选项即可。
- 特别说明:条形码请按照设计大小调整单元格的宽和高,尽量使用原始大小设计,避免自动缩放的条形码扫描识别困难。
运行时:
报表运算
合计值
请参考网格报表、分组报表、交叉报表中都进行了计算合计的演示。
平均值
我们以二级分组报表(行统计为例)
设计时:
- 将 F6 单元格中的内容修改为 =avg(F5),表示计算各个类别产品单价的平均值。
运行时:
占比
设计时:
- 添加一列 G。
- 在 G5 中,输入 =F5 div F7,表示该单元格的值为 F5 除以 F7 的值,即该产品的库存占总库存的百分比。
- 在 G6 中,输入 =F6 div F7,表示该单元格的值为 F6 除以 F7 的值,即该类产品的库存占总库存的百分比。
运行时:
字符串拼接
设计时:
- 字符串拼接只能使用符号“&”或者“+”拼接,只支持字符串常量,并且字符串常量前后都需要双引号;
- 列表分组中的关键字段只能拼接到行尾,不能拼接到行首(例如本案例中的单元格主键列的拼接)。
运行时: