SSRS层次递归父子报表,具有多个父级。

3

你好,我需要在SSRS中设置帮助,以正确显示分层报告中多个父级的子级。

这是我所做的。

 select * from PCA

这是PCA表

Parent      Child
ASSY1       CHILD1    
ASSY1       CHILD2    
CHILD1      ACHILD1   
CHILD1      ACHILLD2  
ACHILD1     BCHILD1   
ACHILD1     BCHILD2   

这是报告数据集中的CTE

 WITH tBOM AS(
 SELECT Parent,Child, 0 as BOMLevel from PCA A
 WHERE Parent='ASSY1'
 UNION ALL
 SELECT C.Parent, C.Child, BOMLevel+1 from PCA C
 INNER JOIN tBOM on tBOM.Child=C.Parent
 )
 SELECT row_number() over (Order by Parent), * FROM tBOM

这是在SSRS rdl文件中的设置。当我运行报告时,按Child分组,并将递归父项设置为父项。我还设置了组可见性,以便进行下钻和填充。一切看起来都很好。

enter image description here

左内边距的设置如下:

=20 * Level() & "pt"

enter image description here

直到:我向表格添加一行。

Parent  Child
ASSY1       CHILD1    
ASSY1       CHILD2    
CHILD1      ACHILD1   
CHILD1      ACHILLD2  
ACHILD1     BCHILD1   
ACHILD1     BCHILD2   
**ACHILLD2      BCHILD2**   

我期望在 ACHILLD2 下方看到一些内容 但是并没有:我得到的是这个

enter image description here

更多的内容。如果我添加更多行来增加深度,结果将更加不正确。例如,如果我向BCHILD2添加一个子项,

enter image description here

但是我得到了这个: 在此输入图片描述
2个回答

2
阅读了数小时的文章后,我得出结论:SSRS 无法实现我的最终目标。 遗憾,确信无疑。

https://connect.microsoft.com/SQLServer/feedback/details/724449/bug-found-when-using-the-ssrs-recursive-hierarchy-feature-with-multi-parent-relationships

使用 SSRS 递归层次结构功能与多父关系时发现 Bug - MichaelLee

状态:按设计关闭

产品团队认为此项工作符合既定设计。

对于解决此特定问题的更详细说明可能已在评论部分提供。

描述:
在 SSRS 报表中,您可以通过遵循本文创建具有下钻控件的递归层次结构:http://msdn.microsoft.com/en-us/library/bb630438(v=SQL.100).aspx
然而,当一个子对象有多个父对象时,该功能似乎无法正常工作。如果一个子对象有两个父对象,则您期望将该子对象放置在每个父对象下面。但是实际上,该子对象只被放置在 SQL 表中首先出现的父对象下面。如果向表格添加另一列并将表达式设置为 '=CountRows ("RowGroupName",Recursive)',则会注意到子对象的总记录数为2。因此,由于某种原因,两条记录都被放置在第一个父对象下面,即使其中一条记录具有不同的父 ID。
请注意,在我的情况下,子和父 ID 的类型是唯一标识符。

详情
评论(2)|解决方法(3)|附件(0)
登录以发表评论。 Ibrahim Achkar 发布于 2012 年 4 月 20 日上午6:10
你好 Michael,我也发现了这个 Bug。有关 Microsoft 的解决方案的更新。至于你的解决方法,你是否建议获取数据并以不同格式将其设置在新的临时表中(1对1关系)。拿到新的表后,我们是否仍需要使用 SSRS 中的父分组或者需要其他方法?
非常感谢您的帮助。
谢谢,Ibrahim Riccardo [MSFT] 在 2012 年 2 月 13 日下午5:34发布
感谢您的反馈。我们将此错误解决为按设计,因为我们将每个组与单个父组相关联。我们不将一组与多个父组相关联(但是请随意创建一个功能请求来实现此功能)。
为了进一步解释预期的行为,我们首先根据 GroupExpression 或 ChildID 字段对数据进行分组。然后我们为每个组计算 Parent 表达式,在本例中为 ParentID 字段。由于我们将每个组与单个父组相关联,因此我们需要单个值。当应返回单个值的表达式引用具有多个数据行的范围中的字段时-这种情况只是一个例子-官方上行为未定义,但在实践中,它倾向于像 First 聚合函数一样运作,它取范围中的第一行数据。
Riccardo Muti SQL Server Reporting Services

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/a65bf4a4-e3b6-4c33-aa9e-6f7d7e4b7f5e/bill-of-materials-recursive-parent-report?forum=sqlreportingservices

嗨,duanekae,我从未在SSRS中找到过令人满意的解决方案。我最终使用了自定义SQL函数来完成此操作。但我真的很想在SSRS中让它工作,因为这将是一个更简单的解决方案。

时间:2016年1月13日星期三下午4:04,引用Alex Lush - Severn Unival的头像Alex Lush - Severn Unival


0

我们在SSRS中遇到了同样的问题,通过将ID和ParentID(连接)组合起来以获得递归链的唯一键来解决它。

以您的示例为例:

Id 父级 子级 父级Id
a ASSY1 CHILD1 null
a ASSY1 CHILD2 null
b-c CHILD1 ACHILD1 a
b-d CHILD1 ACHILLD2 a
c-e ACHILD1 BCHILD1 b-c
c-f ACHILD1 BCHILD2 b-c
d-f ACHILLD2 BCHILD2 b-d

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接