SSRS层次结构递归父级 - 具有多个父级的子级

时间:2016-01-20 23:07:44

标签: sql-server reporting-services ssrs-2008 hierarchy common-table-expression

您好我需要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文件中的设置。当我运行它时的报告。按孩子分组,我将递归父级设置为父级。我还设置了群组可见性,因此我得到了加号和填充的加号。一切看起来都不错。

enter image description here

左边的填充设置如下:

=20 * Level() & "pt"

enter image description here

UNTIL:我在表格中再添加一行。

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

但相反,我得到了这个: enter image description here

1 个答案:

答案 0 :(得分:1)

阅读了几个小时的文章。我得出结论,SSRS无法实现我的最终目标。 伤心我知道。但它就是它

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

  

使用SSRS递归层次结构功能时发现错误   多亲关系 - 作者:MichaelLee

     

状态:按设计设计关闭设计

产品团队   认为此项目按其预期设计运作。

  有关此特定项目的解决方案的更详细说明   可能已在评论部分提供。

     

描述

     

在SSRS报告中,您可以使用向下钻取创建递归层次结构   通过以下文章控制:   http://msdn.microsoft.com/en-us/library/bb630438(v=SQL.100).aspx

     

但是,当a时,此功能似乎无法正常工作   孩子有多个父母。如果孩子有两个父母,你会的   期望孩子被安置在每个父母的下面。相反,孩子是   仅放置在SQL表中首先出现的父级下。如果   您将另一列添加到Tablix并将表达式设置为   ' = CountRows(" RowGroupName",Recursive)',你会注意到总数   孩子的记录是2.所以由于某种原因,两个记录都存在   放在第一个父级下面,即使其中一个记录有一个   不同的parentid。

     

请注意,在我的情况下,子ID和父ID都属于这种类型   唯一标识符

     

详情评论(2)|解决方法(3)|附件(0)签名   发表评论。 Ibrahim Achkar于2012年4月20日上午6:10发布   你好Michael,我也发现了这个bug。关于a的任何更新   微软的决议。至于你的解决方法,你建议吗?   获取数据并将其设置在不同的新临时表中   (1对1关系)格式。随着新桌子的到来,我们还在吗?   需要在SSRS中使用父分组还是需要其他方法?

     

非常感谢您的协助。

     

谢谢你,Ibrahim发表于Riccardo [MSFT]于2012年2月13日下午5:34   感谢您的反馈意见。我们正在按照设计解决这个问题   因为我们将每个组与一个父组相关联。我们没有   将一个组与多个父组相关联(但随意创建   对此能力的建议。)

     

为了进一步解释预期的行为,我们首先对数据进行分组   基于GroupExpression或本例中的ChildID字段。然后   我们评估Parent表达式,在本例中是ParentID字段,   对于每个小组。由于我们将每个组与单个父组相关联   组,我们需要一个单一的价值。当一个表达式应该返回一个   单值是指具有多个数据行的范围中的字段 -   这种情况只是一个例子 - 行为是官方未定义的,   但在实践中,它往往表现得像第一个聚合函数,   它占据了范围内的第一个数据行。

     

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