目录

实例介绍

实例介绍

数据集与上一章的例子类似。

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等,而不要写联邦货运。