动态宏
报表样例
通过本示例,可以了解动态宏在报表中的应用。
制作如下图所示的报表:
报表特点
报表可以获取当前系统用户的ID。
根据系统用户ID控制报表展现的数据,当报表查看人员为系统管理员root时展现全部帐号信息,否则只展现本人帐号信息。
制作方法
第一步 定义带有动态宏的数据集
报表数据来自复杂sql数据集,从系统表t_user用户帐号表取数,sql语句中应用了动态宏来控制数据查询条件,具体操作如下:
1)点击【添加数据集】按钮,在弹出的新建数据集页面选择【复杂SQL】
2)在数据集编辑页面输入SQL,在sql语句where子句后的查询条件部分,设置宏“${mac}”,SQL语句:select * from t_user where ${mac}
3)切换到“宏配置”Tab页下,将宏类型设置为动态宏,并设置宏表达式为if(@sys_UserID=="root","1=1","user_id='"+@sys_UserID+"'")
,然后点击【确定】按钮,设置完宏表达式后点击【确定】按钮,系统自动读取表达式中的参数,将参数类型设置为“会话变量”。
4)点击【确定】按钮,保存为“用户表”。
第二步 制作表样
绘制报表基本机构:
第三步 定义单元格表达式
1)快捷公式选择【列表】,将“USER_ID”字段拖拽至A4单元格;选择【取值】,将字段“USER_NAME”、“USER_EMAIL”、“SYS_STATU分别拖拽至B4、C4、D4单元格。
拖拽完成后,自动生成的各单元格表达式如下:
A4单元格:=用户表.Select(USER_ID)
B4单元格:=用户表.USER_NAME
C4单元格:=用户表.USER_EMAIL
D4单元格:=用户表.SYS_STATU
2)选中D2单元格,输入表达式:=@sys_UserID
,用于在该单元格显示当前查看报表的用户ID。
第四步 保存预览
点击【保存】按钮对报表模板进行保存,在保存页面设置报表的资源名称、保存路径 和文件名称,点击【确定】,此报表模板保存资源名称为“账号信息查询表”。
使用root登录,查看报表:
使用zhangsan登录(登录用户名:zhangsan 缺省密码:1),查看报表:
功能点说明
宏是一个没有数据类型的字符串标识。
在报表运算之前,系统会全面搜索整张报表的表达式定义,将所有的引用宏名的地方替换成宏值。
宏有普通宏、动态宏、条件宏多种类型。其中,普通宏是直接将宏值传到报表中计算,而动态宏则是把传进来的宏值当成表达式进行计算,然后再把计算得到值做为宏值传到报表中使用。动态宏的表达式中可以使用函数、引用参数,实现灵活的应用。
在上面的示例报表中,数据集sql语句定义为:select * from t_user where ${mac}。sql语句通过动态宏“mac”来动态地生成查询条件语句。
动态宏“mac”的表达式设置为: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为zhangsan时,执行的sql语句为:select from t_user where user_id=’zhangsan’,即只查询出本人的帐号信息。