实例介绍
实例介绍
数据集与上一章的例子类似。
1、首先进行参数和宏的设置。参数的设置如下。
我们的目的是在arg1中输入一个数字,来选择要进行过滤的字段,例如1代表订单ID,2代表订购日期等,arg2中输入检索关键字。例如在arg1中输入1,arg2中输入10456,就是过滤出订单ID为10456表。
那么如何才能将这些可按参数选择的规则实现到SQL中呢,普通的宏只可能实现一个规则,这时候就需要使用动态宏。
所谓动态宏,与动态参数十分类似,简单的说就是可以使用表达式的宏。在本例中,添加一个新宏:
选择宏的类型为动态宏。值的表达式为:
case(arg1, list("1"), "订单.订单ID="+arg2 , list("2"), "订单.订购日期 like '"+arg2+"%'" , list("3"), "订单.货主地区='"+arg2+"'" , list("4"), "订单.货主城市='"+arg2+"'" , list("5"), "订单.运货商="+arg2 , "1=1"
)这个宏的作用预计是用来做数据集的检索条件的,其表达式作用是按照arg1的值选择不同的检索条件。其中订购日期的检索使用的是like,目的是为了让日期的过滤更灵活。最后一行的缺省值的目的是当arg1的值不在范围内时,直接列出所有数据。
注意 | |
---|---|
在本例中使用的表中的运货商字段的类型是整数,所以arg1为5的返回字串中arg2的前后并没有加上单引号。 |
2、建立两个数据集。
ds1:SELECT 订单.订购日期,订单.订单ID,订单.货主地区,订单.货主城市,订单.运货商 FROM 订单 WHERE ${macro1}
注意这里WHERE子句后使用的是宏而不是参数了。
ds2:SELECT 运货商.公司名称,运货商.运货商ID FROM 运货商报表设计如下:
A2单元格表达式为:
="检索条件:"+case(arg1,list("1"),"订单ID=",list("2"),"订购日期 like ",list("3"),"货主地区=",list("4"),"货主城市=",list("5"),"运货商=","*=")+arg2
其内容是显示出当前的过滤条件。
其他与上一章的例子相同。
预览报表,出现参数输入窗口:
随便输入,这里arg1输入1,arg2输入10345,表示过滤出订单ID为10345的记录。预览如下:
我们再试试其他的过滤条件,例如arg1输入2,arg2输入1996-07,表示过滤出所有订购日期在1996年7月份的记录,预览如下:
其他几个过滤字段读者也可以自己试一下,注意按运货商过滤时arg2要写1或2或3等,而不要写联邦货运。