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