SQL SSRS将结果映射到矩阵

时间:2016-10-04 17:05:13

标签: sql sql-server reporting-services sql-server-2012 ssrs-2012

我有许多配置文件具有一定级别的权限,这些权限在SQL中被枚举和存储。我想在SSRS中创建一个报告,该报告显示表左侧的所有权限以及顶部的所有配置文件,其中包含X或具有相应权限的配置文件的某些指示。此信息存储在三个表中。

表1:配置文件 - 提供与GUID相关的配置文件的名称

表2:Profile_Priv - 提供具有权限编号的配置文件的GUID(实际授予配置文件的权限仅显示在此表中)

表3:权限 - 将权限号重新关联到权限名称。

我有一个查询,它将获取分配给配置文件的权限,并且我可以轻松地使用所有可能的权限填充空白矩阵,但是将两者结合在一起可以逃避我。这就是我到目前为止在SSRS中所拥有的。我在SSRS中传递一个名为ProfileName的参数,以允许查询显示该特定报告所需的配置文件。

Select Privileges.Description, Profiles.Name
FROM Privileges LEFT OUTER JOIN
Profile_Priv ON Privileges.ID = Profile_Priv.ID INNER JOIN
Profiles ON Profile_Priv.PID = Profiles.PID
WHERE (Profiles.Name = @ProfileName)
ORDER BY Privileges.ID

这不会像我预期的那样填充表格中的任何信息,也不会进行任何类型的数据转换,例如将值转换为是。

非常感谢任何反馈或帮助。

增加1:

即使将其更改为完全加入,仅执行单个配置文件也会返回特定配置文件具有的权限。

我希望在报告中创建的内容如下:

               Profile 1     Profile 2     Profile 3    Profile 4
Permission 1   X                           X                     
Permission 2   X             X             X            X
Permission 3                 X                          X
Permission 4                                        

目前,如果我正在搜索个人资料2,我可以使用上面的示例:

               Profile 2                              
Permission 2   X             
Permission 3   X               

1 个答案:

答案 0 :(得分:1)

您可以执行完全外部联接,但不使用WHERE子句,而是使用CASE语句返回类似“True”(如果Profile具有该Permission)或“False”(如果不具有)。这样你就可以获得所有权限。