如果脚本复用,可以把脚本保存到SPL文件(文件后缀为.splx/.spl/.dfx),数据处理用SPL文件模式,这样也更方便调试。
第一步:设计填报表
打开润乾报表设计器,启动示例数据库,连接demo数据源。
点击【文件】à【新建填报表】,系统生成一张空白填报表。
编辑填报表内容和样式,内容如下图所示:
第二步:设置单元格类型
选中B1、A2、A4单元格,在右侧单元格属性栏中设置其单元格类型为维度格。
选中B2、B4单元格,在右侧单元格属性栏中设置其单元格类型为数值格,如下图。
第三步: 制作SPL
制作取数SPL:
订单表数据如图:
订单明细表数据如图:
由于本例中所有统计销售额数据不是直接来自于数据库表,而是由订单和订单明细两个基础表汇总而来,然后回填到另外两个汇总数据表中。所以本例不能用“ 使用向导生成脚本”快速生成取数和回填脚本,故我们使用SPL文件模式。
如果填报表需要通过SPL取数,那么首先需要通过集算器制作SPL文件,将填报表展现所需的数据通过变量的形式返回给填报表,在填报表单元格中就可以通过引用变量名获取数据。
打开集算器设计器,创建取数SPL并命名为8.splx。文件内容如下表:
|
A |
|
1 |
=connect("demo") |
连接 demo 数据库。 |
2 |
=A1.query("select * from 订单") |
在 demo 数据库中查询订单信息。 |
3 |
=A1.query("select * from 订单明细") |
在 demo 数据库中查询订单明细信息。 |
4 |
=A1.query("select * from 产品") |
在 demo 数据库中查询产品信息。 |
5 |
=A3.derive(A4.select@1(产品ID==A3.产品ID).类别ID:类别ID) |
在A3中增加“类别ID” |
6 |
=join(A2:订单,订单ID;A5:订单明细,订单ID) |
外键式连接。 |
7 |
=地区销售额=A6.group(订单.货主地区:货主地区,订单明细.类别ID:类别ID;订单明细.数量*订单明细.单价:销售额) |
按货主地区和类别ID分组,并将结果赋值给地区销售额对象。 |
8 |
=类别=A1.query("select * from 类别") |
|
9 |
=雇员销售额=A6.group(订单.雇员ID:雇员ID,订单明细.类别ID:类别ID;订单明细.数量*订单明细.单价:销售额) |
按雇员ID和类别ID分组,并将结果赋值给雇员销售额对象。 |
10 |
=A1.query("select * from 雇员") |
|
11 |
=员工=A10.derive(姓氏+名字:姓名) |
在A10中增加“姓名”字段,并将结果赋值给员工对象。 |
12 |
=A1.close() |
关闭数据库连接。 |
此填报报表涉及多张表包括:订单、订单明细、产品、类别和雇员。其中订单和订单明细有外键关联。
制作回填SPL:
打开集算器设计器,创建回填SPL并命名为8_save.splx。文件内容如下表:
|
A |
|
1 |
=connect@e("demo") |
连接 demo 数据库,使用选项@e表示出错时返回错误信息由代码自行处理,否则将中断。 |
2 |
>A1.update@k(地区销售额,CPXSTJA,类别ID,货主地区,销售额;类别ID,货主地区) |
对比主键插入和更新数据,(关于update函数使用参见扩展)。 |
3 |
>A1.update@k(雇员销售额,CPXSTJB,类别ID,雇员ID,销售额;类别ID,雇员ID) |
对比主键插入和更新数据。 |
4 |
=A1.error@m() |
获取数据库异常信息。 |
5 |
>if(A4==null,A1.commit(),A1.rollback()) |
如果没有异常抛出,则更新入库,否则回滚处理。 |
6 |
>A1.close() |
关闭数据库连接。 |
7 |
return A4 |
返回A4内容。 |
回填SPL的核心函数:db.update()
语法:
db.update(新对象:旧对象,更新表名称,字段:更新值,…;主键,…)
有旧对象时,新旧对象的数据先进行对比,将差异数据更新入库,例如,根据主键对比数据后,新增了的主键会进行插入操作;主键相同,其他字段不同时执行修改操作;主键字段减少时,则执行删除操作。
如果只有新对象,那么将直接将新对象的数据按照主键设置更新入库,此时只涉及修改和插入操作,无删除操作。
常用选项:
@u |
对比主键只生成UPDATE。无旧对象时不再对比,直接用新对象更新到数据库。 |
@i |
对比主键只生成 INSERT。无旧对象时不再对比,直接用新对象插入到数据库。 |
@a |
执行前清空目标表。先清空数据库表中的数据,再执行db.update(新对象:旧对象,更新表名称,字段:更新值,…;主键,…)。 |
@k |
完成后不提交事务,缺省将提交 |
@1 |
第一个字段是自增字段,没有对应表达式 |
@d |
只删除,此时必须有旧对象 |
示例:
1)根据新旧对象差异数据执行智能更新:
demo.update(employee:employee_old,员工表,'编号','部门','姓名','性别','出生日期','入职日期','籍贯','工资','应发工资': '工资'*1.2;编号)
说明:根据主键编号对比employee 和employee_old 的数据差异,并将差异数据智能更新到 demo 库的物理表员工表中,更新字段为'编号','部门','姓名','性别','出生日期','入职日期','籍贯','工资','应发工资',其中'应发工资'字段的更新值为'工资'*1.2。
2)根据新对象数据执行插入更新:
demo.update@i(employee,员工表,'编号','部门','姓名','性别','出生日期','入职日期','籍贯','工资','应发工资': '工资'*1.2;编号)
说明:对比主键编号,将employee的数据插入 demo 库的员工表中,插入数据的字段为 '编号','部门','姓名','性别','出生日期','入职日期','籍贯','工资','应发工资',其中'应发工资'字段的更新值为'工资'*1.2。
update函数详细说明可参考:http://doc.raqsoft.com.cn/esproc/func/dbupdate.html
更多集算器函数详细说明可参考:http://d.raqsoft.com.cn/esproc/func/
第四步:编辑维度格
选中B1单元格,在右侧单元格属性栏的表达式中编辑:=地区销售额.id(类别ID)。
编辑A2单元格的表达式为:=地区销售额.id(货主地区).rvs()。
编辑A4单元格的表达式为:=雇员销售额.id(雇员ID).rvs()。
这三个维度格单元格表达式返回维序列,是扩展格,维序列不可出现重复值,所以此例中通过id()进行了distinct操作。其中,B1单元格横向扩展;A2和A4单元格纵向扩展。
可参考同记录采集规则小节,查看该填报表对应的分片结果
第五步:设置字段名称
选中A2单元格,在右侧单元格属性栏的字段名称中输入“地区销售额.货主地区”。
选中B1单元格,在右侧单元格属性栏的字段名称中输入“类别ID” ,为公用维。
选中B2单元格,在右侧单元格属性栏的字段名称中输入“地区销售额.销售额”。
此处地区销售额为取数脚本返回的序表变量,表示前2行这片区域的数据取自地区销售额。
选中A4单元格,在右侧单元格属性栏的字段名称中输入“雇员销售额.雇员ID”。
选中B4单元格,在右侧单元格属性栏的字段名称中输入“雇员销售额.销售额”。
此处雇员销售额为取数脚本返回的序表变量,表示第4行这片区域的数据取自雇员销售额。
第六步:设置数据处理
数据处理中我们采取指定取数SPL和回填SPL的方式。此时需要事先已制作取数SPL和回填SPL。
点击【填报】à【数据处理】,打开数据处理界面设置数据来源和数据去向。如下图:
设置数据来源中的SPL文件后,切换到【保存对象旧数据】界面,点击【提取对象名】按钮提取对象名。
第七步:自动计算
编辑C2单元格的表达式为=sum({B2})。
编辑B3单元格的表达式为=sum({B2})。
编辑C3单元格的表达式为=sum({B3})。
编辑C4单元格的表达式为=sum({B4})。
编辑B5单元格的表达式为=sum({B4})。
编辑C5单元格的表达式为=sum({B5})。
第八步:设置显示格式
设置B2、C2、B3、C3、B4、C4、B5、C5的显示格式为¥#0.00。
第九步:设置编辑风格
此例中维度格对应的字段值是编码,但为了展现数据更直观,所以需要给维度格设置显示值,通常我们通过给维度格设置编辑风格来设置显示值。
例如B1,选中单元格B1,点击【填报】à【编辑风格】或者右击选择【编辑风格】,弹出“编辑风格”窗体,如下图所示:
在“编辑风格”下拉框中选择“下拉数据表”风格类型,如下图所示:
点击【设置】按钮,弹出下拉数据表编辑对话框,设置数据表名称、显示列、数据列和空选项文字。内容如下图所示:
例如A2,选中单元格A2,点击【填报】à【编辑风格】或者右击选择【编辑风格】,弹出“编辑风格”窗体,如下图所示:
在“编辑风格”下拉框中选择“下拉列表框”风格类型,如下图所示:
点击【设置】按钮,弹出下拉列表框编辑对话框,设置代码值、显示值和空选项文字,内容如下图所示:
例如A4,选中单元格A4,点击【填报】à【编辑风格】或者右击选择【编辑风格】,弹出“编辑风格”窗体,如下图所示:
在“编辑风格”下拉框中选择“下拉数据表”风格类型,如下图所示:
点击【设置】按钮,弹出下拉数据表编辑对话框,设置数据表名称、显示列、数据列和空选项文字。内容如下图所示:
保存该填报表文件为8.sht。
第十步:WEB预览
点击WEB预览按钮,服务器自动启动。填报表WEB预览效果如下图所示: