2012-07-06 74 views
0

我最近遇到一个要求其说:“经理应看到所有的纪录,但Associates的唯一适当的子集。我会解释我的要求有下面的例子。SSRS报告向不同用户显示不同的记录。这如何实现?

我有一个表。

CREATE TABLE [dbo].[Empolyee](
    [EmpID] [int] NOT NULL, 
    [Name] [nvarchar](50) NOT NULL, 
    [Salary] [int] NULL, 
    [Grade] [char](1) NULL 
) 

和一些数据

insert into Empolyee values(1, 'John', 200, 'C') 

insert into Empolyee values(2, 'Jim', 100, 'D') 

insert into Empolyee values(3, 'Jane', 500, 'A') 

insert into Empolyee values(4, 'Jack', 150, 'C') 

insert into Empolyee values(5, 'Jil', 300, 'B') 

insert into Empolyee values(6, 'Josh', 350, 'B') 

是最高等级,d最低。

我想在SSRS

员工详细报告简略地表示从Empolyee

选择*。

现在的要求是用户应该能够看到他/她的纪录和低等级的人。

E.g. 如果Jane看到她的报告应该看到看到所有6 如果杰克看到报告,她看到应该看到的只有2(他和吉姆的)

我可以看到这是一个基于角色的安全性的情况下,但如何实现这一点?

回答

2
Select B.[Name] AS [Name2],B.[Salary] AS [Salary2],B.[Grade] AS [Grade2] 
from Empolyee A 
Cross jOIN Empolyee B 
WHERE A.Grade <= B.Grade 
and A.Name like 'Jack' -- mention your user here 
AND B.EmpID NOT IN (Select EmpID FROM Empolyee C 
WHERE C.Grade = A.Grade and C.Name <> A.Name) 
+0

哇!可以处理它的查询级别....我们可以控制显示的记录!我们是否可以控制列... A可以看到所有其他工资栏不能。像这样的东西可以实施? – Pritesh 2012-07-06 12:59:39

+1

通过设置salary列的visibility属性很容易实现Example = iif(Parameters!Grade.Value =“A”,False,True) – praveen 2012-07-06 14:30:36

+0

@Pritesh是的,它可以被创建。我的答案是否适合你? – Asif 2012-07-06 17:18:19