动态参数
简单的说,动态参数就是可以使用表达式的参数。普通参数的参数值直接由外部传入,而动态参数的参数值则是通过一个表达式运算而来。
一、报表实例
下面是一个一周内订货信息详情表。
这种查询需求在实际应用中可能会经常出现,我们希望只输入一个日期,就可以查询出该日期所在周的订货信息表,这样会方便许多。下面来看这个需求的实现过程。
二、设计过程
第1步:新建报表
第2步:定义数据集
demo_订货信息: select 订购日期, 订单ID, 货主地区, 货主城市, 运货商ID from DEMO_ORDERS where 订购日期 >?begintime AND 订购日期 <?endtime
这里新建的是复杂SQL数据集
第2步:查看参数,切换到【参数】标签,可看到系统自动获取到了两个参数
在复杂报表设计器中引用数据集demo_订货信息和demo_运货商。
第3步:编辑报表
1. 数据集参数begintime和endtime自动添加到报表参数中:
2. A2单元格表达式为:=str(begintime)+"到"+str(endtime)+"订货单"
3. A4单元格表达式为:=demo_订货信息.select(货主地区)
4. B4单元格表达式为:=demo_订货信息.货主城市
5. C4单元格表达式为:=demo_订货信息.订单ID
6. D4单元格表达式为:=demo_订货信息.运货商,显示值表达式为=demo_运货商.select1(COMPANYNAME,SHIPPERID==value())
7. E4单元格表达式为:=demo_订货信息.订购日期,显示格式为:yyyy年MM月dd日
8. 美化外观
第4步:预览报表
在【参数定义】中分别输入起始日期和结束日期参数值,即可查出结果报表。
至此,一个按始末日期查询的报表就完成了,这个报表在预览的时候需要输入两个参数。但是对于我们查询过去某周信息的这种需求,这个报表需要确定该周的始末日期才能查询,这点对用户来说很不方便,因为人们一般记不住过去的某个日期所在周的始末日期。如何才能做到随便输入一个日期,就自动算出这个日期所在周的周报表呢?这时就要使用动态参数了。
第5步:使用动态参数
进入“参数定义”窗口,添加一个新参数time,数据类型为日期型,把begintime和endtime两个参数的参数类型都改成“动态参数”,begintime的值填写weekbegin(time),endtime的值填写weekend(time)。
第6步:保存预览
报表保存为“订货信息周报”。现在,随便为time输入一个日期(注意要yyyy-MM-dd的格式来输入),如1996-07-08,就可以获得本节开头要求的报表。
三、小结
1. 动态参数
简单的说,动态参数就是可以使用表达式的参数。
普通参数是直接将输入的参数值传给报表进行运算的,而动态参数是一个表达式,报表运算时会先解析该表达式,然后将表达式计算出的结果作为参数值再传给报表进行运算。
从下面的例子中,我们可以直观的看出普通参数与动态参数的区别。
(1) 参数定义
(2) 报表定义
(3) 预览结果
2. 复杂SQL数据集
使用复杂SQL数据集,用户可以直接在输入框中写sql语句,这种方式比较适合对sql语句有深入了解的用户。
建立复杂SQL数据集的步骤:
【新建数据集】-->写入sql->其它配置-->【预览数据】-->【完成】。
可进行的其它配置包括宏配置、参数设置。
四、函数说明
str()
函数说明:将对象转换成字符型,转换过程中可以进行格式化
语法:str(expression{, format})
参数说明:
expression 常数对象或表达式
format 转换过程中进行格式化的格式串
返回值:字符型
示例:
例1:str(123) 返回值"123"。
例2:str(arg1,"yyyy年MM月dd日"),其中arg1为日期型参数,值为1972-09-09,返回值"1972年09月09日"。
例3:str(3456.9876,"¥#,##0.00") 返回值"¥3,456.99"。