我有一份员工名单,包括员工,姓名,名称,年龄和薪水。我需要使用参数更改要从报告中显示的列。仅包含选定的列。如何使用SSRS实现它?
答案 0 :(得分:1)
为了实现这一目标,您希望根据运行报告的人隐藏列(可能是薪水)。涉及的内容很少,
如果您正在使用域身份验证,或者用户已登录SSRS门户,则可以使用UserID的内置字段来标识用户,将其分配给要级联到数据集的参数以确定如果他们能看到工资。因此,您右键单击参数单击添加,将其命名为Login,将参数可见性设置为internal,将可用值保留为none,将默认值设置为
=User!UserID
此步骤是可选的,因为您可以显示即将推出的可见性参数,而不是根据用户级联它,具体取决于您调用报告的方式,这可能是您的最佳选择。但是,如果您正在进行级联,登录必须是这些类型的级联的第一个参数或报告将崩溃,您可以通过单击参数并单击该参数在SSDT或BIDS中将其移动在向上箭头上。
现在我们有了用户ID,我们将其提供给数据集,在此之前,您应该创建一个列出用户ID的表,以及他们是否可以看到工资。创建一个名为SalaryVisibleToUser
的数据集Select isnull(CanSeeSalaries, 0) as CanSeeSalaries
From YourReportDB.DBO.ReportUserPermissions
where userid = @Login
如果您希望在没有将用户添加到该表的情况下希望报告崩溃,则可以删除isnull但我更喜欢通过权限而不是错误YMMV来完成访问限制。
所以现在我们有一个数据集告诉我们用户是否可以看到工资,接下来我们创建一个名为SalariesVisible的参数,如果你要级联它将其设置为内部,或者如果要传递它则隐藏。将可用值保留为none,并设置默认值以从查询中获取值,选择数据集SalaryVisibleToUser,然后选择CanSeeSalaries作为值列。
右键单击BIDS / SSDT中的列,单击列可见性,单击显示或隐藏基于表达式,然后单击F按钮。然后将表达式设置为
=Iif(Parameters!SalariesVisible = 1, False, True)
这看起来有点倒退,但你告诉它隐藏(即:可见)或真实隐藏(即:隐藏)。关于它,祝你好运!