引言
最近不只一位朋友问到SSRS如何实现权限控制?如何不同的用户查看同一报表显示不同的数据?对于没有接触过编程的同学来说这可能真的是有些难度的,也不一定是难度可能是想法上的空白。而从开发转过来的同学马上就能想到这其实就是代入一个身份,通过用户权限来过滤数据而已。更直白来说,对于报表来说没有任何变化,只是查询多了一个过滤条件而已。
思路
RS中实现权限控制,有两点是一定要具备的
1、不同的登录用户,如果你所有的用户访问RS报表都是通过系统用户来访问的,那你先绕行去解决这个问题;
2、业务数据中有能够区分用户或权限的标识,比如:你想实现不同的销售人员查看自己的数据,你的销售数据中一定要有销售人员属性,直接或间接无所谓,查询复杂度而已;想实现不同的销售经理查看自己手下销售的数据,那就不只是销售数据中要有销售人员属性,还要有能够反映出销售经理和销售人员对应关系的表。
RS中实现权限控制,一个很重要的知识点
内置字段中有一个UserID变量,它能够获取到当前登录人的帐号
大家可以拖一个文本框,值就是这个变量,运行,显示的就是你登录Windows的帐号(我这儿是donge\lovez)。
实现
数据准备
create table sales
(
id int identity(1,1) primary key,
goods_id int not null, --商品ID
goods_num int not null, --商品数量
goods_price decimal(5,1), --商品价格
sales_account varchar(32) --销售人员
)
go
insert into sales values(1,1,30,'donge\lovez'),
(1,2,30,'donge\lovez'),
(2,1,50,'donge\lovez'),
(3,1,1000,'donge\other')
go
需求模拟
*不同销售人员查看自己的销售总额
select sum(goods_num * goods_price) from sales where sales_account = 'donge\lovez'
上面这条SQL能够查询销售人员是donge\lovez的销售总额,不同销售,替换条件就OK了。
万事具备,进入报表设计。
step1、添加数据集
step2、配置参数
第一步确定之后,会在“报表数据”-“参数”下面生成一个sales_account的参数。有两种做法,1是给这个参数配置userid默认值,2是删除这个参数,打开数据集的配置界面,参数选项卡直接配置参数。这儿我们采用第一种。
step3、设计展示
我这儿就简单的显示下:xxxx 您好,您的销售总额是:xxxxx
step4、预览
在设计模式下,没有办法模拟其他用户。当然,你可以通过修改参数的默认值,或者发布到报表服务器上使用不同用户登录,甚至新建一个Windows用户切换用户来测试。