报表样例

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

制作如下图所示的报表:

动态宏 - 图1 动态宏 - 图2

报表特点

  • 报表可以获取当前系统用户的ID。

  • 根据系统用户ID控制报表展现的数据,当报表查看人员为系统管理员root时展现全部帐号信息,否则只展现本人帐号信息。

制作方法

第一步 定义带有动态宏的数据集

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

1)点击【添加数据集】按钮,在弹出的新建数据集页面选择【复杂SQL】

2)在数据集编辑页面输入SQL,在sql语句where子句后的查询条件部分,设置宏“${mac}”,SQL语句:select * from t_user where ${mac} 动态宏 - 图3

3)切换到“宏配置”Tab页下,将宏类型设置为动态宏,并设置宏表达式为if(@sys_UserID=="root","1=1","user_id='"+@sys_UserID+"'"),然后点击【确定】按钮,设置完宏表达式后点击【确定】按钮,系统自动读取表达式中的参数,将参数类型设置为“会话变量”。 动态宏 - 图4

4)点击【确定】按钮,保存为“用户表”。 动态宏 - 图5

第二步 制作表样

绘制报表基本机构: 动态宏 - 图6

第三步 定义单元格表达式

1)快捷公式选择【列表】,将“USER_ID”字段拖拽至A4单元格;选择【取值】,将字段“USER_NAME”、“USER_EMAIL”、“SYS_STATU分别拖拽至B4、C4、D4单元格。 动态宏 - 图7

拖拽完成后,自动生成的各单元格表达式如下: A4单元格:=用户表.Select(USER_ID) B4单元格:=用户表.USER_NAME C4单元格:=用户表.USER_EMAIL D4单元格:=用户表.SYS_STATU

2)选中D2单元格,输入表达式:=@sys_UserID,用于在该单元格显示当前查看报表的用户ID。

第四步 保存预览

点击【保存】按钮对报表模板进行保存,在保存页面设置报表的资源名称、保存路径 和文件名称,点击【确定】,此报表模板保存资源名称为“账号信息查询表”。

使用root登录,查看报表: 动态宏 - 图8

使用zhangsan登录(登录用户名:zhangsan 缺省密码:1),查看报表: 动态宏 - 图9

功能点说明

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

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

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

在上面的示例报表中,数据集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’,即只查询出本人的帐号信息。