宏对应关系
报表样例
通过本示例,可以了解报表数据集宏中宏对应关系的含义与应用。
制作如下图所示的报表:
报表特点:
- 报表中可同时展现产品信息与产品供应商信息,其中产品信息的数据来自数据集ds1,产品供应商数据来数据集ds2
- 可以动态的选择条件与输入条件值查询,例如产品信息可以选择“按产品ID查”或者“按产品名称查”,产品供应商可以选择“按供应商ID”或者“供应商名称查”
- 报表应用了宏来实现数据集的动态查询
数据集ds1从产品中自带的演示数据表“演示_产品表”取数,采用复杂sql数据集,sql语法如下:
数据集ds2从产品中自带的演示数据表“演示_供应商”取数,采用复杂sql数据集,sql语法如下:
制作方法
定义数据集ds1时在where关键字后面设置普通宏condition,用于控制从产品表取数的条件语句:
数据集ds2也在where关键字后面设置了一个与数据集ds1同名的普通宏condition,用于控制供应商表取数的条件语句:
两个宏虽然名称相同,但分属于不同的数据集,作用的对象不同,对两个宏都先设置宏默认值为“1=1”,表示数据集默认取出数据表的全部数据:
在【报表属性-参数定义】界面下定义四个报表参数,分别用于接收查询条件与条件值:
将四个报表参数都通过通用查询添加为报表的查询条件,其中:
- 参数proCon的查询条件设置列表选择编辑风格
- 参数supCon的查询条件设置列表选择编辑风格
在【报表属性-宏定义】中定义两个动态宏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语句中的条件部分,实现动态的数据查询过滤。
详细了解宏的应用,请参考:宏。