DFX 文件模式在数据处理中的使用

阅读(1013) 标签: dfx文件,

如果脚本复用,可以把脚本保存到DFX文件,数据处理用DFX文件模式,这样也更方便调试。

第一步:设计填报表

打开润乾报表设计器,启动示例数据库,连接demo数据源。

点击【文件】à【新建填报表】,系统生成一张空白填报表。

编辑填报表内容和样式,内容如下图所示:

第二步:设置单元格类型

选中B1A2A4单元格,在右侧单元格属性栏中设置其单元格类型为维度格。

选中B2B4单元格,在右侧单元格属性栏中设置其单元格类型为数值格,如下图。

第三步: 制作DFX

制作取数DFX

订单表数据如图:

订单明细表数据如图:

由于本例中所有统计销售额数据不是直接来自于数据库表,而是由订单和订单明细两个基础表汇总而来,然后回填到另外两个汇总数据表中。所以本例不能用“ 使用向导生成脚本”快速生成取数和回填脚本,故我们使用DFX文件模式。

如果填报表需要通过DFX取数,那么首先需要通过集算器制作DFX文件,将填报表展现所需的数据通过变量的形式返回给填报表,在填报表单元格中就可以通过引用变量名获取数据。

打开集算器设计器,创建取数DFX并命名为8.dfx。文件内容如下表:

 

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()

关闭数据库连接。

此填报报表涉及多张表包括:订单、订单明细、产品、类别和雇员。其中订单和订单明细有外键关联。

制作回填DFX

打开集算器设计器,创建回填DFX并命名为8_save.dfx。文件内容如下表:

 

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内容。

回填DFX的核心函数: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单元格横向扩展;A2A4单元格纵向扩展。

可参考同记录采集规则小节,查看该填报表对应的分片结果

第五步:设置字段名称

选中A2单元格,在右侧单元格属性栏的字段名称中输入“地区销售额.货主地区”。

 

选中B1单元格,在右侧单元格属性栏的字段名称中输入“类别ID ,为公用维。

选中B2单元格,在右侧单元格属性栏的字段名称中输入“地区销售额.销售额”。

此处地区销售额为取数脚本返回的序表变量,表示前2行这片区域的数据取自地区销售额。

选中A4单元格,在右侧单元格属性栏的字段名称中输入“雇员销售额.雇员ID”。

 

选中B4单元格,在右侧单元格属性栏的字段名称中输入“雇员销售额.销售额”。

此处雇员销售额为取数脚本返回的序表变量,表示第4行这片区域的数据取自雇员销售额。

第六步:设置数据处理

数据处理中我们采取指定取数DFX和回填DFX的方式。此时需要事先已制作取数DFX和回填DFX

点击【填报】à【数据处理】,打开数据处理界面设置数据来源和数据去向。如下图:

 

设置数据来源中的DFX文件后,切换到【保存对象旧数据】界面,点击【提取对象名】按钮提取对象名。

 

第七步:自动计算

编辑C2单元格的表达式为=sum({B2})

编辑B3单元格的表达式为=sum({B2})

编辑C3单元格的表达式为=sum({B3})

编辑C4单元格的表达式为=sum({B4})

编辑B5单元格的表达式为=sum({B4})

编辑C5单元格的表达式为=sum({B5})

第八步:设置显示格式

设置B2C2B3C3B4C4B5C5的显示格式为¥#0.00

第九步:设置编辑风格

此例中维度格对应的字段值是编码,但为了展现数据更直观,所以需要给维度格设置显示值,通常我们通过给维度格设置编辑风格来设置显示值。

例如B1,选中单元格B1,点击【填报】à【编辑风格】或者右击选择【编辑风格】,弹出“编辑风格”窗体,如下图所示:

在“编辑风格”下拉框中选择“下拉数据表”风格类型,如下图所示:

点击【设置】按钮,弹出下拉数据表编辑对话框,设置数据表名称、显示列、数据列和空选项文字。内容如下图所示:

例如A2,选中单元格A2,点击【填报】à【编辑风格】或者右击选择【编辑风格】,弹出“编辑风格”窗体,如下图所示:

在“编辑风格”下拉框中选择“下拉列表框”风格类型,如下图所示:

点击【设置】按钮,弹出下拉列表框编辑对话框,设置代码值、显示值和空选项文字,内容如下图所示:

例如A4,选中单元格A4,点击【填报】à【编辑风格】或者右击选择【编辑风格】,弹出“编辑风格”窗体,如下图所示:

在“编辑风格”下拉框中选择“下拉数据表”风格类型,如下图所示:

点击【设置】按钮,弹出下拉数据表编辑对话框,设置数据表名称、显示列、数据列和空选项文字。内容如下图所示:

保存该填报表文件为8.sht

第十步:WEB预览

点击WEB预览按钮wps63BB.tmp,服务器自动启动。填报表WEB预览效果如下图所示: