Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 用于SSRS的多对多关系的SQL数据透视表_Sql Server_Reporting Services_Pivot Table - Fatal编程技术网

Sql server 用于SSRS的多对多关系的SQL数据透视表

Sql server 用于SSRS的多对多关系的SQL数据透视表,sql-server,reporting-services,pivot-table,Sql Server,Reporting Services,Pivot Table,使用SQLServer2008,我试图找出如何创建一个查询,返回一个具有标准多对多关系的透视表。这个关系定义了哪些用户属于哪些角色,我希望表格边上列出用户名,顶上列出角色名。最终目标是在SQL Server Reporting Services中提供此输出,因此无论是SQL Server生成pivot结果,还是SSRS生成结果(一种方法优于另一种方法?)。以下是我的示例模式: 用户表: 用户ID 用户名 权限表格: 右翼 右名 右侧成员身份表格: 用户ID 右翼 我希望以下输出作为S

使用SQLServer2008,我试图找出如何创建一个查询,返回一个具有标准多对多关系的透视表。这个关系定义了哪些用户属于哪些角色,我希望表格边上列出用户名,顶上列出角色名。最终目标是在SQL Server Reporting Services中提供此输出,因此无论是SQL Server生成pivot结果,还是SSRS生成结果(一种方法优于另一种方法?)。以下是我的示例模式:

用户表:

  • 用户ID
  • 用户名
权限表格:

  • 右翼
  • 右名
右侧成员身份表格:

  • 用户ID
  • 右翼
我希望以下输出作为SSRS中的报告。感谢您的帮助

       RightOne   RightTwo   RightThree   RightFour
jdoe       X          X
mjane      X                       X
ssmith                X            X           X

仅供参考:可以添加角色,因此我不希望在查询中硬编码角色名称或计数。

我不知道透视表,但您可以在SSR中实现这一点,如下所示

Select UserName,
           RightName
From users u INNER JOIN RightMembership rm on rm.UserID = u.UserID
             INNER JOIN Rights r on rm.RightID = r.RightID
将此查询用作存储过程或查询,并相应地按和排序

创建数据集和数据源

在报告中插入矩阵

在行中,从创建的数据集中选择用户名字段 在列中,从创建的数据集中选择RightName字段 在数据中,使用下面的表达式,您将获得所需的输出
=IIF(Fields!UserName.Value=nothing,nothing,“X”)作为矩阵中的数据

如果我在大约3小时后回家时没有回答,我将开始回答。正如您所知,我正在考虑的解决方案将需要一个运行动态SQL的存储过程和报表中的矩阵。谢谢Jeremy。我发现一个站点显示了一些类似于我在SQLServer中使用“pivot”命令所需的内容,但他使用的示例与我所寻找的不太匹配(一对多关系)。对此有何想法?PIVOT要求将要创建的每个列显式命名。因此,您需要动态创建查询。选择DISTINCT Rights从Rights中选择Name将获得可用于构建查询字符串的权限列表。然后使用sp_executesql运行动态查询。在SSRS中使用带有列组的矩阵将允许对列进行动态计数。到家后,我会在回答中详细说明这一切另外,是否希望列表仅限于当前用户可以查看的权限?就像在中一样,您发送一个UserId,它会给您一个表,其中包含每个用户,以及他们是否拥有UserId可以访问的每个权限?或者,您只是想将每个用户的列表与每个权限进行比较吗?正如Jeremy所观察到的,SQL中的数据透视要求必须显式指定每一列,在事先不知道这些列的情况下需要动态SQL。动态SQL是一个令人头痛的问题;在SSRS中旋转是一个不错的选择。这非常有效。在报告向导中,我无法创建详细信息区域中没有任何值的矩阵,因此我稍微修改了查询,以添加可用的
1
作为第三个字段。一旦我这样做并在细节中使用了可用字段,向导就会根据需要设计报告。谢谢你的帮助!