使用会话变量-动态宏- 参数和宏-复杂报表设计教程
目录

动态宏-使用会话变量

报表样例

通过本示例,可以了解动态宏在报表中的应用。

制作如下图所示的报表:

报表特点:

报表数据来自复杂sql数据集,从系统表t_user用户帐号表取数,sql语句中应用了动态宏来控制数据查询条件,数据集sql语法如下:

制作方法

定义复杂sql数据集时,在sql语句where子句后的查询条件部分,设置宏“${conditions}”,作用是通过宏的值来动态控制查询条件:

在数据集定义界面的“宏配置”Tab页下,将自动获取刚才sql语句中设置的宏,将其类型修改设置为“动态宏”,并为该宏设置值表达式,表达式中应用了参数“sys_UserID”,作用是获取当前系统用户ID:

设置完宏表达式后点击“确定”按钮,系统自动读取表达式中的参数,将参数类型设置为“会话变量”:

绘制报表格式,并使用制表助手完成此示例报表的制作,注意D2单元格的值是引用了会话变量“sys_UserID”,即该单元格显示当前查看报表的用户ID:

详细了解参数会话变量在报表中的使用,请参考:参数

功能点说明

动态宏与普通宏

宏是一个没有数据类型的字符串标识。

在报表运算之前,系统会全面搜索整张报表的表达式定义,将所有的引用宏名的地方替换成宏值。

宏有普通宏、动态宏、条件宏多种类型。其中,普通宏是直接将宏值传到报表中计算,而动态宏则是把传进来的宏值当成表达式进行计算,然后再把计算得到值做为宏值传到报表中使用。动态宏的表达式中可以使用函数、引用参数,实现灵活的应用。

在上面的示例报表中,数据集sql语句定义为:select * from t_user where ${conditions}。sql语句通过动态宏“conditions”来动态地生成查询条件语句。

动态宏“conditions”的表达式设置为:if(@sys_UserID=="root","1=1","user_id="+"'"+@sys_UserID+"'")。表达式中使用了会话变量来获取当前系统用户ID。该表达式的含义是:当系统用户ID为root(即系统管理员)时,返回1=1,否则返回user_id='当前用户ID'。因此,当系统管理员查看报表时,执行的sql语句为:select * from t_user where 1=1,即查询出了全部帐号信息。当其他用户查看报表时,例如用户ID为zhangyj时,执行的sql语句为:select * from t_user where user_id='zhangyj',即只查询出本人的帐号信息。

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