宏对应关系- 参数和宏-复杂报表设计教程
目录

宏对应关系

报表样例

通过本示例,可以了解报表数据集宏中宏对应关系的含义与应用。

制作如下图所示的报表:

报表特点:

数据集ds1从产品中自带的演示数据表“演示_产品表”取数,采用复杂sql数据集,sql语法如下:

数据集ds2从产品中自带的演示数据表“演示_供应商”取数,采用复杂sql数据集,sql语法如下:

制作方法

定义数据集ds1时在where关键字后面设置普通宏condition,用于控制从产品表取数的条件语句:

数据集ds2也在where关键字后面设置了一个与数据集ds1同名的普通宏condition,用于控制供应商表取数的条件语句:

两个宏虽然名称相同,但分属于不同的数据集,作用的对象不同,对两个宏都先设置宏默认值为“1=1”,表示数据集默认取出数据表的全部数据:

在【报表属性-参数定义】界面下定义四个报表参数,分别用于接收查询条件与条件值:

将四个报表参数都通过通用查询添加为报表的查询条件,其中:

在【报表属性-宏定义】中定义两个动态宏proMac和supMac,分别用于根据查询条件传入的参数值动态地生成数据集sql中的过滤语句。

其中,动态宏proMac用于生成数据集ds1的产品表数据过滤语句,宏表达式如下:

case(@proCon,
             list("1"),
             "产品ID="+@proArg
             ,
             list("2"),
             "产品名称 like '"+@proArg+"%'"
             ,
             "1=1"
)

动态宏supMac用于生成数据集ds2的供应商表数据过滤语句,宏表达式如下:

case(@supCon,
             list("1"),
             "supplierid="+@supArg
             ,
             list("2"),
             "companyName like '"+@proArg+"%'"
             ,
             "1=1"
)

在数据集宏的“宏对应关系”中,设置两个数据集ds1和ds2的同名宏condition分别对应不同的报表宏,通过接收报表宏的宏值来实现sql语句中宏值的替换:

绘制报表格式,并使用制表助手完成此列表式示例报表的制作:

详细了解制表助手,请参考:制表助手

详细了解通用查询编辑风格列表选择,请参考:列表选择编辑风格

详细了解函数case()、list(),请参考:case()list()

功能点说明

宏对应关系

宏对应关系是在【报表属性-宏定义】界面中,数据集宏的一个属性。

该属性用于设置数据集宏与报表宏的对应关系,报表计算时数据集宏的值是通过宏对应关系设定的报表宏传入。

可以通过宏对应关系人为地设置更改数据集宏对应的报表宏,实现灵活的报表宏引用。因此,不同数据集中的同名宏,可以引用不同的报表宏。

在上面的示例报表中,数据集ds1和数据集ds2具有同名宏condition,但二者的业务含义不同,具体就是作用的对象、要生成的数据过滤条件不同,因此在报表中分别设置了其对应不同的报表宏,根据传入的不同报表宏的值替换掉数据集sql语句中的条件部分,实现动态的数据查询过滤。

详细了解宏的应用,请参考: